Here’s something most SaaS founders learn the hard way: your billing system will break at the worst possible moment. I’ve seen it happen. A company launches a new pricing tier, and suddenly customers are getting charged twice. Or a subscription cancellation doesn’t propagate properly, and someone gets free access for six months.
The truth? Subscription management isn’t just about charging cards monthly. It’s about orchestrating a complex dance between your product, your payment provider, your customers, and a dozen edge cases you haven’t thought of yet.

What Is SaaS Subscription Management?
At its core, SaaS subscription management is the system that handles the entire lifecycle of a customer’s subscription—from the moment they sign up to the day they cancel (and hopefully beyond). It encompasses billing, payment processing, plan changes, usage tracking, and customer communications.
But here’s where it gets interesting: subscription management isn’t just a billing function. It’s deeply intertwined with your product. When a customer upgrades, they need immediate access to new features. When they downgrade, you need to handle feature restrictions gracefully. When payment fails, you need to decide when (and how) to revoke access.
A proper subscription management system answers questions like:
- What happens when a customer upgrades mid-cycle?
- How do you handle failed payments without churning good customers?
- What do you do when someone cancels but their paid period hasn’t ended?
- How do you track usage for metered billing?
- What happens to entitlements when a subscription expires?
Why Most SaaS Billing Systems Fail
I’ve audited dozens of SaaS billing implementations, and the same patterns emerge. Most failures stem from one of three issues:
1. Treating Billing as an Afterthought
Developers often build the core product first, then slap on Stripe integration as the final step. This works until it doesn’t. When you need to support annual plans, add-ons, usage-based pricing, or international tax, you’re refactoring everything.
2. Ignoring Edge Cases
The happy path is easy. What happens when a customer upgrades on day 15 of a 30-day billing cycle? What if they upgrade, then immediately downgrade? What if their payment fails during a plan change? Each edge case needs explicit handling.
3. Poor Webhook Handling
Webhooks are the nervous system of subscription management. When Stripe sends a webhook about a failed payment, your system needs to respond immediately. I’ve seen companies lose thousands because webhook handlers were silently failing.
The Subscription Lifecycle: A State Machine
The best way to think about subscriptions is as a state machine. Each subscription exists in a specific state, and events trigger transitions between states.
| State | Description | Customer Access |
|---|---|---|
| Trialing | Free evaluation period | Full access (trial features) |
| Active | Paying subscriber, up-to-date | Full access based on plan |
| Past Due | Payment failed, retrying | Grace period access |
| Unpaid | Payment failed, retries exhausted | Restricted/suspended |
| Cancelled | Subscription ended | Access until period end |
| Paused | Temporary hold (if supported) | No access or limited |
Understanding these states is crucial because each one requires different behavior from your application. A customer in “Past Due” shouldn’t lose access immediately—you want to give them time to fix their payment method. But someone “Unpaid” probably shouldn’t be able to create new resources.
Implementing Proration: The Math That Matters
Proration is where most billing implementations get messy. When a customer changes plans mid-cycle, you need to calculate fair charges or credits. Here’s how it actually works:
The Proration Formula
Daily Rate = Plan Price ÷ Days in Billing Cycle Prorated Amount = Daily Rate × Days Remaining
Let’s say a customer is on a $90/month plan and upgrades to a $150 plan on day 10 of their cycle:
- Days remaining: 20
- Credit from old plan: ($90 ÷ 30) × 20 = $60
- Charge for new plan: ($150 ÷ 30) × 20 = $100
- Net charge: $100 – $60 = $40
Most payment providers (Stripe, Paddle, Fungies) handle this calculation automatically. But you need to understand it because your application logic depends on these values. When do you grant access to new features? Immediately? After the proration charge succeeds?
Dunning Management: Recovering Failed Payments
Here’s a stat that should wake you up: 80-90% of payment failures are “soft declines”—temporary issues like expired cards, insufficient funds, or bank security checks. These customers want to pay. They just need a nudge.
Dunning management is the automated process of recovering these failed payments. A good dunning system includes:
- Smart retry logic: Retry failed payments on day 1, 3, 5, and 7. Don’t hammer the same card daily.
- Customer notifications: Email customers when payment fails, with a direct link to update their card.
- Grace periods: Keep service active for 7-14 days while retrying.
- Escalation: After retries fail, downgrade to a free tier or suspend service.
Honestly, most SaaS companies under-invest here. A 10% improvement in failed payment recovery can mean thousands in monthly recurring revenue. At Fungies, we see recovery rates of 60-70% with proper dunning workflows.

Webhook Handling: The Critical Integration Point
Webhooks are how your payment provider tells your application that something happened. A subscription was created. A payment failed. A customer disputed a charge. Your webhook handler is the bridge between your billing system and your product.
Webhook Best Practices
- Verify signatures: Always validate webhook signatures to prevent spoofing.
- Handle idempotency: Webhooks can be delivered multiple times. Process each event only once.
- Return 200 quickly: Acknowledge webhooks immediately, then process asynchronously.
- Log everything: Webhook debugging is painful without good logs.
- Build retries: If processing fails, return a non-200 status so the provider retries.
Here’s a pattern I recommend: receive the webhook, store it in a queue (Redis, SQS, RabbitMQ), return 200, then process asynchronously. This prevents webhook timeouts and gives you visibility into processing.
Essential Subscription Metrics to Track
You can’t improve what you don’t measure. Here are the metrics every SaaS should track:
| Metric | Formula | Why It Matters |
|---|---|---|
| MRR | Sum of monthly subscription values | Your predictable revenue baseline |
| ARR | MRR × 12 | Annual view for forecasting |
| Churn Rate | Cancelled MRR ÷ Starting MRR | Customer retention health |
| Net Revenue Retention | (Starting MRR + Expansion – Churn) ÷ Starting MRR | Growth from existing customers |
| LTV | Average Revenue Per Customer × Customer Lifespan | How much a customer is worth |
| CAC | Sales + Marketing Spend ÷ New Customers | Cost to acquire customers |
Track these weekly. Set up alerts when churn spikes or MRR growth slows. These numbers tell you if your subscription business is healthy.
Building Your Subscription System: Implementation Checklist
If you’re building subscription management from scratch, here’s your roadmap:
Phase 1: Foundation (Week 1-2)
- Set up your payment provider account
- Create product and price entities in your database
- Build subscription creation flow
- Implement basic webhook handler
Phase 2: Lifecycle Management (Week 3-4)
- Implement subscription state machine
- Build plan change with proration
- Create cancellation flow
- Add trial support
Phase 3: Resilience (Week 5-6)
- Implement dunning management
- Add comprehensive webhook handling
- Build admin tools for subscription management
- Create customer self-service portal
Phase 4: Optimization (Ongoing)
- Add usage tracking for metered billing
- Implement add-ons and usage-based pricing
- Build analytics dashboard
- A/B test pricing and plans
When to Use a Subscription Management Platform
Building subscription management yourself is educational but time-consuming. Consider using a dedicated platform when:
- You need to support multiple pricing models (seat-based, usage-based, tiered)
- You’re selling internationally and need tax compliance
- You want advanced features like dunning without building them
- Your engineering team has higher-priority product work
Platforms like Fungies, Chargebee, or Recurly handle the complexity for you. At Fungies, we provide subscription management plus Merchant of Record services—meaning we handle tax compliance, fraud prevention, and global payments in one integration.
FAQ: Common Subscription Management Questions
How long should my dunning retry period be?
Most SaaS companies use a 7-14 day grace period. Retry on days 1, 3, 5, 7, and 10. After that, suspend service but keep data for 30 days in case they return.
Should I prorate when customers upgrade?
Yes, always. Customers expect fair billing. Charge them only for the days they’ll use the higher-tier plan. Most payment providers handle this automatically.
What’s the difference between cancellation and expiration?
Cancellation is a customer action—they’ve decided to leave. Expiration happens when a trial ends or a subscription term completes without renewal. Handle both with grace: keep access until the paid period ends.
How do I handle annual plans with monthly metrics?
Divide annual revenue by 12 for MRR calculations. This gives you consistent metrics even with upfront annual payments. Track both MRR and cash flow separately.
What’s a healthy churn rate for SaaS?
For B2B SaaS, 5-7% monthly churn is typical for early-stage companies, improving to 2-3% as you mature. B2C SaaS sees higher churn (5-10%). If you’re above 10%, investigate immediately.
Conclusion: Build for Scale
Subscription management isn’t glamorous, but it’s foundational. A broken billing system will cost you customers, revenue, and sleep. Invest the time to build it right—or choose a platform that handles the complexity for you.
At Fungies, we’ve built subscription management specifically for SaaS companies. We handle the proration math, the dunning workflows, the webhook processing, and the global tax compliance. You focus on building a great product.
Get started with Fungies today and see how simple subscription management can be when it’s built right.


