# Analytics

Curated, read-only performance reports for your account, campaigns, automations, flows and transactional traffic. One consistent request grammar, one consistent response shape, across every report family.

**Language:** en
**Audience:** developer
**Search keywords:** analytics, reporting, metrics, statistics, performance, report, roas, conversions, flow, flows, flow report
**Related pages:** /developers/product-api/analytics/statistics, /developers/product-api/analytics/building-queries
**Docs index (every page):** https://docs.instasent.com/llms.txt
**This zone's index:** https://docs.instasent.com/developers/product-api/llms-full.txt
**This page:** https://docs.instasent.com/developers/product-api/analytics/overview/ (HTML) · https://docs.instasent.com/developers/product-api/analytics/overview.md (Markdown)

The Analytics endpoints expose Instasent's performance data as a small set of **curated, read-only reports**. You ask for named statistics over a timeframe and get back a clean, predictable JSON document — the same response shape whether you are reporting on the whole account, a single campaign, an automation, or your transactional traffic.

There is no query language to learn and no raw data to post-process. You pick the statistics you want, optionally a timeframe and a breakdown, and the engine returns aggregated values (or a zero-filled time series) already computed for you.

## Report families

Analytics is organised into families. Each family answers a different question and lives under `/project/{project}/analytics/…`. Most families offer a **values** report (aggregate totals) and a **series** report (the same statistics bucketed over time); two of them also offer a **compare** report, and flows offer the series report only.

- [Account overview](#account-overview) - Aggregate account performance across everything you sent — the dashboard summary as one report.
- [Campaign report](#campaign-report) - Statistics for a single campaign, plus a compare report to rank several campaigns side by side.
- [Automation report](#automation-report) - Statistics for a single automation, with a built-in current-vs-previous comparison and a compare report.
- [Flow report](#flow-report) - Statistics for a single flow — the whole flow, or one version of it.
- [Transactional rollup](#transactional-rollup) - How your transactional (API / direct) traffic is performing across the project.

### Account overview

The whole-account view: terminal-state delivery, engagement, conversion, cost and suppression across all the traffic Instasent sent for you. It is the only report that accepts the **full breakdown catalog** — `group_by` over `channel`, `country`, `language`, `gender`, `segment` or `communication_type` — while its `filter` is `country` only. It also accepts a previous-period comparison. The default timeframe is the last 3 months. See the [support matrix](/developers/product-api/analytics/building-queries#which-report-supports-what) for what every report supports.

[`GET /project/{project}/analytics/overview` - Account overview — aggregate totals.](/developers/product-api/reference)

[`GET /project/{project}/analytics/overview/series` - Account overview — time series.](/developers/product-api/reference)

### Campaign report

Statistics for one campaign. The default report is the campaign's **lifetime**, served fast from its stored statistics; any other timeframe (or a per-channel breakdown) is computed on demand. Use the compare endpoint to rank a set of campaigns over a shared timeframe in a single call.

[`GET /project/{project}/analytics/campaign/{campaign}` - Campaign report — aggregate totals.](/developers/product-api/reference)

[`GET /project/{project}/analytics/campaign/{campaign}/series` - Campaign report — time series.](/developers/product-api/reference)

[`POST /project/{project}/analytics/campaign/compare` - Compare a set of campaigns over one timeframe.](/developers/product-api/reference)

### Automation report

Statistics for one automation. The default report is the last 30 days **with a previous-period comparison** already attached, so you can see the trend without a second call. Use the compare endpoint to rank several automations together.

[`GET /project/{project}/analytics/automation/{automation}` - Automation report — aggregate totals.](/developers/product-api/reference)

[`GET /project/{project}/analytics/automation/{automation}/series` - Automation report — time series.](/developers/product-api/reference)

[`POST /project/{project}/analytics/automation/compare` - Compare a set of automations over one timeframe.](/developers/product-api/reference)

### Flow report

Statistics for one flow, bucketed over time. A flow is built in the dashboard and read through the API, so the family comes with its own discovery endpoints — the flow listing and, under it, the version listing that hands you the ids. It is the only family with a **`version` filter**: left out, the report is the flow total across every version; passed, every statistic is scoped to the one version, which is how an A/B version is measured against the live one. Its window is clamped to the flow's lifetime and the report is always computed on demand.

[`GET /project/{project}/analytics/flow/{flow}/series` - Flow report — time series.](/developers/product-api/reference)

Full detail, discovery endpoints and the version model: [Flow reports](/developers/product-api/analytics/flows).

### Transactional rollup

A project-level rollup of all your direct / transactional (API-sent) traffic over a timeframe — the "how is my transactional traffic performing?" view. It is always computed on demand and accepts a previous-period comparison. The default timeframe is the last 30 days with a comparison.

[`GET /project/{project}/analytics/direct` - Transactional rollup — aggregate totals.](/developers/product-api/reference)

[`GET /project/{project}/analytics/direct/series` - Transactional rollup — time series.](/developers/product-api/reference)

## How the reports work

A few principles hold across every family:

- **You choose the statistics.** The required `statistics` parameter is a comma-separated list of names from a fixed catalog. Each family exposes the subset that makes sense for it. See [Statistics catalog](/developers/product-api/analytics/statistics).
- **One request grammar.** Timeframe, timezone, currency, breakdowns and comparison are expressed the same way everywhere. See [Building queries](/developers/product-api/analytics/building-queries).
- **One response shape.** Every response wraps the report under a top-level `entity` key (the Product API convention). Inside it, values reports return a `statistics` object; series reports return a shared `date_times` axis with index-aligned arrays. Every report echoes the resolved `timeframe`, `currency` and a `freshness` block. See [Reading results](/developers/product-api/analytics/reading-results).
- **Read scopes only.** A report covers the families your token is allowed to read. The overview, for example, reports the campaign / automation / transactional families your token has read access to.

> **Note**: Delivery figures reflect **terminal-state** delivery only — delivered, failed or expired. Very recent traffic can under-report for a short window until delivery receipts arrive. The account overview never reports in-transit or `sent` volume; use a per-campaign or per-automation report when you need full dispatch volume.

These reports measure **the performance of what Instasent sent** for you. That framing matters for the suppression statistics in particular: `unsubscribes` counts only opt-outs your Instasent messaging drove, not your audience's total current unsubscribe state. See the [suppression statistics](/developers/product-api/analytics/statistics#suppression) for exactly what is counted and what is excluded.

## Limitations

The account overview reflects **what has reached a final state** — delivered, failed or expired — not everything that was just dispatched. It does not report messages still in transit.

Because of that, the **most recent window (up to \~48 hours)** is intrinsically partial and **under-reports**: recent volumes and cost are **approximate** until the traffic finishes settling, then **converge** to their true totals. This is why overview cost is reported as the `cost_approx` flavour — see the [approximate statistics](/developers/product-api/analytics/statistics#approximate-statistics) explanation.

> **Warning**: For a **billing-accurate cost** and full dispatch volume — including messages still in transit — use the per-entity [campaign or automation report](/developers/product-api/analytics/reading-results), whose figures are exact and match billing.

## Where to go next

- [Statistics catalog](/developers/product-api/analytics/statistics) - Every statistic you can request, what it means, and which families expose it.
- [Building queries](/developers/product-api/analytics/building-queries) - Timeframes, timezone, currency, breakdowns and comparisons.
- [Conversions & revenue](/developers/product-api/analytics/conversions) - How revenue statistics are computed and scoped.
- [Reading results](/developers/product-api/analytics/reading-results) - The response shapes, freshness, warnings and errors.
- [Flow reports](/developers/product-api/analytics/flows) - Discovering flows and their versions, and scoping a report to one version.

---

This is one page of the Instasent documentation. For the complete machine-readable index of every guide and API reference, fetch https://docs.instasent.com/llms.txt — start there for full context.
