Stripe Subscription Billing: Complete Guide
Stripe’s subscription billing system is powerful but complex. Between billing intervals, trials, proration, coupons, metered usage, and webhooks, there are dozens of decisions that affect how your customers are charged and how your revenue is recognized. Getting these right from the start saves enormous headaches later.
This guide walks through every major aspect of Stripe subscription billing — from initial setup to advanced configurations — with practical advice for SaaS businesses at any stage.
How Stripe Subscriptions Work
At its core, a Stripe subscription ties a Customer to one or more Prices (which belong to Products). Stripe automatically generates invoices on a recurring schedule, attempts to collect payment, and manages the subscription lifecycle.
The basic objects involved are:
- Product — what you sell (e.g., “Pro Plan”).
- Price — how much it costs and how often (e.g., $49/month). A single product can have multiple prices for different billing intervals or tiers.
- Customer — the person or company being billed, with a payment method on file.
- Subscription — the link between a customer and their price(s), with status tracking, billing cycle management, and metadata.
- Invoice — generated automatically each billing period. Contains line items, tax, discounts, and payment status.
For more on tracking what these subscriptions generate, see our guide on understanding MRR.
Setting Up Your First Subscription
To create a subscription, you need a Product with at least one Price, and a Customer with a valid payment method. You can set these up through the Stripe Dashboard or via the API.
Through the Dashboard
- Go to Products and create a new product with a recurring price.
- Navigate to Customers, select or create a customer, and click “Create subscription.”
- Choose the product/price, configure the billing cycle anchor if needed, and confirm.
Through the API
For most SaaS applications, you’ll create subscriptions programmatically after a customer signs up and enters their payment details. The typical flow uses Stripe Checkout or a custom payment form with Stripe Elements, then creates the subscription via the API.
The API approach gives you full control over the customer experience and lets you pass metadata, set trial periods, and apply coupons at creation time.
Billing Intervals and Cycles
Stripe supports flexible billing intervals:
- Monthly — the most common for SaaS. Customers are billed on the same date each month.
- Yearly — typically offered at a discount (e.g., two months free). Annual plans reduce churn and improve cash flow.
- Weekly — less common but useful for certain business models.
- Custom intervals — Stripe supports any interval in days or weeks for non-standard billing cycles.
The billing cycle anchor determines the day of the month when invoices are generated. By default, it’s the day the subscription was created. You can override this to align all customers to the same billing date, which simplifies revenue reporting and invoice management.
Try StripeReport Free
Get the Stripe revenue reports you’ve been missing
MRR tracking, cash flow forecasts, churn analytics, and daily email reports — all from your Stripe data. 3-day free trial.
Start Your Free Trial →Free Trials
Trials let customers use your product before being charged. Stripe handles trials natively with two approaches:
- Trial with payment method upfront: The customer enters their card at signup but isn’t charged until the trial ends. Higher conversion to paid because the billing transition is automatic.
- Trial without payment method: No card required to start. Lower barrier to entry but requires a separate step to collect payment when the trial expires.
Set the trial period when creating the subscription using trial_period_days or trial_end (a specific timestamp). Stripe automatically handles the transition from trial to active billing.
Best practice: keep trials between 7 and 14 days. Longer trials don’t meaningfully improve conversion but delay revenue. The key is giving customers enough time to experience your core value proposition.
Proration
Proration handles the billing math when a customer changes their plan mid-cycle. For example, if a customer upgrades from a $20/month plan to a $50/month plan halfway through the billing period, proration ensures they’re only charged the difference for the remaining days.
Stripe’s proration behavior is configurable:
- Create prorations (default): Stripe generates credit and debit line items on the next invoice to account for the plan change.
- Always invoice immediately: Charge the prorated amount right away instead of waiting for the next billing cycle.
- None: No proration. The new price takes effect at the next billing cycle. Simpler but less fair to customers.
For a deeper dive into managing plan changes, check our subscription management best practices guide.
Coupons and Discounts
Stripe supports flexible discounting through coupons and promotion codes:
- Percentage-based coupons: e.g., 20% off for 3 months.
- Fixed-amount coupons: e.g., $10 off per month.
- Duration options: once (first invoice only), repeating (for N months), or forever.
- Promotion codes: customer-facing codes that map to coupons. Useful for marketing campaigns and partner deals.
Coupons can be applied at the customer level (affecting all their subscriptions) or at the subscription level (affecting only that subscription). Be deliberate about which approach you use, especially if customers can have multiple subscriptions.
Metered Billing
Not all SaaS products fit a flat monthly fee. Metered billing (also called usage-based billing) charges customers based on how much they actually use. Think API calls, messages sent, storage consumed, or compute hours.
How It Works in Stripe
- Create a price with
recurring.usage_typeset tometered. - During the billing period, report usage to Stripe via the Usage Records API.
- At the end of the period, Stripe tallies the usage and generates an invoice with the calculated amount.
Metered Billing Models
- Per-unit pricing: $0.01 per API call.
- Tiered pricing: first 1,000 calls at $0.01, next 10,000 at $0.005.
- Volume pricing: total usage determines the per-unit rate for all units.
- Graduated pricing: each tier has its own rate, and usage spans multiple tiers.
Many SaaS companies combine metered and flat-rate billing — a base subscription fee plus usage-based charges for consumption above a threshold.
Try StripeReport Free
Get the Stripe revenue reports you’ve been missing
MRR tracking, cash flow forecasts, churn analytics, and daily email reports — all from your Stripe data. 3-day free trial.
Start Your Free Trial →Webhooks: Responding to Billing Events
Webhooks are the backbone of any serious Stripe integration. Instead of polling the API to check for changes, Stripe sends real-time notifications to your server when events occur. For subscription billing, the critical webhooks include:
- invoice.payment_succeeded — a payment was collected successfully. Update the customer’s access or send a receipt.
- invoice.payment_failed — a payment attempt failed. Trigger your dunning process.
- customer.subscription.updated — a subscription changed (plan upgrade, downgrade, or cancellation scheduled).
- customer.subscription.deleted — a subscription was canceled. Revoke access and trigger offboarding or win-back flows.
- customer.subscription.trial_will_end — sent 3 days before a trial expires. Use this to send conversion emails.
Always verify webhook signatures to ensure the events are genuinely from Stripe. And build your webhook handlers to be idempotent — Stripe may send the same event more than once.
Subscription Best Practices
After helping thousands of SaaS companies manage their Stripe billing, these patterns consistently lead to better outcomes:
- Offer both monthly and annual plans. Annual plans improve cash flow and reduce churn. Price them at a 15–20% discount to incentivize longer commitments.
- Collect payment method upfront for trials. It feels like higher friction, but trial-to-paid conversion is dramatically better when the card is already on file.
- Use metadata generously. Stripe metadata fields let you attach your internal IDs, plan identifiers, and other context to subscriptions. This makes debugging and reporting much easier.
- Handle edge cases in proration. Test what happens when customers upgrade, downgrade, and switch between monthly and annual mid-cycle. These scenarios trip up many implementations.
- Monitor invoice failures proactively. Don’t wait for churn to tell you payments are failing. Track failed payment rates and recovery rates as core metrics.
- Keep your product catalog clean. Archive old products and prices rather than deleting them. Use clear naming conventions so your team can navigate the dashboard easily.
Tracking Your Subscription Revenue
Once your billing is running, you need visibility into what your subscriptions are generating. Key metrics to track include MRR, ARR, churn rate, expansion revenue, and revenue per customer. Manually calculating these from Stripe data is tedious and error-prone.
StripeReport connects to your Stripe account with a read-only API key and automatically calculates these metrics in real time. You get a live MRR dashboard, churn tracking, revenue forecasting, and daily reports delivered to your email or Slack — without building any of it yourself.
Whether you’re setting up your first subscription or managing thousands, getting the billing foundation right and maintaining clear visibility into your revenue data are the two things that matter most for long-term SaaS success.