Attribution Data Reconciliation: A Process for When GA4, Shopify, and Ad Platforms All Disagree

Attribution Data Reconciliation

Attribution data from four systems will never match, and the goal of reconciling it is not to make them agree. 

It is to explain every gap with a named reason, so that when a client or a CFO asks why Meta says 412 purchases, Google Ads says 380, GA4 says 291, and Shopify says 350, you have an answer that survives the follow-up question. 

This post lays out a repeatable process for doing that monthly, built around what each system actually counts, with the 2026 changes that quietly moved the numbers on every store this year.

What is attribution data reconciliation?

Attribution data reconciliation is the practice of taking one closed period, pulling the conversion and revenue figures from every system that reports on it, anchoring them to a single financial record, and assigning a reason to each difference. 

  • Done well, it produces a bridge: start at Shopify orders, add and subtract named adjustments, and arrive at each platform’s number. 
  • Done badly, it produces a spreadsheet of four columns and a shrug.

The reason it matters more in 2026 than it did a year ago is that the systems keep changing what they count without telling you. A reconciliation run monthly catches that. A reconciliation run once, when someone complains, doesn’t.

What each system actually counts

The gaps are explainable only if you know what each number is a count of, and none of the four are counting the same thing.

  • Shopify counts orders placed, on the order date, server-side, with refunds netted automatically and sessions reset at midnight. It is the closest thing to a financial record and it knows nothing about ads beyond the last UTM. Accurate and isolated, as we’ve put it before.
  • GA4 counts purchase events that fired in the browser, dated to the conversion, with no automatic refund handling, attributed by its own data-driven model, and delivered 24 to 48 hours late. It typically misses 10 to 30% of purchases to blocking and consent, per Blue Frog Analytics’ comparison, and its sessions are cut differently from Shopify’s, so even traffic won’t match.
  • Google Ads counts conversions attributed to a Google click, dated to the click rather than the purchase, under data-driven or last-click attribution, with consent-modeled conversions filled in where consent was denied. Against GA4 alone, a 10 to 30% gap is normal, as Nice Looking Data’s breakdown of the seven causes lays out.
  • Meta counts purchases attributed to a Meta interaction inside its window, including 1-day view-through and 1-day engagement credit, dated to the interaction, with no deduplication against any other platform.

Four systems, four date bases, four eligibility rules, and each ad platform crediting itself for orders the others also claim. They will never agree. The process below makes that a feature.

The reconciliation process, step by step

  1. Pick a closed month and wait two weeks. Google Ads dates conversions to the click, so a purchase on the 3rd can land in the prior month. GA4 shifts attribution for up to twelve days. Meta’s 7-day window needs to close. Reconciling the current month is reconciling a moving target.
  2. Set the anchor: Shopify paid orders, net of refunds, in the store time zone. Exclude tests, cancellations, draft orders, POS, and subscription renewals. Write the exclusion rule down, because next month’s reconciliation has to use the same one.
  3. Pull three numbers from every ad platform, not one. Received events (Meta Events Manager Purchase count, Google conversion action count), attributed purchases (the Purchases column in each Ads Manager), and attributed revenue. Received minus anchor is your delivery gap. Attributed minus received is your credit gap. Mixing the two is how reconciliations fail.
  4. Pull GA4 separately, as a fifth column. Purchases and revenue from the same window, attributed under the model the property is set to. Note the model. GA4 is not an ad platform and doesn’t belong in the same comparison as one.
  5. Build the bridge with reason codes. Start at the anchor and account for each platform’s number with named adjustments. A practical set: DELIVERY (events the platform never received), TIMING (click-date versus order-date), SCOPE (orders you excluded that the platform counted, or vice versa), CREDIT (view-through, engagement, and modeled conversions above the click-verified count), DEDUP (double-counted events), and RESIDUAL (what’s left). Bily’s reconciliation method uses a similar structure and is worth reading for the worked example.
  6. Set tolerances and act on the ones that break. A stable 15 percent DELIVERY gap on Meta is a fact of life. A DELIVERY gap that jumped from 15 to 40 percent in one month is a broken pixel. A CREDIT gap that grew after March is Meta’s engage-through change. A RESIDUAL above a few percent means you’re missing a reason. The reconciliation is finished when every gap has a code and every code has a size you expected.

The 2026 changes that moved the numbers without anyone touching a setting

Three things changed this year that show up in a reconciliation as unexplained movement, and each one has a reason code.

  • June 15, 2026: Consent Mode became the sole gate for Google Ads data flowing through GA4. The Google Signals toggle no longer controls it. Per WeltPixel’s audit guide, a banner that denies ad_storage by default and never updates now blacks out remarketing and conversion signals silently, and a banner that grants by default over-collects. Either way, GA4’s and Google Ads’ numbers moved in June with no error and no announcement in your account. Code: DELIVERY, and check the gcs parameter.
  • July 2026: Google started routing Shopify purchases into GA4 server-side. For stores with the Google and YouTube app, purchases now reach GA4 through the Data Manager API, bypassing the browser, as PPC Land reported. GA4’s purchase count rose toward Shopify’s. Its attribution didn’t get better, because as the article notes, cleaner event capture “doesn’t fix the attribution model underneath it.” Expect GA4’s DELIVERY gap to shrink and its CREDIT gap to stay.
  • March 3, 2026: Meta redefined click-through and created engage-through. Meta’s attributed purchases shifted between buckets and, on video-heavy accounts, rose. Code: CREDIT, and don’t compare Meta’s pre-March and post-March click numbers as if they measure the same thing.

Add the August 26 Shopify checkout change and the January App Pixel default and you have five reasons a 2026 reconciliation looks different from a 2025 one, none of which involved anyone on your team changing anything. Google’s attribution gaps covers the Google side in more depth.

What to actually do

  1. Run the six-step process on last month, this week. The first pass takes an afternoon. The second takes an hour, because the exclusion rules and reason codes already exist.
  2. Report the bridge, not the columns. For attribution reporting to a client or a leadership team, a table of four disagreeing numbers invites the wrong conversation. A bridge from Shopify orders to each platform’s claim, with reasons, invites the right one. Our list of attribution reports for CMOs has a place for it.
  3. Track the reason codes over time. This is the attribution analytics that matters: the size of each gap month over month is more useful than the size in any single month. A code that trends is a change you didn’t make.
  4. Audit the June consent change if you haven’t. Ten minutes in DevTools. If your Google numbers dipped or spiked in June, this is likely why.
  5. Add a fifth source that makes the bridge shorter. Every platform column above needs DELIVERY, CREDIT, and DEDUP adjustments because the platform both receives the event and grades itself on it. A first-party, click-only attribution record on your own domain starts from the anchor instead: it reads your orders, captures the ad click ID at landing, follows the session, and joins the two. 
  6. Against Shopify, its bridge is one line: orders with a captured click versus orders without. It won’t credit views or engagement, and it undercounts some upper-funnel influence. What it gives you is a number that reconciles to the anchor by construction, which is what you hold every platform’s CREDIT gap against.

Reconciliation turns four disagreeing numbers into one explanation, and the explanation is what a client actually pays for. Anchor to orders, pull three numbers per platform, name every gap, and re-run it monthly so the platforms’ changes show up as movement in a code rather than a surprise in a meeting. 

If you want to see a click-only, first-party attribution record reconciled against your own Shopify orders, side by side with what Meta and Google claim, book a live AdBeacon demo.

—-

FAQ

Why don’t GA4, Shopify, Google Ads, and Meta conversion numbers match?

Each counts a different thing on a different date under a different attribution rule. Shopify counts orders placed; GA4 counts browser purchase events; Google Ads dates conversions to the click; Meta includes view-through credit. None deduplicates against the others.

What is a normal discrepancy between GA4 and Google Ads conversions?

Around 10 to 30 percent is typical, driven by click-date versus conversion-date, separate data-driven models, consent modeling, view-through conversions, and reporting lag.

How should I reconcile attribution data across platforms?

Anchor to Shopify paid orders net of refunds for a closed month, wait two weeks, pull received events and attributed purchases separately from each platform, and build a bridge from the anchor to each number using named reason codes such as delivery, timing, credit, and dedup.

What changed in GA4 in June 2026?

On June 15, Consent Mode became the sole control for Google Ads data collected through GA4; the Google Signals toggle no longer gates it. A misconfigured banner can now silently over-collect or black out conversion signals.

Which number should I trust for revenue?

Shopify, for financial decisions. It records every order server-side and nets refunds. Use ad platform and GA4 data for channel performance, and reconcile them to Shopify rather than the other way around.

Sources

This website uses cookies

We use cookies to personalize content, provide social media features, and analyze our traffic. We also share information about your use of our site with our analytics partners. You can change your preferences at any time. For more information, please see our Privacy Policy and Cookie Policy. Privacy Policy