How Recurring Payments Work in Stripe
What a recurring payment is and how Stripe handles it
A recurring payment in Stripe is a charge that repeats on a schedule you set—weekly, monthly, yearly, or any interval you choose. Stripe calls this a subscription, and it's the system that lets you bill customers automatically without asking them each time. The customer gives permission once, Stripe stores their payment method securely, and then Stripe charges them on the dates you specify.
Stripe doesn't hold the money itself. When a charge goes through, Stripe takes a small fee (usually 2.9% plus 30 cents per transaction, though rates vary by account type and country), deducts it, and deposits the rest into your bank account. That deposit happens on a schedule—typically every two business days, but the exact timing depends on your bank and your Stripe account settings.
The key difference between a one-time payment and a recurring one is permission and storage. For a one-time charge, the customer enters their card details and you process it once. For recurring, the customer authorizes Stripe to charge them repeatedly, and Stripe stores a token—not the full card number—that lets it bill them without asking again each time.
Key Takeaways
- Recurring payments in Stripe require the customer to authorize the charge once, and then Stripe bills them automatically on a schedule you set.
- Stripe stores a secure token of the payment method, not the card number itself, so you never handle the sensitive data directly.
- You set the amount, frequency, and start date in Stripe's dashboard or through its API, and Stripe handles the actual charging and deposit to your bank account.
- If a charge fails—card expired, insufficient funds, or the bank declines it—Stripe retries automatically according to rules you can customize.
- Customers can pause, change the amount, or cancel their subscription at any time through a link you provide or through your own customer portal.
Setting up a subscription in Stripe's dashboard
Start by logging into your Stripe account and going to the Products section. Create a new product and give it a name—for example, "Monthly Coaching" or "Premium Membership." Then add a price: enter the amount in your currency, choose the billing interval (daily, weekly, monthly, yearly, or custom), and save it.
Once the product and price exist, you can create a subscription in two ways. The first is through the Stripe dashboard: go to Customers, find or create the customer record, and click "Add subscription." Select the product and price you just made, choose a start date, and Stripe will charge them immediately or on the date you specify. The second way is to send your customer a payment link—Stripe generates a unique URL that they click, enter their payment details, and the subscription starts automatically.
Stripe will attempt to charge the customer on the billing date you set. If the charge succeeds, you'll see it in your Transactions list and the money will be scheduled for deposit to your bank. If it fails, Stripe retries according to a default schedule—usually three attempts over several days—before marking the subscription as past due.
How Stripe retries failed charges and what happens next
When a charge fails—because the card expired, the bank declined it, or the account has insufficient funds—Stripe doesn't give up immediately. It retries the charge automatically. The default retry schedule is three attempts: one on the day of failure, one three days later, and one five days after that. You can change this schedule in your Stripe settings under Billing.
If all retries fail, the subscription moves to a "past due" status. At this point, you have choices. You can let it sit (Stripe will keep retrying on the schedule you set), you can pause it, or you can cancel it. Many businesses send the customer an email when a charge fails, asking them to update their payment method. Stripe can send these emails for you automatically if you turn on email notifications in your settings.
The customer can also fix it themselves: if you give them a link to their subscription details, they can update their card, and Stripe will retry the charge. This is why many businesses include a "Manage your subscription" link in their welcome email—it saves you from having to chase customers down.
Storing payment methods securely and PCI compliance
Stripe's entire purpose is to keep you out of the business of storing credit card numbers. When a customer enters their card details on a Stripe payment form, Stripe converts it into a token—a long string of characters that represents that card but is useless to anyone who intercepts it. Stripe stores the token, not the card number.
This matters legally. If you store card numbers yourself, you have to meet PCI DSS (Payment Card Industry Data Security Standard) requirements, which are strict and expensive. By using Stripe, you avoid that. Stripe is PCI compliant, which means it has passed the audits and security checks that card networks require. You still have to keep your own systems secure—don't store tokens in plain text, don't log them, don't email them—but you're not responsible for the card data itself.
When you set up a recurring payment, the customer's card details are entered on a Stripe-hosted form (not your website), converted to a token, and that token is what Stripe uses to charge them each billing cycle. You never see the full card number, and neither does anyone else except Stripe and the card network.
Customizing subscription behavior and handling cancellations
Stripe lets you control what happens at each stage of a subscription. You can set a trial period—for example, the first 14 days free—and Stripe won't charge until the trial ends. You can set a billing anchor date, so all your customers renew on the same day of the month. You can add a setup fee that charges once when the subscription starts, separate from the recurring amount.
You can also customize what happens when a charge fails. In your Stripe settings under Billing, you choose how many times Stripe retries, how many days between retries, and whether to pause the subscription or cancel it after all retries fail. Some businesses want to be aggressive (retry many times, pause rather than cancel); others prefer to cancel quickly to avoid bad debt.
Cancellations can happen in two ways. The customer can cancel themselves if you give them access to their subscription details—this is the easiest path for both of you. Or you can cancel from the Stripe dashboard: find the subscription, click "Cancel subscription," and choose whether to cancel immediately or at the end of the current billing period. If you cancel at the end of the period, the customer keeps their access until then, and Stripe won't charge them again.
Tracking recurring revenue and understanding your deposits
Stripe's dashboard shows you every charge, every retry, and every refund. Go to Payments to see individual transactions, or go to Subscriptions to see the full list of active, paused, and canceled subscriptions. Each subscription record shows the customer, the amount, the next billing date, and the status.
Your deposits appear in your bank account on a schedule set by Stripe and your bank. Stripe batches transactions and deposits them every two business days by default, though some accounts deposit daily. You can see the exact deposit date and the transactions included in it by going to Payouts in your Stripe dashboard. Each payout shows the gross amount charged, Stripe's fees, any refunds or chargebacks, and the net amount deposited.
If you need to track recurring revenue for accounting or forecasting, Stripe's API and webhooks let you pull subscription data into your own system. Many accounting software packages integrate directly with Stripe, so charges and deposits sync automatically without manual entry.
Common problems and how to fix them
The most common issue is a charge failing because the customer's card expired or was replaced. Stripe retries automatically, but if all retries fail, the subscription goes past due. The fix is to email the customer with a link to update their payment method. Stripe can send this email for you if you enable it, or you can send it yourself and include a link to their subscription details.
Another issue is duplicate charges. This usually happens when a customer accidentally submits the form twice, or when a webhook (a message from Stripe to your system) gets processed twice. To prevent this, make sure your code checks whether a subscription already exists before creating a new one. Stripe provides webhook signatures so you can verify that messages actually came from Stripe and not from someone else.
A third issue is refunds and disputes. If a customer requests a refund, you can issue one from the Stripe dashboard—select the charge and click "Refund." The money goes back to their card within a few business days. If a customer disputes a charge with their bank (a chargeback), Stripe notifies you and holds the money while the bank investigates. You can respond with evidence that the charge was legitimate, but chargebacks are expensive and time-consuming to fight.
Frequently Asked Questions
Can I change the amount or frequency of a subscription after it starts?
Yes. In the Stripe dashboard, find the subscription and click "Edit." You can change the price, the billing interval, or both. The change takes effect on the next billing date. If you want to change it immediately and prorate the difference, Stripe can calculate that for you—for example, if you upgrade mid-cycle, Stripe charges the difference right away and adjusts the next billing date accordingly.
What happens if a customer's card is about to expire?
Stripe doesn't know the expiration date in advance, so it finds out when the charge fails. When the charge fails, Stripe retries according to your retry schedule. The customer can update their card at any time through their subscription details page, and Stripe will retry the failed charge once they do. Some payment networks send Stripe updates when a card is reissued, but this doesn't happen for all cards.
Can I offer a discount or coupon for recurring subscriptions?
Yes. In Stripe, you create a coupon (a fixed amount or percentage off) and then apply it to a subscription. You can do this when you create the subscription, or you can add it later by editing the subscription. The discount applies to the next billing cycle and every cycle after that until you remove it. You can also create a promotion code that customers enter themselves at checkout.
What if I need to pause a subscription instead of canceling it?
Stripe lets you pause a subscription, which stops billing but keeps the subscription record active. The customer can resume it later, or you can resume it from the dashboard. This is useful for free trials that turn into paid subscriptions, or for customers who want to pause temporarily without canceling.
How do I know if a charge actually went through?
Check your Stripe dashboard under Payments. Each charge shows a status: succeeded, failed, or pending. If it succeeded, you'll see the amount, the date, and the customer. The money is scheduled for deposit to your bank account according to your payout schedule. You can also set up webhooks so your own system gets notified the moment a charge succeeds or fails.