Skip to main content
Polar currently supports migrations from Stripe. Polar helps you safely migrate customers, products, subscriptions, and payment data.
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.
  1. Move new sales to Polar — Polar becomes the billing system for every new customer.
  2. Connect your Stripe account — Polar gets read and cutover access only.
  3. Assess and import your catalog — Products and customers land in Polar; billing stays on Stripe.
  4. Move saved cards — Stripe copies cards to Polar for renewals after the switch.
  5. Switch billing to Polar — Selected subscriptions stop renewing on Stripe and continue on Polar.
  6. Reconcile and clean up — Confirm your application data is correct, then complete the cleanup.
The sections below walk through each stage in full.

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 the migreq_… 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.
Switching is not reversible. Review your selection before confirming it.

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
Keep your Stripe account available for past transactions. Historical Stripe payments do not become Polar orders.

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

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
A subscription that is not ready stays on Stripe. Resolve the issue and retry it later, or keep it renewing on Stripe.Polar also rechecks subscriptions during the switch. Subscriptions renewing within 24 hours or already scheduled to end remain on Stripe at that point.
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.
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
Your application remains responsible for mapping customers and translating billing events into access to your product.

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
Need help planning the migration? Contact Polar support.