Is it really more? Check the comparison first
Before you change any tracking, make sure the two numbers are measuring the same thing. Many 'Meta over-reports' gaps disappear here.
- Look at the purchase count, not the conversion value. Value differences have their own causes, such as shipping, tax and discounts.
- Compare a full week, not one day. Your ad account and your store can each have their own time zone, which moves late-evening orders to another day.
- Add up all campaigns, but use one attribution setting for all of them. Mixing settings across ad sets makes the total meaningless.
- Leave out today. Purchases keep arriving and being attributed for a while after the day ends.
Reason 1: the attribution window counts views as well as clicks
Ads Manager doesn't ask 'which orders came from Meta?'. It asks 'which purchases happened within a set time after someone clicked or saw one of our ads?'. Meta's Insights API documentation lists 7-day click and 1-day view as the default windows for reading results (checked November 2026).
The view part is where most extra purchases come from. Someone scrolls past your ad, doesn't click, later searches your brand on Google and buys. Shopify gives that order to Google or Direct. Meta also counts it, because the purchase happened within a day of the ad being shown. Google, TikTok and your email tool may claim the same order too. Every platform counts its own share, and the shares overlap.
To see how much of the gap this is, use the Compare attribution settings option in Ads Manager's columns and look at click-only results next to your current setting. If click-only purchases are close to your Shopify orders from Meta, the gap is attribution, not a tracking error.
Reason 2: Ads Manager reports purchases on the impression date
Meta can report a conversion on the day of the ad, not the day of the purchase. Its API documentation gives the example of an ad seen on January 1 and a purchase on January 2: reported by impression time, the purchase shows on January 1. Shopify always reports the order on the day it was placed.
Over a single day or a short date range this moves purchases in or out of the period you're looking at. It often explains why yesterday looks inflated in Ads Manager while the full month lines up much better.
Reason 3: the same purchase is sent twice
This is the one that's a real problem, because Meta's algorithm learns from inflated numbers. It happens when two sources report the same sale and Meta can't tell they're the same.
Meta's Conversions API documentation says a browser event and a server event are only treated as one when they have the same event name and the same event id. If your pixel sends one id and a server integration sends another, or none, Meta can count both.
- Shopify's Facebook & Instagram app plus a second tracking app or a custom pixel sending purchases to the same pixel id.
- An old snippet in a theme file or a leftover tag manager tag that still fires a Purchase event.
- A server integration that doesn't send the event id the browser pixel used.
- A thank-you page that fires Purchase again when the buyer reloads it or opens it later from the order email, without a fixed event id.
Reason 4: refunds, cancellations and test orders
A purchase that was sent to Meta stays in Ads Manager after you refund or cancel the order in Shopify. Shopify's reports take the refund off. On stores with many returns, Meta will run higher for that reason alone.
Test orders can do the same: if a test order went through a page with a live pixel, the purchase may have reached Meta while Shopify leaves it out of your sales.
How to find double counting in 15 minutes
- Install the Meta Pixel Helper browser extension, place a test order and check how many Purchase events fire on the thank-you page. More than one is a red flag.
- In Events Manager, open your pixel, then the Purchase event, and look at the browser and server rows. You want both, with deduplication working, not two browser sources.
- Reload the thank-you page. If a new Purchase fires each time, that's a source of extra purchases.
- List every app and snippet that knows your pixel id: the Facebook & Instagram app, tracking apps, custom pixels in Customer events, theme code and tag manager. Keep one source per event.
What Settl changes, and what it doesn't
Settl sends each purchase from the browser pixel and from the server with one shared event id, so Meta counts it once. It only sends paid orders, and its hourly check sends purchases the webhook missed in the last 7 days, matching how far back Meta accepts events. An e-mail alert tells you when sending to a platform breaks.
It won't make Ads Manager equal Shopify. View-through credit, the impression-date reporting and other channels claiming the same sale are how Meta measures, not tracking errors. Settl also doesn't send refunds or cancellations to Meta. And if another app keeps sending purchases to the same pixel, you'll still need to switch that one off.