How to reconcile Meta Ads against your billing system
This is the check we run first on every account, written out so you can run it without us. It takes about thirty minutes and needs two numbers: what Meta says it produced, and what your billing system actually shows. The gap between them is the only honest measure of whether your tracking works — and if it comes back small, you do not need us.
Free30 minutesNo obligation
Specific to Meta × Subscriptions
Meta vs new subscriptions: why the trial outruns the 7-day window
Send the first successful payment through the Conversions API with the subscription ID as event_id, then compare Meta's total against first payments for a closed month. Meta exposes no per-record export, so this is a totals check. Meta reading higher is normal because of view-through; reading far lower often means the trial outlasts the click window.
Meta gives you no row-level export to join against, so the subscription ID only does its job inside Meta: sent as the event_id on both the Pixel and the server event, it stops one signup counting twice. On your side, the comparison is Meta's Purchase or Subscribe total against first payments in the billing export, with hashed email doing the matching at Meta's end. The billing email is usually the best-normalized email you hold, which helps match quality.
The default 7-day click and 1-day view window collides with free trials. If the trial runs fourteen or thirty days and you send the conversion when the card is first charged, most paid subscriptions land outside the window and Meta never credits them. Check whether your Ads Manager view assigns conversions to the ad date or the conversion date before lining months up, and confirm Meta still accepts the late server event at all.
Meta reporting somewhat more paid subscriptions than you took is ordinary, because view-through credit overlaps with other channels. Meta reporting more than you had new customers in total is a fault. The usual one is the Pixel firing Purchase on the trial confirmation page, with the plan value attached, for people who have not paid and may never pay.
Meta × Subscriptions · what breaks
Why Meta and your billing system disagree
- 01
Every renewal firing as a conversion
The single most common subscription error. A customer who stays two years produces twenty-four payment events, and counting them all inflates the conversion count by exactly your retention rate.
- 02
Trial starts counted as paid conversions
A free trial costs the user nothing. Optimising toward trials reliably finds people who start trials and never pay.
- 03
Cancellations inside the first period never reversed
Early churn on discounted offers is high, and the reversal is almost never wired.
- 04
Lifetime value assumed rather than measured
An industry figure for tenure will either starve a channel that works or overfund one that does not. Your own churn data says something different.
Meta × Subscriptions · the fix
What you get from this — Meta × Subscriptions
A number instead of a suspicion
The likely cause, narrowed
A basis for deciding
Meta × Subscriptions · architecture
What each side is actually counting — Meta × Subscriptions
- 1
What Meta counts
event_name from the standard set with exact casing, event_time in seconds, a shared event_id, an action_source, and hashed user_data that was normalized before hashing. Purchase additionally requires value and currency.
- 2
How Meta attributes it
fbclid arrives on the landing URL and is normally written into the _fbc cookie. If it isn't captured on landing, _fbc never exists — and _fbc is the strongest click signal Meta has, so its absence caps your match quality regardless of what else you send. Forward _fbp too, from the browser rather than regenerating it server-side.
- 3
The window it uses
Meta's default attribution is a 7-day click and 1-day view. View-through is included by default, which is a large part of why Meta claims more conversions than your other platforms — that overlap is expected rather than a fault.
- 4
What your billing system counts
First successful payments on new subscriptions, found in Stripe, Chargebee, Recurly, Paddle or whatever charges the card.
- 5
The filter that makes them comparable
New subscriptions only — exclude renewals, and exclude trials that have not yet converted.
Meta × Subscriptions · events
Reading the gap — Meta × Subscriptions
| What you see | What it usually means |
|---|---|
| 15%+ platform higher | Usually the wrong event entirely — the platform is counting renewals, trials, or subscriptions that cancelled before the first real charge. |
| 20%+ platform lower | Usually structural — the platform is missing subscriptions it produced — usually a signup-to-payment gap longer than the attribution window. |
Meta × Subscriptions · diagnose
Diagnostic order — Meta × Subscriptions
- 01
Confirm both numbers cover the same period and channel
- 02
Every renewal firing as a conversion
The single most common subscription error. A customer who stays two years produces twenty-four payment events, and counting them all inflates the conversion count by exactly your retention rate.
- 03
Trial starts counted as paid conversions
A free trial costs the user nothing. Optimising toward trials reliably finds people who start trials and never pay.
- 04
Cancellations inside the first period never reversed
Early churn on discounted offers is high, and the reversal is almost never wired.
- 05
Read the Deduplicated indicator and the per-event match quality score, both read over seven days
Match quality is where most Meta accounts lose attribution, and it's almost always normalization rather than coverage. An email hashed with a capital letter, or a phone hashed with brackets, produces a perfectly valid hash that matches nobody and errors nowhere. Normalize first, then hash, and read the score per event rather than overall.
Meta × Subscriptions · prove
How to know you did it right — Meta × Subscriptions
Source of truth
your billing system — new subscriptions for a fully closed month
Meta × Subscriptions · free audit
What we check in the free audit
- Confirm both numbers cover the same period and channel
- Every renewal firing as a conversion
- Trial starts counted as paid conversions
- Cancellations inside the first period never reversed
- Read the Deduplicated indicator and the per-event match quality score, both read over seven days
Checked against
your billing system — new subscriptions for a fully closed month
Free30 minutesNo obligation
Meta × Subscriptions · when not to buy
When the answer is that you do not need us — Meta × Subscriptions
- If almost all of your new subscriptions come from a channel with no click behind it, no tracking work will reach them — and knowing that is worth more than a build.
- If you're advertising a business type Meta restricts data collection for — health being the obvious one — the parameters you can legitimately send are narrower, and that constraint should shape the build rather than be worked around.
Meta × Subscriptions · what we deliver
The method, step by step — Meta × Subscriptions
Pull what Meta reports
The deduplicated indicator and the per-event match quality score, both read over seven days.
Pull what your billing system shows
Export subscriptions by creation date for a closed month, filtered to those that took a first successful payment, and record the plan value.
Filter both to the same thing
New subscriptions only — exclude renewals, and exclude trials that have not yet converted.
Compare per record, not on totals
FAQ
Meta × Subscriptions questions, answered
Yes, if both happen in your funnel. Optimize on the paid event once it has enough volume, and use the trial event only while the paid one is too sparse for Meta to learn from.
The subscription or first invoice ID from the billing system, because both the browser and the server can know it. A random ID generated in the browser cannot be reproduced by the webhook that confirms payment.
Because you should know the size of the problem before anyone quotes you for it. If the gap is small, you have saved yourself a purchase. If it is large, you now know what you are buying rather than taking our word for it.
No. Both numbers come from systems you already own and neither leaves them. There is no tool to sign up for and nothing to upload.
Then compare totals for a closed period and treat the result as directional rather than exact. The deduplicated indicator and the per-event match quality score, both read over seven days is still the right place to read the platform's side.
Under five percent is working. Five to fifteen usually means reversals are missing. Above twenty is normally the wrong event being counted, not a broken tag — which is why debugging tags first wastes so much time.
Then fix the filter before drawing any conclusion. New subscriptions only — exclude renewals, and exclude trials that have not yet converted. A mismatch in scope produces a gap that looks like a tracking fault and is not one.
Book the free thirty-minute call and bring both numbers. We will tell you which of the causes above it is, and whether it is something you can fix yourself — which it sometimes is.
More on Meta × Subscriptions
- Google Ads × SubscriptionsHow to reconcile Google Ads against your billing system
- TikTok × SubscriptionsHow to reconcile TikTok Ads against your billing system
- Microsoft × SubscriptionsHow to reconcile Microsoft Ads against your billing system
RELATED GUIDES
Systems of record beside billing subscriptions, and the funnels it settles
- Meta × Enrolment SystemHow to reconcile Meta Ads against your application or enrolment system
- Meta × POS SystemHow to reconcile Meta Ads against your point-of-sale system
- Meta · Invite → team adoptionHow to track seat invite to team adoption for Meta Ads
- Meta · Usage → expansionHow to track usage growth to plan upgrade for Meta Ads
- Meta · Driving schoolsMeta Ads conversion tracking for driving schools
- Meta · NonprofitsMeta Ads conversion tracking for nonprofits
- Circle → MetaConnecting Circle to Meta Conversions API
- Discord → MetaConnecting Discord paid communities to Meta Conversions API
Free · 30 min
Found a gap between Meta and your billing system?
Free30 minutesNo obligation
