This article covers in detail how to migrate customer data from PayPal to Stripe using Stripe's resources as well as custom logic. Baremetrics customer, Sync with Connex, shared with us how they accomplished the migration.
Joseph Anderson is the Founder and CEO of Sync with Connex, a SaaS company that automates data entry between QuickBooks and online e-commerce channels. After using PayPal for payment processing for 10 years, he decided to switch to Stripe’s platform.
He decided to migrate from PayPal to Stripe because PayPal’s software and data reporting were insufficient for Sync with Connex’s needs. With Stripe, Joseph gained developer-friendly features and the ability to integrate with third-party applications like Baremetrics for smarter analytics.
In this guide, he explains how Sync with Connex successfully handled a full PayPal to Stripe migration, including the code he used to edit specific subscription information, create subscriptions, and update customers after they had been imported to Stripe.
Overview: How did Sync with Connex do it?
Although Stripe and PayPal are both payment gateways, they are very different tools. The attributes of a customer in Stripe are different from how they’re organized in PayPal.
Because of this, Sync with Connex completed the migration by the following process:
- First, Sync with Connex worked with Stripe’s migration team to import PayPal customer data into Stripe using a spreadsheet prepared by PayPal. PayPal sent Stripe the customer information and Stripe imported the data. The spreadsheet included customer name, email, and credit card information.
- Some user accounts were marked as active, instead of cancelled.
- Some users had incorrect plan levels associated with their account.
- Some Sync with Connex accounts were incorrectly associated with their PayPal accounts.
This article will explain exactly how Sync with Connex accomplished these steps, starting with important learnings to be aware of before getting started.
5 Key Points to Know before Migrating from PayPal to Stripe
As Sync with Connex migrated from PayPal to Stripe, they overcame a number of challenges to get their existing customer data to fit into Stripe’s environment.
1. You must use the Stripe API to import subscription information, legacy pricing, and contact info.
Joseph recommends creating a spreadsheet, then writing code to import the spreadsheet to Stripe.
If your business offers different products with different subscription tiers, you will be able to see which product each customer is signed up for, but not the subscription tier.
Rather, you must edit your Stripe accounts by manually importing a spreadsheet of RP numbers (this is what PayPal calls customer IDs), their new Stripe Price ID, the member since date, the next payment date, and payment frequency (monthly / yearly).
Some Sync with Connex users have legacy pricing. The logic Sync with Connex used said that “If the “member since date” was prior to 6/1/2019, then choose the legacy Price ID. Otherwise, use the new Price ID.” When you make your spreadsheet to import, ensure the price ID is accurate for legacy users. Stripe allows the same product to contain multiple price points.
Billing and Shipping Addresses
To add billing details, you must manually import them using a spreadsheet of RP numbers, phone, email and billing address.
To create this spreadsheet, head to PayPal Manager. Go to Reports and generate a Custom Report. Make sure to include all of the fields you need. The “Comment 2” field contains the RP number.
2. You will need to create Stripe Price IDs.
If you don’t have Price IDs in Stripe, you will need to create them. This means creating new Price IDs that match with your existing PayPal products.
Sync with Connex did this by creating specific codes, which they call SKUs, for each product. Using SKUs made it easier to map these products to Stripe Price IDs, as Connex’s product names have changed over the years. Then, they wrote code to match these SKUs to a list in Stripe.
After exporting the SKUs from PayPal into a spreadsheet, Sync with Connex created a Meta field called SKU. Then, their custom code mapped the PayPal SKU information into new Stripe Price IDs via the Stripe Price ID SKU meta field.
For more information on how to map PayPal fields to Stripe, keep reading. To see their code, you can find it towards the end of this article.
3. PayPal can export a customer’s credit card information, but miscommunications can have major consequences.
To import credit card information from PayPal to Stripe, you can easily export to Stripe via customers’ PayPal profile ID. However, this can be difficult to do accurately at scale.
In Sync with Connex’s experience, during the migration a miscommunication caused Stripe to receive transaction IDs when they should have received PayPal Profile IDs. This was a problem because transaction IDs would not have properly recognized the differences in payment schedules for Sync with Connex customers; some customers pay monthly, whereas others pay annually.
This miscommunication resulted in a 2-week delay.
4. Deactivating a customer pre-migration will erase their customer history.
If you deactivate a customer in PayPal before migrating everything to Stripe, not only will their information not appear in Stripe, you won’t be able to reactivate their profile in the future.
5. Stripe allows you to import subscriptions and customer data one at a time.
As a workaround, you can use parallel programming to import them in batches.
How do the PayPal fields map to the Stripe fields?
Before we migrate the custom data, let’s take a look at how the fields map from PayPal to Stripe.
This is the information that will import automatically when working with Stripe's migration team:
Meta field called old_id
Used to link Stripe user to PayPal
Used to link Stripe user to PayPal and used to identify Stripe users.
RPNumber is the recommended approach to link.
Billing First Name
Customer First Name
Billing Last Name
Customer Last Name
Billing Address 1
Customer Billing Address 1
Billing Address 2
Customer Billing Address 2
Customer Billing City
Customer Billing State
Customer Billing Country
The below chart shows how Sync with Connex mapped customer email, billing schedule, Price ID, and subscription frequency:
Your Customers (in PayPal)
Used to set the terms of the user's subscription. For example, if a user has the annual plan and the last payment was 3/1/2021, then the term is 3/1/2021 - 3/1/2022.
Use the Stripe subscription billing cycle anchor to set the next payment date.
Then, enter 3/1/2021 as the back date start date.
Sync with Connex added a list of their product SKUs to Stripe in a custom field called SKU.
Then, they wrote logic to match Stripe price IDs to SKUs.
Post-Migration: What does Customer Data in Stripe look like?
As discussed earlier, Stripe will only import the customer name, email, and payment method. Information such as previous payment data, plan information, customer name, and billing details will not be imported from PayPal to Stripe.
Below is an example of a customer account immediately after the migration. Note the absence of subscriptions and payment history.
Post-Migration: Using APIs to Edit and Add Additional Information
After the initial export into Stripe, Sync with Connex used the Stripe and PayPal APIs to further modify customer information in Stripe.
The method that he used is as follows:
- List subscriptions in PayPal
- Create subscriptions in Stripe
- Update customers in Stripe using custom code
Below is the code Joseph wrote to update customers:
Here is Sync with Connex’s data transfer object. Some of the fields are unnecessary for the Stripe integration:
Here is code for importing the users:
Matching PayPal and Stripe Products using SKU labels
How Do I Match Products?
As mentioned earlier, if you don’t have Price IDs in Stripe, you’ll need to create them.
Sync with Connex’s method was to map a spreadsheet of product SKUs (their way of labeling different products) and Stripe Price IDs
In the code below, you’ll see the SKUs and their Price IDs: .
Finally, here’s what two Sync with Connex products ultimately looked like in Stripe:
It’s imperative to find the right payment processor for your business needs. For Sync with Connex, Stripe was the smarter choice because of its advanced billing capabilities, simple integrations, and tools built for developers.
But processing payments is only the first step. SaaS and subscription businesses need to understand metrics like MRR, ARR, LTV, and more in order to accurately understand the health of their business and forecast growth.
Sync with Connex uses Baremetrics to stay on top of key metrics, as well as recover failed payments and better understand why customers cancel subscriptions. To learn more about how Sync with Connex used Baremetrics to recover over $11,000 in failed payments in just 4 weeks, check out their story here.
Joseph Anderson is the Founder and CEO of Sync with Connex, a SaaS company that automates data entry between QuickBooks and online selling channels. Joseph is the author of “The $20 SaaS Company: From Zero to Seven Figures Without Venture Capital”, published on June 6th, 2021.