Skip to main content
Subscription TrackingSubscriptions & recurring revenue

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

  1. 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.

  2. 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.

  3. 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.

  4. 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. 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. 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. 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. 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. 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.

trial_signupSignup form accepted, before any chargeevent_id, _fbp, _fbc, gclid, page_locationBrowser (GTM)
trial_startSubscription enters `trialing` statusevent_id, plan_id, term, no valueServer (webhook)
trial_convertedStatus moves `trialing` to `active`event_id, value (LTV-weighted), currency, gclid, _fbcServer (webhook)
first_paymentFirst invoice is paid, not just issuedevent_id, transaction_id (invoice id), value, currencyServer (webhook)
plan_upgradedSubscription item price increasesevent_id, value (MRR delta), currency, plan_idServer (webhook)
subscription_renewedRecurring invoice paid, billing cycle above 1event_id, billing_cycle, currency, no purchase valueServer (webhook)
payment_failedInvoice attempt fails and dunning startsevent_id, invoice_id, attempt_countServer (webhook)
subscription_canceledRefund, chargeback or cancel inside the windowevent_id, transaction_id, adjustment_type, valueServer (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

Get my free conversion tracking audit

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.

Get my free conversion tracking audit

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.

Free · 30 min

Let's find out what your platforms are actually optimizing for

Free30 minutesNo obligation