Unpaid invoice nudge: find overdue Stripe invoices and draft a follow-up for each deal owner
Stripe + HubSpot
Who it's for
AEs whose customers pay through Stripe and who want to know which sent invoices are still unpaid, matched to the HubSpot deal and owner, with a polite nudge drafted for each. Everything stays read-only. HubSpot can be swapped for Salesforce, Attio or Pipedrive.
What you get
Unpaid invoices matched to deals, with one draft nudge. Sample output: every company and person in it is fictional.
Stripe invoices sent and still open after 14 days: 4. Nothing has been changed in Stripe or HubSpot. | Customer | Invoice | Amount | Sent | Days open | HubSpot deal | Owner | |---|---|---|---|---|---|---| | Mossgate Labs (fictional) | INV-0412 | $18,000 | Sep 22 | 24 | Mossgate annual plan, Closed won | Jordan | | Fernhill Software (fictional) | INV-0398 | $6,500 | Sep 15 | 31 | Fernhill seat expansion, Closed won | Alex Rivera | | Quarry Lane Analytics (fictional) | INV-0405 | $2,400 | Sep 30 | 16 | No match on domain quarrylane.example | ? | | Larkspur Freightworks (fictional) | INV-0391 | $12,000 | Sep 12 | 34 | Larkspur renewal, Closed won. Note on Oct 9: "PO in procurement" | Jordan | Skipped: Larkspur (a note says the PO is in procurement, so it's already being handled). Quarry Lane has no matching deal, so check it yourself. Draft for Jordan to send (text only, not sent): To: [email protected] Subject: Invoice INV-0412 for your annual plan Hi Dana, A quick check on invoice INV-0412 for $18,000, sent on Sep 22. I don't see it as paid yet. Is it waiting on anything from our side, like a PO number or a W-9? Happy to resend it to whoever handles payables. Thanks, Jordan
Time and cost
Estimate About 10–15 minutes a week, most of it reading the drafts.
Assumptions: One weekly run over about 5 open invoices and their matching deals.
- Stripe: Reads only: open invoices and their customers. No writes. Credit use not confirmed by Stripe.
- HubSpot: A company, deal and owner lookup per invoice, plus recent notes on each deal. No writes. Credit use not confirmed by HubSpot.
Exact credit costs depend on your plan with each vendor. Check the tool pages before a large run.
MCP servers
Every server is confirmed in: ClaudeChatGPT
-
ClaudeChatGPTClaude CodeCursorRead + writeCredits not confirmed
https://mcp.stripe.com -
ClaudeChatGPTRead + writeCredits not confirmedNeeds admin or IT
https://mcp.hubspot.com
Set up in a chat app
Every server in this recipe is confirmed for Claude and ChatGPT. Connect each one, then paste the prompts below into one conversation.
- Connect Stripe without code (Claude, ChatGPT)
- Connect HubSpot without code (Claude, ChatGPT)
Developer setup
Auth setup and mcp.json for Claude Code and Cursor
- Stripe: Sign in with OAuth, or pass an API key as a Bearer token for headless use.
- HubSpot: Sign in with OAuth in your client (run
/mcpin Claude Code). Do it once interactively, and the client stores and refreshes the token.
Put this in .mcp.json (Claude Code, project root) or ~/.cursor/mcp.json (Cursor). Swap the example keys for your own, and don't commit real ones. Remove the // comment lines if your client requires strict JSON.
{
"mcpServers": {
"stripe": {
"url": "https://mcp.stripe.com"
// headless alternative: "headers": { "Authorization": "Bearer YOUR_STRIPE_API_KEY" }
},
"hubspot": {
"url": "https://mcp.hubspot.com"
}
}
}
Step-by-step prompts
- In Stripe, list my open invoices that were sent more than {days} days ago and are still unpaid: customer, customer email, invoice number, amount, status, sent date and days open. Leave out draft invoices. Read only. Don't change anything in Stripe.
- For each invoice, find the matching company and deal in HubSpot by the customer's email domain. Show the deal name, stage, owner and any note from the last 30 days. List invoices with no match separately. Don't change any records.
- Skip any invoice where a recent note says payment or a PO is in progress. For the rest, write a short, polite follow-up from the deal owner to the billing contact: invoice number, amount, sent date, and a question about what's blocking it. Show me the text only. Don't send anything.
- Give me a summary by owner: how many invoices, total amount open, and which drafts are ready. If I ask for a new payment link or any Stripe change, show me exactly what you'll do and do it only after I approve it.
Run it on a schedule (optional)
- Run it weekly, after your usual payment terms have passed, for example every Monday with {days} set to 14.
- In a scheduled run, stop at the table and the drafts. You send each email yourself.
- For a headless run, Stripe accepts an agent API key. From December 2026 it rejects full-access secret keys and restricted keys without the Agent tag, so use a restricted Agent key with read access only.
Where this goes wrong
- Nudging a customer who already paid. The customer may have paid another way, or already told the owner the payment is on its way. Before drafting, check the HubSpot deal notes for a recent payment or PO comment, and skip anything with one.
- Draft invoices counted as sent. An invoice that was never finalized hasn't reached the customer. Ask for open invoices only, and list each invoice's status so you can spot drafts.
- Wrong deal or owner. A Stripe customer name may not match the HubSpot company name. Match on email domain, show the domain next to each match, and leave unmatched invoices for you to check instead of guessing.
- An accidental change in Stripe. Stripe's MCP server can void and finalize invoices and create payment links. Tell it up front that the run is read-only, and stop it if it proposes any Stripe write.
Gotchas
- Stripe's listed tools cover invoices, customers and payment links, not quotes. HubSpot's MCP server can create quotes (beta) but reading quotes isn't listed. This recipe works from invoices only, so an unsigned quote that never became an invoice won't show up.
- HubSpot needs admin setup: non-admin users need a Super Admin to approve the connector first.
- In Claude Team and Enterprise, an owner must add the Stripe connector to the workspace before you can connect it.
- Stripe's MCP server can write: it creates, finalizes and voids invoices, and issues refunds with human confirmation. Connect with an account or restricted key that only has the read access this recipe needs.
- Using Salesforce instead? Its hosted MCP server needs Enterprise Edition or above and an admin-created External Client App. Use the read-only platform/sobject-reads server for this recipe, and note each tool call counts against your org's daily API quota.
Download
Get the prompts, guardrails and expected output as one Markdown file. Paste it into a Claude Project or ChatGPT project's instructions, or save it as CLAUDE.md for Claude Code.
Download unpaid-invoice-nudge.md
New recipe and breakage notes every week
Vendor sites: HubSpot. If we join an affiliate program, these links will be labeled as affiliate links.