# See which closed-won deals in Close are actually paying in Stripe

> Match every won deal to its Stripe customer, spot the ones never billed, past due, or quietly churned, and see how much of your closed-won number was real.

- Workflow type: app
- Services: Close, Stripe, Slack Bot
- Categories: Sales, Finance
- Published: 2026-08-16

## What it does

- Lists every deal you marked closed-won in Close over the last 12 months next to the matching customer in Stripe, so booked value and real billing sit side by side.
- Splits the work into three tabs: won but never paid, paying but past due, and churned customers whose CRM record still looks healthy.
- Lets you chase the problem from the same screen by adding a task, logging a note, or changing the lead status in Close.
- Shows a running total of booked deal value versus revenue actually billed, and posts the week's churn and unpaid totals to your revenue channel in Slack.

## What you'll need

- A Close account with closed-won opportunities and the leads behind them.
- A Stripe account where your customers are billed.
- A Slack workspace, if you want to post the weekly churn and unpaid summary.
- Contact email addresses or company websites on your Close leads, since that is how deals get matched to Stripe.

## Prompt

Build me an internal app that answers the question my CRM cannot: of everything we marked closed-won in Close, who is actually paying us in Stripe. This is a reconciliation board I open and work through, not an alert that fires when a payment fails.

The main board lists every closed-won Close opportunity from the last 12 months, each one matched to its Stripe customer. Load won deals with the Close List Opportunities operation filtered to won status over a date range covering the last 12 months, and use Close List Leads to pull the lead record behind each opportunity along with its contact email addresses and company website. Each row shows the lead and company name, the deal value we booked, the close date, the matched Stripe customer, the subscription status, the amount actually billed, and any unpaid balance. Put the booked value and the billing reality side by side on the same row so the gap is obvious at a glance.

To get billing reality, match each deal to a Stripe customer with Stripe Search Customers, falling back to Stripe List Customers when a broader scan is needed. Once matched, pull that customer's Stripe List Subscriptions for subscription status and recurring amount, and Stripe List Invoices for paid totals, open invoices, overdue invoices, and unpaid balance. Stripe amounts come back in the smallest currency unit, so convert before displaying and format using the invoice currency.

A summary strip pinned to the top of the app shows booked deal value versus actually billed revenue across the visible set, plus the difference as both an amount and a percentage, so we can see how much of our closed-won number was fiction. Show the row count for each of the three tabs in that strip too.

The board splits into three tabs I work through. "Won but never paid" holds deals with no matched Stripe customer at all, or a matched customer with no active subscription and no paid invoices. "Paying but past due" holds customers carrying open or overdue invoices, sorted by unpaid balance descending so the biggest exposure is first. "Churned" holds customers whose subscription is canceled while the Close lead still looks like a happy account, and each of those rows should show the lead's current Close status next to the cancellation date so the contradiction is visible.

Matching rules matter. Try the lead's contact email addresses against Stripe first, and if nothing matches, fall back to the company domain taken from the lead's website URL compared against the domain of the Stripe customer email. Show a small badge on each row saying whether the match came from email, from domain, or was linked by hand, so I can tell how much to trust it.

Any unmatched deal needs a way to link it to a Stripe customer manually: let me search Stripe customers from the row, pick the right one, and save that link. Store these manual links in the app's own storage keyed by the Close opportunity or lead id, and check that stored mapping before doing any automatic matching, so the app remembers the link and never asks me about that deal again. Let me undo a manual link if I picked the wrong customer.

From any row I need to act without leaving the app. Create Task on the Close lead to chase collections or schedule a save call, with a due date I pick. Create Note on the Close lead to record what billing told me. Update Lead to flip the lead status to something like At Risk. Each action should confirm inline and refresh the row it came from.

Add a button that posts the week's churn and unpaid totals to our revenue channel using the Slack Bot Send a Message action. The message should summarize total unpaid balance, how many customers are past due, how many have churned, the total booked value that never turned into billing, and name the few largest offenders. Let me choose which channel it goes to.

Practical notes: page through both the Close and Stripe list results rather than reading only the first page, cache the fetched data for the session so switching tabs is instant and give me a manual refresh button, show a clear loading state on first load because this pulls from two systems, and handle deals whose lead was deleted in Close without breaking the board.

## How to customize

- Change the 12 month window to whatever period your team reviews, such as the current quarter or the last two years.
- Adjust what counts as a problem, for example treating an invoice as past due only after a set number of days.
- Pick which Slack channel gets the summary and what the message includes.

## FAQ

### What if a closed-won deal has no customer in Stripe?

It shows up in the "won but never paid" tab. That is usually the most valuable list in the app, because it is revenue you counted but never billed. If the match was simply missed, you can link the deal to the right Stripe customer yourself.

### How does it know which Stripe customer goes with which deal?

It tries the contact email on the Close lead first, and if that finds nothing it falls back to matching the company website domain. Every row tells you how it was matched, and you can always override it.

### If I link a deal manually, do I have to do it again next time?

No. The app saves the link and reuses it every time you open the board, so each deal only needs fixing once.

### Does this change anything in Stripe?

No. Stripe is read only here. The app never charges a customer, cancels a subscription, or edits an invoice. The only changes it makes are the task, note, or status update you choose to add in Close.

### Does it work if we bill with one off invoices instead of subscriptions?

Yes. It reads both subscriptions and invoices, so a customer who pays by invoice still shows real billed revenue and any unpaid balance, even without a recurring plan.

Use this prompt in General Input: https://www.generalinput.com/prompts/see-which-closed-won-deals-in-close-are-actually-paying-in-stripe