# Statistics catalog

Every statistic you can request from the Analytics endpoints — delivery, engagement, conversion, cost and suppression — what each one means, which report families expose it, and which figures are approximate.

**Language:** en
**Audience:** developer
**Search keywords:** statistics, metrics, delivered, delivery rate, clicks, click rate, ctr, opens, open, open rate, open_rate, click_to_open_rate, click to open rate, read receipt, read receipts, conversions, roas, cost, unsubscribes, triggers
**Related pages:** /developers/product-api/analytics/overview, /developers/product-api/analytics/conversions
**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/statistics/ (HTML) · https://docs.instasent.com/developers/product-api/analytics/statistics.md (Markdown)

Every Analytics report is driven by the required `statistics` parameter: a comma-separated list of statistic names drawn from the catalog below. You only get the statistics you ask for, in the order that matters — the **first** statistic in your list also drives ordering for grouped and compare reports.

Each report family exposes the subset of the catalog that makes sense for it. Requesting a statistic a family does not support returns a `400` with a clear hint (see [Reading results](/developers/product-api/analytics/reading-results#errors)). The [flow report](/developers/product-api/analytics/flows) exposes the same subset as the automation report, and can scope any of it to a single flow version.

## How to request statistics

`statistics` is a comma-separated list. Pick the columns you actually need — there is no "all" shortcut, and a tighter list is cheaper to compute.

#### url

```text
GET /project/{project}/analytics/overview
  ?statistics=delivered,delivery_rate,click_rate,conversions,conversion_value,roas
  &timeframe=last_30_days
```

## Delivery

| Statistic       | Meaning                                               |
| --------------- | ----------------------------------------------------- |
| `recipients`    | Distinct contacts targeted.                           |
| `sent`          | Messages dispatched.                                  |
| `delivered`     | Messages confirmed delivered.                         |
| `failed`        | Messages that failed delivery.                        |
| `expired`       | Messages that expired before delivery.                |
| `delivery_rate` | `delivered` over the relevant denominator, as a rate. |
| `failed_rate`   | `failed` as a rate.                                   |

> **Note**: The account overview reports terminal-state delivery only (`delivered`, `failed`, `expired`). `sent` and in-transit volume are not available there — request a per-campaign or per-automation report when you need full dispatch volume.

## Engagement

| Statistic                    | Meaning                                                         |
| ---------------------------- | --------------------------------------------------------------- |
| `clicks`                     | Total link clicks.                                              |
| `clicks_first`               | First click of a link by a contact.                             |
| `clicks_returning`           | Repeat clicks after the first.                                  |
| `contacts_clicked_approx`    | Distinct contacts who clicked (estimate).                       |
| `click_rate`                 | Click rate over the relevant denominator.                       |
| `ctr`                        | Click-through rate.                                             |
| `contacts_click_rate_approx` | Distinct-clicker rate (estimate).                               |
| `opens`                      | Message displays / read receipts. Channel-specific — see below. |
| `open_rate`                  | `opens` over `delivered`.                                       |
| `click_to_open_rate`         | `clicks_first` over `opens`.                                    |

> **Tip**: On messages that carry several links, `clicks_first` can over-count distinct clickers because it counts the first click per link. When you specifically want "how many people clicked", prefer `contacts_clicked_approx`.

### Open statistics are channel-specific

`opens`, `open_rate` and `click_to_open_rate` are available on the **campaign, automation and flow** reports only (not overview, direct or segment), and they depend on the channel having an open signal. Today only **RCS** reports them; email opens will arrive when the Email channel ships.

On a channel with no open signal — SMS — these statistics are **omitted from the response, not returned as `0`**. Absence means "not measurable on this channel", not "nobody opened": a missing `opens` key is the only correct reading. Do not treat it as zero, and do not derive an `open_rate` from a missing `opens`.

> **Warning**: On a multi-channel report (for example an RCS + SMS fallback campaign), `opens` reflects the **RCS leg only** — there is no open signal on the SMS leg to fold in, so a top-level `open_rate` would silently blend a measurable channel with an unmeasurable one. Read the per-channel `open_rate` with `group_by=channel` rather than the blended figure.

## Conversion & revenue

| Statistic               | Meaning                                                                                                   |
| ----------------------- | --------------------------------------------------------------------------------------------------------- |
| `conversions`           | Number of attributed conversions.                                                                         |
| `conversion_value`      | Monetary value of those conversions.                                                                      |
| `conversion_rate`       | Conversions over the relevant denominator.                                                                |
| `average_order_value`   | Average value per conversion.                                                                             |
| `revenue_per_recipient` | Conversion value per recipient.                                                                           |
| `profit`                | Margin. Configured by default; amounts depend on a margin value on your conversion events, otherwise `0`. |

Both `sales` (revenue) and `profit` (margin) are configured automatically for every project — revenue tracking works with no setup. A revenue statistic comes back `null` only when the project's conversion configuration omits the requested scope (for example a custom config without `profit`); that case carries a `conversion_scope_unconfigured` warning, not an error. A configured scope with nothing to report — including `profit` when your conversion events carry no margin value — returns `0`, not `null`. See [Conversions & revenue](/developers/product-api/analytics/conversions).

## Cost & ROI

| Statistic                 | Meaning                                                                        |
| ------------------------- | ------------------------------------------------------------------------------ |
| `cost`                    | Send spend over the window.                                                    |
| `cost_approx`             | Send spend computed from events (used where an exact figure is not available). |
| `cost_per_message`        | Spend per message.                                                             |
| `cost_per_message_approx` | Approximate spend per message.                                                 |
| `roas`                    | Return on ad spend (conversion value over cost). Dimensionless.                |
| `roas_approx`             | Approximate ROAS. Dimensionless.                                               |
| `epm`                     | Earnings per message. Dimensionless.                                           |
| `epm_approx`              | Approximate earnings per message. Dimensionless.                               |

## Suppression

| Statistic          | Meaning                                                          |
| ------------------ | ---------------------------------------------------------------- |
| `unsubscribes`     | Opt-outs **driven by your Instasent messaging** over the window. |
| `unsubscribe_rate` | Rate of those messaging-driven opt-outs.                         |

These statistics measure **messaging performance**: how many people your Instasent sends pushed to opt out. An opt-out counts here only when it is attributable to a message you sent through Instasent — a campaign, an automation, or a direct / transactional send — whether the contact replied STOP, used an unsubscribe link, or otherwise opted out off the back of that send. On a campaign or automation report, the count is scoped to opt-outs driven by **that** campaign or automation.

Opt-outs that did **not** come from an Instasent send are **excluded by design** — they are not a reflection of how your messaging performed:

- suppressions pushed through the API,
- consent changes you make by hand on a contact, list or audience,
- consent synced in from external platforms (for example Klaviyo, ActiveCampaign or Mailchimp).

> **Note**: `unsubscribes` answers "how many people did this messaging drive to opt out?", not "how many contacts are currently unsubscribed?". The current consent state of your audience — across every cause, including API, manual and imported opt-outs — is an audience and consent concern, separate from these performance reports.

## Automation only

| Statistic  | Meaning                                   |
| ---------- | ----------------------------------------- |
| `triggers` | Times the automation fired in the window. |

Available on the automation report family only.

## Approximate statistics

Any statistic whose name ends in `_approx` is **not exact**, and the suffix is part of the contract — anything derived from an approximate figure stays approximate.

There are two reasons a statistic is marked approximate:

- **Distinct-count estimates** (for example `contacts_clicked_approx`) use an efficient estimator that trades a small margin of error (roughly 1–2%) for speed at scale. As a consequence, a distinct-contact figure is **not summable across time buckets** in a series — adding the per-day values does not give you the period total. See [Reading results](/developers/product-api/analytics/reading-results#warnings).
- **Event-based figures** can under-report the most recent window (about 48 hours) until delivery receipts arrive, then settle to their final value.

> **Warning**: Treat `_approx` statistics as indicative, not as figures to reconcile to the cent or to sum across buckets. When you need an exact count, use the exact counterpart (`recipients`, per-entity `sent`, per-entity `cost`).

## Next

- [Building queries](/developers/product-api/analytics/building-queries) - Combine these statistics with timeframes, breakdowns and comparisons.
- [Conversions & revenue](/developers/product-api/analytics/conversions) - How the conversion and revenue statistics are scoped and computed.

---

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.
