Short answer
Creating a new price in Stripe doesn't change what current subscribers pay. Each existing subscription stays on the old price until you update its subscription item to reference the new price. You can do that one subscription at a time in the Dashboard, with a script against the Subscriptions API, or in bulk with a Stripe App. Set proration_behavior to none if the new amount should start at each customer's next renewal.
The easiest and safest route is the Change Subscription Price App, a no-code Stripe App built by former Stripe Billing product managers and engineers. It moves every subscription on a price in one job, and it handles the settings that usually cause billing mistakes.
Change Subscription Price App — by FinriteUpdate a price across all your Stripe subscriptions from the dashboard, in bulk. Built by former Stripe Billing product managers and engineers.
View on Stripe MarketplaceWhy don't existing subscribers get the new price?
A Stripe Price is a fixed record of an amount, a currency and a billing interval. Once it's created, the amount can't be edited; you can only archive it and create another price. A subscription doesn't store an amount at all. It holds subscription items, and each item points at a price ID.
So when you "raise the price" in Stripe, what you actually do is create price_new next to price_old. New customers checking out get price_new. Everyone already subscribed still points at price_old, and they renew at the old amount forever, unless you repoint their items.
That behavior is deliberate. Stripe never changes what a customer pays without an explicit instruction. It also means a price increase isn't finished until you migrate the existing base.
Your three options
| Method | Best for | Watch out for |
|---|---|---|
| Dashboard, one by one | Under ~20 subscriptions | The Dashboard's update flow defaults to prorating. Check the preview before saving each one. |
| API script | Teams with an engineer and time to test | Item IDs, quantities, pagination, rate limits, retries, schedules, and logging what changed. |
| Change Subscription Price App (recommended) | Any number of subscriptions, with no engineer needed | Very little. Prorations, item swaps, quantities and batching are handled for you. Subscription schedules aren't supported yet. |
Option 1: Change the price in the Stripe Dashboard
- Go to Product catalog, open the product, and add a new price with the new amount. Keep the same currency and interval as the price you're replacing.
- Open a customer's subscription and choose Update subscription.
- Replace the old price on the line item with the new one.
- In the proration options, turn prorations off if the change should start at the next renewal. Check the invoice preview, then save.
- Repeat for every subscriber.
Step 5 is the catch. It works for a handful of customers, but with a few hundred it becomes days of clicking, and it's easy to miss a proration toggle on one of them.
Option 2: Update subscriptions with the API
The API version of the same change is a single call per subscription. You pass the ID of the existing subscription item, so Stripe replaces the price rather than adding a second line:
curl https://api.stripe.com/v1/subscriptions/sub_123 \
-u "$STRIPE_SECRET_KEY:" \
-d "items[0][id]=si_abc" \
-d "items[0][price]=price_new" \
-d "proration_behavior=none"
For per-seat subscriptions, also pass the item's current quantity and check it afterwards. To find everything on the old price, call GET /v1/subscriptions?price=price_old&status=active and page through the results. Our price migration script guide covers the full loop, including dry runs, retries and an audit CSV.
Option 3 (recommended): The Change Subscription Price App
The Change Subscription Price App is a Stripe App built by former Stripe Billing product managers and engineers. It gives you Option 2's bulk power without writing code, and it has the safeguards built in:
- Pick the subscriptions. Choose everything on a given price, or filter to a subset.
- Pick the new price. The app swaps it onto each subscription's existing item, keeping the quantity.
- Run it now, or schedule it for the date in your customer announcement.
- Check the CSV report. Every job lists each subscription and whether it updated.
It runs inside your Stripe Dashboard, so there are no API keys to manage for your own subscriptions and nothing to deploy.
Should the change be prorated?
This one setting causes most price-change support tickets. Stripe's default when you update a subscription's price is create_prorations: it credits the unused time at the old price and charges the remaining time at the new price. The adjustment shows up as extra line items on the customer's next invoice.
For a price increase on a whole customer base, that's rarely what you want. You get a confusing partial charge on every customer's next invoice. proration_behavior=none is usually cleaner: this period stays at the old price, and the next renewal bills the new amount. The full breakdown, including always_invoice, is in Stripe proration_behavior explained.
One more rule: if the new price has a different interval (monthly to annual, say), Stripe resets the billing cycle and invoices right away, whatever proration setting you choose. For a straightforward price increase, keep the interval the same.
Where manual price changes go wrong, and how the app avoids it
The Stripe API call is simple. What breaks price migrations is everything around it. These mistakes turn up again and again, whether the change is made by hand in the Dashboard or with a script:
| Mistake | What happens | Change Subscription Price App |
|---|---|---|
| Leaving the default proration setting on | Every customer gets an unexplained partial charge on their next invoice | Always updates with no prorations |
| Leaving out the existing item ID | Stripe adds the new price as a second item, and the customer is billed for both | Always swaps the price on the existing item |
| Not passing the quantity again | Stripe's docs warn quantity can reset to 1, underbilling per-seat customers | Keeps each subscription's existing quantity |
| Missing subscriptions | Pagination bugs or narrow filters leave some customers on the old price | Finds every subscription on the price you pick |
| Rate limits and timeouts | A script dies halfway, leaving a half-migrated base | Batches updates for you |
| Running on the wrong day | Customers are charged before the notice period ends | Schedule the job for your announced date |
| No record of what changed | You can't reconcile, retry failures, or roll back cleanly | A CSV report for every job |
If you'd rather script it anyway, our migration script guide covers each of these by hand.
Change Subscription Price App — by FinriteUpdate a price across all your Stripe subscriptions from the dashboard, in bulk. Built by former Stripe Billing product managers and engineers.
View on Stripe MarketplaceWhat to check before you run it
- Subscription schedules. If a subscription is managed by a schedule, the next phase will reapply the schedule's prices and undo your change. Update the schedule instead, or release the subscription from it first. (The app doesn't support subscription schedules yet.)
- Who created the subscription. If Substack, beehiiv, Ghost or another platform created the subscriptions in your account, read that platform's guide first: Substack, beehiiv, Ghost.
- Discounts. Coupons stay attached when you swap the price. Decide whether legacy discounts should survive the increase.
- Multi-item subscriptions. Only change the item you mean to. Subscriptions with add-ons have more than one item.
- Notice. Stripe doesn't send a price-change email for you. Tell customers ahead of time.
- A test batch. Run the change on a few subscriptions, or in test mode, and inspect the upcoming invoice before touching everyone.
Frequently asked questions
Does changing a price in Stripe update existing subscriptions?
No. Stripe prices are immutable: you can't edit the amount of a price that exists. When you create a new price, only new checkouts use it. Every existing subscription keeps pointing at the old price until you update the subscription item itself.
Can I bulk change subscription prices in the Stripe Dashboard?
The Dashboard edits one subscription at a time. To move many subscriptions, loop over them with the API or use a Stripe App such as the Change Subscription Price App, which runs the update across every matching subscription from inside the Dashboard.
Will customers be charged immediately when I change their price?
Only if you let Stripe create prorations. With the default proration_behavior (create_prorations), Stripe adds a mid-cycle adjustment to the next invoice. With proration_behavior=none, the customer pays the old amount until the period ends and the new amount from the next renewal.
Does Stripe email customers about a price change?
Not specifically. Stripe won't send a “your price is changing” email when you update a subscription, so tell customers yourself, with whatever advance notice your terms and local rules require.
What happens to coupons and discounts when I change the price?
A discount attached to the subscription or customer stays applied after you swap the price item. A percentage coupon applies to the new amount; a fixed-amount coupon still takes the same amount off.
Related guides
Move every subscriber to the new price in one job
The Change Subscription Price App is a Stripe App built by former Stripe Billing PMs. Choose the subscriptions, set the new price, and run it now or on a date you pick, with no code and no mid-cycle prorations.
Install from the Stripe App MarketplaceRead the app user guide first · Questions? contact@finrite.co