Migrating from Shopify Subscriptions.
Moving from Shopify's own Subscriptions app to Daima is self-serve: export a CSV from Shopify, import it into Daima, activate. Saved payment methods carry over for card-paying subscribers, so they never re-enter anything, and nobody is back-billed.
Read this before you start: do not uninstall the Shopify Subscriptions app first. Shopify cancels any subscription contract owned by an app 48 hours after that app is uninstalled. Uninstalling to "clean up" starts a countdown you cannot stop, on subscriptions you can no longer manage. Migrate first, cancel the old contracts deliberately, and uninstall last.
Why a migration is needed at all
Shopify ties every subscription contract to the app that created it. An app can only read and manage its own contracts — there is no permission that grants access to another app's. Shopify does this deliberately, to stop two subscription apps billing the same customer twice.
The practical consequence: while your subscribers live in Shopify Subscriptions, Daima cannot see them. They won't appear in your Daima dashboard, they aren't counted in its subscriber numbers or churn prediction, and those customers will see nothing in Daima's customer portal. Migrating re-creates each contract under Daima so it can manage them.
Most customers don't re-enter payment details. Payment methods are vaulted against the customer, not the app, so Daima reuses the card already on file and your customers don't re-enter anything. Where there's no usable payment method on the Shopify customer record, the contract still imports and activates — Daima flags it, and billing won't succeed until that customer adds one. In practice that's PayPal and wallet-only subscribers, who you'll need to email and ask to re-subscribe.
Step 1 — Export from Shopify Subscriptions
Open the Subscriptions app in your Shopify admin and use its Export to download your contracts as CSV. Export all contracts, not just active ones — it's useful to have the full picture. Daima imports the cancelled rows as records: only ACTIVE and PAUSED contracts can be activated, so the cancelled ones sit in the list as history.
Don't open the CSV in Excel or Google Sheets before importing it. Spreadsheets rewrite the file when you save: postcodes lose leading zeros (07030 becomes 7030), long IDs turn into scientific notation, and some exports gain a hidden apostrophe in front of every number. Upload the file exactly as downloaded. If you must inspect it, open a copy and discard it afterwards.
Step 2 — Import into Daima
In the Daima admin go to Contracts and choose Import CSV. Daima matches the header row literally: lowercase, underscored and case-sensitive, so Handle is not handle. Surrounding spaces in a header are trimmed, so handle still matches, but nothing else is normalised, and a header Daima doesn't recognise is ignored without an error. The Shopify Subscriptions export drops straight in, which is why this guide has no reshaping step where the Recharge and Loop guides do.
The only column Daima strictly requires is handle (a unique identifier per contract), but a usable migration needs the customer, schedule, address and line-item columns too:
- Customer —
customer_idand/orcustomer_email. Prefercustomer_id.customer_emailis only a fallback, and Daima takes the first customer that search returns — on a store with duplicate or guest records that can attach a contract to the wrong person. Either way the customer has to exist in Shopify already; the importer never creates one. - Schedule —
upcoming_billing_date,cadence_interval,cadence_interval_count,status,currency_code - Delivery —
delivery_priceand the address columnsdelivery_address_first_name,_last_name,_address1,_address2,_city,_province_code,_country_code,_zip,_phone,_company.delivery_method_typeis read and stored too, but never used — see what doesn't come across. - Line items —
line_variant_id,line_quantity,line_current_price,line_selling_plan_id,line_selling_plan_name
A contract with several products has one row per line item, all sharing the same handle. address1, city and country_code are required for every contract Daima activates, digital products included — a contract without them can be imported but not activated.
Importing changes nothing yet. Imported contracts are records only: no customer is charged, and nothing exists in Shopify until you activate.
Step 3 — Activate billing
Review the imported rows, then activate — one at a time with Activate billing, or in bulk. Bulk works through ten contracts per click and tells you how many are left, so a large migration means clicking it several times. Activating creates a real Shopify subscription contract with the same products, prices and schedule, so each customer resumes exactly where they left off.
If a contract's next billing date is today or in the past, Daima steps it forward in whole cadence increments until it lands in the future — a date of today is advanced a full cycle rather than billed today. A monthly date on the 29th, 30th or 31st rolls through the short months and then sticks to the new, earlier day permanently, so if month-end billing matters to your customers, change those to the 28th or earlier in the CSV before you activate. Nobody is back-billed for the gap.
Cancelled contracts cannot be activated — only ACTIVE and PAUSED ones. Delete the cancelled rows, or leave them as a record.
Step 4 — Cancel the old contracts, then uninstall
This is the step that protects your customers, and the one most easily skipped.
The moment you activate in Daima, each migrated customer has two live subscriptions — the new Daima contract and the original in Shopify Subscriptions. If both remain active, they will be charged twice.
- Activate the contracts in Daima.
- Check a few: correct product, correct price, sensible next billing date.
- Go back into the Shopify Subscriptions app and cancel the original contracts.
- Only then uninstall the app, if you want to.
Do not use uninstalling as a shortcut for cancelling the old contracts. Shopify will cancel the old contracts 48 hours after uninstall, but it does so silently, on its own timer — and once the app is gone you cannot pause, fix or extend anything that didn't migrate cleanly. Keep your exported CSV until the migration is confirmed.
If something isn't behaving, email [email protected] with your store URL and your export as downloaded — before you cancel anything in the Shopify Subscriptions app. There is no setup fee and no migration fee.
Troubleshooting
"Delivery method shipping address zip is invalid"
Almost always a spreadsheet artefact rather than a genuinely bad postcode — typically a stray apostrophe in front of numeric values, added by Excel or Google Sheets. Daima strips these automatically now, so retry the activation; if it persists, re-download the original export and import it without opening it.
"Customer not found in Shopify"
The customer_id or customer_email in the CSV doesn't match a customer in this store. Check the row for typos, and confirm the customer still exists.
"No line items with a variant_id"
The line_variant_id column is missing or empty. Every contract needs at least one line with a valid variant.
"No shipping address in the CSV"
Every activated contract is created as a shipped contract, so delivery_address_address1, _city and _country_code are needed on every row, digital products included.
"Customer has no stored payment method — they must add one before billing can succeed"
Where there's no usable payment method on the Shopify customer record, the contract still imports and activates — Daima flags it, and billing won't succeed until that customer adds one. In practice that's PayPal and wallet-only subscribers, who you'll need to email and ask to re-subscribe.
"Payment method scope not granted — customer must add a payment method before billing can succeed"
The same flag with a different cause: this one is Daima's own permission problem rather than anything about that customer's card. The contract is created either way.
What doesn't come across
The columns in step 2 are the complete set the importer reads. Anything that isn't one of them doesn't migrate, and none of these produce an error, so decide about them before you cut over.
- Discounts. There is no discount column. Whatever is in
line_current_priceis what that customer pays from now on, so an ongoing discount has to be baked into that number by you. - Prepaid subscriptions. The import applies a single cadence to both billing and delivery, so "pay once, deliver three times" cannot be expressed. Email [email protected] before migrating prepaid subscribers rather than importing them as ordinary ones.
- Local pickup and any non-shipping delivery.
delivery_method_typeis accepted and stored but never used: every activated contract is created as a shipped contract, and one withoutdelivery_address_address1,_cityand_country_codecannot be activated at all. - Selling plan IDs.
line_selling_plan_idis stored and never used; onlyline_selling_plan_namereaches Shopify, as the line's selling plan name. Importing does not attach a contract to a Daima plan, so check your subscription plans match what those customers signed up for. - Order history and analytics. No column carries past orders, so a migrated contract arrives with nothing behind it — its life in Daima starts at its first charge there. Export whatever history you want to keep from the Shopify Subscriptions app before you cancel.
After you're live on Daima
Once contracts are Daima-owned, everything else follows: they appear in your dashboard, count toward your subscriber numbers and analytics, feed churn prediction if you are on Pro, and — the thing your customers will notice — become manageable in the Daima customer portal, where they can skip a delivery, pause, resume, move their next billing date, swap a product or cancel themselves.
One part of that does not follow automatically. The customer portal is a page you add to your Shopify customer accounts yourself, and it is not on by default — until you add it, there is no subscriptions page for them to reach. Add it before you cancel the old contracts rather than after: the customer portal doc walks through it.
Worth doing next: confirm your subscription plans in Daima match what those customers signed up for, and check the dashboard to see the migrated subscribers appear.