---
myst:
html_meta:
description: "Run published checklists against runs as data reviews, and read the events they create."
---
# Data review
{.lead}
A data review runs a published [checklist](/guides/checklists/authoring.md) against a [run](/guides/runs.md).
Each place a check fails becomes an [event](/guides/events.md) for an engineer to review.
For checking live data as it arrives, see [Trigger alerts](/guides/streaming/streaming-checklists.md).
```{include} /guides/_snippets/connect-the-client.md
```
## Run checklists against runs
{py:meth}`~nominal.core.NominalClient.data_review_builder` returns a {py:class}`~nominal.core.DataReviewBuilder`.
Add one {py:meth}`~nominal.core.DataReviewBuilder.execute_checklist` per run and checklist pair, then start them all with {py:meth}`~nominal.core.DataReviewBuilder.initiate`:
```python
builder = client.data_review_builder()
builder.execute_checklist("", "", commit="") # pin a version
builder.execute_checklist("", "") # latest version
builder.add_integration("") # optional: notify when checks fail
for review in builder.initiate():
print(review.nominal_url, len(review.get_events()))
```
Copy checklist RIDs and commit SHAs from the [Checklists page](https://app.gov.nominal.io/checklists).
For a run with several assets, pass `asset=` to choose the one to review.
`initiate` waits for the reviews to finish by default, but doesn't wait for notifications.
Pass `wait_for_completion=False` to return immediately, then call {py:meth}`~nominal.core.DataReview.poll_for_completion` on each review.
Notifications support Slack, Opsgenie and webhook integrations.
## Read results later
```python
review = client.get_data_review("")
events = review.get_events()
```
{py:meth}`~nominal.core.NominalClient.search_data_reviews` and {py:meth}`~nominal.core.Asset.search_data_reviews` find reviews by run or asset.
To review the results in the UI, see [Data review](https://docs.nominal.io/core/documentation/platform/flag-events/data-review).