SaaS Pricing & Billing: Stripe Implementation, Plans, Metering and Annual Discounts
SaaS billing is where pricing strategy meets engineering reality. Per-seat, usage-based, hybrid, freemium, annual discount, dunning, proration, mid-cycle upgrade: every business decision creates an engineering decision. The good news: in 2026, Stripe Billing handles 80% of what you need out of the box. The challenge is the 20% that's specific to your business model. This guide is the reference implementation we ship at Alher Tech.
Pricing Models in 2026
- Per-seat: Most common in B2B SaaS. Predictable for the customer, easy to bill. Best when customer value scales with team size (Notion, Slack).
- Usage-based: API calls, transactions, AI tokens, storage. Aligns cost with value but creates billing-shock risk. Best when usage is variable and value is consumed.
- Hybrid (per-seat + usage): Base seats + overage on usage metric. The dominant model for AI-native and infra SaaS in 2026.
- Tiered / packaged: Starter / Pro / Enterprise with different feature sets. Common for self-serve. Watch for entitlement complexity at the code level.
- Annual contract / ACV: Custom pricing for enterprise. Negotiated discount on annual upfront. The default for $25K+ deals.
- Freemium: Free tier to drive adoption, paid tier for value. Works only when free has low marginal cost. Watch for free abuse.
Stripe Billing as the Foundation
- Subscriptions with multiple price tiers and configurable intervals
- Per-seat pricing with quantity adjustments mid-cycle
- Usage-based via metered billing + UsageRecord API
- Tax calculation via Stripe Tax (US, EU, UK, AU, more)
- Dunning: automatic retry on failed payments, customer email flows
- Customer Portal: self-service plan changes, payment method updates, invoice download
- Webhooks for every state change. Drive your application from these
- Stripe Tax for global tax compliance, which saves you from the mess of VAT, GST, sales tax
The Reference Implementation
- Customer + Subscription model: One Stripe Customer per workspace. One Subscription with one or more SubscriptionItems for different products. Don't conflate Customer with User: billing is at workspace level.
- Webhook handler: Idempotent receiver for all subscription state changes. Source of truth: Stripe. Your DB is a cache. customer.subscription.updated, invoice.payment_succeeded, customer.subscription.deleted are the critical ones.
- Entitlement layer: Map Stripe price IDs to feature flags. 'Customer has Pro plan' resolves to 'unlimited API calls + advanced reports'. Don't hardcode prices in your app; map them through entitlements.
- Usage metering pipeline: Track usage events in your app, batch-report to Stripe (every 5-15 min). Idempotent in case of retries. Cap reports per customer to prevent runaway bills.
- Customer Portal integration: One-click button to Stripe-hosted portal for plan changes. Reduces support tickets dramatically.
- Internal admin: Override controls for support/sales: free trials, custom discounts, manual subscription edits. Don't let this be a Stripe-only operation.
Common Patterns You'll Want
- Annual discount: separate price ID with the annual interval. Toggle on the customer portal lets users switch.
- Trial: trial_period_days on subscription. No credit card required for self-serve, card required for higher-touch.
- Proration: Stripe handles proration on plan changes. Test your handlers, because proration logic is subtle.
- Mid-cycle upgrade: instant access to new tier, prorated charge on the next invoice. Standard Stripe behavior.
- Mid-cycle downgrade: applies at the end of current period to avoid refunds. Also standard.
- Volume discount: tiered pricing on quantity. Bulk discount kicks in at break points.
- Usage caps: track usage in your app, soft-fail or alert before hitting hard cap. Don't let customers run up surprise bills.
Pricing Changes Without Migrating Customers
Pricing pages change. Customer pricing usually shouldn't, unless you want to retain them. The patterns:
- Grandfather existing customers: Keep old prices on existing subscriptions. New customers see new prices. Stripe handles this naturally: old subscriptions reference old prices.
- Migration with notice: 30-90 day notice email, opt-in to new pricing. Customer Portal lets them switch. Some leave; most stay.
- Forced migration: Last resort. Update all subscriptions on a date, accept some churn. Reserved for major repositioning.
- Add-on pricing: Don't change the base price; add new SKUs that customers can opt into. Lower friction, lower churn risk.
What Goes Wrong
- Webhook drift: webhooks missed, your DB and Stripe disagree. Run a daily reconciliation job.
- Entitlement bugs: customer downgraded but still has Pro features for a week. Drive entitlements off Stripe state, not local cache without TTL.
- Usage reporting failures: bug in metering = no charges, customer gets free service for a quarter. Monitor reporting volume.
- Tax surprises: forgot to enable Stripe Tax, owe back taxes. Enable from day one if you sell internationally.
- Failed-payment churn: payments fail, no dunning, you lose revenue silently. Configure dunning emails and grace periods.
- PCI scope creep: storing card details in your DB. Don't. Stripe Elements + tokenization keep you out of PCI scope.
Cost and Timeline
| Scope | Cost | Timeline |
|---|
| Basic Stripe + per-seat subscription | $10K – $25K | 2 – 4 weeks |
| Hybrid model with usage metering | $25K – $80K | 4 – 8 weeks |
| Full enterprise billing (custom contracts, ACV) | $60K – $200K | 8 – 16 weeks |
| Multi-currency, tax, regional pricing | $30K – $120K | 5 – 10 weeks |
Bill Like It's Production Engineering
Billing is the most important system in your SaaS; it's literally how you collect revenue. Treat it like production engineering: idempotent webhooks, reconciliation, monitoring, audit. The teams that don't pay for it later in lost revenue and customer trust.
Stripe Billing handles 80% of the work. The remaining 20% (entitlements, usage metering, custom contracts) is where engineering quality determines whether your billing is a moat or a liability.
Frequently asked questions
Should I use Stripe Billing or Chargebee/Paddle?
Stripe Billing for most SaaS in 2026: best dev tooling, best integration ecosystem. Paddle for international SaaS that wants merchant-of-record (handles tax/compliance for you). Chargebee for complex enterprise billing logic Stripe doesn't natively support.
How do I prevent runaway usage bills?
Soft caps with email alerts at 80% threshold. Hard caps that pause service or queue requests until next billing cycle. Customer-controlled spend limits in the portal. Trust matters more than maximum revenue.
Can I change pricing without losing customers?
Yes if you grandfather. Keep old prices on existing subs, new prices for new customers. Stripe handles this. Most SaaS run 3-5 historical price tiers in parallel.
What about taxes (VAT, GST, sales tax)?
Stripe Tax handles global tax calculation, registration where needed, and remittance in most jurisdictions. Enable from day one. Going back to fix tax 2 years in is expensive.
Do I need a separate billing system for enterprise?
Stripe Billing handles up to ~$1M ACV deals comfortably. Past that, custom contracts, RFPs, multi-year deals start needing CPQ tooling (Salesforce CPQ, Subskribe, Maxio). Plan the upgrade path.
Related guides