Stripe price change guides

How to bulk update Stripe subscription prices (without billing mistakes)

Changing one subscription is easy. Changing 2,000 without double-charging anyone needs a plan. Here's the runbook we use.

7 min read · By , Founder · Updated

Short answer

To bulk update Stripe subscription prices, create the new price, list every active subscription on the old price, and update each subscription item to the new price with proration_behavior=none. Run a small test batch first and keep a per-subscription log. You can script it against the API or use a Stripe App that runs the whole job from the Dashboard.

Or skip writing the script: the Change Subscription Price App, built by former Stripe Billing product managers and engineers, runs this whole runbook from your Stripe Dashboard with no code.

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 Marketplace

Most bulk price changes that go wrong don't fail at the API call. They fail on everything around it: a legacy discount nobody remembered, a few customers billed in EUR, subscriptions on a schedule that quietly reverts the change a month later. This runbook is built around those edge cases.

Step 1: Scope what you're actually changing

Export your active subscriptions (Dashboard → Subscriptions → Export, or via the API) and answer these questions before creating anything:

Step 2: Create the replacement prices

Add each new price to the same product as the old one. Revenue reports that group by product stay continuous, and you can tell at a glance who has migrated. Match the interval and currency exactly. Changing the interval at the same time forces a billing-cycle reset and an immediate invoice.

Once everyone has moved, archive the old price so it can't be picked for new subscriptions by mistake. Archiving has no effect on existing subscriptions. Exception: if Substack, beehiiv or Ghost created the price, leave it alone. Create new prices in the platform, not in Stripe, and don't archive the platform's old ones.

Step 3: Run a test batch

Pick five to ten real subscriptions, ideally including one with a coupon and one in each currency, and migrate only those. Then open each one's upcoming invoice and confirm three things: the new amount, the same renewal date, and no proration line items. It takes ten minutes and catches almost every configuration mistake.

You can also rehearse the whole job in test mode. Stripe test clocks let you fast-forward to renewal and see the actual invoice.

Step 4: Run the full migration

Two ways to do it:

With a script

Page through GET /v1/subscriptions?price=price_old, then call POST /v1/subscriptions/:id for each result with the existing item ID and the new price. Throttle requests, back off on 429 responses, send an idempotency key, and write every result to a file. Our script guide has a complete example.

With a Stripe App

The Change Subscription Price App runs the same loop from inside the Dashboard. Pick the subscriptions, set the new price, then choose run now or a scheduled date. Updates apply without prorations, so each customer pays the new price from their next billing cycle. Test mode is capped at 100 updates per job, which is enough to rehearse.

Why teams run bulk changes with the Change Subscription Price App

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 Marketplace

Step 5: Audit what actually changed

"Job completed" isn't the same as "every subscription updated." A card can be mid-dispute, a subscription can be locked by a schedule, a request can time out. Reconcile the per-subscription result log against your Step 1 export, and re-run only the failures. The Finrite app gives you this as a CSV for every completed job. Check it before you announce the migration is done.

Common bulk-update mistakes

Frequently asked questions

Is there a bulk edit for subscriptions in the Stripe Dashboard?

The Dashboard's subscription editor works on one subscription at a time. To move many subscriptions, run a script against the API or install a Stripe App built for bulk price changes, such as the Change Subscription Price App.

How many subscriptions can I update at once?

Stripe's API is rate-limited per account, so a script has to throttle itself and retry on 429 errors. Finrite's Change Subscription Price App handles batching for you. For jobs of more than 5,000 subscriptions, email contact@finrite.co first so we can plan capacity.

Can I bulk update only some customers on a price?

Yes. Filter by customer metadata, currency, status or creation date. In the Finrite app, filters are evaluated when the job looks up subscriptions, so data added after that lookup needs a new job.

What happens if a bulk update fails halfway?

Each subscription update is independent, so a partial failure leaves some subscriptions on the new price and some on the old one. That's why a per-subscription result log matters: re-run only the failures instead of the whole batch.

Related guides

Bulk price changes, run from your Stripe Dashboard

Select subscriptions, set the new price, and run it now or on a scheduled date. Every job produces a CSV report of what changed, so nothing fails silently.

Install from the Stripe App Marketplace

Read the app user guide first · Questions? contact@finrite.co