Facebook Ads conversions don't match Shopify because the two platforms answer different questions. Meta counts every sale its ads plausibly influenced — including view-through and modeled conversions credited on the click date. Shopify counts only completed orders, on the order date, credited to the last click. A gap of roughly a fifth to a third on Meta's default window is normal and cannot be "fixed," only understood. Your Shopify order count is the source of truth for how many sales happened; Meta's number tells you how many of those its ads may have touched.

You open Ads Manager, see Meta claiming a pile of purchases, then open Shopify and count fewer orders. Nothing is broken. You are looking at two measurement systems that were never designed to agree, and this article walks through exactly why — with real numbers and a worked example so you can tell a healthy gap from an actual tracking break.

If you want the wider picture across every tool, the ecommerce data reconciliation hub maps how Shopify, Meta, Google Ads, and GA4 all diverge on the same store.

The two families of mismatch

Every reason your numbers disagree falls into one of two buckets. Knowing which bucket a gap belongs to tells you whether to relax or investigate.

Methodology gaps are structural. Both systems see reality accurately but measure it differently, so no amount of setup work closes them. Tracking gaps are real data loss — blocked pixels, closed tabs, consent declines — and better plumbing genuinely narrows these.

Most of the gap between Meta and Shopify is methodology, not lost data. That is the part most blog posts skip.

Methodology gaps you can't close

View-through conversions

This is Meta's single biggest inflator. On the default window, Meta claims a purchase made within one day of someone seeing an ad, even if they never clicked it. Shopify has no concept of a view — it only records a checkout, and it files that buyer under whatever they actually clicked last.

The current default attribution setting is seven-day click plus one-day view, per Foreplay's 2025 attribution guide and Jon Loomer. That one-day-view half is where most of the "Meta says more than Shopify" gap comes from.

Different attribution models

Shopify's default is last non-direct click: one hundred percent of the credit goes to the last channel the customer clicked. Meta credits itself whenever a sale falls inside its window after a click or a view. GA4 splits the same sale fractionally across touchpoints. One real order can show as a full conversion in Shopify, a full conversion in Meta, and a fraction of one in GA4 — all internally correct.

Because Meta and Shopify use different attribution logic, their per-channel rows will never line up. That same mismatch shows up on ad revenue that doesn't match Shopify, on order counts that don't match, and on the ROAS you calculate from them.

Click-date versus order-date reporting

Meta reports a conversion on the date of the ad click that earned the credit, not the date of the purchase. A click on Monday that converts Thursday shows up in Meta on Monday. Shopify records the order on Thursday.

This alone desynchronizes any single-day comparison, even when the weekly totals eventually agree. Always compare on trailing seven- to fourteen-day windows, never one calendar day.

Modeled conversions

When Meta cannot directly observe a sale — a blocked pixel, an iOS opt-out, a consent decline — it estimates one with a model and reports the estimate alongside counted conversions. Shopify never models. It reports only real, completed orders. Modeled conversions are why Meta's number can exceed Shopify's even after your tracking is flawless.

Tracking gaps you can narrow

Lost and blocked events

Browser ad blockers and Safari or Firefox tracking prevention stop client-side pixels from firing, so Meta undercounts while Shopify still records the sale server-side. Field estimates put affected traffic at roughly ten to twenty-five percent of users, according to Audiense and Elevar.

Add buyers who close the tab before the thank-you page loads, and purchase events end up with the largest client-side gap of any event you track.

Duplicate events — the one that inflates

If both the browser Pixel and server-side CAPI send a Purchase for the same order without a shared deduplication key, Meta counts it twice. A store showing Meta purchases at about double its Shopify orders almost always has a dedup misconfiguration, not real inflation.

Meta collapses the two copies only when they share an event_id and event_name, and only if the second copy arrives within forty-eight hours of the first, per Meta's developer docs. A conversion count that jumped right after you added CAPI is a broken dedup key, not a win — correct redundant setup keeps the count stable while recovering blocked events.

What size gap is normal?

Here is the number most articles refuse to give you. On Meta's default seven-day-click, one-day-view window, a purchase gap of roughly twenty to thirty-five percent above Shopify orders is normal, according to Vaizle and TrackBee. The excess is mostly view-through plus modeled conversions.

Want to sanity-check it? Switching a campaign from seven-day-click plus one-day-view down to one-day-click can cut reported conversions by around forty percent for the same real sales, also per TrackBee — narrower credit window, identical orders. If your gap sits far above the normal band and your dedup is clean, that is when you go looking for a real break.

A worked example

Say you run a print-on-demand mug store and drive Meta ads for one week. In reality, one hundred orders come in. Each order is forty dollars of product, five dollars shipping, four dollars tax — forty-nine dollars total. Of those hundred buyers: fifty-five clicked a Meta ad within seven days, fifteen only saw one within a day, ten came last from Google, twenty from organic or direct. Eight later request refunds.

What Meta reports. Fifty-five click-through plus fifteen view-through equals seventy attributed by window. Add roughly eight modeled conversions for buyers it couldn't observe, and Meta shows about seventy-eight purchases. It does not subtract the eight refunds, and its pixel passes subtotal only, so revenue reads near 78 × $40 = $3,120.

What Shopify reports. One hundred orders, last-click. Only the fifty-five clickers land under "Facebook" — the fifteen view-through buyers clicked nothing, so Shopify files them under their real last referrer. After eight refunds at forty-nine dollars, total sales fall from 100 × $49 = $4,900 to about $4,508.

So for one week of one hundred real orders, Meta says seventy-eight and Shopify says one hundred. Neither is lying. Meta answers "how many sales did my ads influence?" and Shopify answers "how many sales happened?"

And the bank deposit is a third number. Shopify Payments deducts fees, refunds, and disputes before it pays you. US online processing runs about 2.9% plus 30¢ per transaction on the Basic plan, with a chargeback fee near fifteen dollars, according to Webgility (rates vary by plan and change — verify at Shopify's pricing page). Working that through:

Payout line Amount
Captured charges (100 × $49) $4,900.00
Processing fees (2.9% + $0.30 × 100) −$172.10
Refunds issued (8 × $49) −$392.00
One chargeback fee −$15.00
Net deposited $4,320.90

Four numbers, one week, all correct: Meta's seventy-eight purchases, Shopify's one hundred orders, about $4,508 in total sales, and $4,320.90 in the bank.

How to actually reconcile

You will not make these numbers equal, so stop trying. Do this instead.

Treat Shopify's order count and total sales as truth for what happened. Treat Meta's number as truth for what its ads influenced. Compare them on trailing windows, never single days. Confirm your Pixel and CAPI share one event_id so you aren't double-counting. Then track your gap as a stable ratio over time — a sudden move in that ratio is your real alarm, not the gap itself.

The deeper fix is to stop comparing platform-reported credit at all and move to store-side, order-level attribution. A multi-touch attribution approach ties each real order to the touchpoints that earned it, instead of trusting each platform's self-credit.

Why this matters for profit

None of this is academic. You divide these mismatched numbers to get ROAS, and a wrong denominator means you scale the wrong campaign. Meta's inflated purchase count makes a losing ad look like a winner, and the refunds it never subtracts hide your real margin.

This is the problem PodVector is built for. It connects your Shopify, Meta Ads, Google Ads, Printify, Printful, and Stripe accounts and computes true per-order profit — product cost, fees, shipping, ad spend, and refunds netted against each real order, not against a platform's self-reported conversions. Victor, its AI operator, reads that live data and proposes moves; with your approval he executes Shopify-side actions. Victor does not touch your ad account, and he is not a dashboard — he analyzes your true numbers and acts on them. Connect your stores and see per-order profit.

FAQs

Why does Facebook show more purchases than Shopify shows orders?

Mostly view-through and modeled conversions. Meta credits sales made within a day of merely seeing an ad, and it estimates conversions it can't directly observe. Shopify records only completed orders, credited to the last click. A gap of roughly twenty to thirty-five percent on the default window is normal, per Vaizle.

Will setting up CAPI make my numbers match?

No. CAPI recovers lost events — blocked pixels, closed tabs — which narrows tracking gaps. It does nothing about methodology gaps like view-through, modeling, or last-click versus window credit. Even with perfect tracking, a structural gap of about a fifth or more remains.

Meta purchases are almost exactly double my Shopify orders. What's wrong?

That is the signature of broken deduplication. Your Pixel and CAPI are both sending the same Purchase without a shared key, so Meta counts each order twice. Give both copies an identical event_id and event_name within Meta's forty-eight-hour dedup window, as its docs specify.

Why do refunds only lower my Shopify numbers?

Shopify reduces net and total sales when you refund, and your payout drops too. Meta and GA4 generally keep the original conversion, so their totals stay inflated after refunds. This is one more reason platform numbers overstate what actually landed in your account.

Which number should I trust for decisions?

For how many sales happened and how much revenue you made, trust Shopify's order count and total sales. For how many sales your ads plausibly influenced, read Meta's number as directional, not exact. For cash, reconcile your payout against balance transactions. For deciding which ad to scale, use true per-order profit rather than any single platform's ROAS.