Skip to main content

Reports catalogue: the ad hoc grid and the scheduled inbox

Orbit gives you reports in two shapes because they answer two different questions:
  • Reports (/insights/reports) — the ad hoc card grid. Answer a question once: generate a report in the page, download it as CSV or PDF.
  • Scheduled Reports (/insights/scheduled-reports) — the recurring-report inbox. Answer the same question on a cadence: one row per schedule with name, cadence, recipients, and the next send time.
Use the grid when you need a figure once; use the inbox when the same report lands in mailboxes every week. Both tiles document tenant-owned surfaces — the figures are computed over your own messaging, contacts, and campaigns.

Window semantics

Every card on the ad hoc grid honors the same 7d / 30d / 90d / 12m picker at the top of the page. Set it before you click a card: the whole page, the SLA queue section’s range, and the Contact Growth acquisition/churn rows all key off the same window, so a figure you cross-check against the analytics KPIs matches. The two SLA sections have their own pickers — a calendar-month picker for the attestation and a separate range picker for queue SLA — detailed below.

The five ad-hoc cards

Each card generates into an in-page viewer; CSV and PDF download buttons sit in the viewer toolbar. The card grid reads: Blank numeric cells mean “not available yet” (the source query is still in flight), never zero — download after the viewer finishes loading.

SLA sections

Below the grid, two SLA sections share the page. Both download as CSV or print to PDF and agree figure-for-figure, so the document you hand to procurement or attach to an SLA claim matches the dashboard view exactly.
  • SLA attestation — pick one of the twelve most recent complete calendar months (the current partial month is never offered). The attestation carries: Platform uptime (uptime percent + downtime minutes), Support SLA (total conversations, breached conversations, attainment rate), and per-channel delivery (delivered, terminal, delivery rate). What it attests: that platform availability, your support-response attainment, and per-channel delivery outcomes held to their targets for a finished month. A — rate means “no traffic / no data,” not 0% or 100%. The full derivation — how incidents pro-rate across a month boundary and how delivery success is aggregated — is in the Monthly SLA availability report guide.
  • Queue SLA — per-queue service-level figures over a 24h / 7d / 30d / 90d window (this picker is separate from the card window): offered, answered, abandoned, service level, worst-interval service level, breach count, and whether the queue met its target. Below it, a paginated breach ledger lists the individual intervals that missed the target — queue, UTC interval, service level, shortfall, offered/answered — 100 per page, with a truncation note when more pages exist. Export it as the compliance record of when and by how much a queue breached.

History

A Report history table at the bottom of the grid lists the 50 most recent reports per account and syncs across devices. Only metadata persists — the report type, its name, the generated-at timestamp, and the column headers. Row data is never stored, so reopening a history entry shows the columns with no rows by design. That’s deliberate: the on-screen numbers are a live computation over your tenant’s current data, and storing rows would serve stale figures as fact. Click Re-run report on the empty state to recompute fresh figures over the original window, then download. Anything older than 24 hours is flagged Stale for the same reason.

Scheduled reports

The Scheduled Reports inbox is the recurring counterpart, one row per schedule. Columns: name, report type, cadence, Next send, Last sent. The Next send column always reads the upcoming 09:00 cadence anchor in the report’s IANA timezone — never “a few minutes from now.” The scheduler fires daily/weekly/monthly schedules at 09:00 local to the report’s timezone. Row actions:
  • Create — 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 — pre-filled dialog. 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 Next send column keeps showing the upcoming 09:00 anchor while the claim is pending — watch Last sent to confirm delivery actually fired.
  • Delete — stops future sends permanently. To pause without losing the recipient list, edit and disable the report instead.
The tile is tenant-scoped CRUD over GET | POST | PATCH | DELETE /api/v1/analytics/scheduled-reports plus a POST /send-now trigger. Cadence math, recipient rules, send-now semantics, and full curl samples live in the Scheduled reports guide.

Role gates

Reads are open to every member — anyone with dashboard access can open both tiles and view them. 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 — a data-egress path — so the API returns 403 for other roles and the UI hides or blocks those actions. The ad hoc grid runs under the reader’s own session and stays usable by every member.

Where the surface ends

Everything above reads from the dashboard or the tenant analytics API. When you need to go deeper:
  • Per-campaign attribution beyond direct ROI — use the per-campaign analytics page (the multi-touch engine), linked from each Campaign ROI row’s campaign.
  • Breadth a card grid can’t hold — the Insights dashboards guide covers the richer analytics surfaces (retention, journeys, funnels, deliverability, topic intelligence) that sit beside reports.
  • Integration and export at scale — script the same operations through the /api/v1/analytics/* endpoints; the API reference documents each surface field-by-field.

Common misreads

  • Tenant totals vs per-campaign sums. Cost Analysis totals per channel across the whole workspace; Campaign ROI breaks spend down per campaign. Summing the ROI card’s rows won’t reproduce the Cost Analysis totals — ROI scopes to launched campaigns and attributes revenue directly, while the cost totals carry every send regardless of campaign attribution.
  • Reconciled vs weighted rates. The Message Delivery summary row and per-channel rows both divide by terminal outcomes — but the summary is the API’s reconciled figure, so cross-check against the analytics KPI for the same window, not against a hand-computed average of the channel rows.
  • “The report reopened from history shows no rows.” By design — only metadata persists. Click Re-run report on the empty state to load fresh figures, then download. Anything older than 24 hours is flagged Stale for the same reason.
  • “The scheduled list lost my oldest report.” The ad hoc history keeps the 50 most recent entries; the oldest drop off as new ones generate. Scheduled-report rows (the inbox) 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 tick resolved. The column always settles on the real upcoming 09:00 anchor; give it one scheduler tick.

See also