# Share an Evidently Drift Report — Model Monitoring Someone Can Actually Open

Canonical: https://commareports.com/share-evidently-report
Published: 2026-08-22

> Evidently writes a self-contained HTML report that ends up in a notebook nobody else runs. Publish it to Comma: one URL per model, comments on the drifted feature, and a revision per run that shows the trend.

# Share an Evidently drift report

Model monitoring has a distribution problem shaped exactly like the
notebook problem, because it usually _is_ a notebook. Evidently produces a
genuinely good self-contained HTML report — drift per feature,
distribution plots, test results — and then it lives in the ML engineer's
`reports/` directory, where the people who could explain the drift never
see it.

And drift is almost always explained by someone outside the model. The
upstream vendor changed units. Marketing ran a campaign in a new region.
A form field became optional. None of that is visible in the data; all of
it is one sentence from someone who isn't running the notebook.

## Publish it

```python
import os, requests
from evidently.report import Report
from evidently.metric_preset import DataDriftPreset

report = Report(metrics=[DataDriftPreset()])
report.run(reference_data=ref, current_data=cur)
report.save_html("drift.html")

requests.patch(
    f"https://commareports.com/api/v1/reports/{os.environ['COMMA_REPORT_ID']}",
    headers={"Authorization": f"Bearer {os.environ['COMMA_API_TOKEN']}"},
    json={"title": "Churn model — drift", "html": open("drift.html").read()},
    timeout=30,
)
```

One report id per model, `PATCH`ed on every run: one URL, a revision per
run, and [diffs](/share-html-report) between any two. Use a
[scoped token](/docs/api-tokens) with `reports:write`.

## What the URL adds

- **Explanations attached to the feature.** A thread pinned to the
  drifted column, still there next month — see
  [commenting on HTML](/comment-on-html).
- **A trend, not a snapshot.** Revisions accumulate at one address, which
  is what makes "is this new?" answerable.
- **Readers without the repo.** Data owners, the vendor's contact, the
  risk reviewer. [Sharing](/docs/sharing) is per report.
- **Unattended runs.** A [routine](/docs/routines) refreshes it on a
  schedule; a [webhook](/docs/api) on `revision.created` announces each
  run in Slack.

## Limits

- **HTML body: 5 MB.** Wide reports over many features approach it —
  split by feature group into separate reports, which also gives each
  group its own audience and history.
- **Scripts run, sandboxed**: `allow-scripts`, no `allow-same-origin`.

## Try it

Comma is free — unlimited reports, unlimited commenters, unlimited
revision history.

**[Create your first report →](https://commareports.com/)**

### Related

- [EDA reports](/share-eda-report) · [Great Expectations](/share-great-expectations-data-docs) · [dbt docs](/share-dbt-docs)
- [Jupyter](/with/jupyter) · [Scheduled reports](/features/routines/scheduled-html-reports)
- [Weekly analytics digest](/features/routines/weekly-analytics-digest)
