Attribution numbers don't match Shopify

Why Ordinary's attributed orders/revenue will always differ slightly from Shopify's built-in reports, and when the gap matters.

Ordinary Written by The Ordinary Team · Updated
On this page

You’ll often notice Ordinary’s attribution report shows slightly different order counts or revenue from Shopify’s built-in Sales reports. This is normal and expected — here’s why.

Important distinction: this article is about ATTRIBUTION (which channel drove a sale — by nature approximate). Your total revenue in Ordinary DOES match Shopify’s Sales report exactly, to the cent — see Revenue matches Shopify exactly. If your total revenue numbers disagree with Shopify, that’s a bug we want to hear about, not expected behavior.

They’re measuring different things

What it countsShopify SalesOrdinary Attribution
Which ordersEvery orderEvery order, each assigned to a channel
Orders with no tracked visitCountedCredited to the order’s own campaign tags, or Direct
Which day an order lands onOrder creation, shop time zoneOrder creation, shop time zone
CurrencyShop currencyYour display currency; orders placed in another currency aren’t included

So even if everything’s working perfectly, expect:

  • Totals match — the same orders and revenue as Shopify for the same days, for orders placed in your display currency. Orders placed in another currency aren’t included in channel totals.
  • The channel split differs from Shopify’s own channel reports, because the two credit visits differently.
  • Some orders land in Direct — orders with no tracked visit and no campaign tags of their own.

How big a gap is normal?

  • Totals: none — orders and revenue in your display currency for the same days should match Shopify. If they don’t, that’s a bug; see Revenue matches Shopify exactly.
  • Direct share: a stable share of Direct is normal. A sudden jump means visits stopped being tracked. Investigate.

Common causes of larger gaps

Pixel not firing on all pageviews

If your pixel is Disconnected or firing inconsistently, sessions are missing, so their orders fall back to their own campaign tags or Direct. See Pixel says “Disconnected”.

Check that the Shopify card on Settings → Shopify shows the Pixel active badge.

Orders from channels the pixel can’t see

  • Amazon orders — sold on Amazon, not your storefront, so they aren’t Shopify orders and aren’t in this report. Amazon’s own reported sales show on Marketing Mix’s Amazon Ads card.
  • Phone orders / draft orders — no visit to track. They’re credited to their own campaign tags if they have any, otherwise Direct.
  • Point of Sale (POS) orders — in-person retail doesn’t fire the web pixel, so these are credited to Direct.

Orders from before your pixel was installed

If you installed Ordinary recently, orders placed before install have no tracked visits — we didn’t see the sessions that led to them. They still count in revenue and order totals (those come from Shopify), credited to their own campaign tags or Direct, but they won’t appear in session-based breakdowns like Traffic or the attribution funnel. That’s intentional: we don’t backfill session data from other analytics tools because the number has to come from one source to be trustworthy.

Customer-chose-Shop-Pay-long-ago

Shop Pay autofills cart and can sometimes skip the full checkout funnel. We still attribute these, but some edge cases (Apple Pay, Shop Pay express, guest checkouts with ad-blocker) slip through.

Comparing different days

Ordinary places each order on the day it was created, in your shop’s time zone — the same as Shopify’s Sales report. If a day doesn’t match, check both reports cover exactly the same dates.

Comparing different revenue definitions

Ordinary’s revenue follows Shopify’s Sales report: returns reduce revenue in the period they belong to. There are no tax or shipping toggles in Ordinary. If you’re comparing against a Shopify report with a different definition (for example gross sales), the numbers will differ by design.

When to be worried

Worry about the mismatch when:

  • The Direct share is suddenly larger than it’s been — something changed. Check pixel status first.
  • Specific campaigns show drastic under-attribution. A campaign you know is driving revenue showing zero orders is a red flag for UTM-tagging issues.
  • Session counts diverge dramatically from GA4 or PostHog on the same days. Some divergence is expected — GA4 / PostHog use different session definitions, bot filtering, and client-side sampling, so the numbers will never match exactly. But if Ordinary is showing materially fewer sessions than either tool on the same days, that’s a pixel coverage issue worth investigating (ad blockers, consent gates, Shop Pay / direct checkout bypass).

Still unsure?

Email support@tryordinary.com with:

  • Specific order IDs you expect to see attributed but aren’t.
  • The date range you’re comparing.
  • Screenshots of both Shopify’s and Ordinary’s revenue for that range.

Did this answer your question?

Thanks for your feedback! 🙌

Related articles