Add up the revenue that Meta, Google and Klaviyo report for last month. For most brands the total is bigger than what Shopify actually processed. Nobody’s lying exactly. Each platform counts every order it touched, inside its own window, and none of them checks with the others.
The fix isn’t a better attribution tool. It’s a monthly reconciliation against the one system with nothing to gain: Shopify, and behind it the bank account. Platform revenue tells you how a platform grades its own work. The decision number is how many new customers Shopify recorded and what you paid for each of them. ROAS is a receipt. New-customer CAC is the bill.
Key Takeaways
- One order can be claimed by Meta (7-day click or 1-day view), Klaviyo (5-day open or click) and Google at the same time. Summed platform revenue routinely exceeds real revenue.
- Reported conversions below real orders is normal: privacy settings and missing tags lose some. Reported conversions above real orders means something is broken, usually pixel and server events without a shared
event_id.- Subscription renewals inflate email and ad numbers. Renewals fire as normal orders, so any email opened in the window can claim one.
- Use Shopify’s attribution report as the floor and platform numbers as the ceiling. Set budgets on the floor.
- Judge acquisition on blended new-customer CAC: total marketing spend divided by first-time customers in Shopify.
Why does every platform claim the same sale?
Because each platform uses its own attribution window and counts any order that falls inside it. There’s no shared ledger. If three platforms touched one customer, all three can report the same order as theirs.
Here’s an ordinary path to purchase:
- Monday: a customer clicks a Meta ad, browses and leaves.
- Wednesday: they open your welcome email but don’t click.
- Friday: they search your brand name, click a Google brand ad and buy an $80 order.
Meta counts the order because it falls within 7 days of a click. Klaviyo counts it because it falls within 5 days of an open. Google counts it because it got the last click. Three dashboards now show $240 of revenue for one $80 order, and Shopify gives the whole order to Google.
| Platform | Default credit rule | Who’s grading |
|---|---|---|
| Meta Ads | 7-day click and 1-day view (Jon Loomer, Meta attribution setting guide, updated March 2025) | Meta |
| Klaviyo | Opened or clicked email within 5 days (Klaviyo, attribution model updates, August 2024) | Klaviyo |
| Google Ads | Its own click-based conversion tracking | |
| Shopify | Last non-direct click: one channel per order, 100% of the credit (Shopify, Measure multichannel marketing, February 2023) | Nobody with a budget at stake |
Founders feel this before they can name it. A beverage brand doing roughly $8M a year told us its Meta, Google, Klaviyo and Shopify numbers never agree. The founder’s diagnosis: “everyone’s trying to take credit.” They tried a BI tool, then went back to spreadsheets. A growth lead at an emerging DTC brand put it more flatly: summed ad-platform revenue never matches Shopify.
The overlap isn’t random. A frozen-food brand we work with described Meta and Google as a “sweet couple.” Nobody wakes up wanting frozen dumplings, so Meta plants the idea. Days later the customer searches the brand name and a Google brand ad takes the conversion. Both platforms report a win, and only one order shipped.
Where does inflated platform revenue come from?
From four leaks. Overlapping windows are the obvious one. The other three are setup problems you can find and fix in an afternoon.
1. Duplicate pixel and server events
Meta receives purchases from two places: the browser pixel and the server-side Conversions API (CAPI). If both send the same purchase without a shared ID, Meta counts it twice. Meta only merges the two when the pixel’s eventID matches the server’s event_id and the event names match. Both events also have to arrive within 48 hours of each other (Meta for Developers, Handling Duplicate Pixel and Conversions API Events).
We found exactly this at a dog subscription box this week. Meta showed 142 purchase events against roughly 122–128 real orders for the same period. The pixel and CAPI events carried no event_id, so Meta couldn’t tell they were the same purchase. The same audit found no AddToCart event at all, so Meta was optimizing with half a funnel.
Use this rule of thumb. Fewer reported conversions than real orders is normal. Consent banners, ad blockers and Safari’s link stripping lose some events. More reported conversions than real orders means the setup is broken. No privacy setting creates purchases.
2. Subscription renewals counted as fresh conversions
For a subscription brand, renewals are the biggest leak. A renewal processed by Recharge lands in Shopify as a normal order, and Klaviyo’s standard Placed Order metric counts it like any other. In Klaviyo’s community forum, a staff member confirmed that renewal revenue “is still attributed under the Shopify Placed Order revenue.” The suggested workaround was a custom non-recurring order event (Klaviyo Community, April 2022 thread, staff reply July 2023).
Now combine that with a 5-day open window. A subscriber opens your newsletter on Tuesday, their renewal charges on Thursday, and the newsletter gets the credit. The more of your revenue is recurring, the worse this gets. A hardware brand we spoke to with a filter subscription gets 80–85% of its revenue from recurring orders. At that mix, almost any email can claim a renewal.
3. Retargeting that pays for buyers you already had
Retargeting looks efficient because it reaches people who were close to buying anyway. At a subscription brand doing about $1M a year, we compared a week of spend. Retargeting spent about $2,300 at a $39 cost per purchase. Prospecting spent over $3,000 at about $27.61 per purchase. New customers were cheaper than retargeted ones.
Small accounts feel this most. In our experience, Advantage+ prospecting already reaches many recent site visitors. A separate retargeting budget often pays Meta to convert people who’d have bought from your next email. The fix isn’t always to kill retargeting. It’s to judge it on new customers, not attributed purchases.
4. Tools that grade their own homework
Every app with a revenue tile has a reason to make that tile big. A vinyl subscription club found its upsell app counted shipping protection as its number-one “upsell.” A specialty coffee roaster told us they treat any tool’s attribution as the maximum and their own conservative report as the minimum. The truth sits somewhere between, and the budget should sit on the minimum.
Why is Shopify the reference, and where is it weak?
Shopify’s attribution report is the most honest number you have, because it counts each order once and gives it to one channel. It has no ad budget to protect. Its default model is last non-direct click, and you can switch to first click, last click, linear or any click in the report (Shopify, February 2023).
It isn’t perfect. Shopify only sees what’s tagged. A supplement brand we audited found about 80% of its orders carried no UTM parameters at all, partly from Safari stripping them and partly from inconsistent campaign naming. Those orders land in “direct,” which under-credits every channel. Shopify also can’t see view-through influence.
So treat the two numbers as bounds:
| Number | What it is | Use it for |
|---|---|---|
| Platform-reported revenue | The ceiling: every order the platform touched, in its own window | Comparing ads and campaigns inside one platform |
| Shopify attributed revenue | The floor: each order once, one channel, tagged clicks only | Budget allocation between channels |
| Bank deposits and new customers in Shopify | The fact | Deciding whether acquisition is paying for itself |
As a sense check, one functional-drink brand selling on DTC, Amazon and retail told us they wish they could take a flat haircut off Meta’s numbers, around 10%. That’s the right instinct with the wrong method. Measure your own gap every month instead of guessing it.
What is blended new-customer CAC, and why does it settle the argument?
Blended new-customer CAC is total marketing spend divided by the number of first-time customers Shopify recorded in the same period. It ignores which platform claims which order. It only asks what you paid, in total, for each new customer who actually showed up.
It’s related to MER (revenue divided by marketing spend) and blended ROAS. The difference is that it strips out returning customers and renewals, which are the two things platforms most like to claim.
Why insist on new customers only? Because returning customers are where platform math hides. A supplement brand we worked with found its existing customers had been taking about 20% of the Meta budget until the agency excluded them. Their new-customer ROAS was 1.5, then slid to 1.2. Average order value was $112, with roughly $50 in landed product and shipping cost. Blended CAC ran $64–68.
Do the contribution margin math. $112 minus $50 leaves about $62 before ad spend, and each customer cost $64–68. The first order lost money, so the business needed repeat purchases just to break even. Platform ROAS hadn’t shown that. New-customer CAC against first-order margin did. Client results are specific outcomes, not typical or guaranteed.
The brands we see managing this well have made blended new-customer CAC the headline number:
- A functional-drink brand calls blended CAC its north star, and reviews a 36-month LTV:CAC at every month-end close.
- A men’s grooming founder wants marketing efficiency calculated from the accounting system, where all marketing costs live: ads, software, consultants.
- At the dog subscription box, we judge weekly performance on blended CAC rather than paid CAC alone, and plan paid spend around the email calendar.
| Question | Platform math | Bank math |
|---|---|---|
| Did the campaign work? | Attributed ROAS in Ads Manager | Did new customers in Shopify rise while spend held? |
| What does a customer cost? | Cost per purchase, including returning buyers | Total spend ÷ first-time customers |
| Did email make money? | Klaviyo attributed revenue, renewals included | Non-renewal revenue from clicked emails |
| Can we scale? | ROAS above target | New-customer CAC below first-order margin, or inside your payback period |
The monthly reconciliation checklist
Run this once a month, on the same date range in every tool. It takes about two hours the first time and under an hour after that.
- Compare Meta purchases to Shopify orders. Pull Meta’s purchase count and Shopify’s order count for the same 30 days. If Meta’s number is higher, stop and fix deduplication before you read any ROAS.
- Check every purchase event has an
event_id. In Events Manager, confirm pixel and server events share an ID, ideally the order number. Confirm AddToCart and InitiateCheckout fire too. - Split renewals out of Klaviyo revenue. Create a conversion metric that excludes recurring subscription orders, using a custom non-recurring event if you need one. Report email revenue with and without renewals.
- Pull Shopify’s attribution report. Use last non-direct click. Write down revenue credited to Meta, Google, email and direct.
- Calculate each platform’s claim ratio. Divide platform-reported revenue by Shopify-credited revenue for that channel. Track the ratio monthly. A sudden jump means a setup change, not a performance change.
- Sum all platform claims and divide by total Shopify revenue. Anything above 1.0 is double counting. Show this number to whoever approves budgets.
- Calculate blended new-customer CAC. Total marketing spend, including agency fees and tools if you can, divided by first-time customers in Shopify.
- Add a third witness. Give each creative angle its own discount code, or run a post-purchase “how did you hear about us?” survey. When Meta purchases and code redemptions diverge, the code is closer to the truth.
Two tests are worth running once a quarter. The frozen-food brand had an accidental one: when Meta stopped delivering, the founder turned all ads off and saw the organic baseline. Do that on purpose with a geo or time-boxed holdout. Second, test Google brand search by changing its budget week over week and watching total new customers, not Google’s conversions.
What does platform math still get right?
Platform numbers are fine for steering inside the platform. Comparing two ads in the same Meta campaign is a fair fight, because both are measured the same way. In-platform ROAS works as a tiebreaker there. Platform numbers break when you use them to split budget between platforms, or to decide whether acquisition is profitable at all.
There’s also a gap running the other way. Shopify’s default CAPI setup sends Meta nothing about recurring charges or customer value. A subscriber who stays a year looks the same to Meta as one who cancels after the first box. We’ve started sending recurring-order and subscription events to Meta at subscription clients. That doesn’t lower CAC by itself. It gives Meta a better picture of which customers are worth acquiring, which should improve LTV:CAC.
If you’re setting this quarter’s budget, our post on why cutting Q1 ad spend usually backfires covers when to push. This checklist tells you whether the push is working.
What to do this week
- Pull last month’s numbers from every platform. Write down Meta, Google and Klaviyo attributed revenue next to Shopify’s total. Sum the three and compare.
- Count Meta purchases vs Shopify orders for the same days. If Meta is higher, open Events Manager and check
event_idon purchase events. - Ask your developer or agency one question: do our pixel and server purchase events share the order number as
event_id? Get a yes or a fix date. - Tag renewals. Make sure subscription renewal orders are identifiable in Shopify, so you can exclude them from email and ad credit.
- Calculate blended new-customer CAC for the last three months. Put it in your weekly report above ROAS.
- Set one rule: no budget increase unless new-customer CAC is below first-order contribution margin, or inside your agreed payback window.
Frequently Asked Questions
Do I need an attribution tool to fix this?
Not to start. Most of the over-count comes from deduplication, renewals and overlapping windows, and you can find all three with Shopify, Events Manager and Klaviyo. A multi-touch tool adds another model. It doesn’t add a source of truth.
Why trust Shopify if it misses untagged orders?
Because its errors run in one direction. Missing tags push orders into “direct,” so Shopify under-credits channels. Platform errors mostly run the other way. Budgeting on a known floor is safer than budgeting on an unknown ceiling.
Is it a problem if Meta reports fewer purchases than Shopify?
Usually not. Privacy settings, consent and blocked cookies mean some purchases never reach Meta. Fewer is expected. More is the warning sign.
Count the customers, not the claims
Every platform will keep claiming the same sale, because that’s what its reporting is built to do. You don’t need them to agree. You need one number they can’t inflate: new customers in Shopify, and what you paid in total to get them. ROAS is a receipt. The bank statement is the business.
