> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Reports catalogue: the ad hoc grid and the scheduled inbox

> Orientation for the two reports surfaces in Insights — the one-off card grid at /insights/reports and the recurring-schedule inbox at /insights/scheduled-reports — what each tile covers, who can see it, and the misreads to avoid.

# Reports catalogue: the ad hoc grid and the scheduled inbox

Two tiles on the Insights hub both read "Reports" in some form. They answer different questions:

* **Reports** (`/insights/reports`) — the ad hoc card grid. Generate a one-off report in the page, download it as CSV or PDF, and come back for the saved history later.
* **Scheduled Reports** (`/insights/scheduled-reports`) — the recurring-report inbox. One row per schedule: name, cadence, recipients, and the next 09:00 tick, with create, edit, delete, and send-now from the row actions.

Use the grid when you need a figure once; use the inbox when the same report lands in mailboxes on a cadence. The full on-demand mechanics and the scheduling API — cadence anchors, recipient rules, curl samples — live in the [Scheduled reports](/guides/scheduled-reports) guide; this page only orients the two tiles.

## The ad hoc grid: Insights → Reports

The **Reports** tile opens a five-card grid above two SLA sections. Pick a window with the **7d / 30d / 90d / 12m** switcher first — every card honors it, so the figures match the same window's analytics KPIs. Click a card to generate the report in the page viewer; download with **CSV** or **PDF** from the viewer toolbar.

The five cards, with what to actually read in each:

| Card                        | Reads as                                                                                                                                                                                                                          |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Message Delivery Report** | Delivery counts and rates — one "All channels" summary row, then one row per channel. The summary row is the weighted aggregate; it isn't the sum of the per-channel rows when a channel's latency or rate math can't mix.        |
| **Channel Performance**     | Per-channel status and latency — which channel is carrying traffic and how it behaves, side by side.                                                                                                                              |
| **Cost Analysis**           | Spend, message count, and cost per message per channel, in your workspace currency. This reads totals per channel — compare like-for-like; a per-campaign cost split is the Campaign ROI card's job.                              |
| **Contact Growth**          | A per-lifecycle-stage histogram plus new, churned, and net-growth counts over the selected window. Read the stage distribution before the net figure — a healthy net can hide churn.                                              |
| **Campaign ROI**            | Per launched campaign: recipients, cost, revenue, conversions, and ROI percent under direct attribution. Covers the 100 most recent campaigns; older campaigns stay reachable in the per-campaign analytics views, not this card. |

Below the grid, two SLA sections share the page:

* **SLA attestation** — pick a recent complete calendar month and read the delivery-SLA attestation, downloadable as CSV or PDF.
* **Queue SLA** — per-queue service-level figures over a reporting window, with a paginated breach ledger, also downloadable.

A **Report history** table at the bottom lists the 50 most recent reports per account and syncs across devices. Only metadata persists — the type, name, generated-at timestamp, and column headers — so reopening a history entry shows the columns with no rows. The full lifecycle (stale flags, retention, the re-run flow) is in the [Scheduled reports](/guides/scheduled-reports) guide's saved-report section.

## The scheduled inbox: Insights → Scheduled Reports

The **Scheduled Reports** tile opens the recurring-report list. Each row shows the name, type, and cadence; a **Next send** column presents the upcoming tick — always the next 09:00 cadence anchor in the report's timezone, never the moment of a send-now claim, which is transient.

Row actions give you the full lifecycle from the dashboard:

* **Create** — open the dialog, set name, report type (messaging volume, deliverability, top contacts, spend, or a saved custom query), a daily/weekly/monthly cadence, up to 50 recipient emails, and an optional IANA timezone the 09:00 tick anchors to.
* **Edit** — same dialog pre-filled. Recipient edits replace the list wholesale; frequency edits re-anchor the next tick from the last send.
* **Send now** — marks the report due; the scheduler delivers it on its next tick. The row keeps showing the *upcoming* 09:00 tick rather than "a few minutes from now" — watch the **Last sent** column to confirm the delivery actually fired.
* **Delete** — stops future sends permanently. To pause without losing recipients, edit and disable the report instead.

What the tile does beyond the UI: it's tenant-scoped CRUD over the
`GET | POST | PATCH | DELETE /api/v1/analytics/scheduled-reports` surface, plus
the `POST /send-now` trigger. Scripting the same operations through the API is
covered in the [scheduled reports](/guides/scheduled-reports) guide.

## Role gates

Reads are open to every member — anyone with dashboard access can open both tiles and view the list. Writes on the scheduled-reports tile (create, edit, delete, send-now) are restricted to **owner** and **admin**, because a scheduled report emails recipient-level metrics to an arbitrary address list — that's a data-egress path, so the API returns a `403` for other roles and the UI hides or blocks the actions accordingly. The ad hoc grid runs under the reader's own session, so it stays usable by every member.

## Common misreads

* **Tenant totals vs per-campaign sums.** The Cost Analysis card totals per channel across the whole workspace; the Campaign ROI card breaks spend down per campaign. Summing the ROI card's rows won't reproduce the Cost Analysis totals — the ROI card is capped at the 100 most recent campaigns and attributes revenue directly, while cost totals carry every send regardless of campaign attribution.
* **"The report reopened from history shows no rows."** By design — only metadata is persisted, never row data. Click **Re-run report** on the empty state to load fresh figures, then download. Anything older than 24 hours is flagged **Stale** in the history table for the same reason.
* **"The scheduled list lost my oldest report."** History keeps the 50 most recent entries; the oldest drop off as new reports generate. Schedule-based rows (the inbox tile) aren't subject to this — only the ad hoc history table is.
* **"Next send says in a few minutes, then jumps to tomorrow."** You read the transient send-now claim before the scheduler's tick overwrote it. The column always settles on the real upcoming 09:00 anchor; give it a scheduler tick to resolve.

## See also

* [Scheduled reports](/guides/scheduled-reports) — cadence math, recipient rules, send-now semantics, and the API surface end to end
* [Monthly SLA availability report](/guides/monthly-sla-availability-report) — the SLA attestation the Reports grid's SLA section produces
* [Insights hub orientation](/insights/overview) — the tile map this catalogue is part of
