Request a PAN data import
Stripe enables you to bring along your existing customer data and import it into your Stripe account. We work with your current payment provider to securely migrate your data over, including payment information. This allows you to continue charging customers without interruption or asking them to provide their payment details again.
Migrating data to Stripe is a three-step process:
- Build your Stripe integration
- Ask your current processor to transfer your data to Stripe.
- Update your integration to complete the migration.
After the migration process is complete, you can process all of your payments on Stripe.
We recommend that you build and test your Stripe integration before requesting data from your current processor. This gives you plenty of time to verify and test your new integration. If you have any questions about the migration process or integrating with Stripe, let us know.
Build your Stripe integration
Stripe simplifies your security requirements so that your customers don’t have to leave your site to complete a payment. This is done through a combination of client-side and server-side steps:
- From your website running in the customer’s browser, Stripe securely collects your customer’s payment details.
- Stripe responds with a representative token.
- The browser submits the token, along with any other form data, to your server.
- Your server-side code uses that token in an API request (for example, when creating a charge).
This approach streamlines your website’s checkout flow, while sensitive payment information never touches your server. This makes it easy for you to operate in a PCI-compliant way, which can provide a significant time and financial benefit over your current setup.
Compared to other payment processors, a Stripe integration can differ in the following ways:
- Your customer never leaves your website.
- Token creation isn’t tied to a specific product or amount.
- There’s no need to create a client-side key on-demand. You use a set, publishable API key instead.
Prepare your integration
We recommend that you implement the following as you create tokens and charge all new customers:
- Collect and tokenize customer card information with one of our recommended payments integrations.
- Use Customer objects to save the card information.
- Create charges for these new customers.
Using this approach, you can accept payments on Stripe without impacting your current customers.
Important considerations
Before you ask your payment processor to transfer data to Stripe, you should be prepared to:
- Remap customer records.
- Handle updates to payment information during the migration.
Remap customer records
You need to remap Customer records on your end after the migration. For example, a customer with an email address of jenny.rosen@example.com has an ID of 42 in your database, which corresponds to a customer ID of 1893 in your previous processor’s system.
After the migration, this same customer has an ID of cus_12345 in your Stripe account. Stripe provides an import mapping file so you can update your database with the new references.
As an alternative to creating a new customer in your Stripe account for each unique customer ID in the files we receive from your prior processor, we can import the payment method data from prior records into existing Stripe customer objects instead. To choose this option:
In the intake request form Do you want to import data into Stripe Customer objects that already exist in your Stripe account?, choose Yes.
Prepare a CSV mapping file containing two columns:
old_customer_id
—The unique identifier used by your previous processorstripe_customer_id
—That customer’s corresponding Stripe customer ID incus_xxxx
format
Don’t include sensitive data in the file.
When we receive the intake form, email you a request for the CSV mapping file. Reply to the email with the prepared file.
Handle updates to payment information
Customers might need to update their payment information after you ask your previous processor to transfer your data but before it’s received and imported by Stripe. During this window, payment method changes submitted to your previous processor will be lost as they aren’t included in the transferred data. Furthermore, these changes also can’t be made on Stripe as the data hasn’t been imported yet and the customer’s new Stripe customer ID isn’t yet known.
To best handle this, you should make changes to your site’s process for handling updates to saved payment information. This includes preparations to perform a self-migration for any customer without a stored Stripe customer ID:
- Create a new Customer object in Stripe for your customer.
- Attach the payment method to the
Customer
object. - (Optional) Recreate the subscription.
Updating your integration to handle these possibilities can prevent your customers from seeing errors or experiencing billing issues.
After the migration takes place, card-triggered updates, such as an expiration date change, are automatically handled by Stripe.
Ask your current processor
When you’ve built your integration and are ready to process payments on Stripe, it’s time to request your payment data from your previous processor. Having the account owner contact the processor aids in this process, as most will only initiate a data transfer upon the account owner’s request.
After requesting the data transfer from your previous processor, let us know. Stripe can import your customer payment details (such as credit cards and bank account information for ACH and SEPA payments) and billing address information. Stripe can’t, however, import any subscriptions—these need to be recreated separately.
Don’t send sensitive credit card details or customer information directly to Stripe. If you have this data, please reach out so that we can help you securely transfer your data.
It can take between a few days and several weeks for your previous processor to transfer the final data to Stripe, so make sure to allow for this transition time in your migration plan. If the data we receive can’t be used, we’ll outline any issues and work with your previous processor to correct the data.
After your previous processor transfers your data, Stripe begins importing it into your account. Stripe creates a Customer for each unique customer in the transferred data file, and creates and attaches the customer’s cards as Card or Source objects. If the transferred data indicates the customer’s default card, we set that as the customer’s default payment method for charges and subscription payments.
This import process usually occurs within 10 business days of receiving complete and correct data from your previous processor.
Update your integration
Once the import process is complete, Stripe sends you a JSON file that maps your current processor’s IDs to the imported Stripe object IDs—you’ll need to parse this mapping file and update your database accordingly. If you build your Stripe integration before attempting to import it, your system would have handled any card updates that happened during the transition.
After you update your integration with this mapping file, you can begin charging all your customers on Stripe. In the following example:
- Customer ID 1893 is imported as a new Customer with ID cus_abc123def456.
- The customer’s card with ID 2600 is imported as a new Card with ID card_2222222222.
- The customer’s card with ID 3520 is imported as a new Card with ID card_3333333333.
You can request that the data be imported as PaymentMethods when you submit the migration request to us, if you prefer. In this format, the only change to the mapping file is that IDs are in the form pm_2222222222.
If a customer’s credit card is declined after you complete the migration, ask them to provide their card’s CVC number or to update their card information. When that’s done, attempt the charge again.
Work with subscriptions
If you’re using subscriptions or a similar type of recurring billing at your current processor, switching to Stripe requires two additional steps:
- Creating pricing models in your Stripe account, using the same pricing and billing interval that you do with your current processor.
- Recreating the subscription for each customer in Stripe when remapping your customer records.
When remapping your customer records, you need to recreate the subscription for each customer in Stripe. Set each subscription’s billing cycle anchor to bill the customer on the correct day of the billing cycle. For example, if it’s the 1st day of the month and a customer had already paid for a monthly subscription through to the 15th, create the new Stripe subscription and set billing_cycle_anchor
to a timestamp that falls on the 15th. This is to make sure you continue to bill your customer on the 15th of each month, as expected.
You can also use the Subscription schedules API for more flexibility with start dates and subscription continuity. With this API, you can schedule subscriptions to start in the future. For example, it’s the only way to start monthly subscriptions more than 30 days in advance. The ability to start subscriptions in the future also allows you to review the import before you start to bill your customers in production.
See the subscriptions migration guide for more details about migrating subscriptions from other processors to Stripe. After leaving your payment processor, confirm that any automatic billing of your customers has been canceled.
Migration PGP key
If you’re unfamiliar with PGP, see GPG and start by importing a public key. After you familiarize yourself with the basics of PGP, use the following PGP key to encrypt sensitive data (like credit card information) for PCI-compliant migration.
If you have any questions, or encounter any issues, please contact us via our intake form.
PGP migration key
After you import our key, you can encrypt files to send by running:
gpg --encrypt --recipient 9C78B7620C1E99AD FILENAME
This creates FILENAME.gpg with the following information:
- Key ID:
9C78B7620C1E99AD
- Key type: RSA
- Key size: 4096 bits
- Fingerprint:
AEBF 7C48 38C4 4D2F DC99 A3F9 9C78 B762 0C1E 99AD
- User ID:
Stripe Import Key (PCI) <support-migrations@stripe.com>