# How attribution is measured

> How Ordinary counts attributed orders and revenue — refunds, cross-session journeys, tracking blockers, URL tagging and click- vs view-through gaps.

Source: https://help.tryordinary.com/features/attribution-measurement

---

This article covers how the numbers on Marketing Mix and the channel
pages are counted. For reading the report itself, see
[Attribution reports](https://help.tryordinary.com/features/attribution).

## Revenue is net of refunds

All revenue figures on Marketing Mix — under every model and on every
channel card — are **net of refunds**.
A $100 order where a $20 item was later returned contributes $80 to its
attributed channel's revenue, so ROAS reflects realized payback.

What counts as a refund matches Shopify's Sales report exactly:
returned items, refunded tax, refunded shipping and refunded duties.
A cash refund where nothing was returned — a goodwill credit or a
partial refund to settle a complaint — isn't a return in Shopify's
report, so it doesn't reduce revenue here either. On a store whose
prices include tax, a returned item comes off once, at the price the
customer paid.

Refunds reduce the revenue of the period the purchase was placed in,
because each refund comes off the order it belongs to. Shopify's Sales
report records a return on the day it happens instead, so a single
day's figures can differ between the two while the orders and refunds
are the same.

## Date coverage nuances

Attribution relies on our first-party pixel being live. The very first
day after install may show 0 sessions even if you have orders — the
pixel has to observe a session to attribute it. By day two, the
numbers align.

If you installed Ordinary mid-month and asked for the whole month,
expect sessions/ATC to be lower than orders for the pre-install days.

## Early-funnel session stitching

Customers don't always buy in the same session they first land
in. Ordinary stitches a shopper's first session to their later
converting session via a stable browser-side identifier the pixel
emits on every event — so a shopper who clicks a Meta ad on
Tuesday, browses, leaves, and returns on Friday to buy is still
credited to the original Meta touch instead of falling into the
"Direct" bucket on Friday. This stitch is automatic and merchants
don't need to configure anything.

## Orders from blocked-browser shoppers

For a small slice of shoppers (typically Brave with default shields,
Safari with strict tracking protection, iOS content blockers), our
pixel doesn't run on their device. Their orders still arrive — Shopify
sends them to us server-side, which browser blocking doesn't affect —
and their channel comes from the campaign tags (UTMs) that Ordinary's
theme bridge saves onto the cart while they shop. Those tags travel
with the order, so these orders show up in your channel breakdowns
alongside pixel-tracked orders.

## Cleaner Meta attribution with the URL-tag template

Meta's auto-generated UTMs aren't always reliable — `utm_campaign`
in particular can collapse to the campaign objective rather than
the campaign name, and individual ad / ad-set identity gets lost
on the way to the storefront. To fix this at the source, the
**Meta Conversions API** card on Settings → Meta shows a recommended **URL-tag
template** that includes both the standard `utm_*` parameters
*and* direct identifiers for the campaign, ad set, and ad
(`fb_campaign_id={{campaign.id}}` and friends).

When a merchant pastes this template into Meta's "URL parameters"
field on each ad — or applies it at the ad-account level — every
click that lands on the storefront carries enough information for
Ordinary to attribute the resulting order back to the exact ad,
even if the visitor's UTMs get mangled by a meta-redirect or a
mobile-browser stripping. The Meta CAPI card surfaces a per-token
audit so you can see how much of your ad inventory currently
matches the template.

## Cleaner Google attribution with `utm_id`

If you run Google Ads, add `utm_id={campaignid}` to your account-level
**Final URL suffix** (type it literally — Google fills in the real campaign ID
on each click). This is the Google counterpart to the Meta template above: it
puts the campaign's identity directly on every landing URL, so Ordinary ties a
click to the exact campaign even when the Google click ID is stripped or the
click is older than Google's reporting window. Keep your own readable
`utm_campaign` labels alongside it — Ordinary reads the campaign ID from
`utm_id` and leaves your labels as-is.

## Click-through vs view-through (the conversion gap)

Ad platforms count two kinds of conversions, and they aren't the same:

- **Click-through** — someone clicked your ad and bought. Ordinary
  confirms these against your own store, so the campaigns you see
  driving revenue are ones you can verify.
- **View-through** — someone saw your ad, didn't click, and bought
  later. Only the platform can see these, so Ordinary reports the
  platform's figure.

On **Channels → Meta** and on the Meta panel on Brand Pulse, the
**Click-through / View-through** toggle switches between the two:
Click-through is what your store can verify; View-through adds the
platform's view-attributed sales on top. View-through is the default,
because it's the figure the platforms and most agencies quote.

They almost never match — and the gap is where the real decision lives.
View-through might be genuinely driving demand, or it might be sales
you'd have made anyway. The only way to know is to test it, and Ordinary
measures the true incremental lift of your spend — so "is view-through
worth it?" stops being a guess.

When you open a Meta campaign, the **Store-attributed analysis**
section on its **Overview** tab plots Meta-reported and
store-attributed conversions day by day, so you can watch the gap over
time.

## Cohort and lifetime-value view (per campaign)

Each Meta campaign's **Overview** tab also has a cohort and
lifetime-value summary for the customers that campaign acquired:
customers acquired, first-order revenue, their repeat spend at fixed
ages, projected 12-month value, estimated acquisition cost, LTV / CAC
and payback period. Revenue is net of refunds, counted the same way as
Marketing Mix revenue above. Useful for answering "did this campaign
acquire customers who come back, or one-and-done buyers?" without
leaving the campaign.

## Related articles

- [Orders — the order list and order detail](https://help.tryordinary.com/features/orders) — each order's
  marketing touchpoints and journey.
- [Attribution models explained](https://help.tryordinary.com/concepts/attribution-models)
- [Attribution numbers don't match Shopify](https://help.tryordinary.com/troubleshooting/attribution-mismatch)
