Your Meta dashboard says the ads are crushing it. Your P&L says you are flat. Both numbers are telling the truth. That gap is where the money quietly leaks.

Last quarter we took over paid media for a multi-unit fast-casual brand whose reported return on ad spend looked great. Roughly twice as good as the sales line could explain. The operator was not lying and neither was the platform. The account was counting a large share of purchases twice, and it had been doing it for months.

Here is what was actually happening, in plain terms.

One sale, two purchase events

When someone places an order, a purchase should be recorded exactly once. At this brand it was being recorded twice. The website vendor who built the checkout had hard-coded a Meta purchase event directly into the order-confirmation page. The brand's tag manager was also firing a purchase event from the same checkout. So every order generated two signals to Meta instead of one.

Two signals is fine if Meta can tell they are the same sale. It cannot do that unless both signals carry the same ID. They did not. The vendor's event tagged each purchase with the URL slug from the confirmation page. The tag-manager event tagged it with the real transaction ID. Different IDs, so Meta treated them as two separate purchases.

The result: reported purchases, and therefore reported ROAS, inflated by roughly two times. For an unknown stretch, likely months, the brand had been making budget decisions, scaling calls, and creative bets on numbers that were double what reality supported.

This is the kind of leak that never shows up as an error. No alert fired. Nothing turned red. The dashboard just looked better than the business actually was.

The second leak hiding underneath

While we were in there, we found the opposite problem on the server side. The brand's purchase tracking was sending effectively no customer data. Across roughly 7,000 purchase signals, an email address came through 4 times. Meta scores how well it can match a conversion to a real person on a 10-point scale. This account sat at 4.5, capped, because the match fields were arriving empty.

Why it matters in dollars: when those customer fields are populated correctly, Meta can attribute roughly 25 percent more conversions to your ads. So at the same time the account was over-counting sales through a double-fire, it was under-counting the conversions it could legitimately claim through better matching. One leak inflated the vanity number. The other suppressed the real one. Both were invisible on the surface.

Why agencies miss this

Not because they are careless. Because the layer where this breaks is below where most marketing teams look. A media buyer optimizes toward the ROAS the platform reports. If the platform reports a number, the buyer trusts it and scales toward it. Almost nobody opens the order-confirmation page source, compares event IDs, or pulls the raw match-quality score. So a brand can run for two or three quarters managing to a number that no one ever reconciled against the bank.

The fix is not expensive. Remove the vendor's hard-coded duplicate so each sale fires once, and pass real customer fields into the server-side event so match quality climbs from 4.5 toward 7-plus. We diagnosed it, briefed the vendor the same week, and set the expectation up front: when the fix lands, reported purchases drop by about half. That feels like a performance loss for exactly one meeting, until everyone realizes the new number is the true one and the old one was fiction.

The hard part is not the fix. It is knowing to look before a year of budget gets allocated against a number that was never real.

Do this Monday

You do not need a developer to find out whether you have this leak. Three checks, about 30 minutes:

  1. Reconcile three numbers for last month: purchases reported in Meta, transactions in your analytics, and actual orders in your point-of-sale or ordering platform. If Meta is materially higher than the other two, you likely have a double-count.

  2. Open your order-confirmation page and view the source. Search it for "fbq" or "Purchase." If you find a purchase event hard-coded there AND your tag manager also fires one, that is the double-fire. Two sources, two IDs, double counting.

  3. Pull your Meta event match quality score (Events Manager, Overview). If it is below 6, you are leaving attributable conversions on the table. Below 5 means your customer-matching fields are almost certainly empty.

Any one of these turning up a surprise is worth a real audit before your next budget cycle.

When the numbers do not reconcile

If you operate several units and your paid media numbers do not line up cleanly with your actual sales, that gap is not a rounding error. It is a leak with a dollar value, and it compounds every month you scale against it.

The Operator's Revenue Workbook walks you through the same 30-minute audit we run on a new account, including the tracking reconciliation above, so you can find the leaks yourself before they cost you another quarter.

See you next week.

Will Gray
Graystone Consulting

I have run growth inside consumer and B2B brands at every stage, including a 12x revenue scale-up and a 28-state national expansion. Today I am the fractional CMO behind multi-unit restaurant groups and B2B operators. GrowthIQ is where the field notes land: operator-grade growth, one idea a week.

Keep Reading