Why FTS revenue doesn't match Shopify exactly
The differences are by design — and small. Here's exactly what each side counts and how to reconcile them.
If you compare today's revenue in Follow The Spend against today's revenue in Shopify, the numbers will be close but rarely identical.
This is the single most common "is this broken?" question for any analytics tool, and the answer is almost always no. Here's exactly why the gap exists, and how to reconcile.
TL;DR
A 1–3% difference between FTS and Shopify on any given day is normal and expected. A persistent gap larger than 5% is worth investigating — see the bottom of this page.
What Shopify counts as revenue
Shopify's "total sales" includes everything that has flowed through their checkout, including:
- Test orders placed via Shopify's bogus payment gateway
- Cancelled orders that briefly existed before being voided
- Tax and shipping as separate lines but rolled into the total
- All currencies converted to your shop's primary currency at the rate Shopify recorded at order time
Shopify's number is "everything that touched our checkout."
What Follow The Spend counts as revenue
FTS counts the net revenue you actually collected from real customers. Specifically:
- Real orders only — test orders are filtered out by detecting Shopify's
bogusgateway - Refunds applied — when Shopify sends us the refund webhook, we subtract the refunded amount from the original order's revenue
- Cancelled orders excluded — orders cancelled before payment capture are removed from totals
- Currencies converted live — we convert each order to your store's reporting currency at the rate of the moment we receive it
FTS's number is "revenue you can spend."
The four reasons numbers diverge
1. Refunds and cancellations
This is the biggest one. Shopify's "total sales" view includes refunds as separate negative lines but the headline number you usually look at is gross. FTS subtracts refunds in real time, so a $100 order refunded $30 shows as $70 in FTS but might still show as $100 in the Shopify view you're comparing against.
Reconcile: check Shopify's "Net sales" rather than "Total sales" — the gap usually closes.
2. Test orders
If you ran any test orders today (yourself or your dev team), Shopify counts them. FTS does not.
Reconcile: filter Shopify's order list by gateway = "bogus" to see how much of the gap is test orders.
3. Currency rounding
If your store sells in multiple currencies, every order gets converted to your reporting currency. Shopify and FTS do this conversion at slightly different moments using slightly different rates. Across many orders the rounding adds up to fractions of a percent.
Reconcile: compare a single high-value international order. The gap will be cents, not dollars.
4. Tracking lag
Shopify webhooks fire within seconds, but in extremely rare cases a webhook is delayed by Shopify's queue (up to a few minutes). If you're comparing numbers at the exact moment an order lands, FTS might be a beat behind.
Reconcile: wait 5 minutes and refresh.
How to reconcile in 30 seconds
If you spot a gap and want to confirm it's one of the above:
- Open Shopify's Net sales report (not total sales) for the same date range you're viewing in FTS
- Subtract any test orders (filter by gateway = bogus)
- The remaining number should be within ~1% of your FTS revenue
If it is — you're seeing the normal divergence. If it's not — read on.
When to be concerned
If you see a persistent gap larger than 5% over multiple days, or a sudden gap that opens overnight, something may genuinely be off. Likely causes:
- A custom checkout subdomain that we haven't been told about
- An app that's intercepting orders before they fire the webhook
- A Shopify webhook subscription that has lapsed (rare — we monitor for this)
What to do: reach out via the in-app chat or email hello@followthespend.com. Include the date range and the size of the gap. We can usually pinpoint the cause within a few hours.
Why we made these choices
We could have matched Shopify's "total sales" exactly. We chose not to, because the question that matters for marketing decisions is "what revenue did this campaign actually drive?" — and that has to net out refunds and exclude test orders.
If you want a strict reconciliation view, Shopify's own analytics is the right tool. If you want to make budget decisions on real, attributable revenue, that's what FTS is for.
Why your data feels thin on day one
Attribution data needs context — sessions, returns, multi-touch journeys. Here's why day one looks sparse and when it fills in.
Why Buy It Now and Shop Pay conversions show as direct
Shopify's express checkout buttons skip the page flow our pixel relies on. Here's how to read these conversions today, and what's coming next.