47.66° N 117.43° W Summit · Profitable Growth
Answer library / Conversion Tracking · Reconciliation
What conversion value should I send to Google and Meta, and how do I keep them reconciling?
Send Google and Meta the same number: the order subtotal after discounts, before tax and shipping, in one currency, with the order ID, server-side where possible. Then check what the value column holds. On two of three stores I measured from May to August 2026, 19.8% to 25.8% of reported conversion value was cart value.
Pick one definition of “value” and send it everywhere
When Google and Meta disagree on revenue, the first thing I check is whether each one received a different number for the same order. One got the grand total with tax and shipping, the other got the subtotal. One got the value in USD, the other in the customer’s local currency. Once that happens, no amount of dashboard tweaking will make them line up.
So the first decision is what “value” means, and it has to be made once. My spec is the order subtotal after discounts, before tax and shipping, in your store’s base currency, sent with the order ID. That’s the number closest to what the customer paid you for the goods, and it maps to margin. Tax and shipping inflate ROAS without adding a dollar you can spend. If you send the grand total to one platform and the subtotal to the other, your blended ROAS is a fiction.
Reconcile gross to gross. The platforms receive the value at the moment of purchase, so compare them against the same orders’ subtotals in Shopify before any refunds come out, and handle refunds and cancellations as a separate step. Comparing platform value to a Shopify figure that has already netted out returns makes a healthy setup look inflated.
Whatever you choose, write it down. The definition is a one-line spec: “value = order subtotal after discounts, excluding tax and shipping, in USD, keyed to the order ID.” Every conversion tag, server event, and offline import then has to honor that one line.
Then check the platform side, because a setting can change the number after it arrives. On one Shopify account I took over, a $32.99 order showed in Google Ads as $148.95. The dataLayer was clean. The prior agency had turned on Customer Lifecycle Value Optimization with a hardcoded $115.96 added to every new-customer conversion, and Smart Bidding had chased the padded number for nine months. The platform can also be aimed at the wrong event entirely: when I audited Emma Grace Home, its Google Ads was optimizing toward add-to-carts instead of buyers.
Send the same number to Google and Meta
Google Ads expects a value and a currency on the conversion. Meta’s Purchase event expects value and currency in the same way. Send identical figures.
- Google Ads: the
valueparameter on the purchase conversion action, withcurrency_codeset explicitly. Don’t leave currency to default. Enhanced conversions don’t carry a value of their own. They attach hashed customer data to the conversion so Google can match it, and the value still rides on the conversion tag or, for offline conversions, on the import row. - Meta: the
valueandcurrencycustom data on the Purchase event, sent through the Conversions API. The pixel-only value and the CAPI value must match, or Meta’s deduplication will keep one and you won’t always know which.
If your store sells in multiple currencies, convert to a single base currency before the event fires, and tag the original currency in a separate parameter for your own records. Either way, send the currency code on every event. A value that arrives without one gets read in the account’s default currency, so an order in yen can land as the same number of dollars.
Fire it server-side, with the order id as the key
Browser tags drop value constantly. Ad blockers, ITP, a customer who closes the tab on the thank-you page before the pixel loads. Every dropped purchase is revenue the platform never sees, which is one reason ad-platform revenue can read lower than Shopify.
Send the purchase from the server: Shopify’s order-created event, a server-side GTM container, or a direct Conversions API call. Server events fire whether or not the browser cooperated. On both platforms, attach a stable identifier so the browser event and the server event collapse into one:
- Meta:
event_idon both the pixel and the CAPI call. Same id, same order, deduplicated. - Google: the
transaction_id(order id) on the conversion. This also lets you import corrections later without double-counting.
Use the actual order id, not a timestamp or a random string. When you reconcile a month later, the order id is what lets you trace a single sale across Shopify, Google, and Meta.
Decide how you handle refunds and discounts
Two edge cases need a written rule.
Discounts. If a customer uses a 20% code, do you report the value they paid or the full subtotal? Report what they paid. The platforms optimize toward the value you feed them, and you want them chasing real revenue, not list price. Pick one rule and apply it to both Google and Meta.
Refunds. A sale that gets refunded is still sitting in the platform as revenue unless you send a correction. Google accepts refund adjustments through the conversion-adjustment upload (a negative or retraction keyed to transaction_id). Meta’s handling is weaker, so many stores accept a known gap there and account for it in reporting rather than trying to claw each refund back. Whatever you do, document the rule, because a 10% refund rate quietly inflates reported ROAS by roughly 10% on both platforms. On the one store in my Ecommerce Tracking Accuracy Benchmark where I could read the order table, about a sixth of the orders in the window were refunded and about a tenth were cancelled, and the ad platform got no restatement for any of them. That’s one store, and the platform’s purchase count still included orders the store no longer held.
Cancellations follow the same rule as refunds. Send the subtotal after discounts at purchase, then correct for cancellations and refunds in their own step, so you always know which number moved and why.
Reconcile on a cadence, not a hunch
Once the same value is firing server-side to both platforms with an order id, the platforms will still not match Shopify exactly, and that’s fine. Attribution windows differ, view-through differs, the platforms claim credit Shopify assigns elsewhere. The goal isn’t identical numbers. The goal is a stable, explainable gap.
Before you trust the ratio, confirm the value column is measuring revenue at all. When I measured three ecommerce accounts for the benchmark, from May to August 2026, 19.8% to 25.8% of reported conversion value on two of the three was cart value rather than purchase revenue. A ratio built on that number is stable and wrong.
How much of the value column was cart value
Three stores, May to August 2026
Three bars, one per store, splitting reported conversion value into add-to-cart and begin-checkout value and everything else: Store A 25.8% add-to-cart and begin-checkout value, Store B 0.0%, Store C 19.8%. The remainder is all other conversion value.
Shopify is the ledger. The platform numbers are for steering inside each platform, and the ratio is how you catch them drifting. Pull three numbers for the same date range: Shopify order subtotals after discounts and before refunds, Google Ads conversion value, Meta purchase value. Track the ratio of each platform to Shopify week over week. When the value definition is clean, those ratios hold steady. When someone edits a tag, swaps the total for the subtotal, or breaks the currency field, the ratio jumps, and that jump is your alarm.
If you haven’t pinned the definition yet, start there before touching bids or budgets. On one $40K-a-month inherited account, fixing the value signal along with the rest of the stack made reported ROAS fall once the inflated value came out, while contribution-margin ROAS rose. The dashboard number looked worse and the business number got better.
When to bring me in
Bring me in when Google Ads and Meta report more revenue than your store took, when the value column may be carrying cart value, or when refunds and discounts never make it back to the platforms. I’ll compare the value each platform reports against the order totals you pull from your store.
I'm Conner Crowe, and I write every audit myself. Send the free audit request and add me as a read-only user, and within 24 hours of access you'll have a written read on which numbers to trust and what to fix first. No call needed, and nothing in your account or store changes.
See it in Google Ads
Where to look in your account.
What Google is allowed to count
Goals, then Summary, then View all conversion actions
- Tracking status. Inactive or Needs attention means the tag hasn’t recorded anything lately, so check it before you trust the totals.
- Primary or Secondary. Only Primary actions feed Smart Bidding; Secondary ones are reported and ignored by the bidding.
- Count. One per click for leads, Every for purchases. A lead form set to Every counts a double-submit twice.
- Included in account-level goals. Yes is what the campaigns actually optimize toward.
From my own Google Ads account, October 2026. Tap or click the screen to see it full size.
Tools for this diagnosis
-
The Tracking Stack
Eight-layer conversion-tracking reference for Shopify brands.
-
Google Ads Setup Checklist
Free 25-page PDF checklist. No email required.
Related questions
-
What is a good return on ad spend for an ecommerce business?
Breakeven ROAS by margin, why category averages mislead, blended vs platform gaps, new-customer ROAS, and the Meta metrics that decide if paid spend pays.
-
What is Google Consent Mode and how does it work?
A plain explanation of Google Consent Mode v2: the consent signals, basic versus advanced mode, modeling, and the mistakes that break tracking.
-
What's the difference between Google Tag Manager and GA4?
Google Tag Manager is the delivery system for your tracking tags. GA4 is one report those tags feed. How they differ and how they work together.
-
How do I set up the Meta Conversions API the right way?
How to set up the Meta Conversions API so server events deduplicate with the pixel, match well, and stop double-counting in platform reporting.
Want your tracking checked?
Same check,
run on your tracking.
Add me as a read-only user and I'll write the audit myself: which of your numbers to trust and what to fix first, 5 to 7 pages, back within 24 hours of access. No call needed. If you'd rather talk first, a call is open too.