# Conversions & revenue

How the Analytics revenue statistics are computed: conversion scopes, how revenue tracking is configured, when a scope comes back null versus zero, and currency.

**Language:** en
**Audience:** developer
**Search keywords:** conversions, revenue, conversion scope, sales, profit, roas, conversion value, average order value
**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/conversions/ (HTML) · https://docs.instasent.com/developers/product-api/analytics/conversions.md (Markdown)

Several statistics are monetary — `conversion_value`, `conversions`, `average_order_value`, `revenue_per_recipient`, `roas`, `profit` and their approximate variants. Revenue tracking works **out of the box**: by default the platform configures your project to track both revenue and margin automatically, so reports return real figures with zero setup. This page explains how revenue tracking is configured, which scope to report against, and how to tell a `null` (scope not configured) apart from a `0` (configured, but nothing to count).

## Conversion scope

A report attributes revenue through a **conversion scope**, selected with the `conversion_scope` parameter:

| Scope    | Meaning                                                                                                                                                                                             |
| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `sales`  | Revenue. The default scope, configured automatically for every project.                                                                                                                             |
| `profit` | Margin. Also configured automatically for every project. Profit amounts depend on a margin value being present on your conversion events; if your events carry no margin, profit comes back as `0`. |

The scope is the only conversion choice the caller makes. **What counts as a conversion, which value is attributed and which traffic contributes are part of your project's configuration**, not request parameters. This keeps revenue numbers consistent no matter who runs the report or from which tool.

## How revenue tracking is configured

You do not set up conversions on a per-request basis. By default, the platform synthesises a **default conversion configuration** for your project automatically, and that default covers **both** `sales` and `profit`. So both revenue and margin are tracked out of the box — neither scope is `null` by default.

A project **may** instead define its own **custom conversion configuration** in its settings — which events count as a conversion, which field carries the conversion value, and which datasources contribute. That is project configuration, decided once in the dashboard; it is never a request parameter, and the API caller never sees those internals. A custom configuration only includes the scopes you define on it: if a custom configuration leaves a scope out, that scope is simply not tracked (there is no fall-back to the default).

#### url

```text
GET /project/{project}/analytics/overview
  ?statistics=conversions,conversion_value,roas
  &conversion_scope=sales
  &timeframe=last_30_days
```

The resolved scope is echoed back in the response as `conversion_scope` whenever monetary statistics were requested.

## When does a revenue statistic come back null?

A revenue statistic is `null` for exactly one reason: **the project's conversion configuration does not include the requested scope.** By default this does not happen — the default configuration covers both `sales` and `profit`, so both come back as numbers. It only occurs when a project has switched to a custom conversion configuration that leaves the requested scope out (for example a custom config without `profit`). When that happens, the report still **succeeds**, the missing scope's statistics are `null` — not an error — and the response carries a `conversion_scope_unconfigured` warning so you can tell why.

This is different from a scope being configured but having nothing to report:

- **`null` — the scope is not configured.** The project's configuration omits it. Check the `warnings` array (see [Reading results](/developers/product-api/analytics/reading-results#warnings)) for the `conversion_scope_unconfigured` code.
- **`0` / `0.00` — the scope is configured, but there is no value to report.** Either there were no conversions in the window, or the value is genuinely zero. A common case: `profit` is configured by default, but profit amounts depend on a margin value being present on your conversion events; if your events don't carry one, profit silently returns `0` — not `null`, and no warning.

> **Tip**: `null` means "this scope is not part of your project's configuration"; `0` means "configured, but no conversions or no value in the window". So a `profit` of `0` is not an error and not a misconfiguration — it usually just means your conversion events don't carry a margin value. Only a `null` points at the configuration, and it always comes with the `conversion_scope_unconfigured` warning.

## Currency

Revenue is reported in the output `currency` you request (ISO 4217), defaulting to the project's stored currency. The response echoes both the output `currency` and the `source_currency` the data was stored in. Ratio statistics — `roas` and `epm` — are dimensionless and are never converted.

## Revenue statistics at a glance

| Statistic               | Meaning                                                                                                   |
| ----------------------- | --------------------------------------------------------------------------------------------------------- |
| `conversions`           | Count of attributed conversions in the window.                                                            |
| `conversion_value`      | Total monetary value of those conversions.                                                                |
| `conversion_rate`       | Conversions over the relevant denominator.                                                                |
| `average_order_value`   | Value per conversion.                                                                                     |
| `revenue_per_recipient` | Conversion value divided by recipients.                                                                   |
| `roas`                  | Conversion value over send cost (dimensionless).                                                          |
| `epm`                   | Earnings per message (dimensionless).                                                                     |
| `profit`                | Margin. Configured by default; amounts depend on a margin value on your conversion events, otherwise `0`. |

See the full [Statistics catalog](/developers/product-api/analytics/statistics) for the delivery, engagement and cost statistics you can combine with these.

## Next

- [Building queries](/developers/product-api/analytics/building-queries) - Timeframes, currency, breakdowns and comparisons.
- [Reading results](/developers/product-api/analytics/reading-results) - Response shapes, freshness, warnings and errors.

---

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.
