Why your analytics numbers never match
GA4, Shopify, Meta and Google Ads count with different rules, dates and blind spots. Where each number splits, and which one to trust for each question.
On this page
Open Meta Ads Manager, Google Ads, GA4 and your store on the same morning and you will get four different answers to "how many sales did we make yesterday?" None of them is broken. Each one counts something slightly different, credits it by a different rule, and puts it on a different day.
Once you know the five places the numbers split, most gaps stop being a mystery. Some can be closed. The rest just need to be read the right way.
What happened
Meta Ads Manager
Google Ads
GA4
Shopify
The five reasons numbers differ
- They count different things. An ad platform counts clicks and the conversions it can tie to people who saw or clicked an ad. An analytics tool counts sessions or visits. A store counts orders. A click is not a visit, and a visit is not a buyer.
- They credit different touches. Most buyers touch more than one channel. Each tool has an attribution rule for who gets the sale, and the rules disagree on purpose.
- They look back over different windows. Meta counts a purchase within 7 days of a click by default. Google Ads uses a 30-day window unless you change it. GA4 looks back 90 days for most key events.
- They put the sale on different dates. Google Ads reports a conversion on the day of the ad click, not the day of the purchase. Your store reports it on the day the order was paid. Time zones move the line again.
- They see different slices of traffic. Ad blockers, consent banners, Safari's storage limits, checkout pages that do not run your tags, and bots all change what each tool can see.
Different things being counted
Clicks in an ad platform are almost always higher than visits in analytics. Between a click and a counted visit, people close the tab before the page loads, the tag is blocked, the click came from a bot the ad network did not filter, or someone clicked twice. A gap here is normal. A gap that suddenly widens is worth checking, because it often means the tag stopped loading on a landing page.
Visits, sessions and users are also defined differently from tool to tool. GA4 starts a new session after 30 minutes of inactivity by default. Sporetag counts a visit as one visitor's day on a site. Shopify has its own session rules. The guide to visitors, sessions and pageviews covers each definition.
Different credit rules
Take one buyer who taps a Meta ad on their phone on Monday, searches your brand name on a laptop on Thursday, clicks the Google ad at the top, and buys.
- Meta counts the purchase if it can match the buyer to the person who tapped the ad, inside its attribution setting. Its default for website conversions is 7-day click and 1-day view, and since early 2026 it also has a separate 1-day "engage-through" window for non-link clicks (Jon Loomer, March 2026).
- Google Ads counts the conversion too, because the buyer clicked a Google ad inside its window.
- GA4 gives the credit to one channel or splits it with its data-driven model. All of GA4's models leave direct visits out of the credit unless the whole path was direct (Google).
- Shopify uses "last non-direct click" by default (Shopify), so it credits the Google search.
The two ad platforms both claim the sale. Add up "conversions" across ad platforms and you will almost always get more sales than you made. That is not fraud. Each platform answers "did my ad play a part?", and both did. The attribution models guide works through the same path under each rule.
Different windows and dates
| Tool | Default window | Date a sale lands on |
|---|---|---|
| Meta Ads Manager | 7-day click, 1-day view, 1-day engage-through | Changed in 2025: website conversions moved to the conversion date (Supermetrics) |
| Google Ads | 30 days for Search and Display, 1 to 90 allowed (Google) | The ad click's date, unless you use the "by conv. time" columns (Google) |
| GA4 | 90 days for most key events, 30 for first visits (Google) | The event's date |
| Shopify | Last non-direct click | The order's date |
The click-date rule matters most for short reporting periods. If someone clicks on the 30th and buys on the 2nd, Google Ads puts the sale in last month and your store puts it in this month. Over a quarter it evens out. Over a week it can swing a report.
Check the time zone setting in every tool too. An ad account set to Pacific time and a store set to Eastern time draw "yesterday" three hours apart.
Different blind spots
- Ad blockers and privacy browsers stop many third-party tags from loading. Tags served from big ad and analytics domains are the most commonly blocked.
- Consent banners. Where a visitor declines, a well-built site does not set analytics cookies or fire ad pixels for them. If your banner blocks GA4 until consent, GA4 never sees those visits, while your store still records the order.
- Safari limits. Safari caps cookies set by script at 7 days (WebKit). A buyer who clicks an ad and comes back on day 9 can look like a new visitor. Safari also strips known click ids from links opened from Mail, Messages and Private Browsing (Apple).
- Checkout pages. Shopify's checkout does not run your theme code, and script tags on Shopify's order status page stopped running for all stores in August 2026 (Shopify). A tag that only lives in the theme cannot see the purchase.
- Bots. Some tools filter more bots than others. A tool that counts a scraper as a visitor will show more visits and a lower conversion rate.
Gaps that are bugs, not rules
Some differences are mistakes you can fix:
- The tag is missing from some pages. A landing page built in a separate tool often has no analytics tag at all.
- The tag is on the page twice. Two copies double pageviews and conversions, and push the bounce rate toward zero. The free tag checker lists every analytics and ad tag a page loads.
- Payment pages show up as referrals. If buyers leave for PayPal or a payment processor and come back, GA4 can credit the sale to that referral. Add those domains to GA4's list of unwanted referrals.
- UTM tags on your own links. A tagged link from your home page to your shop overwrites the real source of the visit. Use UTM tags only on links that point to your site from somewhere else.
- The purchase event fires on page reload. A thank-you page that sends "purchase" every time it loads counts the same order again each time the buyer comes back to it.
Which number to trust for which question
| Question | Trust this | Why |
|---|---|---|
| How much did we sell? | Your store or payment processor | It counts paid orders, once, with refunds |
| Which channels bring buyers? | One analytics tool, with one consistent rule | Same rule across every channel, so the comparison is fair |
| Is this campaign improving? | The ad platform's own number, as a trend | It is the number the platform optimizes on |
| Should we move budget between platforms? | Your store's revenue against each platform's spend | The platforms' own claims overlap |
The mistake is mixing them: dividing Meta's claimed revenue by Meta's spend, then adding Google's claimed revenue on top, and calling the total "return on ad spend". Use the store's revenue for any number you add up. See ROAS, blended ROAS and MER.
How to make the numbers agree more closely
- Set the same time zone and currency in every tool.
- Tag every link you control with UTM parameters, with one naming scheme.
- Put your analytics tag on every page, once, including landing pages built in other tools.
- Send paid orders from your server or your store's own data, not only from a thank-you page script. The server-side tracking guide explains how.
- For ad platforms, send conversions back through their server APIs with an event id, so the browser and server copies count once (Meta).
- Compare the same date range on the same date basis. In Google Ads, add the "by conv. time" columns when you compare with your store.
Common questions
What is a normal gap between GA4 and Shopify?
There is no single normal figure, because it depends on how many of your visitors block tags, decline consent or use Safari. Measure your own gap over a full month, then watch it. A steady gap is fine to live with. A sudden change usually means a tag broke.
Why does Meta report more purchases than my store?
Meta counts purchases from people who clicked or saw an ad inside its window, including some it matches across devices, and other platforms count the same purchases too. Your store counts each order once. Meta also reports by its own dates and can include modeled conversions.
Should I trust the ad platform or my analytics?
Use the store for how much you sold, one analytics tool for comparing channels, and each ad platform for trends inside that platform. Do not add the platforms' claimed sales together.
Do server-side tracking tools make the numbers match?
They close part of the gap by seeing sales a browser tag missed, and by sending them back with ids that prevent double counts. They do not remove different credit rules, windows or dates, so the tools will still disagree.
Sources
- Google Analytics: Get started with attribution, Select attribution settings. Checked October 2026.
- Google Ads: About conversion windows, Conversions by time. Checked October 2026.
- Shopify: Marketing insights, Order status script tags. Checked October 2026.
- Meta: Deduplicate pixel and server events. Attribution settings as described by Jon Loomer and Supermetrics.
- WebKit: Intelligent Tracking Prevention 2.1. Apple: Link Tracking Protection.
Spotted something wrong or out of date? Email hello@sporetag.com and we will fix it.