# Failed payment save play: alert CS with account context before a missed payment turns into churn

Source: https://mcpforgtm.com/recipes/failed-payment-save (StackMCP, independent directory of official MCP servers)

## Goal

CS teams at companies that bill through Stripe, who want to know when a subscription falls behind on payment, with the account's owner, renewal and recent history, before the customer quietly churns. Everything in Stripe stays read-only. HubSpot can be swapped for Salesforce, Attio or Pipedrive, and Slack for a Gmail draft.

## Connected tools

- Stripe: https://mcp.stripe.com (setup: https://mcpforgtm.com/tools/stripe)
- HubSpot: https://mcp.hubspot.com (setup: https://mcpforgtm.com/tools/hubspot)
- Slack: https://mcp.slack.com/mcp (setup: https://mcpforgtm.com/tools/slack)

## Guardrails

- Read only in Stripe. Don't retry payments, issue refunds, create payment links, or create, finalize, void or change invoices, customers or subscriptions.
- Read only in HubSpot. Don't change any record.
- Skip any account where a recent note says payment is already in progress.
- Match owners to Slack users by email, and skip anyone without an exact match.
- Show me every Slack alert and post only the ones I approve.
- Keep amounts and contact details out of any public channel. Use a private CS channel or direct messages.

## Steps

1. In Stripe, list subscriptions that are past due or unpaid, and open invoices more than {days} days past their due date: customer, customer email, plan, invoice number, amount, status, due date and days late. Leave out draft and voided invoices. Read only. Don't change anything in Stripe.
2. For each customer, find the matching company in HubSpot by email domain. Show the owner, the renewal date from {renewal_field}, open tickets and any note from the last 14 days. List customers with no match separately. Don't change any records.
3. Skip any account where a recent note says payment is on its way. For the rest, look up each owner in Slack by email, and draft one short alert per account for {channel}: who owns it, what's late, the account context, and one suggested save move. List owners you can't match. Show me the drafts.
4. Post each alert only after I approve it. Then give me a one-line summary: how many accounts are behind and the total amount late.

## Expected output

Past-due subscriptions with account context, and one Slack alert drafted. Example (all names fictional):

```
Stripe subscriptions behind on payment: 3. Open invoices past their due date: 4. Nothing has been changed in Stripe or HubSpot.

| Customer | Subscription | Unpaid invoice | Amount | Due | Days late | HubSpot owner | Renews | Open tickets |
|---|---|---|---|---|---|---|---|---|
| Fernhill Software (fictional) | Business, monthly | INV-1187 | $2,400 | Oct 1 | 15 | Priya Raman | Jan 30 | 2 (billing, login) |
| Mossgate Labs (fictional) | Team, annual | INV-1162 | $9,600 | Sep 24 | 22 | Sam Whitlock | Sep 24 (this invoice) | 0 |
| Larkspur Freightworks (fictional) | Business, monthly | INV-1191 | $3,100 | Oct 5 | 11 | Jordan | Mar 12 | 0. Note Oct 8: "new card coming from AP" |
| Quarry Lane Analytics (fictional) | n/a | INV-1170 | $750 | Sep 30 | 16 | No match on domain quarrylane.example | ? | ? |

Skipped: Larkspur (a note says a new card is on the way). Quarry Lane has no HubSpot match, so check it yourself.

Draft Slack alert to #cs-saves (not posted):
:warning: Payment behind: Fernhill Software (fictional)
Owner: @priya. Business plan, monthly. INV-1187 for $2,400 is 15 days past due.
Context: 2 open tickets, one about billing (Oct 9). Renews Jan 30. Champion: Dana Okafor, dana.okafor@fernhill.example.
Suggested move: Priya checks in with Dana today about the billing ticket before finance sends a second notice.

Reply 'post 1' or 'post all' to approve.
```

## Watch for

- Alerting on a customer who already paid: The customer may have paid another way, or told the owner a new card is coming. Check the HubSpot notes from the last 14 days for a payment or card comment, and skip anything with one.
- Draft or voided invoices counted as late: An invoice that was never finalized never reached the customer. Ask for open invoices only, and show each invoice's status and due date so you can spot drafts.
- Wrong owner pinged in Slack: The HubSpot owner's email may not match a Slack user. Match on email, list any owner without an exact match, and skip them instead of guessing.
- An accidental change in Stripe: Stripe's MCP server can void and finalize invoices, cancel subscriptions and issue refunds. Tell it up front the run is read-only, and stop it if it proposes any Stripe write.
