RevenueCat webhook → FCM

RevenueCat cancel and billing-issue recovery

When RevenueCat fires CANCELLATION or BILLING_ISSUE, FixMySub maps the event to your subscriber and sends a push through the FCM project you already run, or an email if you stored the address. The job is simple: get them to update payment or come back before the period ends. PRODUCT_CHANGE is ignored. This is not Apple’s Retention Messaging API, and it is not a second Mixpanel. There is no mobile SDK — webhook in, recovery message out.

Diagram of a RevenueCat webhook triggering a phone push, then a failed card becoming a recovered checkmark.
Event in from RevenueCat. Message out on your FCM (or email). No new SDK in the app.

The path, in four boxes

  1. 1

    RevenueCat emits

    CANCELLATION or BILLING_ISSUE hits your FixMySub webhook URL. No extra RC integration beyond the webhook.

  2. 2

    We match the user

    Join on app_user_id / providerId. If that user was registered with a token or email, we can message them.

  3. 3

    Push and/or email

    FCM on your Firebase project, or email we send for you. Immediate send, then a 12-hour follow-up push if still unresolved.

  4. 4

    Stop if they recover

    RENEWAL or UNCANCELLATION cancels the workflow. No extra “come back” spam after they are already back.

Which RevenueCat events we act on

RevenueCat can emit a lot of types. Recovery only cares about churn-shaped events. Everything else is stored or ignored — including plan switches that are not a cancel.

Send recovery

  • CANCELLATIONUser turned off renewal. Ask them to come back before expiration.
  • BILLING_ISSUECharge failed. Ask them to update the payment method.
  • EXPIRATIONAccess is ending. Last-chance message if you enabled that trigger.

Do not send

  • PRODUCT_CHANGEPlan upgrade/downgrade. Not churn. Never a recovery send.
  • TESTWebhook test pings. Logged, not messaged.
  • NON_RENEWING_PURCHASENot a subscription lifecycle cancel.

What this is not

Not Apple Retention Messaging

Apple’s Retention Messaging API is an App Store sheet you configure in App Store Connect / StoreKit. FixMySub never presents that sheet. We send your push or email after RevenueCat already told you the user cancelled or hit a billing issue.

Not a second Mixpanel

We do not replace product analytics. Events are used to start a recovery workflow, mark recovered / lost, and show you dollars saved. If you want funnels and cohorts, keep Mixpanel (or RevenueCat charts).

Push (FCM)

You upload the Firebase Cloud Messaging service account you already use for the app. FixMySub sends on that project. Payload includes an action of BILLING_ISSUE, CANCELLATION, or EXPIRATION for a deep link you handle.

Email

If the registered user has an email, we send via SendGrid under your from-name. You do not need your own SendGrid account. Use email when the user is not opening the app — complementary to push, not a CDP.

FAQ

Which RevenueCat events trigger a recovery message?

CANCELLATION and BILLING_ISSUE start a recovery workflow (push and/or email, depending on what you enabled and what the user has). EXPIRATION can send a last-chance message. RENEWAL and UNCANCELLATION stop the workflow and mark the user recovered. INITIAL_PURCHASE moves a registered user to subscriber.

Why is PRODUCT_CHANGE ignored?

A product change is a plan switch, not a cancel and not a failed charge. Messaging those users as if they churned is spam. FixMySub does not start recovery on PRODUCT_CHANGE.

FCM vs email — which should I use?

Use FCM when you have a push token: it reaches people still in the app. Use email when you have an address: it reaches people who already left the app. Most setups enable both and let FixMySub pick what the user actually has. You do not need a separate ESP account for email.

Do I need a mobile SDK?

No FixMySub SDK. Point the RevenueCat webhook at FixMySub and register users with a REST call (RevenueCat app_user_id, plus push token and/or email). Your existing Purchases SDK stays as-is.

Point the webhook. Recover the next cancel.

First recovery is free. No card required.

Get started for free