Get your Subscription Tracking tracking to 95%+ accuracy guaranteed in writing.
Subscription businesses keep optimizing toward the trial button because that's the only moment a pixel can see. The money event — trial converting to paid, the second invoice clearing, the annual plan renewing — happens in the billing system, off-site, long after the cookie stopped mattering. We make the billing system the source of truth and send the real conversion back with the click IDs that earned it.
Free30 minutesNo obligation
Subscription Tracking · what breaks
Why subscription tracking breaks on the browser
- 01
The trial signup gets counted as the purchase
Meta and Google see a Purchase the moment someone starts a free trial, usually with a value of zero or the full plan price. Either way the algorithm learns to find people who start trials, which is not the same population as people who pay.
- 02
The conversion lands outside the click window
A 14-day trial that converts on day 15 falls past Meta's default 7-day click window. Unless the click identifier was captured at signup and replayed at conversion time, the sale is unattributable by construction — not by accident.
- 03
Renewals quietly inflate reported ROAS
If month two, month six and the annual renewal all fire the same Purchase event as acquisition did, every cohort keeps buying forever in the platform's view. Reported return climbs while the bank balance doesn't move.
- 04
Every plan is worth the same number
Sending the first invoice amount makes a $29 monthly plan and a $290 annual plan look ten times apart on day one, and treats a subscriber who churns in month two identically to one who renews for three years.
Subscription Tracking · the fix
What changes once the billing system is the source of truth — Subscription Tracking
Platforms optimize for paying subscribers
The conversion we send is trial→paid, taken from the subscription leaving `trialing` status and the invoice actually clearing. The bidding models start looking for people who pay, because that's the only signal they're getting.
Attribution survives the trial gap
gclid, wbraid, fbclid, fbp and fbc are captured at signup and written to the customer record, then replayed with the conversion whenever it lands — day 15 or day 45.
New business is separated from renewals
First payment, expansion, renewal and reactivation become four distinct events with four different jobs. Only one of them is acquisition, and only that one reaches the acquisition campaigns.
Reported conversions reconcile to the ledger
Platform-reported purchases line up against paid invoices, minus refunds and failed charges, in a monthly variance report finance can read without translation.
Subscription Tracking · architecture
How the billing system becomes the source of truth — Subscription Tracking
Nothing here depends on the browser being open when the money moves. The signup page captures identity, the billing provider announces the conversion, and the server container does the rest.
- 1
Click IDs captured at signup
gclid, wbraid, gbraid, fbclid, _fbp and _fbc are read on the signup page and written onto the customer record in your billing provider before the trial clock starts.
- 2
Signed webhook endpoint on your subdomain
Stripe, Chargebee, Recurly or Paddle post lifecycle events to an endpoint on your own server container, which verifies the signature and rejects anything unsigned.
- 3
Idempotency on the provider's event id
Every webhook is keyed on the provider's own event id, so the retries billing systems send by design never turn one paid invoice into three conversions.
- 4
Lifecycle routed per destination
trial_converted and first_payment reach the acquisition campaigns; renewals and expansions are sent as separate valueless events so they can be analyzed without inflating reported return.
- 5
Reversals pushed back as adjustments
Refunds, chargebacks and dunning failures inside the window go back out as Google Ads conversion adjustments and GA4 refund events instead of quietly staying counted.
Subscription Tracking · events
The subscription lifecycle, event by event
This is the map we implement; a developer should be able to build from it.
| Event | Fires when | Key parameters | Sent from |
|---|---|---|---|
| trial_signup | Signup form accepted, before any charge | event_id, _fbp, _fbc, gclid, page_location | Browser (GTM) |
| trial_start | Subscription enters `trialing` status | event_id, plan_id, term, no value | Server (webhook) |
| trial_converted | Status moves `trialing` to `active` | event_id, value (LTV-weighted), currency, gclid, _fbc | Server (webhook) |
| first_payment | First invoice is paid, not just issued | event_id, transaction_id (invoice id), value, currency | Server (webhook) |
| plan_upgraded | Subscription item price increases | event_id, value (MRR delta), currency, plan_id | Server (webhook) |
| subscription_renewed | Recurring invoice paid, billing cycle above 1 | event_id, billing_cycle, currency, no purchase value | Server (webhook) |
| payment_failed | Invoice attempt fails and dunning starts | event_id, invoice_id, attempt_count | Server (webhook) |
| subscription_canceled | Refund, chargeback or cancel inside the window | event_id, transaction_id, adjustment_type, value | Server (adjustments) |
Subscription Tracking · prove
How we prove the numbers against your billing ledger — Subscription Tracking
The guarantee is 95%+ accuracy verified against your own system, so the check has to run against the ledger rather than against another dashboard.
Source of truth
Paid invoices in Stripe, Chargebee, Recurly or Paddle, net of refunds and failed charges
- Run a live trial signup on a test card, let it convert, and confirm exactly one trial_converted lands in each destination.
- Match transaction_id on every platform-reported conversion back to a real invoice id for the full prior month.
- Confirm click IDs stored at signup arrive weeks later on the conversion payload — gclid and _fbc present, not empty.
- Read Meta Event Match Quality per event in Events Manager and confirm 8+ on trial_converted and first_payment.
- Refund the test subscription and check the Google Ads conversion adjustment and the GA4 refund event both land.
- Reconcile platform-reported revenue against paid invoices, labeling each variance line attribution difference or data loss.
Subscription Tracking · free audit
What we check in the free audit
- The trial signup gets counted as the purchase
- The conversion lands outside the click window
- Renewals quietly inflate reported ROAS
- Every plan is worth the same number
Checked against
Paid invoices in Stripe, Chargebee, Recurly or Paddle, net of refunds and failed charges
Free30 minutesNo obligation
Subscription Tracking · when not to buy
When subscription tracking is the wrong thing to buy
Four situations where we'd tell you to keep your money.
- No trial and no delay — the card is charged at signup on your own checkout, so the browser already sees the money event.
- You aren't running paid acquisition yet. This exists to give bidding algorithms a real conversion; it does nothing for organic growth.
- One plan, one term, monthly only. LTV weighting has nothing to weigh and the first invoice is already an honest value.
- Your billing platform has no webhooks and no export API. Fix that first — we can't reconcile against a ledger we can't read.
Subscription Tracking · what we deliver
What we build into your billing stack — Subscription Tracking
Signed billing webhook endpoint on your subdomain
An endpoint on your own server container that receives Stripe, Chargebee, Recurly or Paddle events, verifies the signature, and de-duplicates on the provider's own event id so a retried webhook never double-counts.
Click ID capture and replay
gclid, wbraid, gbraid, fbclid, fbp, fbc, landing page and user agent are stored on the customer object at signup, then attached to the conversion weeks later when it finally happens.
Subscription lifecycle event map
trial_start, trial_converted, first_payment, plan_upgraded, subscription_renewed, payment_failed and subscription_canceled, each mapped to the destinations that should receive it and the ones that shouldn't.
LTV-weighted conversion values
Value is derived from plan, term and observed cohort retention rather than the first invoice, so annual and monthly plans are bid against on comparable terms instead of on billing frequency.
Refund, dunning and cancellation handling
Failed payments, refunds and cancellations inside the window are pushed back as Google Ads conversion adjustments and GA4 refund events, so a charge that never cleared doesn't stay on the books.
Reconciliation against the billing ledger
A month-end comparison of platform-reported conversions against paid invoices, with every line of variance labeled as attribution difference or actual data loss.
Written guarantee
95%+ tracking accuracy
Measured against Paid invoices in Stripe, Chargebee, Recurly or Paddle, net of refunds and failed charges. Miss it and we keep working at no cost.
FAQ
Subscription Tracking questions, answered
Yes, but not as a Purchase. Send it as a lead or a custom event with no revenue value. It's genuinely useful as an early signal while volume is thin and for building audiences, but the moment it carries a purchase value the algorithm starts hunting for trial-starters instead of subscribers.
Partly, and you should know exactly which part. Google Ads accepts offline conversion imports up to 90 days after the click, so a 30-day trial is comfortably inside it. Meta will accept the event but attribution past the default 7-day click window is limited, which is why we also report those cohorts on a blended basis against the ledger rather than pretending Meta will credit them.
Not for acquisition campaigns. If a renewal fires the same event as a new subscription, reported return keeps rising on cohorts you already paid for. We usually send renewals as a separate custom event so you can still analyze retention and build audiences, with no purchase value attached.
Start with expected value: plan price times observed retained months for that plan and term, contract value for annual. It's a model, so we write down the assumptions and revisit them quarterly as real cohort data accumulates. What matters most is that annual and monthly plans stop being compared on billing frequency.
The mechanics are the same — signed webhooks, event ids, lifecycle statuses. The one thing to decide up front is whether you send gross or net of their fees and taxes, and then be consistent, because your ad platform ROAS and your P&L will otherwise never reconcile.
Yes, if the warehouse is where your reconciled truth actually lives. We'll read from BigQuery or Snowflake on a schedule instead of listening for webhooks. The tradeoff is latency: conversions arrive on your ETL cadence rather than within seconds, which is fine for reporting and slightly slower for optimization.
If you have no trial, one plan, instant paid signup, and checkout on your own domain, a standard server-side purchase setup already covers you — the browser can see your money event. Same if paid acquisition isn't a meaningful channel yet. Come back when the trial gap or the plan mix starts distorting what the platforms are optimizing toward.
More on Subscription Tracking
- GuideConversion Tracking for SaaS and Subscriptions: Trials, Renewals and LTV
- GuideOffline Conversion Tracking: Send Closed Deals Back to Google Ads and Meta
- GA4 and Shopify revenue mismatchWhy don't GA4 and Shopify revenue match?
- GA4 revenue incorrectWhy is my GA4 revenue wrong?
- Platforms over-attributing revenueWhy are my platform reports over-attributing revenue?
Free · 30 min
Let's find out what your platforms are actually optimizing for
Free30 minutesNo obligation
