I worked for Stripe for about a year on ‘Developer Support’ (basically helping people integrate, fix issues, etc) and that team is also responsible for data migrations. While doing that I even moved my (now defunct, for the most part) side project Bugrocket from Braintree to Stripe.
So, from the export-from and import-to Stripe perspective, I can give you a pretty detailed breakdown. IMO it’s really very simple and smooth.
Let’s assume you want to move to Stripe:
- Contact your current payment provider and discuss your intent to move. Provide them with (an HTTPS link to) Stripe’s Data Migration PGP key. Also contact Stripe and discuss your intent to move. They’ll basically just say cool either have your current provider let us know when the export is ready or let you know and then tell us.
- Your current provider should be essentially creating a CSV or similar file with all of your customer data (not subscription info) and then encrypting it with Stripe’s key. Most providers have their own similar keys and so this should generally be true going Stripe->somewhere else (eg here is Braintree’s). Once ready, ideally, they should encrypt credentials which Stripe will use to retrieve the export, from someplace like perhaps an FTP server, also with the data migration key. Sometimes they’ll just provide these (encrypted) credentials to you to avoid having to contact Stripe and have them figure out for whose data these credentials are for.
- Once Stripe has your data they decrypt and just go ahead and create customers in your account as closely matching the data from the export as possible given Stripe’s customer schema. Then they’ll provide you with a mapping of your previous provider IDs to new Stripe customer and/or card IDs.
- Take that mapping, and write some kind of script on your end to look at your customers and re-create their current subscription state in your app on Stripe. I put a
payment_provider field on my accounts and set it to
braintree and then I just went through each one and made new subscriptions for them on Stripe etc, and set it to
stripe. Once everyone is set to
stripe you’re done.
The biggest effort on your part would be step 4 of course. But really it wasn’t that complex to do that myself with my app. The trickiest part was figuring out any mismatches between how Stripe works and the other provider works. Definitely spend some time in the docs before attempting it. You may also want to start using Stripe for new customers before the migration so that you can leisurely convert your old ones over without having to worry about another migration for people who were new between the last one and when you’re ready to switch people over.
Also worth noting that not all providers are created equal, so sometimes they dig in their heels on some of the stuff in the list above. Like Authorize.net, they refuse(d?) to use Stripe’s GPG key and instead have just some kinda password protected archive. I forget the name but we had quite a few imports from some antiquated provider that insisted on mailing Stripe a CD . PayPal just ignores all attempts at communication for the most part, of course. And so on.
Still, 99% of the time it’s just a few days long process of coordination, and then a bit of a dev project for you once the card info you need is in your new account.
I hope that’s useful, and if you have any other questions about data migrations - I’d be happy to help out. As, I’m certain, would the helpful folks over in the Stripe IRC channel (#stripe on Freenode).