Skip to content
RefillKit
DemoRecoveryMigratePricingCalculatorPreflightDocs
Start free trial

Migration guide

Last updated: July 10, 2026

Everything about moving subscriptions into RefillKit from Recharge or Bold: what to export, what the validation report checks, what the dry run shows, and exactly what happens to billing dates and payment methods. The short version: nothing bills until you activate, and until then everything is reversible.

On this page

  1. Before you start
  2. Exporting from your current app
  3. Upload and column mapping
  4. The validation report
  5. Dry run
  6. Execution
  7. Activation and cutover
  8. Rollback
  9. Payment methods
  10. Billing dates
  11. Troubleshooting

01Before you start

The migration is self-serve and reversible until you activate, but five minutes of preparation removes most surprises:

  • Admin access to your current app (Recharge or Bold) so you can export the CSV.
  • Your Shopify catalog up to date — the products and variants your subscribers buy must exist in Shopify, or validation will flag those rows.
  • A rough cutover window. Nothing forces a date on you, but activating a few days before your biggest renewal cluster gives customers time to update cards if they need to.
  • Your current app left running. It keeps billing normally until you activate in RefillKit and cancel it — there is no gap and no double billing.

Not installed yet? You can run the free preflight check on your export first — it reports what would validate without creating anything.

02Exporting from your current app

From Recharge

In the Recharge admin, export your active subscriptions to CSV. Make sure the export includes customer email, line items with variant identifiers, quantity, price, charge frequency, next charge date, and shipping address.

From Bold

In the Bold Subscriptions admin, export active subscriptions to CSV with customer email, products and variants, quantity, price, billing frequency, next order date, and shipping address. Note that Bold dashboard exports typically omit payment vault tokens — see payment methods below for what that means.

Export only active subscriptions. Cancelled and expired records have nothing to bill and only add noise to the validation report.

03Upload and column mapping

Upload the CSV in the RefillKit migration wizard. Pick the preset that matches your source app — it maps that app’s column names automatically, and every mapping can be changed by hand.

Required columns:

  • Customer email
  • Product or variant identifier (variant ID, SKU, or handle)
  • Quantity
  • Price
  • Billing interval (for example: every 30 days, monthly)
  • Next billing date

Optional columns: shipping address, discount, and a payment vault token where your export has one. Raw card numbers are never part of any export and are never imported.

04The validation report

Every row is checked before anything is created. The report lists each problem with the row number and the reason, so you can fix the CSV and re-upload, or exclude the flagged rows and migrate the rest. Common flags:

  • Malformed or past next-billing dates.
  • Products or variants that don’t exist in your Shopify catalog.
  • Missing or invalid customer emails.
  • Duplicate rows for the same customer and product.
  • Currency or price values that don’t parse.

The report also counts how many rows have a usable payment token and how many customers would receive a card-update email, so outreach volume is known before you commit.

05Dry run

The dry run renders exactly what execution would create — each subscription contract with its customer, products, price, frequency, and next billing date — without touching your store. Nothing is written to Shopify during a dry run.

Read it like a bank statement. If a row looks wrong here, it will be wrong in production; fix the CSV and run it again. Dry runs are unlimited and free.

06Execution

Execution creates the contracts in a paused state, paced to stay inside Shopify’s API limits — large lists take longer, and the wizard shows progress. Because contracts are paused, no customer is charged by RefillKit yet.

Billing dates are preserved exactly. A customer your old app would have billed on the 14th will be billed on the 14th.

07Activation and cutover

When the dry run matched reality and execution finished cleanly:

  1. Activate the contracts in RefillKit.
  2. Cancel the corresponding subscriptions in your old app so no customer is billed twice.
  3. Watch the first renewal cluster in the RefillKit dashboard; failed charges enter the dunning ladder automatically.

If you want a second pair of eyes on the cutover, email support@refillkit.website — white-glove help is free on every plan.

08Rollback

Until you activate, one click removes every contract the migration created. Because contracts were paused, no charges were made — there is nothing to refund and nothing to explain to customers. After activation, rollback is no longer offered automatically (charges may exist by then); email support and we will work through it with you.

09Payment methods

The honest rules, in full:

  • Rows with a usable Stripe vault token can migrate their payment method silently — but only if the Stripe account behind those tokens is the same account connected to Shopify Payments on your store. This is a constraint of how payment vaulting works, not a RefillKit limitation.
  • All other customers automatically receive a card-update email with a secure, Shopify-hosted link. RefillKit sends it, reminds on the dunning schedule if their next charge fails, and shows you who has and hasn’t updated.
  • Bold dashboard exports typically omit vault tokens entirely, so Bold migrations should plan on the card-update flow for most or all customers.
  • RefillKit never receives, stores, or logs raw card numbers — at migration time or any other time. Card entry happens on Shopify’s hosted page.

10Billing dates

Next billing dates from your export are preserved on the new contracts, unchanged. The migration never resets everyone to “bill today” or re-anchors cycles to the activation date. If a date in the CSV is in the past, validation flags it and asks you to choose a corrected date for that row rather than guessing.

11Troubleshooting

  • “Variant not found” — the product exists in your old app but not in Shopify, or the SKU differs. Create or match the variant in Shopify, then re-validate.
  • “Next billing date is in the past” — common in old exports. Re-export fresh, or set a corrected date for the flagged rows.
  • Duplicate rows — some apps export one row per line item. The preset groups them by customer and subscription; if grouping looks wrong in the dry run, email us the report ID.
  • Anything else — support@refillkit.website. Include the validation report ID; never email the CSV itself if it contains customer data you wouldn’t put in a ticket.
RefillKit

Subscriptions that pay you back. Built on Shopify’s subscription APIs.

Product

Payment recoveryCustomer portalReportingPricingSavings calculator

Switch

Recharge alternativeMigrate from RechargeMigrate from BoldPreflight check

Docs

Migration guideDunning setupFAQ

Company

Install on ShopifySupport

Legal

PrivacyTermsData processing
© 2026 RefillKitbilling heartbeat green