Attribution

Meta Ads Sales Dropped?
Check the Measurement First.

Five checks a marketing leader can run in an afternoon, in the order that finds the cause fastest. Four of them are about the data Meta is optimising on. The fifth is the platform, and you only get there if the first four are clean.

By Daria Dovzhikova · Updated September 2026

In September 2026 the Meta Ads forums filled with the same question in three phrasings: what is going on with Meta, is this the end of the Meta Ads era, why did sales drop. Hundreds of comments, most of them about creative, the auction, and whether to move budget. The practitioners who audit tracking setups for a living gave a different answer in the same threads: the platform is delivering the same signal it always did, and the signal is the problem.

One of them claims 80% of the Shopify Plus setups he audited this year double-count Meta conversions through a botched Conversions API implementation. Another traced a "Meta reports purchases my backend never received" case to a trailing space in the event_id, so the browser and the server sent two different strings for one order. Neither store looked broken. Pixel firing, CAPI firing, events arriving, Ads Manager showing conversions. The dashboard said 8x ROAS and the owner believed it until it did not.

I run the attribution read the same way every time, and it is the order below. It starts with one number that tells you which kind of problem you have, so you do not spend a quarter making new ads for a spreadsheet error.

The five checks, in order

Check 01

The reconciliation ratio

Attributed purchases in Ads Manager divided by actual orders in your store, same seven days, same attribution setting.

Near 1.0 and stable, measurement is probably fine and you can skip to check five. Well above 1.0, you are counting purchases more than once. Well below it and falling, Meta is losing signal. A ratio that moved this month, in either direction, is your answer before you open a single ad set.

Check 02

Deduplication between the pixel and the Conversions API

When the browser pixel and the server both send a purchase, Meta keeps one only if the event_name and event_id match on both. Events Manager shows the share deduplicated per event.

A dedup share that dropped is the most common cause of a ROAS that looked great for a month and then collapsed when someone fixed it, or the reverse. The failure is usually an id built differently on each side: a prefix on one, a trailing space on the other, an order number versus a checkout token. One character is enough.

Check 03

Event Match Quality

Events Manager scores each server event on how many customer parameters it carries: hashed email, phone, external id, browser id (fbp), click id (fbc), IP, user agent.

Meta grades six and above as good and below four as poor. A purchase event scoring low cannot be attributed to the click that caused it, so it shows up as a sales drop when it is a matching drop. If the score fell after a checkout, theme, or app change, that change is the cause.

Check 04

Consent and browser gaps

What share of your orders reach Meta at all. Consent banners with a high reject rate, iOS, and ad blockers remove the browser event; a server event without the click id (fbc) then arrives unattributable.

Compare orders with a Meta event against total orders, by device and by region. A gap that opened when a consent tool was installed or reconfigured is the whole story. The fix is a server-side event layer that carries the identifiers the browser could not.

Check 05

Only now, delivery

Frequency and creative age, learning-phase resets from edits, audience overlap, and whatever changed in the campaign structure that week.

If the four checks above are clean and the ratio did not move, the platform is delivering the same signal it always did and the drop is real. That is a creative and audience problem and it has its own playbook. Running that playbook on a measurement problem is how teams spend a quarter making new ads for a spreadsheet error.

Is a CAPI plugin enough? The decision rule

The second most common question in the same threads, and it has a rule, not an opinion. A plugin (the platform's native Conversions API integration, or a WordPress plugin on a single storefront) is enough when all three of these hold:

  1. One storefront, on a platform with a maintained integration, and nobody has customised the checkout.
  2. Every purchase begins in a browser session, so the pixel and the server always see the same order with the same identifiers.
  3. You can open Events Manager and see the deduplicated share of purchases sitting near where a healthy setup puts it, and the Event Match Quality score in the good band.

You need a server-side event layer (server-side Google Tag Manager or equivalent) when either of these is true:

  1. Purchases happen outside the browser: subscriptions renewing, phone orders, offline sales, a CRM stage that means revenue. The browser never saw them, so a plugin never will.
  2. You send conversions to more than one destination (Google Enhanced Conversions, TikTok, GA4, Klaviyo) and want consent, identifiers, and deduplication handled once, in one place, instead of once per plugin with five different ideas of what a purchase is.

Condition three is the one people skip. A plugin that is installed is not a plugin that is working, and the only way to know is to read the number it produces.

What the fix looks like

Server-side events with the identifiers the browser loses, deduplication with one id format on both sides, consent handled at the event layer, and one reporting view that finance will accept because it reconciles to orders. Then the same ratio, read again, so the fix is measured in the unit the leak was denominated in: match rate and attributed revenue. In the Growth Pilot that is the week-one baseline, so the two experiment cards run against numbers that reconcile to orders.

FAQ

Why did my Meta Ads sales drop in September 2026?

Before assuming the platform changed, check whether your measurement did. Divide attributed purchases in Ads Manager by actual store orders for the same seven days. If that ratio moved, the drop is in the data: deduplication between pixel and Conversions API, Event Match Quality, or consent and browser gaps. If the ratio held, the drop is in delivery and the creative and audience playbook applies. Most of the threads I read this month were measurement problems answered with creative advice.

Is the Conversions API double counting my purchases?

It is if the browser pixel and the server event carry different event_id values for the same purchase. Meta deduplicates only when event_name and event_id match on both; a different id format, a prefix on one side, or a trailing space is enough to count one order twice. Events Manager shows the deduplicated share per event; anything well below what your setup should produce means the ids do not match.

What Event Match Quality score is good?

Meta grades six and above as good and below four as poor. Purchase events should carry hashed email, phone, external id, the browser id (fbp) and click id (fbc), IP address, and user agent. Missing the click id is the usual reason a server-sent purchase cannot be tied back to the ad that caused it.

Is a Meta CAPI plugin enough, or do I need server-side Google Tag Manager?

A plugin is enough when three things are true: one storefront on a platform with a maintained integration, every purchase originates in a browser session, and you can see the dedup share in Events Manager sitting near where it should. You need a server-side event layer when purchases happen outside the browser (subscriptions, phone, offline, a CRM stage), or when you send to more than one destination (Google Enhanced Conversions, TikTok, GA4) and want consent and deduplication handled once rather than per plugin.

How do I reconcile Meta Ads with Shopify or GA4?

Pick one seven-day window and one attribution setting (Meta defaults to seven-day click, one-day view). Pull attributed purchases from Ads Manager, total orders from the store, and Meta-attributed conversions from GA4. The three will not agree and are not supposed to; GA4 is last-click and Meta is not. What you want is the ratio between each pair and whether it moved. A stable ratio is a working measurement stack; a moving one is the leak.

Want the ratio read for you?

Week one of a pilot is the read. The next three weeks run on it.

The Growth Pilot opens with a baseline of the current funnel, this ratio included, and two experiment cards. $5,000 fixed, four weeks, a written decision every Friday. If the ratio is fine, the baseline says so and the cards go elsewhere.

How a pilot runs

Ready when you are.

Discovery calls are 30 minutes. First one's on me.

Book a 30-minute call