B2B SaaS with trial → activation → paid funnel, LinkedIn CAPI, CRM webhook bridge (HubSpot, Salesforce, Pipedrive).
Substack, Beehiiv, Kajabi, Memberstack subscriber lifecycle. Newsletter + course + membership monetization.
Enterprise long-cycle B2B (180+ day deals), pipeline-aware tracking, multi-stakeholder attribution.
Meta sees the first $40 charge and bids accordingly. The cohort that ranks 'cheapest CPA' is also the one that churns hardest — because they bought the discount, not the product. Without renewal signal flowing back, the algo never learns the difference between a 6-month customer and a one-and-done.
Recharge / Bold / ReCharge fire renewal hooks — to your billing system. They do not POST to Meta CAPI as a Subscribe event with the renewal MRR. That signal stays trapped inside the subscription app. Your $80/mo renewal is invisible to the platform that found the customer.
The team that ships subscription_canceled to Meta as a NEGATIVE signal — and excludes recently-churned cohorts from prospecting audiences — outperforms by 30-50% on year-one LTV. Almost no team does it because the plumbing is hard. TrackLayer ships the plumbing.
Recharge, Bold Subscriptions, ReCharge, Smartrr, Skio, native Stripe Subscriptions, custom — all supported. Paste the webhook URL, set the HMAC secret, done. We verify every payload's signature.
subscription.created → subscription_started. subscription.charged (renewal cycle) → subscription_renewed. subscription.upgraded (tier change) → subscription_upgraded. subscription.canceled → subscription_canceled. One taxonomy across every backend.
Pull MRR, billing interval, plan tier, total renewals to date, days-since-acquisition. Hash email + phone for CAPI. Carry through fbp / fbc / gclid / ttclid from the original click.
Meta CAPI: subscription_renewed → Subscribe with renewal MRR (not first-order value). Google Ads: subscribe_renewed with conversion value = MRR. Klaviyo: trigger renewal milestones (3-mo, 6-mo, 12-mo). Idempotent + retried via CF Queues.
{
"subscriber_id": "sub_18420",
"churn_probability_14d": 0.72,
"features": {
"usage_frequency_30d": 2,
"last_login_age_days": 19,
"support_ticket_count_30d": 3,
"plan_downgrades_90d": 1,
"billing_failures_30d": 0
},
"recommended_action": "Subscriber sub_18420 is likely to churn in 14d. Open a support recovery task before sending automated winback."
}Retention teams see the highest-risk active subscribers first, with the signals that moved the score.
High-risk subscribers get retention, dunning, or support actions. High-usage low-risk subscribers get upgrade prompts.
Usage, inactivity, ticket, downgrade, and payment-failure inputs are visible next to the recommended action.
POST /v1/integrations/recharge/subscriptions?merchant_id=glasshouse_42
X-Recharge-Hmac-SHA256: a8f5...
X-Recharge-Topic: subscription/charged
Content-Type: application/json
{
"event": "subscription/charged",
"subscription": {
"id": 18420,
"customer_id": 73851,
"status": "active",
"next_charge_scheduled_at": "2026-05-26",
"charge_count": 7,
"first_charge_at": "2025-10-26",
"billing_interval": "1 month",
"billing_amount": "48.00",
"currency": "USD"
},
"customer": {
"email": "buyer@glasshouse.co",
"phone": "+15125550199"
}
}POST https://graph.facebook.com/v22.0/123456/events
Authorization: Bearer <merchant_meta_token>
{
"data": [{
"event_name": "Subscribe",
"event_time": 1776954960,
"event_id": "recharge_18420_renewal_7",
"action_source": "system_generated",
"user_data": {
"em": ["9c2edcec5b3..."],
"ph": ["a4f7..."],
"fbp": "fb.1.1729958900.1234567890",
"fbc": "fb.1.1729958820.IwAR2..."
},
"custom_data": {
"currency": "USD",
"value": 48.00,
"predicted_ltv": 336.00,
"subscription_id": "recharge_18420",
"renewal_count": 7,
"days_since_acquisition": 182
}
}]
}Meta optimized on first-order Subscribe @ $42 CPA. The 'cheapest' cohort churned at 68% before month 2. Real CAC-recovered-by-month-3 was $114, not the $42 Meta thought it was bidding.
Wired Recharge subscription_charged → Meta CAPI Subscribe with renewal MRR. After 6 weeks Meta started favoring cohorts with 3+ renewals. New-customer churn rate dropped from 68% to 41%; net LTV per acquired sub up 47% on the same monthly budget.
Google Ads only saw the first $32 charge. Klaviyo's churn-recovery flow was firing 4 days after cancel — and 80% of churners had already moved on. No re-acquisition trigger fed back into Google's audience exclusion.
subscription_canceled now fires to Google Ads as a negative remarketing signal AND Klaviyo within 60 seconds. Google excludes recent-churners from prospecting audiences automatically; cancel-recovery email open rate up 3.4× because it ships the same hour as cancellation.
Tier upgrades (Basic $32 → Premium $58) showed up nowhere in ad reporting. Meta and Google had no signal that 18% of customers ARPU-up'd by month 4 — so they kept optimizing for first-purchase volume, not upgrade-prone cohorts.
subscription_upgraded fires to Meta as Purchase with the MRR delta ($26 in this example) and to Google with conversion_value = ARPU lift. Within 8 weeks, Meta started preferring cohorts that historically ARPU-up'd, lifting blended ARPU by $4.20/sub.
First-order tracking only. Not enough for subscription businesses.
Full subscription lifecycle: renewals, upgrades, churn, predicted LTV. 200k events/mo.
Custom event taxonomy, sub-account isolation, dedicated CSM. 1M events/mo.
VPC deploy, SLA, custom platform adapters, audit logs in your SIEM.
Cohort scores that update with every renewal and upgrade.
14-day churn probability scored on usage, tickets, and billing health.
Provision workspaces in EU or US regions for compliance.
We use essential cookies to keep the site secure and functional. Analytics and third-party tags run only with your consent. See our Cookie Policy.
We use essential cookies to keep the site secure and functional. Analytics and third-party tags run only with your consent. See our Cookie Policy.