Subscription and billing ops is an automation that runs the recurring billing lifecycle: generating invoices, retrying failed payments, chasing expiring cards, applying upgrades and downgrades, and flagging revenue that should have been billed but was not. The dunning follow-ups that recover a failed charge run on their own. Disputes and refunds stay with a person. Most teams are live in two to three weeks.
The problem
Recurring revenue looks automatic until you watch what actually keeps it running. A card expires and the next charge silently fails. A customer upgrades mid-month and someone has to work out the proration by hand. An annual plan renews and nobody sends the heads-up. A charge that should have gone out never does, because a subscription was set up wrong months ago. It sits across Stripe, your billing tool, and your CRM, and the person who catches it is usually whoever opens the failed-payment report last.
Put a number on it. Paddle, the billing platform that owns ProfitWell, reports that "involuntary churn makes up between 20-40% of your overall churn", meaning customers lost to failed payments, not to a decision to leave. For a subscription business losing $6,000 of monthly recurring revenue to churn, that 20 to 40% share is $1,200 to $2,400 a month draining out over expired cards and declined charges, roughly $14,000 to $29,000 a year of revenue that walks out the door without anyone choosing to cancel. ($6,000 at 20 to 40% is $1,200 to $2,400 a month; the share is Paddle's, the dollar figure is that share scaled to the churn.)
The lost charges are only the visible part. The quieter cost is the customer who was locked out over a card they would happily have updated, and who now remembers you as the tool that cut them off. It is the upgrade that was never billed at the higher rate, so you delivered the bigger plan for the smaller price. It is the renewal that lapsed because no one was watching the date. None of it shows up as a cancellation, and all of it is revenue you already earned.
How the automation works
It runs the billing calendar and catches every charge.
It watches Stripe and your billing system for upcoming renewals, failed charges, and cards about to expire, and generates the invoices that are due.
It retries, chases, and adjusts.
When a payment fails, it runs a retry schedule and sends the dunning sequence, the automatic emails that ask the customer to update their card, on the timing that recovers the most without nagging. It applies upgrades, downgrades, and proration when someone changes plan, and checks what was billed against what should have been.
It recovers, updates, and flags the rest.
Recovered payments and clean plan changes post back to billing and update the customer's record in your CRM. Anything it should not touch on its own, a dispute, a refund request, a charge it is not certain is correct, goes to a person with the context attached.
The pieces are proven: Stripe's retry and card-updater tools, dunning email sequences, billing-system connectors, and a queue for the exceptions. The real work is the wiring. This automation touches real customer charges, so the one thing it can never do is double-charge an account or dun a customer who already paid, which is the fastest way to lose a good customer and earn a chargeback. The hard part is the edge cases: proration when someone changes plan mid-cycle, a partial refund that has to net against the next invoice, an annual and a monthly plan on the same account, a payment that succeeded but posted late. So it is built to act only where the rule is unambiguous and to hand anything uncertain to a person. Disputes and refunds always stay with a human. That is what gets set up, tested, and handed over during implementation.
What this looks like in practice
Billing in Stripe, customer records in Attio, one ops person who owns the failed-payment report.
- Failed payments get chased by hand, when someone remembers, so about $2,000 of monthly recurring revenue quietly lapses over expired cards and declines.
- Mid-cycle upgrades and downgrades are worked out manually, and the occasional one gets billed at the wrong rate or never adjusted at all.
- A locked-out customer's first sign of trouble is losing access, which turns a fixable card issue into a support complaint and sometimes a cancellation.
- Failed charges trigger a retry schedule and a dunning sequence, so most recover before the customer ever notices.
- Plan changes and proration are applied the moment they happen, and any charge the system is not sure about is flagged instead of guessed.
- Cards nearing expiry get a heads-up before they fail, so the fixable cases get fixed early instead of after a service cutoff.
Typical impact
Typical ranges for this pattern, not client claims. Your numbers get modeled in the audit.
Systems it connects
Plus most tools with an API. The audit maps your exact stack.
Who this fits
- Recurring revenue that runs on cards, so failed payments and expiries are a standing monthly leak
- 10 or more employees, with someone who owns billing but no time to chase every declined charge
- Subscriptions, upgrades, downgrades, and renewals living across Stripe or your billing tool and a separate CRM
- You want a person to own disputes, refunds, and edge cases, not hand real customer charges to a black box