Migrate from Stripe to Adyen
Move from Stripe (usage 2.9% + $0.30) to Adyen (interchange++ ~EUR 0.11 + scheme fee). Both are PCI-compliant PSPs, so card vault data can be transferred PCI-to-PCI. Plan 4-10 weeks of engineering: rewrite checkout, re-tokenize cards, rebuild webhook handlers, renegotiate acquiring. Best fit when TPV is high enough that lower per-transaction cost outweighs Stripe's faster DX. Consult official docs for current procedures.
β± Estimated effort: 4-10 weeks for a mid-size SaaS; 2-6 months for a marketplace using Connect. Add 2-4 weeks for PCI vault transfer lead time and Adyen underwriting.
Why switch
- Lower effective rate at scale: interchange++ vs blended 2.9% + $0.30
- Single global acquirer across EU/US/APAC reduces FX and cross-border fees
- Unified online + in-store (POS) processing on one platform
- Direct access to 250+ local payment methods without third-party connectors
- Stronger enterprise SLAs and dedicated account management
- Richer raw data (network tokens, settlement detail) for finance and risk teams
Data to export
- Customer records (Stripe customer IDs, email, metadata)
- Saved payment methods / cards (pm_ and card_ tokens via PCI export)
- Active subscriptions and their billing anchors / schedules
- Recurring mandates (SEPA, ACH, BACS)
- Open invoices and payment intents in non-terminal states
- Historical charge / refund / dispute records (for reporting and chargebacks)
- Webhook endpoint URLs and signing secrets
- Coupons, promotion codes, and tax rates
- Connected accounts (if using Stripe Connect)
- Radar rules and fraud allow/block lists
- Product / price catalog used in Checkout
- Payout / bank account configuration
Exporting from Stripe
Request a PCI-compliant card data export from Stripe support β they transfer encrypted card vault data directly to Adyen under a tripartite data transfer agreement. For non-card data (customers, subscriptions, invoices, charges), use the Stripe API or Sigma to dump CSV/JSON, plus Dashboard CSV exports for most resources. Build a customer-to-token mapping so migrated cards land on the correct Adyen shopperReference. Allow 2-6 weeks lead time for the PCI handoff. Consult official docs for the latest export procedure.
Importing into Adyen
Adyen ingests the PCI export and re-tokenizes cards into its vault, returning shopperReference / recurringDetailReference values you map back to your customer IDs. Non-card data is loaded via the Adyen Management / Checkout APIs or CSV import for recurring details. Re-implement checkout (Drop-in or Components from @adyen/adyen-web), set up Standard Notification webhooks with HMAC signing, and configure merchant accounts per region. Run both processors in parallel during cutover and validate with test transactions on migrated cards. Consult official docs for current import endpoints.
Concept mapping
How Stripe concepts translate into Adyen.
| Stripe | Adyen | Note |
|---|---|---|
| Customer | Shopper (shopperReference) | String identifier you supply; not auto-generated |
| PaymentMethod (pm_/card_) | Stored payment method (recurringDetailReference) | Created via PCI handoff or first-charge tokenization |
| PaymentIntent / Charge | /payments call | Single-step; 3DS handled via /payments/details |
| SetupIntent | Zero-auth /payments with storePaymentMethod=true | Tokenize without charging |
| Refund | Refund modification | Async; result delivered via notification webhook |
| Webhook endpoint | Standard Notification (HMAC-signed) | Different signing model β verify via HMAC key, not signing secret |
| Subscription | No native object β orchestrate with stored tokens | Pair with Chargebee/Recurly or roll your own cadence |
| Stripe Checkout | Adyen Drop-in / Hosted Payment Pages | Sessions API on Adyen side; different config model |
| Stripe Elements | Adyen Components (@adyen/adyen-web) | Per-method components; different DOM API |
| Radar | RevenueProtect | Rule engine differs; rules are not portable |
| Connect (platforms) | Adyen for Platforms | KYC/onboarding model differs; not a drop-in swap |
| Stripe Tax | External tax engine | Limited native tax β pair with Avalara/TaxJar |
Watch out for
- β Adyen webhooks are async β code that relied on Stripe's synchronous charge result must be refactored
- β No native Subscription object β billing logic stays in your app or a billing layer
- β HMAC notification signing differs from Stripe's signing-secret model; verification code must be rewritten
- β Pricing is interchange++ with negotiated scheme fees β true cost only visible after first month's invoice
- β Minimum monthly fees and annual contracts apply; not a fit for low-TPV merchants
- β Connect β Adyen for Platforms is not a drop-in migration; KYC/onboarding flows must be rebuilt
- β Local payment methods (iDEAL, SEPA, etc.) need separate enablement per merchant account and region
- β Test environment uses different card numbers and merchant accounts β full QA pass required
Draft email to Stripe
Copy-paste-ready data export request.
Hi Stripe team, We are migrating our payment processing to Adyen and would like to coordinate the offboarding. Could you please: 1. Initiate a PCI-compliant card data export to Adyen β we will share the receiving contact and data transfer agreement separately. 2. Confirm timeline and any required forms. 3. Keep the account active in read-only mode for 90 days after cutover so we can reconcile historical charges, refunds, and disputes. 4. Provide final invoices and confirm the closure date. We appreciate the partnership and the platform quality β this decision is driven by scale economics, not by any service issue. Thanks, [Your name]