Grandfathered pricing / price versioning
Existing customers stay attached to an old price version while a new price applies to later signups.
See it
What it is
Grandfathered pricing keeps existing customers on an older price after the public offer changes. Price versioning makes that possible by creating a new immutable price record and leaving each subscription attached to the version it originally received.
Reach for it when a price increase should apply only to new sales or when contracts promise a rate for a defined term. A migration can later move eligible subscriptions to a newer version immediately, at renewal, or after a notice period.
Gotcha: editing one shared price in place destroys billing history and can change customers unintentionally. Store price identity separately from plan features, document who qualifies for the old version, and decide what happens after upgrades, downgrades, cancellation, or reactivation.
Ask AI for it
Implement grandfathered pricing with immutable Stripe Price objects. Create a new Price for every public change, attach each Stripe Subscription Item to a specific price id, and never overwrite an active price. Route new Checkout Sessions to the current Price while renewals keep their assigned version. Add an auditable migration job that previews affected customers, updates Subscriptions at renewal, is idempotent, and records the old price, new price, reason, and notice date.