Migrating Your Data

Data migration is the process of transferring your data from your old account management system to Pelcro. It is a meticulous process that requires the data to be transformed to fit the Pelcro structure. Our team has put together all the necessary tools at your disposal to help you migrate your data successfully into Pelcro.

Process

The migration team possesses extensive expertise in database systems, including proficient data mapping techniques, and has harnessed this knowledge to successfully transfer over 1,000,000 subscriptions across multiple businesses.

We have migrated businesses from several other systems including but not limited to CDS, Piano, PayPal, Braintree, TownNews, Pigeon, Pico, Salesforce, and Clickshare.

The analysis and preparation phase for data migration generally spans between one to three weeks, provided that the data supplied conforms to the Pelcro templates.

Any technical team would be able to successfully migrate data into Pelcro using the core APIs. You can learn more about the Pelcro CORE API here.

When Pelcro's migration team is assigned to migrate your data, it's essential for both parties to collaborate in following the procedure outlined in this section. This collaborative effort encompasses all the crucial measures required to ensure a successful migration.

  1. Review and understand the scope of the data migration.
  2. Request a data export from your current provider.
  3. Populate Pelcro's migration templates found here, by using the data conversion tables.
  4. Request Pelcro's migration scope sheet and SFTP server credentials from your account manager and upload your converted files and the approved migration scope sheet to Pelcro's SFTP server.
  5. Pelcro's migration team will perform the necessary validations on the data files provided by your team and offer feedback if necessary.
  6. Once the files are approved by Pelcro's migration team, we will perform a migration test run on our staging environment.
  7. Our migration team will analyze the test data, provide the stats sheet, and furnish feedback regarding the results of the migrated data. More details about this step can be found here.
  8. To ensure a seamless migration, Pelcro's QA team will conduct various tests related to the migrated data based on the scope of the migration and will provide the required feedback:
    a. Password migration
    b. User interface flows, such as customer login and subscription view
    c. Essential aspects related to the Pelcro platform like list and fulfillment generation, subscription view, etc.
  9. Your account manager will provide you with test account credentials so that you can conduct your own tests and validate data accuracy. The suggested approach can be found here.
  10. Once both teams approve the data accuracy, we will plan the production migration and agree on the GoLive date. The following steps will be required for production migration:
    a. Initiate the credit card migration process (if included in the scope of the data migration). More details can be found here.
    b. Prepare the production data files
    c. Initiate production data migration
    d. Validate production data

👍

Our support team is right there for you!

Contact us at [email protected] and we're happy to assist with any questions or concerns.

Understanding your data scope

Before performing any data migration, it is indispensable to understand and clean your data. During the migration kickoff meeting, your account manager will be asking you a set of questions that will be critical to understanding the data structure:

  1. Number of authenticated users to be migrated.
  2. Number of active subscriptions to be migrated.
  3. How are the active subscriptions broken down?
  4. How many of the active subscriptions are on auto-renew?
  5. How many of the active subscriptions are set to be canceled at period end?
  6. How many of these subscriptions are gift subscriptions?
  7. How many of these subscriptions are membership subscriptions?
  8. Does your business collect taxes?
  9. Are there any subscriptions with an outstanding open invoice that must be charged upon import?

When requesting a data export from your current provider, the format likely will not match the data structure required by Pelcro. By providing the data in our predefined CSV files, our team will be able to process and deliver the data migration significantly faster than if you provide us with a data dump as-is from the current provider.

Building your migration files

First, download Pelcro's migration file templates that are linked below. Each file represents an object resource in Pelcro, and it is important to only download and build the migration files for the resource you will be migrating.
For example, if you will not be migrating group members subscriptions, do not build the 'Memberships' file.

The file templates contain field headers in a CSV format. Use the tables below to populate the file templates with the relevant data, according to the field description and mandate (required vs. optional).

Migration file templates

Customers
Subscriptions
Addresses
Plans
Products
Memberships

Customers

Customers are registered users to which we associate addresses, subscriptions, payments, invoices, etc.
You can migrate all of your users' profile information into Pelcro by either filling in the preset fields on the template (email address, phone number, etc.) or by adding your own custom fields which will get stored in the customer record's metadata table.

The table below contains the list of attributes that make up the Customers resource migration file template:

AttributeDescriptionRequired/Optional
old_provider_idThe old provider id corresponds to the customer's ID as seen on your old provider's database.

In the Addresses and Subscriptions file, this field is known as 'customer_id'.

This value must be a unique ID, and can be any of the following values:
1. Numeric value.
2. Alphabetic value.
3. Alphanumeric value.
Required.
emailThe email field corresponds to the customer's email address. A customer can only have one email address.

This value must be unique, meaning the email address cannot be shared across different customer records.
Optional.
first_nameThe customer's first name.Optional.
last_nameThe customer's last name.Optional.
phoneThe customer's phone number.

This field has a 20-character limit , and alphabetic characters are not supported.

Here are some examples of accepted values:
0015141234567
+15141234567
+1.514.123.4567
+1-514-123-4567
(514)1234567
'empty'
Optional.
organizationThe customer's company or organization name.

This field can be used to group customers of a same company/organization together by entering the same Organization value. Watch out, it's case sensitive!
Optional.
password_typeThis field indicates the type of encryption used to hash the provided passwords.

The 'password_type' field can take the following values:
'plain_text'
'password_bcrypt'
'MD5'
'bcrypt_wordpress'
'argon2id'
'drupal_v8.2.x'
Optional.
passwordThis field corresponds to the customer's hashed password.Optional.
import_payment_methodsA boolean on whether to import payment methods associated with the provided 'payment_gateway_id' from the current payment gateway provider. This is used to import the payment methods during a migration in order to re-create the subscriptions using those payment methods.Optional. Required only when importing payment methods alongside customer records.
payment_gateway_idThe unique identifier for customer on your current payment gateway provider (e.g. Stripe). You can pass this identifier during a migration in-order to import the customer's payment methods from the payment gateway so that you can re-create the subscriptions using the payment methods. Once imported from the gateway, you can find the default source in the customer list API endpoint which can be used to re-create the subscriptions.Optional. Required only when importing payment methods alongside customer records.
metadata[field_name]The metadata is a custom data field that allows you, as a business, to store customer data that does not fit in Pelcro's preset fields.

You can customize the field name by replacing the text in brackets.
Some examples of metadata field names can be found below:
metadata[job_area]
metadata[first_login_date]
metadata[age]
metadata[job_type]
Optional.

Here are some examples of customer records formatted into Pelcro's Customers migration file template:

old_provider_id*emailfirst_namelast_namephoneorganizationmetadata[job_area]metadata[job_type]
143278[email protected]GerardCassano0015141234567RocketDigital / eCommerce / OmnicommerceAdministrator
abc1234[email protected]JaneDoePelcro
1234abc[email protected]DWilliams+1-514-123-4567PelcroAnalytics / Data AnalysisAnalyst
abcdef[email protected]Accounting+15141234567Executive / Corporate Management

Addresses

Addresses provide contact information related to customers and their subscriptions. That includes shipping and billing addresses.

If your Pelcro account checks any of the boxes below, the shipping address will be required to migrate your subscriptions into Pelcro. If you are unsure of whether there is an address requirement to create subscriptions, please contact [email protected] or your account manager.

  1. Sales tax collection is enabled on your account.
  2. The address is required on the subscription product. This is typically the case when a product needs to be shipped to the subscriber. In this case, the shipping address will only be required to migrate subscriptions on the given Product.
  3. The payment gateway connected to your account requires an address to process charges.

The table below contains the list of attributes that make up the Address resource migration file template:

AttributeDescriptionRequired/Optional
old_provider_idThis field corresponds to the user's address record ID as seen on your old provider's database.

In the Subscriptions and Memberships file, this field is known as 'address_id'.

This value must be a unique ID, and can be any of the following values:
1. Numeric value.
2. Alphabetic value.
3. Alphanumeric value.
Required.
customer_old_provider_idThe customer ID corresponds to the old.provider_id of the customer record tied to this address.

A customer can have multiple addresses, of different types. Add an address record for each address a customer has, tying them to the same customer_id.
Required.
typeThe type indicates whether this address is of type 'shipping' or 'billing'.Required.
first_nameThe first name on the address record.Optional.
last_nameThe last name on the address record.Optional.
titleThe customer's job title on the address record.Optional.
salutationThe customer's salutation or courtesy title on the address record.Optional.
companyThe customer's company name on the address record.Optional.
departmentThe customer's job department name on the address record.Optional.
phoneThe customer's phone number on the address record.

This field has a 20-character limit , and alphabetic characters are not supported.

Here are some examples of accepted values:
'0015141234567'
'+15141234567'
'+1.514.123.4567'
'+1-514-123-4567'
'(514)1234567'
'empty'
Optional
line1The line1 indicates the first address line, typically used for the street address.Required.
line2The line2 indicates the secondary address information, such as the apartment/suite/post office box number.Optional.
cityThe city on the address record.Optional.
stateThe state on the address record.

For all US and Canadian addresses, the state value must adhere to the 2-letter ISO standard format found here.
Optional.
countryThe country on the address record.

Country values must adhere to the 2-letter ISO standard format found here.
Required.
postal_codeThe zip/postal code on the address record.Optional.
is_defaultThe is_default flag is a boolean value that takes the values: '1' or '0', indicating whether the address record is the customer's default address or not, respectively.

This flag is optional, and is typically used for customers who have multiple addresses on record.
Optional.

Here are some examples of addresses formatted into Pelcro's Addresses migration file template:

old_provider_id*customer_old_provider_id*type*first_namelast_nametitlephoneCompanyline1*line2citystatecountrypostal_codeis_default
11223143278shippingGerardCassanoAdmin0015141234567Rocket3555 Ch. Cote-des-NeigesApt. 412MontrealQCCAH32 1N5
a5e01fabc1234billingJaneDoePelcro469 Homewood Ave.
Levittown
New YorkNYUS05510
a5e01gabc1234shippingJaneDoePelcro469 Homewood Ave.
Levittown
New YorkNYUS055101
AeCGgEvabcdefshippingAccounting50 Orchard RoadSG

Products

Subscription Products describe the goods or services that your business offers to your customers. Each product can contain one or multiple pricing plans, which are often grouped together based on the nature of the component being offered. For example, a newspaper offers a digital access subscription, as well as a print copy subscription to their customers. One product would be created for each type, and pricing plans would be added to each product. The pricing plan carries the price and the duration/term of the good or service you are offering. More on this here.

The table below contains the list of attributes that make up the Products resource migration file template:

AttributeDescriptionRequired/Optional
old_provider_idThis field corresponds to the identifier of the Product your are migrating into Pelcro.

This value will be used to tie your pricing plans (or rates) to the corresponding Products you will be migrating. In the Plans file, this field is known as 'product_id'.

This value must be a unique ID, and can only contain alphanumeric characters.
Required.
nameThe product name that will be displayed on the offer page.Required.
name_internalThe product's internal name, that can only be seen from the CRM.Optional.
address_requiredThis boolean flag indicates whether a shipping address is required to purchase this product.

Indicate '0' if the address is not required, and '1' if it is.
Required.
descriptionThe description of the product you are offering, that can be made visible on offer pages.Optional.
statement_descriptorThe label that will appear on your customer's bank statement when they purchase a subscription to this product.

This field has a limit of 22 characters.
Optional.

Here are some examples of products formatted into Pelcro's Product migration file template:

old_provider_id*name*name_internaladdress_required*descriptionstatement_descriptor
DIGITAL-E01Digital Access0Get digital access to premium content.Digital Subscription
1196Home DeliveryPrint00011Enjoy a fresh copy of the latest news delivered to your doorstep.Home Delivery
printanddigitalPrint and Digital Bundle1Subscribe to our print & digital bundle for all-access to our exclusive magazine.

Plans

The pricing plan, also known as the rate, will dictate the price, the currency, the terms and the duration of the good or the service you are offering. You cannot create a subscription without a pricing plan, and you cannot create a pricing plan without a Product. This relationship has been surfaced on the migration templates, by allowing you to tie files together using common fields, namely 'plan_id' and 'product_id'. Learn more about the Plans resource and its associated properties.

The table below contains the list of attributes that make up the Plans resource migration file template:

AttributeDescriptionRequired/Optional
old_provider_idThis field corresponds to the identifier tied to the Plan your are migrating into Pelcro.

This value will be used to tie your customer's subscriptions to the plans that carry the price, currency and duration of the subscription service.

In the Subscriptions file, this field is known as 'plan_id'.

This value must be a unique ID, and can only contain alphanumeric characters.
Required.
product_old_provider_idThis field corresponds to the old.provider_id of the product that this plan will be tied with.

A product can have multiple plans. Add a plan for each rate you are offering, tying them to the same product_id.
Required.
typeThis boolean flag indicates the type of the plan. Indicate 'regular' for individual subscription plans, and 'membership' for group subscription plans.

Gift subscriptions can only be created on 'regular' plans.
Required.
nicknameThe plan name that will be displayed on offer pages.Required.
name_internalThe plan's internal name, that can only be seen from the CRM.Optional.
auto_renewThis is a boolean value describing the auto-renewal status of the plan. Indicate '1' if a subscription to this plan will automatically renew, and '0' if it will not.Required.
amountThe plan's unit price.

For example: A plan for $8.99 must be entered as '8.99' in the amount field.
Required.
currencyThe plan's currency. A plan can be offered in one currency.Required.
recognized_revenue_typeThis is a boolean value describing the recognition method for revenue earned for this subscription plan.
Indicate 'time' or 'shipments'. For more information on recognized revenue and its impact on the accounting module, see Recognized revenue.
Required.
intervalThis value describes the plan's billing interval.

This field can take the following values:
'day'
'week'
'month'
'year'
*Required.
interval_countThis value indicates the plan's billing cycle and must be used in coordination with the 'interval' value, according to the instructions below.

For a yearly plan, set:
1. interval = year.
2. interval_count = 1.

This indicates that the subscription will be billed on a yearly basis.

For a bi-monthly plan, set:
1. plan.interval = month.
2. plan.interval_count = 2.

This indicates that the subscription will be billed every 2 months.
Required.
available_onlineThis is a boolean value indicating whether the plan will be displayed on offer pages or not.
Indicate '1' if the plan will be displayed online as a subscription offer, and '0' otherwise.
Required.
refundableThis is a boolean value indicating whether a subscription to this plan can be refundable, or not.
Indicate '1' if the subscription can be refundable, and '0' otherwise.
Required.
descriptionThe description of the plan you are offering, that can be made visible on offer pages.Optional.
entitlementsThe entitlement field takes an array of comma-separated tags that can be used to control access to a product or service when a user subscribes to this plan.
Example: 'entitlements' = 'premium,digital'.

More of entitlements and how they work here.
Optional.
trial_period_daysThis field takes the number of days that will be offered as a trial period when a user subscribes to this plan. Indicate '0' if it is a non-trial plan.Optional.
shipments_per_intervalThis value represents the number of shipments/issues associated with this plan, taking into account the plan's interval term.

1. For a 1-year plan with a monthly shipment schedule, indicate '12' for 12 shipments a year.

2. For a monthly plan with a weekly shipment schedule, indicate '4' for 4 shipments a month.
Optional.
member_seat_capacityThis field indicates the maximum seat capacity on this group subscription plan.Required only when plan type is 'membership'.

Here are some examples of plans formatted into Pelcro's Plans migration file template:

old_provider_id*product_old_provider_id*nickname*type*auto_renew*amount*currency*recognized_revenue_type*interval*interval_count*available_online*refundable*descriptionshipments_per_intervalmember_seat_capacity
MONTH-D-IDIGITAL-E01Silver Subscription: Monthly auto-renewregular14CADtimemonth111Monthly subscription to all-digital access.
01019311961-year home delivery subscriptionregular059.99USDshipmentsyear110Yearly auto-renewing print subscription.12
YEAR-D-MDIGITAL-E011-year Corporate Group Subscriptionmembership0999.99CADtimeyear100Yearly site license membership plan.1000

Subscriptions

The subscription is the piece that connects the registered user, Customer, to the good or service you are offering, the pricing Plan. The subscription carries relevant information such as its end date, its auto-renewal status, the payment method used to purchase the subscription, as well as the number of shipments/issues remaining on a user's subscription.

Subscriptions can be tied to individual customers, as well as multiple. Pelcro supports migrating group/corporate subscriptions, and gift subscriptions (from one user to another).

If you will be migrating group subscriptions into Pelcro, the group admin and user subscriptions must be split into two files. The group admin subscription must be added to the Subscriptions file template and carry the type 'admin'. The group member subscription must be added to the Memberships file template. Learn more about the Subscriptions resource and its associated properties.

The table below contains the list of attributes that make up the Subscriptions resource migration file template:

AttributeDescriptionRequired/Optional
old_provider_idThe subscription ID is the unique identifier tied to the Subscription your are migrating into Pelcro.
You can use your old provider's subscription/order ID here.

In the Memberships file, this field is known as 'subscription_id'.

This value must be a unique ID, and can be any of the following values:
1. Numeric value.
2. Alphabetic value.
3. Alphanumeric value.
Required.
customer_old_provider_idThe customer ID corresponds to the old.provider_id of the customer record tied to this subscription.

This ID will be used to tie your customer to this subscription.
A customer can have multiple subscriptions, of different types. Add a new record for each subscription a customer has, tying them to the same customer_id.
Required.
address_old_provider_idThis value corresponds to the old.provider_id of the address record tied to this subscription.Required only when the address is required to purchase a subscription. More on this here.
sourceThis field indicates the source by which this subscription was acquired.

The 'source' field can take the following values:
'phone'
'email'
'website'
'renewal'
'agency'
Required.
plan_old_provider_idThis field corresponds to the plan_id value in the Plans file. It is used to tie the subscription to the corresponding plan that carries the price, currency and duration of the subscription service.

The subscription will inherit all of the billing information from the plan, in addition to the plan type (whether it is a regular or group subscription plan).
Required.
collection_methodThis field indicates the billing method used to acquire this subscription.

The 'collection_method' field takes one of the two possible values:
'charge_automatically'
'send_invoice'

Charge automatically indicates that a credit card was charged to create this subscription, whereas send invoice indicates that the subscription is paid via an offline payment (check, cash, wire payment, etc..).

The collection method can only be of type 'charge automatically' if the user's credit card has been migrated/exists in Pelcro; Pelcro will automatically convert this value to 'send invoice' otherwise.
Required.
auto_renewThis is a boolean value describing the auto-renewal status of the subscription. Indicate '1' if the subscription will automatically renew on them same plan at the end of the current subscription period, and 0 if the subscription will terminate at the end of the current period.

Note: If 'auto-renew = 1', the subscription must be tied to an auto-renewal plan.
Required.
quantityThis value indicates the quantity of subscriptions purchased, often used when there is a print component tied to the subscription.

This value must be an integer, and in most cases should be set to 1.
Required.
import_dynamic_end_dateThis value indicates the subscription's current period end date.

In the case of auto-renewing subscription, the subscription will renew on this date.

The 'import_dynamic_end_date' value must adhere to the format below:
MM/DD/YYYY
Required.
next_invoice_dateThis value indicates whether the subscription is awaiting payment or has been paid for.
Leave this field blank if the subscription is awaiting payment and must be migrated as an 'Open invoice' subscription, or populate this field with the 'import_dynamic_end_date' value if the subscription must be migrated with a closed/paid invoice.
Required.
shipments_remainingThis value corresponds to the number of shipments remaining/issues to go for the current subscription's period (based on the import_dynamic_end_date value).

This value must be an integer.
Optional.
is_gift_donorThis field indicates whether this is a gift donor subscription. Indicate '1' if this is the case, otherwise leave the field blank.

For more information on migrating your gift subscriptions to Pelcro, see Gifts.
Optional, required for gift donor subscription records.
gift_donor_old_provider_idThis field indicates whether this is a gift recipient subscription. Populate this field with the old.provider_id of the gift donor subscription if this is the case, otherwise leave the field blank.

For more information on migrating your gift subscriptions to Pelcro, see Gifts.
Optional, required for gift recipient subscription records.
campaign_keyThe promotional or campaign key tied to this subscription.

This value can be any of the following values:
1. Numeric value.
2. Alphabetic value.
3. Alphanumeric value.

This field can be used to group and track subscriptions acquired through the same campaign/channel. Watch out, it's case sensitive!
Optional.
domainsThis field corresponds to the email domains that will allow end-users to become group members of this subscription upon registration/login.

This field can only be populated when the subscription is tied to a Plan with 'type = membership'.

This field supports an array of comma-separated values.

Below is an example:
'domains = pelcro.com,pelcro.ca'

If [email protected] or [email protected] register/login to your website, they will automatically become a member of this group subscription.
Optional.
ip_addressesThis field corresponds to the IP addresses that will allow end-users to become group members of this subscription upon registration/login.

This field can only be populated when the subscription is tied to a Plan with 'type = membership'.

Multiple IP addresses can be added as an array of comma-separated values. This field also supports CIDR notation.

Below is an example:
'ip_addresses = 10.193.28.01,12.160.1.01/26'

Any user registering or logging in via one of the listed IP addresses will automatically become a member of this group subscription.
Optional.
shipments_undeliverableThis is a boolean value indicating whether a shipment is deliverable or not.

Indicate '1' if the subscription's shipment status is 'undeliverable', leave the field blank otherwise.

This field can be used to filter out subscriptions when building shipping/fulfillment lists. To learn more, see Lists.
Optional.
shipments_suspended_untilThis field indicates the date by which the shipments of a subscription will be suspended.

The 'shipments_suspended_until' value must adhere to the following date format:
MM/DD/YYYY

This field can be used to filter out subscriptions when building shipping/fulfillment lists. To learn more, see Lists.
Optional.
metadata[field_name]The metadata is a custom data field that allows you, as a business, to store subscription data that does not fit in Pelcro's preset fields.

You can customize the field name by replacing the text in brackets.
Some examples of metadata field names can be found below:
metadata[first_issue_date]
metadata[old_subscription_id]
Optional.

Here are some examples of gift donor (1), open invoice (2), group owner (3) and gift recipient (4) subscription records, formatted into Pelcro's Subscription migration file template:

old_provider_id*customer_old_provider_id*address_old_provider_idsource*plan_old_provider_id*collection_method*auto_renew*quantity*import_dynamic_end_datenext_invoice_dateshipments_remainingis_gift_donorgift_donor_subscription_iddomainsip_addresses
1122334414327811223websiteMONTH-D-Icharge_automatically1108/25/202308/25/20231
def1234abcdefAeCGgEvagency010193send_invoice1101/01/202411
1234defabc1234a5e01femailYEAR-D-Msend_invoice0102/28/202502/28/2025pelcro.com,pelcro.ca10.193.28.01,12.160.1.01/26
aabbccdd1234abcwebsiteMONTH-D-Isend_invoice1108/25/202308/25/202311223344

Memberships

The membership represents the group member subscription to the good or service you are offering. This template must only be filled out if you are intending on migrating group/school/corporate subscriptions into Pelcro.
The membership (group member) record will be tied to the group owner subscription record (any subscription tied to a plan with 'type = membership'). Learn more about the Memberships resource and its associated properties.

The table below contains the list of attributes that make up the Memberships resource migration file template:

AttributeDescriptionRequired/Optional
old_provider_idThis field corresponds to the user's membership ID as seen on your old provider's database.

This value must be a unique ID, and can be any of the following values:
1. Numeric value.
2. Alphabetic value.
3. Alphanumeric value.
Required.
subscription_old_provider_idThe subscription ID corresponds to the old.provider_id of the group admin subscription record this membership is tied with.Required.
customer_old_provider_idThe customer ID corresponds to the old.provider_id of the customer record tied to this group member record.

This ID will be used to tie your customer to this group member record.
Required.
address_old_provider_idThis value corresponds to the old.provider_id of the address record tied to this membership.Required only when the address is required to subscribe to a product. More on this here.

Here are some examples of group member subscriptions formatted into Pelcro's Memberships migration file template:

old_provider_id*subscription_old_provider_id*customer_old_provider_id*address_old_provider_id
67abc1234defabc1234
abcdaabbccdd143278AeCGgEv

Limitations

There are some important limitations to be aware of when migrating your data in Pelcro’s system. You cannot migrate the following data:

  1. Expired subscriptions.
  2. Canceled subscriptions.

There are also limitations with migrating open active subscriptions ('next_invoice_date = NULL'). On the day of migration, a charge equal to the plan price associated with the subscription will be attempted on the user account during the migration process. The different scenarios and expected behaviors have been outlined below:

  1. Auto-renewing unpaid subscriptions:
    a. An open invoice is generated, with the amount fetched from the plan.amount field value.
    b. If the collection_method is set to send_invoice, the invoice will remain open until the automatic uncollectible (or write-off) period is reached.
    c. If the collection_method is set to charge_automatically and a valid payment method exists, a charge will be attempted on the invoice.
    d. If the collection_method is set to charge_automatically but there is no valid payment method on file, the collection_method will be changed to send_invoice (see point b.)

  2. For non-auto-renewing, unpaid subscriptions:
    a. The collection_method will be forced to send_invoice.
    b. An open invoice is generated, with the amount fetched from the plan.amount field value.
    c. The invoice will remain open until the automatic uncollectible (or write-off) period is reached.

Gifts

You can migrate your gift subscriptions into Pelcro. It is important to note how gift subscriptions are structured in Pelcro prior to the migration, as it may be different than the way your gift subscriptions are built on your old provider's database. In Pelcro, a gift subscription is split into two subscriptions: the gift donor subscription and the gift recipient subscription records.

In order to migrate your gifts into Pelcro, you must have two subscription records per gift subscription. Both subscription records must contain the same subscription data, with the exception of:
a. old.provider_id (must be unique)
b. customer_id (since the gift donor and gift recipient are often not the same user).
c. address_id
d. is_gift_donor
e. gift_donor_subscription_id

The 'is_gift_donor' field is a flag that will indicate whether the subscription record in question is a gift donor subscription record. The 'gift_donor_subscription_id' field indicates that the subscription record in question is a gift recipient subscription, and will be tied to its donor record via the 'old_provider_id' value. This format must be adhered to in order to successfully import gift subscriptions into Pelcro.

Migrating passwords

The password migration component deals specifically with transferring the end-user passwords. The main consideration here is the customer’s previous encryption mechanism. Pelcro only supports the following:

  1. Drupal_v8.2.x
  2. Bcrypt (WordPress)
  3. Bcrypt
  4. MD5
  5. Plain text

Note: Pelcro uses Bcrypt and its implementation on PHP.

Once you've reviewed the prerequisites, the next step is to provide Pelcro with a small sample of hashes with their respective passwords in plain text, against the hashing algorithm. This will allow Pelcro's migration engineers to analyze the sample and evaluate the feasibility of migrating user passwords into the database.

Items the customer must provide to migrate passwords into Pelcro:

  1. A minimum of 5 password examples (hashes and their equivalent plain text).
  2. Hash types:
    a. Built-in: Provide the name of the hashing mechanism (e.g. sha1, MD5, bcrypt).
    b. Custom implementation: Provide the code used to generate and validate passwords.
  3. If the hashing requires a salt/pepper, that must be provided as well.

If Pelcro's migration engineers successfully reproduce the hashing output that matches the customers’, we deem that we are capable of moving forward with the password migration.
The final step is to provide the password hash in the customers file template, as part of the data dump; this must be provided under the customer.password field. Pelcro will then undertake the work of importing the user passwords upon GoLive.

Performing a data migration into a Staging environment

Once all the statistics have been reviewed and validated by the client, the migration team will begin the migration dry-run process:

  1. The migration team will prepare the data files to perform the migration to staging.
  2. The migration team will run the script to migrate the data into the staging environment.
  3. The migration team will validate that all the data provided in the dry-run data dump has been successfully imported.

Generating a migration statistics report

Once the dry-run process has been completed, it will be critical for the migration team to review the data and generate a migration report that will illustrate the migration success rate of each Pelcro record object.
The sample statistics report below reflects the percentage of records with valid data that Pelcro was able to migrate from the legacy system into the Pelcro system.

Field definitions:

  1. Attribute: Property of a given object type.
  2. Pelcro Pre-Processed: number of records fed into Pelcro’s migration script.
  3. Excel dump: number of records included in the customer data dump.
  4. Accuracy: Measure of how many records were kept between the Excel dump and Pelcro's migration script.
  5. Inaccuracy: Compliment of accuracy.
  6. Dry-run (staging): number of valid records migrated into the staging server.
  7. Production: number of valid records migrated into the production server.
2318

Sample statistics report.

Sample statistics reports will vary in size depending on the data points included. It is important to sanity-check the numbers in this report against the data in your system. For example, verify that you have 1848 customers subscribed to the 'Print & Digital 1-Year USA' plan.

Reviewing and analyzing the data migration

The report generated in the previous section will be critical to getting the client's approval to move forward with the production migration.
As part of this process, the client will be required to:

  1. Review the report generated by the Pelcro migration team
  2. Validate the numbers
  3. Validate sample data in the Pelcro Dry-run environment.
  4. Sign off on the report and Data validation

In order to assist you in validating the imported data, you can review Pelcro's best practices below:

  1. Once logged into the Pelcro platform, use the Products tab in the left sidebar to validate the product and plan relations and plan amounts.
    a. Tip: Looking at shipments_per_interval and plan_intervals is a great way to begin your validations.
  2. Navigate to Billing > Subscriptions and perform a data export to validate the subscription-related objects, such as:
    a. Auto_renew status
    b. Subscription expiry dates
    c. Shipments_remaining
    d. Validate the customer-subscription relations using the same CSV data export.

Going the extra mile: Navigate to Customers > Customers and perform a customer_object data export, where you can validate:

  1. Billing and Shipping Addresses
  2. Customer metadata.

Migrating Credit Cards to Production

Migrating credit card information is important to ensure your end users do not have to re-enter their payment details when you switch from your legacy payment processor to your new payment processor.

The key difference between migrating credit cards and your other data is the intervention of a third-party vendor. This may impact the timeframe of the data migration.

The steps required to migrate your end users' credit card information into the new payment processor are outlined below:

Get familiar with the requirements for credit card migration.
You need an ID for each customer in the old payment processor files, which will be mapped to new customer IDs.
Coordinate between your new payment processor and the previous one to request the data migration.
a. Your new payment processor will provide you with a file template for dumping the credit card information. Work with your old payment processor to prepare the data dump file.
The transitionary period: online payment freeze period, where the customer will be requested to freeze any online payment.
a. Redirecting all new subscriptions to the customer service operators, that will manually process the subscription and issue a bill-to invoice.
b. For smaller customers without customer service operators, they can even freeze all new subscriptions during this transitionary period.
The new payment processor will confirm the import by providing a mapping file (JSON) that contains their generated IDs (customers, payment methods, etc.) along with the old payment processor IDs.
Use the mapping file to overwrite Pelcro data (customer record info, subscriptions, ..).
Once the mapping is complete, you must validate the data across both providers and provide a stamp of approval.

📘

Check out these helpful articles for more information on our blog