Stripe Subscription Churn + Intercom Conversation History: Weekly At-Risk Account Brief to Microsoft Teams via Make

Every Monday at 8 AM, your CS team gets a list of every account that canceled or downgraded in the last 7 days — with their last Intercom conversation attached — before standup.

The flow
Stripe logo
Source
Stripe
Intercom logo
Process
Intercom
Make logo
Process
Make
Microsoft Teams logo
Destination
Microsoft Teams

The stack in the order it runs — data flows from the source through to where it lands.

Why this stack

The real failure mode: an account churns, someone fires off a win-back email, and nobody checked that there's an open Intercom thread from 3 days ago where the user reported a bug and got no reply. That win-back email lands tone-deaf. The conversation is already dead before it starts.

Make is the right tool here because it has native Stripe and Intercom modules with pre-built pagination — no custom HTTP calls, no auth plumbing. The array-iteration pattern (loop over churned accounts, fetch Intercom thread per account, post once) is exactly what Make's iterator + aggregator combo handles cleanly. Zapier breaks this on lower tiers due to multi-step limits.

Teams over Slack because enterprise CS teams live in Teams. The Make → Teams path uses the Incoming Webhook connector, which doesn't require IT admin approval on most tenants. That matters if you're inside a corporate environment where Slack isn't the standard.

One honest tradeoff on Make's free tier: 1,000 operations/month. This scenario costs roughly 3 operations per churned account — Stripe fetch, Intercom fetch, Teams post. 50 churns/week is ~600 operations/month, fine on free. Over 100 churns/week, move to the Core plan at $9/mo. Skip this entire playbook if your Stripe billing emails don't match your Intercom user emails. The join between the two systems is email address. Mismatched emails mean empty conversation lookups on most accounts.

The stack (4)

  1. Stripe logo

    Global payments with first-class APIs.

    Events + Sigma let you wire billing into any ops report or alert.

  2. Intercom logo

    Customer messaging + support inbox.

    Conversation data surfaces churn/expansion signals worth routing to chat.

  3. Make logo

    No-code automation builder. Visual scenarios that chain APIs and AI calls.

    Per-operation pricing is cheaper than Zapier at the volumes I run, and the visual editor handles branching cleanly.

  4. Microsoft Teams logo

    Chat + channels for Microsoft-365 shops.

    If the company is on Outlook/365, Teams is where reports get read — push there, not a separate tool.

How it runs

  1. 1

    Create a Make scenario with a weekly schedule trigger

    Create a new scenario in Make. Add a Schedule module set to run every Monday at 8:00 AM in your team's timezone. Name it `weekly-churn-intercom-brief`. Running at 8 AM means the brief hits before Monday standup — not buried mid-afternoon when nobody acts on it.

  2. 2

    Fetch Stripe subscriptions canceled in the last 7 days

    Add a Stripe → Search Subscriptions module. Set the filter: `status = canceled` and `canceled_at gte [7 days ago as Unix timestamp]`. In Make, generate that timestamp with `{{subtractDays(now; 7)}}` wrapped in `{{toUnix(...)}}`. Set the limit to 100. Map these output fields: `id`, `customer`, `plan.nickname`, `canceled_at`, and `metadata.email` if you store email there — or plan to resolve it in the next step via a Get Customer call.

  3. 3

    Resolve customer email from Stripe customer ID

    Add a Stripe → Get a Customer module inside the iterator. Pass the `customer` ID from the previous step. Pull the `email` field — this is your join key to Intercom. If `email` is empty (common in B2B accounts using a generic billing address), fall back to `metadata.account_email`. If you don't already have that convention in your Stripe metadata schema, define it now before you build further.

  4. 4

    Fetch the last Intercom conversation for each customer

    Add an HTTP module — Make's generic HTTP action. Call `GET https://api.intercom.io/conversations?query=email:[customer_email]&order=desc&sort=created_at&per_page=1`. Set the Authorization header to `Bearer [your_intercom_access_token]`. Extract: `conversations[0].id`, `conversations[0].created_at`, `conversations[0].statistics.last_contact_reply_at`, and the first message body from `conversation_parts`. If no conversation comes back, set a placeholder string: `No Intercom history`.

  5. 5

    Build the account summary object

    Add a Set Variable module to assemble a per-account object: `{ email, plan, canceledAt (formatted date), lastConvoDate, lastConvoSnippet (first 200 chars of the last message body), intercomLink: 'https://app.intercom.com/a/apps/[workspace_id]/conversations/[convo_id]' }`. Hard cap the snippet at 200 characters — anything longer turns the Teams card into a wall of text. Format `canceledAt` as `YYYY-MM-DD` using Make's `{{formatDate()}}` function.

  6. 6

    Aggregate all accounts into a single array

    Add an Array Aggregator module after the iterator. Aggregate all per-account summary objects into one array. This is the most common mistake people make in Make scenarios: skipping the aggregator and posting one Teams message per account. That's notification spam. The aggregator collapses the loop so you post once.

  7. 7

    Format the Teams Adaptive Card payload

    Add a Make → Microsoft Teams → Send a Message via Incoming Webhook module. Build an Adaptive Card JSON payload with a `TextBlock` header reading `🔴 Churned Accounts This Week — [date]`, a `FactSet` per account showing Plan, Canceled Date, and Last Intercom Message Date, and an `Action.OpenUrl` button linking to the Intercom conversation. Adaptive Cards render natively in Teams and are far more readable than plain text. Prototype the layout in the Adaptive Card Designer at adaptivecards.io/designer before wiring it into Make.

  8. 8

    Post to Microsoft Teams #customer-success channel

    Set up the Incoming Webhook URL in Teams under Channel → Connectors → Incoming Webhook. Paste that URL into the Make module. Set the fallback text field to `Weekly churn brief — [N] accounts` for notifications that render without card preview. Before locking in the 7-day weekly schedule, run the scenario manually with a 30-day lookback window to validate that the output looks right end to end.

Want me to build this for you instead?

Product Audit and CTO Mode run out of this same thinking. If you’re reading this thinking “I want this, but in my product” — let’s talk.

See services

More like this