Skip to content
Measure

Why your ad platform and your Stripe dashboard never agree

Meta says 4 sales, Stripe says 7. Neither is lying. What actually breaks browser pixel tracking, what a Conversions API fixes and what it cannot, how to read the gap honestly, and the checks to run before you touch your ad budget.

By Bennett Levaton11 min readAll guides

Your ad platform says four sales. Stripe says seven. Both numbers are in front of you, neither is a lie, and the difference decides whether you scale the campaign or switch it off. This is the single most common way coaches lose money on ads: not by buying bad traffic, but by making a real budget decision from a number they have quietly misread. This guide explains what is actually breaking, what you can fix, what you cannot fix at any price, and how to read the gap well enough to spend confidently. Disclosure up front: we make Drry, which includes the setup described near the end. Every principle here applies wherever you run your funnel.

The two numbers are counting different things

Stripe counts money that moved. It is a ledger, it is complete, and nothing a visitor's browser does can change it. Your ad platform counts something much harder: sales it can ATTRIBUTE, meaning ones it managed to connect back to a specific person who saw or clicked a specific ad. Every sale in Stripe is real. Only the sales the network could match appear in Meta.

So the honest framing is not "my tracking is broken". It is "my ad platform sees a SUBSET of my sales, and I need to know how big that subset is". Once you hold the numbers that way, a consistent 60% match rate stops being alarming and starts being useful, because a campaign that doubles your attributed sales almost certainly doubled your real ones too.

What actually breaks the browser tag

The traditional pixel is a piece of JavaScript in the visitor's browser. Four things routinely stop it, and none of them are your fault:

  • Content and tracking blockers. A meaningful share of people run one. The tag is not slowed down, it is never fetched at all, so the sale it would have reported simply never existed as far as the network is concerned.
  • Browser privacy defaults. Safari and Firefox limit how long tracking cookies survive. Someone who clicks your ad on Monday and buys on Friday may no longer carry the cookie that linked those two moments.
  • App tracking permission on iOS.When people decline the "allow this app to track" prompt, the identifiers that let a network tie an in-app ad view to a later purchase go away. A large majority decline.
  • Ordinary life. They saw the ad on a phone and bought on a laptop. They clicked, thought about it for nine days, then came back by typing your name. No pixel catches either, because no pixel can.

Notice that the first three are delivery problems and the fourth is a matching problem. That distinction is the whole of what follows: one of these is fixable with better plumbing, and the other is a fact about how people buy.

What server-side tracking fixes, and what it does not

The fix for delivery is to stop relying on the visitor's browser to make the report. When the purchase happens, your platform's own server tells the ad network directly, over an ordinary API call. Meta calls this the Conversions API; TikTok calls it the Events API. A browser extension cannot block a request made from a server it never sees, so the event always arrives.

There is a second, subtler benefit: the server knows things the browser does not. It knows on a SIGNED payment webhook exactly what was charged, in what currency, and to whom, which means the value attached to the conversion is the real one rather than a list price the page happened to display.

Expect server-side sending to recover a good portion of what blockers were eating, and expect the cross-device and long-consideration gap to remain. That remaining gap is not a defect to be engineered away. It is the honest cost of people being people.

Consent is part of the plumbing, not a legal afterthought

If you have visitors in the EU, the EEA or the UK, advertising identifiers require their prior agreement. That is not a banner you add for appearances: it genuinely changes what you can measure. A visitor who has not accepted tracking arrives from your ad and the click id in that link cannot be stored, so a purchase they make an hour later has less to match on.

The practical consequence is worth planning around rather than resenting. Your European campaigns will read worse than your American ones for reasons that have nothing to do with the ads. Compare like with like, judge each market against its own history, and never conclude a region is underperforming by holding it next to a region with different measurement rules.

Refunds: the part almost every guide gets wrong

Suppose a sale comes back. You would expect the conversion to be removed from your ad reporting, and it is reasonable to assume that a good integration does that automatically. It does not, and it is worth knowing why before you build a budget on the number.

Neither Meta nor TikTok offers a way for a website to retract a web conversion it has already reported, and both reject a negative purchase value, so "send minus fifty dollars" is not available either. Google does have a genuine retraction mechanism, but it lives behind its Ads API and a Google-issued developer token, which is a different integration entirely rather than a setting somebody forgot to switch on.

What a good setup does instead is report the refund as its own separate event. That gives you two things worth having. You can see refund volume per campaign, which sometimes reveals that your cheapest traffic is also your least durable. And you can build an exclusion audience from refunders, so the network stops looking for more people like the ones who asked for their money back. The original purchase count stays where it is; if you want it reduced, that is a manual job inside the ad platform.

The checks worth running before you touch the budget

  • Use the test tools first.Meta's Test Events tab and TikTok's equivalent show events arriving live, without polluting your real numbers. If a purchase does not appear there, no amount of budget analysis is meaningful yet.
  • Buy your own product once. A real checkout, at a real price, refunded afterwards. It is the only test that exercises every step in the order a customer does.
  • Check for double counting. If both your browser tag and your server report the same purchase, the network needs a shared event id to collapse them. Without it you will read twice your real performance, which is far more dangerous than reading too little.
  • Wait a full attribution window. Seven days from the click for most objectives, plus a settling day or two. Numbers before that are not early, they are wrong.
  • Reconcile monthly, not daily. Compare attributed sales to the real ones in Stripe once a month. Daily comparison is noise, and noise invites tinkering.

How this works in Drry

On the Growth plan ad tracking lets you connect your own Meta, Google and TikTok pixels, and they stay yours: your ad account, your data, your audiences, with nothing routed through us. Add a Conversions API token for Meta or TikTok and purchases, subscriptions and leads are sent from our servers on the signed payment event, carrying the real amount charged and a hashed email rather than a plain one. Refunds and lost disputes are reported as reversals, with the honest limits described above.

The consent banner, the regional rules and the record of who agreed to what are handled for you, and your pixels load only on your public pages: your funnels, your bio link, your shop and your join page, never inside the community itself, so nothing follows a paying member around while they are reading a lesson. There is a test-event button in the console so you can watch an event land in your own Events Manager before you trust a single number.

The goal was never a perfect number, because there is not one to be had. It is a number you understand well enough to bet on: delivery fixed where it can be fixed, consent handled properly, refunds visible, and a match rate you have measured rather than assumed. Get those four right and the gap between your ad platform and your bank stops being a mystery and starts being a constant, which is all a budget decision ever needed.

Questions coaches ask

Why does Meta report fewer sales than Stripe?

Because the browser tag that reports them does not always run. Ad and tracking blockers remove it outright, Safari and Firefox restrict the cookies it sets, and on iOS a large share of people declined app tracking, which removes the identifiers Meta needs to match a sale to the person who clicked. Stripe, meanwhile, counts money, which nothing blocks. A gap of 20 to 40% is ordinary. Sending conversions from the server as well closes much of it, because a server call is not something a browser extension can remove.

Does the Conversions API mean I get 100% of my sales attributed?

No, and anyone promising that is selling something. Server-side sending fixes DELIVERY: the event always arrives. It does not fix MATCHING, which is the network's separate job of deciding that this purchase belongs to that ad click. Matching depends on identifiers we are allowed to send, mainly a hashed email and the click id from the original ad link, and inside the EU, EEA and UK we cannot store that click id at all until the visitor accepts tracking. Expect a real improvement, not a perfect number.

Is sending purchase data to an ad network legal?

It is regulated rather than forbidden, and the obligations are yours as the business collecting it. In the EU, EEA and UK you need prior consent before advertising cookies or identifiers are used, which is what a consent banner is for. Everywhere, your privacy policy has to say plainly what you send and to whom. Send a hashed email rather than a plain one, never send anything a member has written, and be aware that your agreement with the ad network makes you the controller of that data.

Do refunds get removed from my ad reporting?

Not automatically, and this is the most misunderstood part of ad tracking. Neither Meta nor TikTok has a way for a website to retract a conversion it already reported, and negative purchase values are rejected. What a good setup can do is report the refund as its own separate event, which lets you see refund volume per campaign and, more usefully, exclude refunders from the audiences your ads chase. Reducing the original purchase count is a manual job inside the ad platform.

How long should I wait before judging a campaign?

At least one full attribution window, which for most objectives is seven days from the click, plus a few days for the reporting to settle. Judging a campaign after 48 hours means judging an incomplete number, and the incompleteness is not random: the slowest-converting people are exactly the considered buyers a coaching offer attracts. If your sales cycle is genuinely a fortnight, no tracking setup will make day two informative.

Keep reading

More from the guides.

Choosing a platform

Best membership platforms: what each one charges

Read the guide
Choosing a platform

Best online course platforms: what each one charges

Read the guide
Choosing a platform

Squarespace membership sites: what they cost you

Read the guide
Price

Thinkific pricing explained: what $54, $109 and $219 buy

Read the guide
Getting paid

Stripe vs PayPal: the part that actually decides it

Read the guide
Choosing a platform

Substack alternatives: what you gain, and what you give up

Read the guide
Monetizing a community

Charging for a Discord server: what it costs, and what it costs you

Read the guide
Choosing a platform

Membership portals: what they are, and how to pick one

Read the guide
Costs

Substack pricing explained: what the 10% really costs you

Read the guide
Choosing a platform

Online community building platforms: how to actually choose one

Read the guide
Sell

Where to sell digital products: marketplaces against your own store

Read the guide
Sell

Digital products to sell: the eight that actually work

Read the guide
Build

How to create an online course people actually finish

Read the guide
Grow

How to turn your course into a private podcast

Read the guide
Earn

How to make money from your recipes (without a food blog)

Read the guide
Earn

How to make money from your workouts online

Read the guide
Sell

How to sell digital products without losing the customer

Read the guide
Switch

How to move your email list to a new platform

Read the guide
Opinion

If you cannot leave, you do not own your list

Read the guide
Opinion

Platform fees are a tax on growth (and you pay the most when you win)

Read the guide
Opinion

Own your audience, don't rent it from a marketplace

Read the guide
Opinion

Community first, not course first: why the room beats the curriculum

Read the guide
Price

Teachable pricing explained: plans, fees, and the 2025 reshuffle

Read the guide
Price

Podia pricing explained: Mover, Shaker, and Earthquaker

Read the guide
Price

Whop pricing and fees explained: what Whop actually takes

Read the guide
Price

ClickFunnels pricing explained: every plan and what 2025 changed

Read the guide
Price

Stan Store pricing explained: Creator vs Creator Pro

Read the guide
Price

GoHighLevel pricing explained: the plan is not the bill

Read the guide
Price

Skool pricing explained: what the $9 and $99 plans really cost

Read the guide
Price

Kajabi pricing explained: every plan, fee, and catch

Read the guide
Price

Circle pricing explained: plans, transaction fees, and add-ons

Read the guide
Price

Mighty Networks pricing explained: Launch, Scale, and Growth

Read the guide
Price

Patreon fees explained: how much Patreon really takes

Read the guide
Compare

The best Patreon alternatives for creators in 2026

Read the guide
Compare

The best Mighty Networks alternatives in 2026

Read the guide
Compare

The best Circle alternatives in 2026 (honest comparison)

Read the guide
Compare

The best Kajabi alternatives in 2026 (an honest list)

Read the guide
Start

How to start a paid community in an afternoon

Read the guide
Price

Membership pricing: how much should you charge?

Read the guide
Compare

The best Skool alternatives in 2026 (honest comparison)

Read the guide
Sell

How to sell coaching packages online (without the awkward invoice dance)

Read the guide
Grow

Email automation for coaches: the three sequences that actually matter

Read the guide