Documentation

Subflow is a subscriptions app for Shopify. It is built on Shopify's native Subscriptions API, so contracts, payment methods and charges live in your Shopify admin rather than inside a third-party system. This page describes what the app does on each surface it touches.

The merchant dashboard

Subflow opens from Apps in your Shopify admin. The dashboard leads with four numbers:

Below that is your subscription list: customer, products, frequency, next billing date, recurring total and status, 50 to a page. Browsing shows active, paused and failed subscriptions. Searching by customer name or email searches everything, cancelled subscriptions included.

A reconciliation notice appears when the daily check finds something the engine should have handled: contracts that were due but never charged, contracts that were paid but whose date never moved, charges stuck for over a day, and subscriptions that have run out of automatic retries.

Before your first subscriber, the dashboard shows a setup checklist: create a plan, add the product-page block, optionally add the customer-account block, then place a test subscription. Shopify only vaults payment methods on an eligible gateway — Shopify Payments, PayPal Express or Authorize.net — so if your store is not eligible and you have no subscribers yet, the dashboard says so rather than letting you set everything up and find out at your first customer.

Each subscription also has a detail page showing its products, its billing history (cycle, outcome, resulting order, decline reason) and an activity log recording every change and whether the customer, the merchant or the system made it. Subflow registers a subscription link extension, so a subscription contract in your Shopify admin links through to that page.

Subscription plans

A plan is a name, one or more delivery frequencies, and the products it applies to. You create it on the Plans page.

Creating a plan creates a selling plan group in Shopify, stamped as Subflow's. Archiving one deletes that group: shoppers can no longer start the plan, and existing subscriptions keep their contracts and keep billing. Archiving cannot be undone.

You can also work from the product itself. On a product or variant in the Shopify admin, the Subflow purchase-options action creates or edits a subscription purchase option without leaving that page — up to 31 delivery frequencies, each with a percentage discount from 0 to 100.

On your product page

Subflow ships a theme app extension block called Subscribe & Save. You place it in the theme editor, under Add block → Apps, next to your buy buttons.

The customer portal

The portal is served on your own storefront at /apps/subflow through Shopify's app proxy. It exists on every store the app is installed on and needs no placement. A visitor who is not logged in gets a login link back to it.

Each subscription is a card showing its products with images and quantities, the recurring total and cadence, the next delivery date in your store's timezone, and a status. From it a customer can:

While a charge for the current cycle is still open, the actions that would move past it are refused and nothing changes: the customer is told a payment is being processed and asked to try again once it finishes. Moving the date then could still let that charge go through, so the app refuses rather than risk it. A subscription waiting on a bank authentication prompt says so, and is not retried while it is pending.

Every action is checked against the logged-in customer's own subscriptions, and a double submit or a refresh cannot apply the same action twice. Changes apply to future deliveries; anything already on its way is unaffected.

Customer accounts and the thank-you page

Subflow also ships blocks for Shopify's own customer-facing surfaces. Shopify renders each of them only once you place it, which is Shopify's behaviour for every app. The portal above always works, so your customers are never left without a way in.

Recurring billing

Shopify does not advance a subscription's next billing date. Subflow does, on a successful charge. A scheduled job runs once a day per store and, in order:

Charges are idempotent. Each billing cycle is protected by a database uniqueness constraint and by an idempotency key sent to Shopify, so a retry, a duplicated webhook, or two overlapping runs cannot produce a second charge. When a charge succeeds, the next billing date moves forward one interval. A new subscriber is emailed a confirmation with a link to the portal; a subscriber you migrated from another app is not, because their subscription is not new to them.

When a payment fails

A declined charge is retried automatically three times — 2 days after the failure, then 4 days later, then 7 days later, so the last attempt lands about two weeks after the failure — one original charge and three retries. Each failure emails the customer a link to update their payment method, and alerts you with the decline reason. After the last retry fails, the subscription is marked Failed and no further automatic charge is made; it stays on your failed-payments page until you or the customer act.

A subscription the customer has already cancelled receives no dunning email. If a delivery is moved past a cycle that is still unpaid, the automatic ladder for that cycle stops, and the cycle stays on your failed-payments page with its manual retry.

The failed-payments page

This page lists every declined charge, and every charge waiting on bank authentication, on a subscription that can still be recovered — 100 to a page. Each row shows the customer, the products, the decline reason, how many attempts have been made out of four, and when the next automatic retry runs. Subscriptions that are cancelled, expired or left behind by an uninstall are not listed, because no payment action on them could be valid.

Two actions sit on each row:

A row waiting on 3-D Secure cannot be retried: sending the same charge again would not start a new attempt. It is labelled as awaiting the customer instead.

Moving from another subscriptions app

A subscription contract belongs to the app that created it, so no app can take another's contracts over. Subflow re-creates each subscription against the payment method the customer already has saved on your store. Nobody is asked for their card again, and card details never reach Subflow. Because that is a bulk write against real subscribers' billing, the wizard shows you every row before, during and after the run.

  1. Choose the app you are leaving. Recharge, the Shopify Subscriptions app, Appstle, Seal, Bold, or a generic CSV whose columns you map yourself. Each option tells you which export to produce; the Appstle, Seal and Bold presets are starting guesses, because those apps do not publish their export format.
  2. Upload the export (up to 10 MB) and check the column mapping. The importer understands the customer email, variant ID, price, quantity, billing interval and count, next billing date, status in the old app, currency, the old subscription ID, and the delivery address. Every field can be pointed at one of your own columns.
  3. Run the preview. This is a dry run: nothing is created in Shopify. It looks up each row's customer and the card they already have saved, rolls a billing date that has already passed forward to the next cycle, and labels every row — ready to import, no matching customer, no vaulted card, several cards to choose between, prepaid, possible duplicate, invalid, or skipped because of its status in the old app. You can read it row by row, include a skipped row, or fix things in Shopify and re-check.
  4. Work through the checklist. Nothing Subflow does stops billing in your old app, so importing while it is still running means both apps charge the same customers. The import button stays disabled until you confirm you have paused or cancelled billing there. The checklist also notes that imported subscriptions arrive with $0.00 delivery — the importer does not read a shipping price from your file — so recurring shipping has to be added afterwards.
  5. Import. Rows are created ten at a time with visible progress. Failed rows can be downloaded as a CSV and retried. When it finishes, the job stays as a permanent record.

Prepaid subscriptions are refused rather than imported. Shopify has no prepaid equivalent that can be re-created without charging the customer again, so those rows are flagged and left for you to run down on the old app.

If the import is interrupted after a row was sent to Shopify but before Shopify answered, that row is marked Check in Shopify and deliberately left out of the bulk retry. Importing it again blindly would charge that customer twice a cycle, so you look, then tell the row what you found.

An import is capped by your plan limit like everything else: if the rows would take you past it, the import stops and says so.

Plans, limits and the grace window

Subflow is priced on active subscribers, at a flat monthly price. There is no revenue share on any plan, including Free — we never take a percentage of your subscription sales.

Paid plans include a 14-day free trial, once per store. If you change plan mid-trial, the days you have left carry over. Charges appear on your Shopify bill and you can change or cancel at any time.

When you reach your limit, Subflow stops your store taking on more subscribers: the products are detached from the selling plan group, so the subscribe option stops appearing on your storefront. The group, its plans, its discounts and its schedule are untouched, so upgrading re-attaches exactly what was there, automatically. Your existing subscribers are unaffected — they stay active and keep being billed.

Downgrading below the number of subscribers you already have is the one case that needs a decision. New sign-ups stop immediately and a 30-day grace window opens. The date is shown in the app and sent to you by email. If you are still above the limit when it ends, the subscriptions beyond the limit are paused — newest first, so the customers you have had longest are the last to go — and never cancelled. Upgrading again resumes exactly those, automatically. Subflow never cancels one of your subscriptions.

Privacy and data handling

The full policy is at /privacy. In short:

Subflow implements Shopify's mandatory privacy webhooks. Shopify triggers all three automatically, so you never have to contact us to have one carried out:

Uninstalling stops billing immediately and parks your subscriptions, so reinstalling does not retroactively charge customers for the time the app was gone.

Anything else

If something here does not answer your question, email support@subflow.store and we will answer within one business day.

← Back to Subflow · Support · Privacy policy