# Scheduled reports

> Send a team summary, risky pull requests, security findings, credits and usage, or a changelog by email and to Slack, Microsoft Teams, Google Chat or Discord, daily, weekly or monthly.

Scheduled reports send the numbers from Insights to the people who need them, on a schedule, without anyone opening the console. Reports are built from your data without calling a model, so they use no credits.

## Report templates

| Report                       | What it shows                                                                                                                              |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| **Team summary**             | Pull requests reviewed and merged, findings by severity, average time to merge, and how often the merge gate blocked (and was overridden). |
| **Open risky pull requests** | Open pull requests at or above a risk level, with open critical findings, or with an overridden merge gate.                                |
| **Security findings**        | Security findings by severity and category, secrets caught, time to fix, and the repositories with the most open findings.                 |
| **Credits and usage**        | Credits used by review tier and by source, active developers, and this month's credits against your monthly credit budget.                 |
| **Changelog**                | Every pull request merged in the period, oldest first, with its author and risk.                                                           |

## Create a report

1. Go to **Automations → Reports** and choose a template (or **New report**).
2. **When it runs**: every day, weekdays, once a week or once a month (day 1–28), at a time in your time zone. Daylight saving time is handled; each run happens once.
3. **Which work it covers**: choose repositories and teams, or leave them empty for everything. A report covers the time since the previous run (a day, a week or a month), or a fixed day, week or month.
4. **Where it goes**:
   - **Email**: choose members of your organization, type email addresses, or both (up to 50 recipients). Emails have an HTML and a plain-text version, and a CSV of the full data when **Attach a CSV to emails** is on. Members who leave the organization stop receiving it.
   - **A channel**: any Slack, Microsoft Teams, Google Chat or Discord destination from **Integrations**. Chat gets a card with the headline numbers and a link to Insights.
5. Select **Test** to preview exactly what would be sent. Nothing is posted.
6. Save. The report runs at its next scheduled time.

From **Automations → Reports** you can preview, pause and resume reports, and see the history of every run: when it ran, whether it was delivered and what it cost.

## Optional AI narrative

Turn on **Add an AI narrative** to add a few sentences at the top of the report that point out what changed. It is off by default.

- It uses the lowest-cost model tier and at most 2 credits a run. Credits are shown on every run and in the report's monthly total.
- It respects the report's per-run cap and monthly budget and your organization's credit limits. If a budget is reached, the report is still sent without the narrative.
- The model reads only the report's numbers, with secrets removed, and never changes them.

## Plans and permissions

- Scheduled reports are included on the Team plan and above.
- Anyone with **usage.read** can see the Reports tab: which reports exist, their schedules and their run history. Recipients and report contents are not shown there.
- Creating, editing, previewing and pausing reports needs the same permission as automations (**settings.manage**).

## Good to know

- Each run is delivered once per destination, even if a delivery is retried.
- Reports use the same engine as [automations](https://mergeharbor.com/docs/automations): the organization-wide pause in **Automations** also pauses reports.
- CSV cells that look like spreadsheet formulas are escaped.
