# Read the attribution reports

The reports answer one question: which sources bring you customers, and what those customers are worth. They are built from the events your sites and your backend already send — there is nothing to configure and nothing to schedule.

Four surfaces make up the reporting layer.

| Surface | Where | What it answers |
|---|---|---|
| Revenue by source | `Reports` | Which channels and campaigns earned the money |
| People behind a source | `Reports`, `View people` on a row | Who those customers are |
| The attributed journey | `People`, open a person | Why this person was credited to that source |
| ROAS and You vs Google | `Google Ads` → `Reports` | What Google spend earned back |

**MCP.** [`tracking_reports_revenue_by_source`](/reference/mcp-tools/tracking_reports_revenue_by_source), [`tracking_reports_source_people`](/reference/mcp-tools/tracking_reports_source_people) and [`tracking_reports_attributed_journey`](/reference/mcp-tools/tracking_reports_attributed_journey) return the first three to an agent.

## Set the four controls

`Reports` has four controls, and every number on the page depends on all four. They are kept in the address of the page, so a report you are looking at can be sent to a colleague as a link.

| Control | Options | Default | What it decides |
|---|---|---|---|
| Attribution model | `Last Click`, `First Click` | `Last Click` | Which touchpoint of a journey gets the credit |
| Lookback window | 7, 14, 30, 60, 90 days | 30 days | Only touchpoints inside this window before the conversion can be credited |
| Date range | Last 7 days, Last 30 days, Last 90 days, Custom | Last 30 days | Which **customers** are in the report — not which money is counted |
| Domain filter | All domains, or one of yours | All domains | Which touchpoints are considered at all |

Nothing is frozen. Attribution is recomputed from the same stored history every time you change a control, so a report is an answer to a question you asked rather than a decision taken at the time of the sale.

## Read revenue by source

The main table: one row per channel, with the money and the number of customers credited to it.

A row counts **customers whose first ever paid conversion falls in the date range**, and shows their **lifetime net revenue**. Both halves of that sentence matter:

- The date range selects **people, not payments**. Someone whose first paid conversion was in the range is in the report, and everything they have paid before or since — later renewals included — is in their number.
- Someone whose first ever paid conversion was **before** the range is not in the report at all, even if they paid you during it. A customer who churned and came back is counted once, in the range of their original conversion.

A paid conversion is the start of a subscription: a person enters the report from the date of a `subscription_started` event carrying a `subscription_ref`. Payments on their own give a person money and `Customer` status but create no conversion, so **a product that sends only `payment` events has nobody to credit** — see [Send revenue from your backend](/acquire/tracking/revenue).

Revenue is **net**: refunds are subtracted, and the amount refunded is shown next to the figure rather than hidden. Money is kept **per currency and never converted** — a row that earned dollars and euros shows two lines, and there is no total across currencies anywhere, because no exchange rates are held.

### The four channels

Every credited touchpoint is classified into exactly one channel, by the first rule that matches:

1. **Paid** — the landing URL carried an advertising click id (`gclid`, `fbclid`, `msclkid`, `ttclid`, `twclid`, `li_fat_id`, `dclid`, `gbraid` or `wbraid`), or its `utm_medium` was `cpc`, `ppc`, `paid`, `paidsocial` or `display`. A URL carrying more than one click id keeps the first of that list, so a Google click that has both `gclid` and `gbraid` is a `gclid`.
2. **Email** — `utm_medium` was `email`.
3. **Organic** — the visit had a referrer on a host that is not one of your own.
4. **Direct** — no referrer at all, or a referrer from a domain the same person was already browsing on.

A visit from one of your own sites to another is direct, not organic: internal navigation is never counted as a new source.

Expand a channel row to see it split by the campaign tagging of the winning touchpoint — `utm_source / utm_medium / utm_campaign`. A touchpoint with no tagging at all appears as `(no UTM)`. Rows that arrived on an advertising click id are kept separate from rows that did not, even when their tagging matches, so a Google click never merges into an untagged one. The tagging shown is that of **the one winning touchpoint**, not of every visit the person made.

### Unattributed

`Unattributed` is its own row and its meaning is exact: a conversion for which no touchpoint fell inside the lookback window, plus money that could not be tied to any person at all. **Nothing in that row is ever spread over the other rows.**

A large unattributed row usually means one of four things:

- your lookback window is shorter than your sales cycle;
- your traffic arrives on pages the script does not run on;
- the events that carry your revenue reach Tracking without anything that ties them to a browser;
- a large share of your visitors decline consent.

Consent is the one no setting can fix. A visitor who declines is still counted as traffic, but their events never create a person and never carry a click id, so they cannot be credited to a source and their money — if they buy — lands here. See [What tracking does with a consent answer](/privacy/tracking-consent).

When a domain filter is applied, the row holds only conversions with no qualifying touchpoint on that domain; money that belongs to no person is left out of the filtered view.

### Match rate

The badge above the table is the share of conversions in the range that were credited to a touchpoint. The rest are the `Unattributed` row. It is a **count of conversions, not an amount of money** — one large unattributed customer can leave a high match rate looking better than the revenue split does.

### What the numbers do not mean

- They are **not the revenue you received during the date range**. They are the lifetime revenue of the customers who first converted during it.
- They are **not a share of credit**. One touchpoint takes all of it; there is no split across a journey and no fractional model.
- They are **not comparable across currencies**, and two currencies are never added together for you.
- A channel is **not a claim about intent**. It is a classification of the tagging and the referrer of one visit, no more.

## Follow a row down to one person

`View people` on any row — a channel, or a campaign under it — opens the list of the people credited to it, under the same model, window, date range and domain filter. The page shows each person, their status and the revenue credited to them, 50 at a time with `Load more`. The revenue against a person here is the same lifetime net revenue the row above is made of, which is why the people on the page add up to the row.

Open a person to see their journey and an `Attribution` card beside it. The card names the conversion, the model and the window in force, the channel and source that were credited, and the reason in plain words — for example `last qualifying paid touchpoint within 30d`. The event that won is marked in the journey itself, so you can see what the decision was made on.

Two things are worth knowing:

- A person gets a decision for their **originating** conversion — the earliest paid conversion they ever had. Later ones do not produce a second decision.
- Someone with no paid conversion yet reads `No paid conversion yet for this person`. That is not a failure; it is an anonymous or identified visitor who has not bought anything.

The model and window are taken from the link you arrived by, so a journey opened from a report is explained under the same settings as the report.

## Put Google spend against it

`Google Ads` → `Reports` has two views over the same date range, model and lookback controls:

- **ROAS** — your Google Ads accounts, campaign by campaign, with `Cost`, `Attributed revenue`, `Conversions`, `ROAS` and `CPA`. Campaigns expand into ad groups and ads; cost is shown at every level, and attributed revenue and the two ratios at campaign level.
- **You vs Google** — the same campaigns with your attributed revenue and conversions beside the conversions and conversion value Google reports itself.

Three cautions about reading them:

- Each account is shown in **its own account currency**, and only revenue you recorded in that currency counts towards its ROAS. A euro account earning dollars shows those dollars nowhere in its ratio.
- **Cost is whatever was last synced from Google.** A badge marks an account whose cost has not been refreshed, and stale cost makes ROAS look better than it is.
- Attributed conversions and Google's own conversions **count different things and will not agree**. The comparison shows the size of the gap; it is not something to reconcile to zero.

How much of your paid traffic cannot be tied to a person at all — because those visitors declined consent — is on the same page, under paid tracking health.

## How to trust a report

1. Check the match rate before reading the split.
2. Read one currency at a time.
3. Compare like with like: a report under `Last Click` / 30 days and one under `First Click` / 90 days are answers to different questions.
4. If a row looks wrong, open `View people` and then a person. The journey and the reason line show exactly what the decision was made on.

## Next steps

- [Send revenue from your backend](/acquire/tracking/revenue): send `subscription_started` with a `subscription_ref`, or there is nothing to credit.
- [Feed conversions back to Google Ads](/acquire/tracking/google-ads): spend sync, the URL suffix and conversion feedback.
- [Identify a visitor](/acquire/tracking/identity): an unidentified person cannot be credited or paid for.
- [Fix a report that looks wrong](/acquire/tracking/troubleshooting): revenue, conversions and the date range, in order.
