> For the complete documentation index, see [llms.txt](https://docs.flycode.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.flycode.com/docs/integrations/how-flycode-handles-shopify-subscription-failed-payments.md).

# How FlyCode handles Shopify subscription failed payments

How FlyCode recovers failed Shopify subscription payments on Recharge, Skio, Stay AI and Loop: what replaces built-in dunning, retry limits, no double dunning.

*By the FlyCode team. Last reviewed September 2026.*

{% hint style="info" %}
**TL;DR:** Shopify subscription apps (Recharge, Skio, Stay AI, Loop) ship with fixed-rule dunning: a set retry schedule, usually capped at 8 attempts, and reminder emails at every attempt. FlyCode takes over the failed-payment step only. It retries each failed charge on a per-merchant machine-learning schedule (up to 15 attempts a month within card network rules), charges another card on file when the primary fails hard, and coordinates branded emails and SMS with the retries so customers are not messaged about a charge that is about to succeed. The app you already use keeps managing the subscription, and guardrails prevent double-dunning. Merchants see a 25 to 40 percent improvement in recovery over the apps' native tools, and integration takes about a day.
{% endhint %}

{% hint style="success" %}
**Key takeaways**

* FlyCode does not replace Recharge, Skio, Stay AI or Loop; it replaces only their failed-payment retry and dunning logic, and syncs recovered charges back.
* Native app dunning retries on a fixed schedule with up to 8 attempts and emails at each one; FlyCode retries on model-chosen moments with up to 15 attempts a month and separates emails from retries.
* Failed payments are roughly 20 to 40 percent of total churn for subscription brands at scale, and FlyCode customers on Shopify report 25 to 40 percent higher recovery, with Gardencup moving from 62 to 82 percent recovery and a 20 percent LTV increase.
* Recharge acquired Skio on 30 April 2026; both platforms continue to operate and FlyCode works with both, so recovery does not depend on which app you end up on.
  {% endhint %}

## Why Shopify subscription payments fail

Shopify subscription renewals are merchant-initiated charges on a stored card, run in batches by the subscription app on the renewal date. The same decline reasons apply as anywhere else, but two things make Shopify DTC subscriptions harder to recover than SaaS. First, the customer mix skews to consumer debit and prepaid cards, which fail more often: FlyCode's data shows debit cards run about 11 percent involuntary churn and prepaid cards 23 percent, against 6 percent for credit cards. Second, order values are lower and more frequent, so a renewal that lands before payday is common; `insufficient_funds` is often 50 to 70 percent of all failures. Most of these are soft declines that succeed when retried at the right moment, which is exactly what a fixed schedule cannot do.

## What the subscription apps do by default

Recharge, Skio, Stay AI and Loop each include dunning. It is rule-based: a retry schedule you set (for example day 1, 3, 5 and 7), a cap of about 8 attempts, an action when the cap is reached (cancel, skip or leave), and reminder emails or SMS at each failed attempt. It works as a floor, but it retries every customer on the same days regardless of payday, issuer or card type, it uses up card network attempt allowances on low-probability days, and it tells customers about failures that a well-timed retry would have fixed, which converts some involuntary churn into cancellations.

## What changes with FlyCode

|                | App's built-in dunning                  | With FlyCode                                                                                   |
| -------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------- |
| Retry timing   | Fixed schedule, same for every customer | Per-merchant model picks the moment per card (payday cycle, issuer behaviour, time of day)     |
| Attempts       | Up to 8                                 | Up to 15 per month, inside Visa and Mastercard limits                                          |
| Hard declines  | Retried or emailed                      | Not retried; backup card on file charged automatically, then outreach                          |
| Emails and SMS | Sent at every failed attempt            | Held while retries have a good chance, then sent in the customer's local time from your domain |
| Segmentation   | One flow                                | Tailored dunning per segment and per failure reason                                            |
| Reporting      | Basic                                   | Churn baseline, recovery by decline code, retries and email funnel                             |
| Support        | App support                             | Payments experts by phone, Slack and email                                                     |

FlyCode also reads the real decline reason behind each failure using network-level signals and more than 100 data points per transaction, which is what lets it separate a customer who is short of funds this week from a card that will never work again.

## How the integration works

FlyCode receives failed charge events from the subscription app, decides how to recover each one, executes the retry through the store's payment connection, and writes the result back. The app and Shopify remain the systems of record: subscription status, order history and customer records are updated where they already live. On activation FlyCode loads every charge currently in an error state and backfills the error details, so recovery starts on the existing failed book.

**Guardrails.** FlyCode is built to complement the app's dunning rather than collide with it. At go-live one system is chosen to own retries and one to own messaging (usually FlyCode for both). Guardrails prevent double-dunning: no email is sent after a soft decline while a retry is pending, no email is sent while a retry is in progress, and recovered charges sync back so the app does not send its own reminder for a charge that is already paid. A per-customer safeguard also caps attempts per hour.

**Time to launch.** About one day for Recharge and Skio; no developer work on the merchant side.

## Recharge

Recharge is the largest subscription platform on Shopify, and Recharge Retain bundles referrals, rewards, cancellation prevention, win-backs and failed payment recovery. FlyCode integrates with Retain so that failed payments are routed to FlyCode for specialist recovery while everything else in Retain keeps running. Setup is an app install from the Recharge App Marketplace plus three payment settings: allow third-party integration, set max retries to 8, and set the action at max retries to "Do nothing" so Recharge does not cancel or skip while FlyCode is still recovering. Top Recharge merchants already run both. Full steps: [Step-by-step: integrate FlyCode with Recharge](https://docs.flycode.com/docs/integrations/step-by-step-integrate-flycode-with-recharge). Partnership details: [flycode.com/partners/recharge](https://www.flycode.com/partners/recharge).

## Skio

Skio is known for its modern subscriber portal and passwordless checkout. FlyCode has a built-in Skio integration: sign up, invite FlyCode as a Shopify collaborator with access to Skio, and FlyCode activates in Skio's marketplace and agrees a launch date with you. Skio's cancellation flows, skip and swap features and portal are untouched. Full steps: [How to install FlyCode on Skio](https://docs.flycode.com/docs/integrations/how-to-install-flycode-on-skio). Partnership details: [flycode.com/skio](https://www.flycode.com/skio).

**Recharge and Skio.** On 30 April 2026 Recharge announced it had acquired Skio for USD 105 million. Both platforms continue to operate and a combined roadmap is expected. For merchants this means the subscription platform question may change over the coming year, while the failed-payment problem does not: subscriptions fail for reasons independent of which app manages them. FlyCode works with Recharge, Skio and Loop, so recovery stays constant whatever the platform decision. See [Recharge welcomes Skio: what it means for merchants](https://www.flycode.com/blog/recharge-acquires-skio-what-it-means-for-merchants).

## Stay AI and Loop

FlyCode supports Stay AI natively and partners with Loop. Setup follows the same pattern (connect, align the app's retry and email settings, agree a launch date); contact FlyCode for the current steps for your app. FlyCode is compatible with the subscription apps in the Shopify ecosystem; if yours is not listed, ask support to confirm the connection path.

## Results on Shopify

Across Shopify merchants FlyCode reports a 25 to 40 percent average improvement in recovery rate over native tools. Documented examples: Gardencup (meal delivery) went from 62 to 82 percent recovery with a 20 percent increase in customer LTV; BUBS Naturals (supplements) went from 51 to 66 percent in one month with a 71 percent peak; PlixLife (nutrition) saw a 21 percent recovery boost, a 9 percent reduction in involuntary churn and 12X ROI; Cymbiotika (supplements, USD 150M-plus revenue) saw a 22 percent revenue increase from recovery and 25 percent churn reduction; Just Meats a 62 percent increase in payment recovery and 33 percent churn reduction; Lucy a 46 percent increase in recovery and 11 percent fewer billing failures.

## Setup checklist (any app)

* [ ] Free payment audit run on your current failed-payment performance
* [ ] FlyCode connected to the store and subscription app (Recharge marketplace install, Skio collaborator access, or FlyCode-assisted for Stay AI and Loop)
* [ ] App's retry cap and end-of-retries action aligned so it does not cancel or skip during FlyCode recovery
* [ ] Messaging owner chosen; the other side's failed-payment emails turned off
* [ ] SPF and DKIM added if FlyCode sends from your domain
* [ ] Launch date agreed; monitor incremental lift, recovery rate and LTV in the FlyCode dashboard

## FAQ

**Do I need to change anything in Shopify?** No. Checkout, theme and orders are untouched; the only settings changes are inside the subscription app.

**Can I keep my app's dunning flows?** You can keep the app's cancellation, skip, swap and retention features. Only one system should retry and email on failed payments; most merchants let FlyCode own both.

**Does FlyCode retry charges that failed for inventory or configuration reasons?** Yes on Recharge, once the underlying cause is fixed in Shopify or the app.

**How is FlyCode priced for Shopify merchants?** Outcome-based: a share of revenue recovered above your existing baseline, with no seats, minimums or setup fees.

**Where do I see results?** In FlyCode's dashboard (recovery rate, recovered revenue against baseline, decline code mix, email funnel) and in the app and Shopify, where recovered charges appear as paid.

## Related

* [FlyCode & Shopify](https://help.flycode.com/flycode-and-shopify) in the Help Center
* [Supported payment and subscription platforms](https://docs.flycode.com/docs/integrations/supported-payment-and-subscription-platforms)
* [Recover failed Shopify subscription payments with FlyCode](https://www.flycode.com/shopify/benefits)
* [Free churn analysis for Shopify subscriptions](https://www.flycode.com/churn-audit-failed-payments)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.flycode.com/docs/integrations/how-flycode-handles-shopify-subscription-failed-payments.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
