Meta Ads vs Shopify Orders: Why Your Numbers Don't Match

    Superworker Team

    The Situation

    A sparkling water brand was running Meta ads on Shopify. They spent $3,600 in one month across 5 campaigns. Meta's dashboard said they got 80 purchases. Their actual Shopify orders told a different story: 42.

    Meta was reporting nearly double the real sales.

    This is not unusual. It's the single most common issue we see when Shopify merchants start looking at Meta Ads attribution seriously. The platform you use to buy the ads is not the platform that confirms the money came in. When they disagree, one of them is wrong, and it's almost never Shopify.

    Why Meta Ads and Shopify Disagree on Purchases

    There are two things going on here, and both of them matter if you run Meta ads for a Shopify store.

    1. View-through attribution

    Meta's default attribution window is "7-day click, 1-day view." That last part is the problem.

    View-through attribution means: someone scrolled past your Reel, didn't click, went to Google two days later, searched for sparkling water, and bought. Meta still counts that as their conversion.

    If you've ever wondered why your Meta Ads Manager looks great while your Shopify revenue is flat, this is usually why. Meta is claiming credit for purchases that would have happened anyway, or that came from a different channel entirely.

    2. Duplicate pixel events

    Some of the brand's campaigns had a duplicate Meta pixel firing on the checkout page. That meant some purchases were literally being counted twice. This happens more than you'd think, especially on Shopify stores that have installed the Meta app AND added a manual pixel script AND installed a third-party tracking app. Each one fires. Meta counts each one.

    The result: Meta's dashboard looks great. The business isn't profitable.

    The real numbers

    Meta was telling the brand their cost per purchase was $45. The real CPP, confirmed by actual Shopify orders with paid social UTMs, was $85.

    Even if those ads influenced the purchase later down the line, the gap between what Meta reported and what Shopify confirmed is something you need to know. You can't make good budget decisions on a number that's nearly double the real one. The data is there for you, you just have to look at it.

    Worse, they were about to ask for more budget based on the Meta numbers.

    This is the scenario that quietly kills Shopify DTC brands. You scale what Meta says is working. Cash flow tightens. You can't figure out why. The number you're optimizing against is inflated, and you're pouring more money into the campaigns that look best on the dashboard but are actually the worst performers.

    What Superworker did

    Since Shopify was already connected to Superworker, all the order data was right there to query. The only thing that needed uploading was the Meta Ads export, one file.

    Prompt 1: Cross-reference Meta vs Shopify

    The first prompt was simple: cross-reference Meta's reported purchases against actual Shopify orders with paid social UTMs, campaign by campaign.

    Superworker parsed the UTMs out of the Shopify landing site URLs, matched them to the Meta campaigns, and built the comparison table in seconds.

    That table showed exactly which campaigns were lying and by how much:

    • The two Reels prospecting campaigns were 58-64% phantom purchases.
    • The two static prospecting campaigns weren't much better.
    • The retargeting campaign was only 7% off, and it was the only one actually making money at $46 real CPP.

    Four of the five campaigns were burning cash. The dashboard hid it. The UTMs didn't lie.

    Prompt 2: Reallocate the budget

    Second prompt: given a $60 target CPP, where should the budget go?

    Superworker ran the reallocation math: cut the four losing campaigns, move all $3,600 into retargeting, project the outcome with diminishing returns factored in so we didn't just assume linear scaling.

    Result: same $3,600 budget, 65 purchases instead of 42, CPP drops to $55.

    Two prompts. Thirty minutes of work. A campaign that was losing money became one that hit target.

    Why this matters for Shopify Agencies

    If you run Meta ads for Shopify clients, this pattern is going to sound familiar. You report Meta's numbers in the weekly. The client is happy. Three months in, they notice revenue hasn't moved and start asking questions.

    The Meta-Shopify attribution gap is the gap everyone knows about but nobody has a clean process for. Pulling the Meta export, pulling the Shopify UTM orders, matching them campaign by campaign, and building the reallocation math is a multi-hour job in a spreadsheet. Most agencies just don't do it, so they're reporting inflated numbers by default.

    Doing it in two prompts means you can actually run this check every week per client. You catch the phantom purchases before the client does. You reallocate budget to the campaigns that are actually making money. Your numbers match their Shopify dashboard, which is the only number that matters to them.

    How to Check Your Own Meta Ads Attribution

    If you're not using Superworker, here's the manual version. It's painful but it works.

    1. Export your Meta Ads campaign report for the period you want to check, with purchases and spend by campaign.

    2. In Shopify, filter orders to the same date range. Export with UTM fields included.

    3. Clean the Shopify export. This is where it gets tedious. UTM data in Shopify lives inside landing site URLs, not in clean separate columns. You'll need to parse out utm_source, utm_medium, and utm_campaign from each URL string. Some rows will have malformed URLs, missing parameters, or duplicated query strings. You'll spend real time here just getting the data into a usable state.

    4. In the cleaned export, filter to orders where utm_source is facebook, meta, ig, or instagram.

    5. Group those orders by utm_campaign and count them.

    6. Line up the Meta campaign names with the Shopify utm_campaign values. They will not match perfectly. You will spend time fixing this.

    7. Compare Meta's reported purchases per campaign against the UTM-matched Shopify orders.

    8. Anything over 20% gap is a campaign you're overpaying for.

    The parts that break this manually: UTM naming conventions drift over time, some orders come in without UTMs, view-through purchases don't have a UTM trail at all (that's the whole point of the gap), and the Shopify data cleaning alone can eat an hour before you even start the analysis.

    Superworker handles all of this for you. The parsing, the cleaning, the matching, the math. That's the whole point.


    FAQ: Meta Ads vs Shopify Attribution

    Q: Why does Meta Ads Manager show more purchases than Shopify? The most common reasons are view-through attribution (Meta claims credit for purchases where the user saw but didn't click the ad), duplicate pixel events firing twice on checkout, and last-touch attribution differences. Meta counts a purchase if any ad was seen in the attribution window. Shopify only counts the actual order. These will never match perfectly, but a gap over 20% usually means something is wrong.

    Q: What is view-through attribution in Meta Ads? View-through attribution credits a conversion to Meta if the user saw the ad but didn't click it, and then purchased within the attribution window (default 1 day). It's the biggest source of inflated reporting for Shopify stores, especially on prospecting campaigns where users scroll past a Reel and buy from a different channel later.

    Q: How do I tell which Meta Ads campaigns are actually profitable on Shopify? Match Meta's reported purchases against Shopify orders with paid social UTMs, campaign by campaign. The campaigns with the smallest gap between reported and actual purchases are usually your retargeting campaigns. The ones with the biggest gaps are usually top-of-funnel prospecting, where view-through attribution inflates the numbers most.

    Q: How often should Shopify merchants audit Meta Ads attribution? Monthly at minimum for stores spending under $10k/month on Meta. Weekly for anything above that. Agencies running Meta ads for Shopify clients should build it into the standard weekly reporting process because the gap compounds when nobody is checking.

    The point

    The data was always there. Shopify had the orders. Meta had the campaign breakdown. Nobody had connected them. The brand was making budget decisions based on a number that was almost 2x inflated.

    Two prompts fixed that.

    If you're a Shopify merchant running Meta ads and you've never run this check, your CPP is probably wrong. If you're a Shopify agency, your clients' CPP is probably wrong too. That's not a Meta problem or a Shopify problem. It's a gap nobody was closing.

    Now it closes with Superworker.

    Ready to supercharge your spreadsheets?

    Try Superworker for free. No credit card required.