Stripe migrations are rolling out gradually. If Migrations is not available in your
organization settings, contact Polar support.
Before you begin
You need an active Polar organization that is ready to sell, plus access to the Stripe account so you can create API keys. The mode of your Stripe key must match the Polar environment: live for production or test for sandbox. Stripe Connect platform accounts and Stripe accounts in India cannot connect to the automated flow.How coexistence works
During the migration, your merchant app talks to both billing systems. New customers check out on Polar. Existing subscriptions keep renewing on Stripe until you switch them through Polar.Migration overview
The first and last stages happen in your application. The four stages in the middle match the journey under Settings → Migrations in Polar.- Move new sales to Polar — Polar becomes the billing system for every new customer.
- Connect your Stripe account — Polar gets read and cutover access only.
- Assess and import your catalog — Products and customers land in Polar; billing stays on Stripe.
- Move saved cards — Stripe copies cards to Polar for renewals after the switch.
- Switch billing to Polar — Selected subscriptions stop renewing on Stripe and continue on Polar.
- Reconcile and clean up — Confirm your application data is correct, then complete the cleanup.
1. Move new sales to Polar
Goal: Make Polar the billing system for every new customer. Integrate the Polar API and webhooks into your application. New checkouts create their orders and subscriptions in Polar. Existing Stripe subscriptions continue renewing in Stripe.
Set
external_customer_id to your stable application customer ID when creating
a checkout. Polar stores it as the customer’s external_id, making it easy to
map your IDs to Polar once and look up the customer later. Keep Stripe IDs in
your database while subscriptions still renew there.
Continue when: You have tested a complete purchase.
2. Connect your Stripe account
Goal: Give Polar only the access needed to prepare and perform the migration. Create a restricted API key in Stripe and add it to your migration in Polar. The Polar dashboard asks for the minimum permissions needed to read and migrate your billing data, then validates the account before continuing. Nothing has moved yet. Stripe still owns every existing subscription. Continue when: Polar shows the Stripe account as connected.3. Assess and import your catalog
Goal: Decide what can move and prepare the records those subscriptions need in Polar. Polar assesses your recurring products, prices, customers, and subscriptions. You review what is ready and what needs attention, then import your selection.
Polar does not create Polar subscriptions or change Stripe billing at this
stage. Leave unsupported subscriptions on Stripe until you resolve them or
choose another path.
Continue when: You are clear on which subscriptions and related data will
be imported.
4. Move saved cards
Goal: Give Polar a payment method for the subscriptions it will renew. Follow the checklist in Polar to start an account-to-account copy in Stripe. Stripe sends saved card details directly to Polar’s payment processor. They never pass through your application or the migration interface. Continue when: Stripe has completed the card copy. Sandbox can verify application behavior, but real card copies require live Stripe accounts. See Saved card transfer under Migration details for timing and themigreq_… ID.
5. Switch billing to Polar
Goal: Make Polar responsible for future renewals of the subscriptions you select. Polar rechecks each selected subscription, prepares its matching Polar subscription, stops it on Stripe, and activates it in Polar with the same paid period. The next renewal happens in Polar; the customer is not charged again for time they already paid for. Polar handles both sides of the switch. Do not manually activate a matching Polar subscription, as this can cause double billing. If a subscription renews within 24 hours, Polar leaves it on Stripe to avoid a billing conflict and give you time to react if something goes wrong. A subscription already scheduled to end also stays there because there is no future renewal to take over. At the next renewal after a successful switch, Polar attempts to charge the copied card. If a payment method is missing, the renewal fails and Polar emails the customer to add their card again. Continue when: Every selected subscription shows as moved, skipped, or failed, and every subscription left on Stripe has a clear next action.6. Reconcile and clean up
Goal: Remove the old billing paths without losing access to historical records. Compare the migration result with your own customer and access records. Confirm that each subscription bills in only one place. Retire Stripe checkout and subscription processing only when no subscriptions remain there. If exceptions still live on Stripe, keep the webhooks, scheduled jobs, and secrets they need. Done when:- New sales and moved subscriptions are managed in Polar
- Any exceptions are intentionally managed in Stripe, with their required processing still running
- Your team knows where to handle support, refunds, and reporting
What customers experience
Most customers do not need to take action. Their current paid period remains unchanged, and their next renewal happens in Polar after the switch. For a subscription in a trial, Polar keeps the trial end date and takes over billing when the trial ends. If Polar cannot charge a card at renewal, the payment fails and the customer receives an email asking them to add their card again. A copied card can still fail for the same reasons as any other card. Customers continue to find receipts, refunds, and disputes for past Stripe payments through the experience you already provide. Polar only creates orders for payments it processes.Migration details
Subscriptions that need attention
Subscriptions that need attention
Polar shows why a record cannot move automatically. Common examples include:
- Multiple subscription items or a quantity greater than one
- Products without a supported recurring price in your organization’s default currency, or with ambiguous prices
- Past-due, unpaid, or paused subscriptions
- Payment methods that cannot be copied
Saved card transfer
Saved card transfer
Only the owner of your Stripe account can start the account-to-account copy.
In Polar, download the customer mapping file and copy the provided destination
account ID into Stripe. After starting the copy, paste the Stripe migration
ID (
migreq_…) into Polar.Polar usually accepts the request within one business day. Stripe then moves
the card data, usually within a few hours and sometimes up to 72 hours.Checklist for your application
Checklist for your application
Every integration is different. Before removing your Stripe code, confirm:
- Which internal user or account maps to each Polar customer
- Which webhook grants, changes, and revokes access
- Where support looks up purchases made before and after the migration
- Which system handles refunds and disputes for each transaction
- Whether any job still creates Stripe Checkout Sessions, invoices, or subscriptions
- How you monitor subscriptions intentionally left on Stripe
Coding assistant prompt
Optional. If you use a coding assistant that can inspect your repository, expand the prompt below. It asks for a migration plan and reconciliation contract before any code changes. Review that plan before asking it to implement anything. Never paste Stripe or Polar secrets into a conversation.Migration assistant prompt

