ChurnAlert Logo

ChurnAlert

Sync cancel_at_period_end from Stripe to automate retention workflows

🚨 Problem:

Intercom doesn't automatically import the cancel_at_period_end parameter from Stripe, which means you can't trigger cancellation surveys or ask users why they canceled immediately when they make the decision. Churn is happening, but you don't know why until it's too late.

Intercom Stripe attributes

List of attributes that Intercom imports from Stripe

As of February 2025, this is further confirmed by Intercom in this KB article.

Intercom KB confirmation

🤔 So what does support have to do to trigger cancellation surveys or emails?

Well, according to Intercom (or Stripe, idk), you have to wait until the subscription expires so it changes its status — or build your own frontend solution to detect cancellations (e.g., changing the URL after a successful cancellation). This is absurd.

Just think about it again: Stripe's native integration with Intercom imports several subscription parameters (even the card brand, mind you), but it doesn't include the cancel_at_period_end field, which is essential for customer support.

Additionally, paused subscriptions are still considered "Active" in Stripe, making it impossible to rely on the "Stripe subscription status" parameter for timely cancellation emails.

Stripe subscription status issue

🛠️ Time to build

I took matters into my own hands and built an app that solves this by syncing the cancel_at_period_end parameter directly from Stripe and sending it to Intercom as a Custom Data Attribute (CDA).

This allows support teams to filter the audience and trigger cancellation surveys & engagement emails instantly, the moment a user decides to cancel their subscription.

ChurnAlert custom attribute in Intercom

The app is built using:

  • Node.js – for backend logic.
  • 🔌Stripe API – for subscription management.
  • 💬Intercom API – for customer communication.
  • 🚀Redis – for fast token storage.
  • 🔑OAuth 2.0 – for secure authentication.
  • ☁️Deployed on Railway – for seamless cloud infrastructure.
ChurnAlert working

That's it! If something doesn't exist, just go ahead and build it, I guess.

Terms of ServicePrivacy Policy← Intercom asks for this if I want to publish the app