Skip to main content

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 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: 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 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 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