The short version: A Stripe price is immutable, so you can't edit an amount. You create a new price and move each existing subscription onto it, which keeps the subscription and its billing date. Set proration_behavior: none (or schedule for the next cycle) so nobody is charged mid-cycle. Editing a plan inside a platform like PMPro, MemberPress, beehiiv, Ghost, or Substack only changes what new customers pay, existing customers keep their old rate until you move them in Stripe. This guide covers the method, how to do it safely in bulk, how to reverse it, and the per-platform specifics.
Why your existing customers still pay the old price
Every recurring subscriber is a Stripe subscription pinned to the price that existed the day they signed up. Changing a price, or editing a membership level, tier, or plan in whatever tool you use, only affects people who subscribe afterward. Existing subscribers are grandfathered onto their original amount and stay there until their subscription is deliberately moved to a new price. That is by design (nobody gets surprise-charged), but it is also why raising your price never reaches the customers you already have.
The method: create a new price, move the subscription
Since a price's unit_amount can't be edited, re-pricing an existing subscriber is always two steps:
- Create a new price on the same product in Stripe (the new amount).
- Update the subscription's line item to point at the new price.
stripe.subscriptions.update("sub_123", {
items: [{ id: "si_123", price: "price_newAmount" }],
proration_behavior: "none",
});The proration_behavior setting decides whether anyone is charged now. For a straightforward increase you almost always want no mid-cycle charge: pass none, or schedule the change for the next renewal. Defaulting to create_prorations by accident is the most common way a re-price generates angry "why was I charged?" emails. Full detail: proration_behavior and create_prorations, explained.
Doing it in bulk (and safely)
One subscription is a single API call. Hundreds or thousands is where it gets risky. A safe bulk run:
- Processes in small batches with brief pauses (Stripe rate-limits writes).
- Uses idempotency keys and retries on 429/5xx so a retry can't double-apply.
- Paginates past the first 100 subscriptions.
- Records a per-subscription result and has a rollback plan before touching live data.
Test the entire run in Stripe test mode first. Full walkthrough: how to bulk-update Stripe subscription prices safely. If you'd rather not script it, PricePilot Migrate Pro does the batching, retries, pagination, preview, and reverse for you.
Timing: now, or at the next renewal
Two clean patterns, both with no mid-cycle charge:
- Next billing cycle, use a Stripe subscription schedule so the new price takes effect at each subscriber's own renewal. See how to schedule a Stripe price increase.
- Immediately, no proration, the active price changes now (useful if a downstream system reads it) but billing still only happens at renewal.
Want to keep some customers on their old rate? That's grandfathering, done by excluding the right subscriptions when you migrate.
Know how to reverse it
Before any live run, know your undo: move subscriptions back to the original price, or release scheduled changes that haven't fired. Capture each subscription's original price first, and watch the archived-price gotcha (if you archived the old price, reactivate it before moving anyone back). See how to reverse a Stripe subscription price change.
By platform
If your subscriptions were created by a subscription platform rather than by your own code, the same method applies as long as the platform puts native Stripe subscriptions in your own Stripe account. It does for these, and none of them let you bulk re-price existing subscribers on their own:
Merchant-of-record tools (where the platform, not you, is the seller) and tools that run their own billing ledger don't put a modifiable Stripe subscription in your account, so this method doesn't apply to them.
Re-price your existing Stripe subscribers without the scripting
Connect a restricted key, preview every affected subscriber and the MRR impact for free, choose your timing, and run it in safe batches with a one-click reverse. Test mode is free end to end.
Open Migrate Pro →Frequently asked questions
Can you change the price of an existing Stripe subscription?
Yes. You create a new price and move the subscription onto it (you can't edit a price amount directly). The subscription keeps its ID and billing date.
Does changing a Stripe price affect existing customers?
Not on its own. A price or plan change applies to new signups; existing subscribers stay on their old rate until you move them deliberately.
How do I avoid charging customers mid-cycle?
Use proration_behavior: none or schedule the change for the next billing cycle.