Importing Subscriptions¶
If you have existing wine club customers — whether from a spreadsheet, another platform, or a manual wine club — you can import them into the app so they don't have to sign up again individually.
The import creates active subscriptions with future billing dates, so customers are not charged during the import. They continue on their existing billing schedule and are charged automatically when their next billing date arrives.
Payment methods after import
If a customer already has a card saved on your Shopify store, the app attaches it to the subscription during import. Anyone without a saved card adds one themselves on their Shopify customer account before their first billing date. The app includes a bulk email action you can fire off straight after the import to prompt them, and the standard pre-billing reminders cover anyone who hasn't acted yet.
Before you import¶
Before starting an import, make sure:
- Your clubs are set up — The clubs and frequency/case size combinations you want to import customers into must already exist. See Setting Up Your Wine Club.
- Products are prepared — The products and variants for each club must be available. See Preparing Your Products.
- Your plan has capacity — Your billing plan limits the number of active subscriptions. The import will not proceed if it would exceed your plan's limit. You can check your current usage on the Dashboard.
Warning
Live imports cannot be undone automatically. If you need to reverse a live import, you'll need to cancel each imported subscription individually. The app runs a test import first so you can check for errors before anything is created.
Preparing your CSV file¶
The import uses a CSV (comma-separated values) file. You can create this in any spreadsheet application (Excel, Google Sheets, etc.) and export as CSV. Each CSV can contain up to 100 subscriptions.
We recommend importing one club type at a time — all Choose Your Own subscriptions in one CSV, and all Curated subscriptions in another.
Double-check the email column
The customer's email address is how they sign in to the customer portal and how they receive every wine club email. An incorrect email blocks both, and can only be corrected in Shopify after the import — review the email column carefully before importing.
Select your club type below to see the CSV format and download a template.
Download the template CSV to get started. Open it in Excel or Google Sheets, fill in your data, and export as CSV.
For subscriptions with multiple products (line items), use one row per product. The first row for a handle must include all subscription details along with the first product. Subsequent rows with the same handle only need the handle and line item columns — all other columns are ignored on continuation rows.
| Column | Description | Example |
|---|---|---|
handle |
Groups rows into one subscription — all rows with the same handle belong to the same subscription | sub-001 |
email |
Customer's email address | jane@example.com |
first_name |
Customer's first name | Jane |
last_name |
Customer's last name | Smith |
club_group |
Club group name (must match an existing club group) | Premium Reds |
club |
Club name — the specific frequency and case size offering (must match an existing club) | 6 Bottles Quarterly |
next_billing_date |
Next billing date in YYYY-MM-DD format. Interpreted as midday in your store's timezone. Must be at least 48 hours in the future and no more than one billing interval ahead — up to 1 month for monthly clubs, 3 months for quarterly, 6 months for 6-monthly, and 12 months for annual. |
2026-07-01 |
delivery_method |
Delivery method: shipping, local_delivery, or pickup |
shipping |
delivery_price |
Delivery price (use 0 for pickup) |
15.00 |
address1 |
Street address | 42 Vine Street |
address2 |
Apartment, unit, or suite number (optional) | |
city |
City or suburb | Barossa Valley |
province_code |
State or province code | SA |
country_code |
Two-letter country code | AU |
zip |
Postal or ZIP code | 5352 |
phone |
Phone number in international format | +61400000000 |
company |
Company name (optional) | |
line_product |
Identifies the wine for each line item. You can use either:
|
SHIRAZ-2023 |
line_quantity |
Quantity of this product | 3 |
line_price |
The discounted price per unit that the customer is billed each cycle. If this is below the variant's retail, the difference is recorded as the per-cycle discount and shown alongside retail in the customer portal. | 25.00 |
note |
Order note for all future orders (optional) | |
total_price |
Expected total — the importer warns if this doesn't match the sum of (line quantity × line price) plus delivery price, but doesn't block the import. | 180.00 |
currency_code |
Three-letter currency code. Must be enabled on your store, and the products must have retail prices configured for the row's country in that currency. | AUD |
Download the template CSV to get started. Open it in Excel or Google Sheets, fill in your data, and export as CSV.
Each subscription is a single row. Product selections are determined by the club configuration — you don't specify products in the CSV.
| Column | Description | Example |
|---|---|---|
email |
Customer's email address | jane@example.com |
first_name |
Customer's first name | Jane |
last_name |
Customer's last name | Smith |
club_group |
Club group name (must match an existing club group) | Curated Selection |
club |
Club name — the specific frequency and case size offering (must match an existing club) | 12 Bottles Monthly |
next_billing_date |
Next billing date in YYYY-MM-DD format. Interpreted as midday in your store's timezone. Must be at least 48 hours in the future and no more than one billing interval ahead — up to 1 month for monthly clubs, 3 months for quarterly, 6 months for 6-monthly, and 12 months for annual. |
2026-07-01 |
delivery_method |
Delivery method: shipping, local_delivery, or pickup |
shipping |
delivery_price |
Delivery price (use 0 for pickup) |
20.00 |
address1 |
Street address | 42 Vine Street |
address2 |
Apartment, unit, or suite number (optional) | |
city |
City or suburb | Barossa Valley |
province_code |
State or province code | SA |
country_code |
Two-letter country code | AU |
zip |
Postal or ZIP code | 5352 |
phone |
Phone number in international format | +61400000000 |
company |
Company name (optional) | |
note |
Order note for all future orders (optional) | |
total_price |
Expected total — the importer warns if this doesn't match the discounted line subtotal plus delivery price, but doesn't block the import. The discounted line subtotal is computed automatically from the club's curated wines and the combination's discount percentage. | 270.00 |
currency_code |
Three-letter currency code. Must be enabled on your store, and the curated wines must have retail prices configured for the row's country in that currency. | AUD |
Pricing and discounts¶
Imported subscriptions are recorded with the same pricing details as new signups taken through your storefront. Each line stores both the retail price and the discounted price the customer pays, so the customer portal can show the discount and the strikethrough retail clearly.
- Choose Your Own —
line_priceis the price billed each cycle. If it sits below the variant's retail, the difference becomes the per-cycle discount on that line. - Curated — the discount is applied automatically from the club's settings. You don't need to pre-calculate per-line prices.
- Total reconciliation — if
total_pricedoesn't reconcile with the discounted line subtotal plus delivery, you'll see a warning in the test import results. The row still imports.
Multi-currency¶
If the row's currency_code differs from your store's primary currency, each variant in the row's club must have a retail price configured for the row's country in Shopify Markets. Rows that reference variants without a market-priced retail in the chosen currency will fail with a clear message in the test results.
Starting an import¶
Importing runs in two steps: a test import checks your data first without creating anything, then a live import creates the subscriptions once you're happy with the results.
- Go to Subscriptions in the app
- Click Import at the top of the subscription list (or Import existing subscriptions from the empty state)
- Upload your CSV file
- The app runs the test import and shows the results
Validation¶
The app checks every row before creating anything — there are no partial imports. If a row has an error, you'll see a clear message explaining what to fix. Rows that are duplicates (same customer and club) are skipped automatically rather than treated as errors.
Info
If the import would exceed your plan's subscription limit, you'll see a message with your current count and plan's cap. Upgrade from the Billing settings screen before starting your import.
Test results¶
After the test import runs, the app shows Test import results — no subscriptions have been created yet. Each row is labelled:
- Will import — Passed all checks, ready to go live
- Will skip — Duplicate row, will be skipped
- Won't import — Has an error that needs fixing before it can be imported
Each row also shows whether the customer is new to Shopify, an existing customer, or already a subscriber.
From the test results screen you have three options:
- Start live import — Everything looks correct. Creates the subscriptions for every "Will import" row.
- Test again — Some rows had errors caused by missing data in your Shopify store (for example, a club, frequency, product, or pickup location that doesn't exist yet). Fix them in Shopify, then click Test again — the app re-checks your existing CSV against your updated store and refreshes the results. Rows whose result changed are highlighted so you can confirm the fix before continuing. No re-upload needed.
- Start over — The CSV itself needs editing (typos, wrong dates, missing columns). Discard the test and upload a corrected file.
Which option to choose?
If a row's error message points to something on your store side — "Club not found", "Product variant not available in this currency", "No pickup location matches this address" — fix it in Shopify and Test again. If the error points to the row's data — "Invalid email", "Billing date in the past", "Unknown country code" — edit the CSV and Start over.
Warning
Once the live import starts, it can't be stopped or undone.
The app creates each subscription as Active with the billing date you specified. No charges are made during import — billing begins on each customer's next billing date. If the customer does not already have a payment method on file, they will need to add one before their first billing date (see Payment Methods below).
Note
You can navigate away while the import is running. It continues in the background and you can return to check progress at any time.
When the import finishes, the screen shows counts for Imported, Failed, and Skipped rows, with a row-by-row breakdown including products and billing frequency.
After import¶
Once the import is complete, your subscriptions are live. Any rows that couldn't be imported can be downloaded, fixed, and re-uploaded.
Fixing rows that didn't import¶
If any rows couldn't be imported, a Download error file button appears. The downloaded file contains only the subscriptions that weren't imported — failed, invalid, or skipped rows — with an extra errors column on the right explaining what went wrong for each one. Successfully imported subscriptions are not included.
Open the file in Excel or Google Sheets, fix the issues, and re-upload it as a new import. The errors column is recognised and stripped automatically, so there's no need to remove it before uploading.
Payment methods¶
If the customer already has a payment method saved against their account on your store, the app adds it to the subscription automatically during import. Otherwise the subscription is created without a payment method. Payment details cannot be transferred from another system, so any imported customer who does not already have a saved card needs to add one before their first billing date.
Prompting customers after import¶
Once the import completes, open the Subscriptions list and review the Has Issues tab. Any imported subscriptions that still need a payment method will appear here. Select these subscriptions and use the Send add payment method email bulk action to prompt the customers to add one.
We recommend doing this soon after the import so customers have plenty of lead time to add a payment method before their first billing date.
Automatic pre-billing reminders
The standard pre-billing reminders sent 14 days and 2 days before each billing date also prompt customers to add a payment method when one is missing. They act as a backup for any subscriptions you haven't emailed yourself.
Communicate outside the app too
We also recommend telling your subscribers about the migration through your usual direct channels — for example an email newsletter or SMS — after the import. Letting them know that their membership has moved and that they need to add a payment method helps avoid confusion when they receive automated emails from the app.
How customers add a payment method¶
The "Add a payment method required" email — and the no-payment-method copy on the standard pre-billing reminders — all link the customer to their subscription page in the customer portal. From there, an Add payment method button takes them directly to the Shopify customer account profile screen to add one.
Customers can also add a payment method themselves from their Shopify customer account at any time:
- Log in to their account on your store
- Go to Profile > Payment methods
- Click Add and enter their payment details
Once a customer adds a payment method, it is automatically linked to their imported subscription.
First-time login for imported customers
Imported customers don't need a setup link or password — Shopify's customer accounts use passwordless sign-in (email + a one-time 6-digit code) and provision the account automatically the first time the customer signs in. The links in any of our emails take them through this flow before landing on their subscription page. See Logging in for the full flow, or Shopify's Customer accounts documentation for background on the sign-in options available to your customers.
What happens at billing time without a payment method¶
If a customer's billing date arrives and they haven't added a payment method:
- The billing attempt will fail
- The customer receives an email notification about the failed payment
- The app's standard payment failure retry schedule applies
- After all retries fail, the subscription is placed on hold (Failed status)
- The customer can add a payment method and reactivate from the customer portal
Managing imported subscriptions¶
Imported subscriptions work exactly like any other subscription. You and your customers can:
- Pause, resume, or cancel
- Skip orders
- Change items (Choose Your Own clubs)
- Update delivery address
- Update payment method
See Managing Subscriptions for the full list of actions.
Limitations¶
- No payment method transfer from other systems — If a customer does not already have a payment method saved on your store, they must add one themselves. There is no way to transfer payment information from another system into Shopify.
- One import at a time — You cannot run multiple imports simultaneously.
- No undo — Imported subscriptions must be cancelled individually if you need to reverse an import.
- Billing date must be at least 48 hours in the future — Each
next_billing_dateis interpreted as midday in your store's timezone and must be at least 48 hours away, so the customer's 2-day upcoming renewal reminder fires at least once before the first billing attempt. - Billing date is capped at one interval ahead — Each
next_billing_datemust be within one billing interval of the import (1 month for monthly, 3 for quarterly, 6 for 6-monthly, 12 for annual). - Pickup location is auto-selected — For pickup subscriptions, the app queries Shopify for available pickup locations based on the customer's address and product availability, then automatically selects the first available option. The selected location is shown in the import results. If no pickup location is available for the address, that row will fail during import. After import, you can change the pickup location from the admin or customers can change it from the customer portal.





