Guide · Zombie subscriptions
Zombie subscriptions: the silent revenue killer hiding in your Stripe account
How a paused-but-active subscription goes from "we will sort this out next week" to thousands of dollars of foregone revenue without anybody noticing, and a repeatable way to find and resolve every one.
Somewhere in most Stripe accounts more than a year old, there is at least one subscription that still says active, still gives the customer full access to your product, and has not generated a cent in months. That is a zombie subscription, and it is one of the easiest revenue leaks to create by accident and one of the hardest to notice after the fact.
A zombie subscription is a Stripe subscription that is still reported as active but is no longer billing the customer, almost always because someone paused collection with pause_collection and never resumed it. The status reads active, so your app keeps the customer's access on, but Stripe is creating no invoices and moving no money. The fix is simple once you find it: resume collection or formally cancel. The hard part is finding it, because nothing in the dashboard nags you about a subscription that has been paused too long. This guide explains how a zombie subscription forms, why it tends to land on your most valuable customers, and how to find every one in your account.
What a zombie subscription actually is
A healthy subscription cycles: an invoice is generated each period, a charge is attempted, money moves. A zombie subscription has had that cycle switched off while the subscription itself stays alive. On Stripe, the mechanism is almost always pause_collection.1 When you pause collection, Stripe stops generating and attempting invoices, but the subscription stays in an active state. Your application, which usually checks subscription status to decide whether to grant access, sees active and keeps the lights on for the customer.
Stripe offers three pause behaviors, and the difference matters when you are estimating what a zombie subscription has cost:
| Pause behavior | What Stripe does with invoices | Net effect on revenue |
|---|---|---|
void |
Voids invoices created during the pause | Gone, not recoverable even later |
keep_as_draft |
Holds invoices as drafts | None now; could be finalized later |
mark_uncollectible |
Marks invoices uncollectible | None; effectively written off |
All three produce a subscription that is active but collecting nothing, which is the definition of a zombie. The void behavior is the starkest: invoices generated during the pause are voided outright, so the revenue is simply gone, never to be collected even retroactively.
How a subscription becomes a zombie
A zombie subscription is almost never created maliciously. The usual path is a support interaction. A customer asks to pause while they sort out a budget, or a founder pauses a friendly early customer as a courtesy, or billing is paused during a migration. Pausing is the right call in the moment. The problem is that pause_collection has no built-in expiry and no reminder.1 Stripe will keep a subscription paused indefinitely. The person who paused it moves on, the ticket closes, and three, six, or twelve months later the subscription is still active, still granting access, and still billing nobody.
This is a governance gap, not a Stripe bug. Discounts that renew by default, plans that never fully retire, and access that outlives billing all share the same root cause: no system is watching for the state that was supposed to be temporary.3 A zombie subscription is just the most literal version of access outliving billing.
The scenarios are familiar once you look for them. A customer hits a cash crunch and asks for a month or two of breathing room. A founder pauses a design-partner account during a long enterprise onboarding. Billing is paused while a data migration runs and the team means to flip it back on the same week. In every case the pause is reasonable and the intent is to resume, but intent is not a system. The follow-up lives in someone's head or a closed support ticket, and when that person gets busy, the pause quietly becomes permanent.
Why zombies are so expensive
Two things make a zombie disproportionately costly relative to how many you have. First, they tend to land on high-value customers. The accounts that get a manual courtesy pause, a hands-on migration, or a special arrangement are usually your bigger ones, not your $9-a-month long tail. Second, the loss is forward-looking and compounding. A $299-a-month subscription that has been a zombie for four months has already lost about $1,200, and it keeps losing $299 every month until someone notices. The right way to value a zombie is the annualized revenue at risk if it is never resumed: $299 a month is roughly $3,600 a year walking out the door, per zombie.
Audits typically find only a handful of these per account, often one to five, but because of the dollar values involved, that handful can be the single most valuable thing a revenue audit surfaces. Industry estimates put total billing-related revenue leakage at 1 to 5 percent of revenue for most companies, and as high as 9 percent for fast-growing SaaS, with forgotten subscription states a recurring contributor.5 6
The compounding is what makes a paused-but-active subscription so dangerous. Unlike a one-off failed charge, which is a fixed loss, a paused subscription keeps losing the same amount every billing cycle, so the gap between what the account looks like it earns and what it actually collects widens a little every month. Worse, nothing in normal reporting flags it: a churned customer shows up as churn, but a paused one shows up as a perfectly healthy active customer who simply is not being charged, which is far easier to miss.
How to find zombie subscriptions
There are two practical ways. The manual way, in Stripe Sigma, is to query for subscriptions where the status is active but pause_collection is not null, then join to the plan to estimate the monthly value at risk. The query is not hard to write if you are comfortable in SQL, and Sigma has full access to the data you need. The catch is remembering to run it on a cadence, because a zombie created tomorrow will not show up in a query you ran today.
The other way is a revenue audit that includes a zombie subscription check and runs the correlation for you, returning the count, the affected customers, and the annualized dollar value at risk without anyone writing SQL. Manual detection across a large account is genuinely hard, because you have to cross-reference every subscription's status against its collection state and then value each one.4
How a Stripe revenue audit surfaces zombies
A revenue audit looks at every active subscription and flags the ones where collection is paused. Bleedpoint's zombie subscription check identifies the canonical pattern directly: a subscription in active status with collection paused, regardless of which of the three pause behaviors was used. For each one it records the customer, the plan, and the annualized revenue at risk, calculated as the plan's monthly amount times twelve, because that is the forward-looking value you stand to recover by resuming, or keep losing if you do not.2
As with every check in an audit, this is a diagnostic. It tells you which subscriptions are zombies and what each is worth. It does not resume billing or contact the customer. Resuming a paused subscription is a deliberate action you take in Stripe, ideally with a customer heads-up so that a charge on a long-dormant subscription does not surprise them.
That is what Bleedpoint does: connect with read-only access, run the zombie subscription check alongside four other revenue-leak checks, and return a PDF report with each zombie, its plan, and its annualized value. The sample report includes a zombie subscription finding so you can see exactly how it is presented before you connect anything.
What to do once you find one
Finding a paused-but-active subscription gives you a clean decision: resume it or cancel it. Resume when the customer should still be paying and simply slipped through, but give them notice first, because the next invoice will arrive after a long quiet period and an unexpected charge is a fast route to a dispute. Stripe will not retroactively bill the months that were voided during the pause, so treat that as a sunk loss and focus on restarting the recurring revenue cleanly.
Cancel when the customer genuinely should no longer have access, and revoke that access in your app at the same time so you are not giving the product away for free after billing has stopped. Either way, record why the pause happened in the first place. The accounts that avoid a repeat are the ones that treat every manual pause as a temporary state with an owner and a follow-up date, rather than a fire-and-forget toggle.
Do it yourself or use a tool
If you are comfortable in SQL and disciplined about cadence, the Sigma query for a zombie is one of the more approachable ones to maintain, and there is a real case for doing it yourself. The argument for a tool is not that the query is hard. It is that a zombie is a recurring risk, not a one-time cleanup. You fix the ones you have today, and three months from now a new courtesy pause has quietly become a new zombie. A periodic audit that bundles this check with the other four is how you catch the next one without it becoming a standing reminder on someone's calendar.
Frequently asked questions
What is a zombie subscription?
A zombie subscription is a subscription that Stripe still reports as active but that is no longer generating revenue, almost always because billing was paused with pause_collection and never resumed. The customer usually still has access to your product because your app reads the subscription status as active, but no invoices are being created and no money is moving.
How do I find zombie subscriptions in Stripe?
In Stripe Sigma you can query for subscriptions where the status is active but pause_collection is not null, then join to the plan to estimate the monthly revenue at risk. Alternatively, a revenue audit tool that includes a zombie subscription check runs that correlation for you and returns the count, the customers, and the annualized dollar value without any SQL.
What does pause_collection do on a Stripe subscription?
Pausing collection tells Stripe to stop generating and attempting invoices while keeping the subscription in an active state. Stripe supports three pause behaviors: void, which voids invoices created during the pause; keep_as_draft, which holds them as drafts; and mark_uncollectible, which writes them off. All three produce a subscription that is active but collecting nothing, which is the definition of a zombie.
How much do zombie subscriptions cost?
The cost is forward-looking and compounding. A subscription that has been paused for several months has already lost that many months of revenue and keeps losing more until someone notices. Zombie subscriptions also tend to land on higher-value customers who received a manual pause, so even one or two can represent thousands of dollars of annualized revenue at risk.
How do I fix a zombie subscription?
Once you have found a zombie subscription, the fix is to resume collection so billing restarts, or to formally cancel it if the customer should no longer have access. Either way it is worth giving the customer a heads-up first, so that a charge on a long-dormant subscription does not surprise them. A read-only audit identifies zombies but does not resume or cancel them for you.
Will an audit resume or cancel my paused subscriptions?
No. A read-only audit reads your billing data and produces a report listing each zombie subscription and its value. It cannot resume collection, cancel a subscription, create a charge, or contact a customer. Any action on a zombie subscription is something you take deliberately in the Stripe Dashboard.
Find the zombies before they cost you another quarter.
Free scan. See exactly what you're leaking, then unlock the full report for $99. Read-only access, no subscription required.
References
- Stripe. Pause payment collection on a subscription. Stripe Documentation. docs.stripe.com
- Stripe. Subscriptions overview and lifecycle. Stripe Documentation. docs.stripe.com
- BluLogix. SaaS Revenue Leakage Doesn't Start with Payments, It Starts with Governance. blulogix.com
- RevReclaim. What is Revenue Leakage in SaaS? The Complete Guide. On the difficulty of manual detection at scale. revreclaim.com
- TeamCloudSource. The Anatomy of Revenue Leakage in Subscription Models. Industry estimates of 1 to 5 percent, up to 9 percent for fast-growing SaaS. teamcloudsource.com
- Lago. Revenue Leakage in SaaS: How Billing Gaps Cost 1-5% of ARR. Citing MGI Research. getlago.com