Requirements
- PCI DSS compliance: Your current processor must be able to export card data securely. Dodo Payments is PCI DSS Level 1 compliant. Share our Attestation of Compliance (AOC) with your processor if they ask for it.
- Live integration: Finish your Dodo Payments integration and send new customers to Dodo Payments checkout before the import. This keeps new sign-ups out of the old system.
- Authorization: You can request a data export from your current processor. This usually needs the account owner.
How Your Cards Move
- Stripe
- Paddle and other processors
You request a card export from Stripe to Dodo Payments. Stripe’s support team handles this request, and Stripe delivers the encrypted export to a secure location that Dodo Payments then retrieves it from. Your Solutions Engineer gives you the details to include in the request.This also covers billing platforms that run on Stripe, such as Polar, Lemon Squeezy, and Chargebee. The cards live in the underlying Stripe account.
Set Up Your Products
Make one subscription product in Dodo Payments for each plan and price you bill today, in the dashboard or with the API. Each product has a product ID of the formpdt_..., which goes in your subscriptions file.
- Make monthly and yearly plans as two separate products.
- Set the billing interval and trial on the product, not in the file.
- The import charges the full product price. It doesn’t apply coupons, discounts, or promotions. If a customer pays a reduced price today (a coupon, a legacy rate, or a discount), make a product at that exact price and use it for that customer. Tell your Solutions Engineer about these customers so they can confirm the amount.
- Set a long total subscription term, for example 10 years. The term starts on the original subscription start date (
started_at), not on the import date. A short term makes the import refuse the subscription.
Prepare subscriptions.csv
Send one CSV file with one subscription per row. If a customer has two subscriptions, use two rows and repeat the customer’s details on each.
A column marked Yes is required. Conditional means it’s required only in the case described. Keep every column in the header row, even optional ones, and leave the value empty when it doesn’t apply.
- Stripe
- Paddle
card_last4 is empty. The second has more than one, so card_last4 picks the card the subscription charges.card_last4 Rules
- Leave it empty when the customer has only one saved card.
- Fill it in when the customer has more than one saved card, so the import knows which card the subscription charges.
- Format the column as text in your spreadsheet. A card ending in
0042loses its leading zero in a number column. A stripped leading zero still matches, but text keeps the value clear.
Format Rules
- CSV, UTF-8 encoded, comma separated.
- Use the exact column names above in the header row, lowercase
snake_case. - Write dates in ISO 8601 UTC, for example
2025-04-01T00:00:00Z. Paddle files also accept2025-04-01and2025-04-01 00:00:00. first_billing_datemust be in the future and afterprevious_billing_date.- Don’t put the price or currency in the file. They come from the product.
- Wrap a value containing a comma, quote, or new line in double quotes, and write an embedded quote twice (
""). - Don’t put card numbers, expiry dates, or card tokens from Stripe in the file.
How the Import Runs
Your data goes through three checks before anything is written. Nothing is charged at import.1
Card export check
The card export is decrypted and checked for structure and card validity. You get a summary of how many cards are ready and which ones are skipped, such as expired cards.
2
Card dry run
The full card import is rehearsed without saving any card. This confirms every card can be imported.
3
Subscriptions check and dry run
Your
subscriptions.csv is checked against the format rules and joined to the cards, then every row is rehearsed against your products and account without creating anything.4
Approval and import
A second person on the Dodo Payments team approves, and the cards and subscriptions are imported.
Renewal Options
You choose how migrated subscriptions renew. The choice applies to the whole import.After the Import
- You receive a report that maps each old subscription ID (
stripe_subscription_idorpaddle_subscription_id) to its new Dodo Paymentssubscription_id. Use it to update your records. - You agree a go-live date with your Solutions Engineer, and the first billing cycle is monitored.
- We recommend checking a sample of migrated subscriptions in your dashboard.
Existing Customers
If a customer already exists in your Dodo Payments account, for example from an earlier migration, the import may create a new customer record for the subscription, linked to the migrated card. You then see two records for that person. This is expected. The check before the import lists these customers, so tell your Solutions Engineer if you want them handled differently.Migratable Data
PGP Key
Card exports sent over SFTP must be encrypted with the Dodo Payments PGP public key. Share it with your processor.Dodo Payments PGP Public Key
Dodo Payments PGP Public Key
07E7 A69F 2C48 5BF3 4026 40F6 6381 DFCF F34A 59CC.
For Your Processor
Send this section to your processor’s migration team. It covers what they need to upload the card export to Dodo Payments.- Send us an SSH public key. We sign in with keys only, not passwords. Send an
ssh-ed25519orssh-rsapublic key to your Solutions Engineer. Never send the private key. We reply with your SFTP username. - Encrypt the export with the Dodo Payments PGP public key. Check its fingerprint first.
- Check our host key on the first connection. It must match one of the fingerprints below.
- Upload the file, then tell your Solutions Engineer. Your account can upload files but can’t download or delete them.
Your processor can check the host key before connecting:
Timeline
Get Started
Contact Support
Start your migration and get connected with a Solutions Engineer.
Migrate other data
Move products, customers, and discounts with the migration tool.