What Shopify's built-in reports can't tell you

Last reviewed 15 August 2026

Short answer

Shopify native reports are better than their reputation and still have hard edges: reports display 1,000 rows, sessions close at midnight UTC, attribution resets after 30 days, and cookie consent suppresses data in some regions. Most of these limits are documented by Shopify itself, which is more than most analytics tools offer.

The limits Shopify publishes about itself

It is worth saying at the top that Shopify documents its own constraints unusually well. Most analytics vendors publish a features page and nothing about where the numbers break down. Shopify maintains a page called Analytics discrepancies whose entire purpose is explaining why its figures will not match another tool.

These are the documented limits that change how you should read a report.

LimitWhat it means in practice
Reports display up to 1,000 rowsTotals still reflect every row, but a long tail is invisible in the list
Sessions end at 30 minutes idle, or midnight UTCOne visitor becomes two sessions across that boundary
Attribution resets after 30 daysA visitor who buys on day 31 loses their first-interaction referrer
Consent banners gate collection in some regionsShopify states this reduces the analytics data available
Two orders in one sessionCounts as two orders and one conversion
Recording mechanisms are undisclosedYou cannot audit how any of it is counted

Why your numbers never match Google Analytics

This is the single most common support question in ecommerce analytics and Shopify answers it directly. The causes it lists are all structural rather than fixable.

Google counts every page reload while a browser does not count reloads of cached pages. Some analytics software counts search bots as visitors and some does not. Google can only count visitors with JavaScript and cookies enabled. Browser extensions block tracking on one tool and not another. Reporting timezones differ.

The conclusion Shopify draws is the correct one and worth internalising: the tools are not measuring the same thing, so they will not agree, and chasing a reconciliation is wasted effort. Pick one as your system of record and read the others for shape.

The thing Shopify will not tell you at all

One line on the discrepancies page does more work than the rest of it combined. Shopify states that it is unlikely identical tracking mechanisms are used by each service, that visitors are therefore not recorded equally, and that "Details of recording mechanisms are proprietary information and are never shared."

That is a legitimate commercial position. It also means nobody outside Shopify, including every analytics app in the app store, can verify how a session is counted. Every number you read is taken on trust. Any vendor claiming their Shopify figures are more accurate than Shopify is claiming knowledge of a system whose mechanics are explicitly undisclosed.

What an installed app can and cannot read

There is a second layer of limits that merchants rarely see, which governs what any analytics app can access at all.

Shopify gates customer data behind three protected data levels. Level 0 is no customer data. Level 1 is customer data excluding name, address, phone and email. Level 2 includes those fields and requires participation in data protection reviews.

This matters more than it sounds, because shopifyqlQuery, the API through which an app reads session and traffic data, requires Level 2 access along with the read_reports scope and a recent API version. In practice an app cannot show you your own traffic sources unless it has been through a data protection review. Seam went through Level 1 and then Level 2 for exactly this reason, and had no traffic data at all until the second approval landed.

  • Level 0: no customer data, no approval needed
  • Level 1: customer data excluding name, address, phone and email
  • Level 2: includes those fields, plus data protection review
  • Session and traffic data via shopifyqlQuery: Level 2, read_reports, API 2025-10 or later

Where this is genuinely hard

The unfixable problem is that you cannot audit accuracy. Methodology is undisclosed by policy, so there is no way to independently check whether a session count is right. You can check it against another tool, but that tool has the same problem in the other direction.

The second is that consent suppression is not evenly distributed. If a third of your traffic is EU and consent rates differ by market, your channel mix is distorted in a way that varies by geography and by time as consent UX changes. Nothing in the reports flags this.

The practical stance: use Shopify figures as the system of record for anything transactional, treat traffic and session figures as directionally useful rather than precise, and never build a decision on a difference small enough to be a methodology artefact.

Common questions

Why do Shopify analytics and Google Analytics show different numbers?
Shopify documents the causes: page reload counting, bot handling, JavaScript and cookie requirements, ad blockers, and timezone differences. The tools measure different things, so they will never reconcile. Pick one as the system of record.
How accurate are Shopify analytics?
Unverifiable, by design. Shopify states that the details of its recording mechanisms are proprietary and are never shared, so no external party can audit how sessions are counted. Transactional data is a different matter and is reliable.
Why does my analytics app not show traffic sources?
Most likely it has not been granted Level 2 protected customer data access. Reading session and traffic data through shopifyqlQuery requires that approval plus the read_reports scope, and the approval process is not quick.
Do Shopify reports show all my data?
Totals do. The row list does not: reports display a maximum of 1,000 rows for performance, so a long tail of products or referrers is summarised into the total but not visible in the list.

Related

Sources

one email. the thing that changed.

Seam reads your store every day and sends one paragraph about what actually moved. No dashboard to open.

Install on Shopify