Recharge Dunning Cancelled Subscription but Shopify Shows Active
Root cause
Recharge fired charge/max_retries_reached and cancelled its internal subscription record, but the corresponding Shopify subscriptionContract was never updated to CANCELLED or PAUSED because the webhook delivery to Shopify failed or was not handled.
Symptoms
- • Recharge subscription status is CANCELLED while Shopify subscriptionContract shows ACTIVE
- • No Recharge billing attempts exist beyond the final dunning failure date
- • Shopify may be fulfilling orders for the subscription period after the Recharge cancellation
- • Revenue for the post-cancellation period is zero but fulfillment costs continue
How to fix it
Audit all Recharge CANCELLED subscriptions against Shopify contract status
Pull all Recharge subscriptions with status CANCELLED from the Recharge API. For each, query the Shopify subscriptionContracts endpoint using the customer's Shopify customer ID to find the matching contract. Any Shopify contract that shows ACTIVE where Recharge shows CANCELLED is a ghost subscription. Export this list — each entry needs manual reconciliation.
Cancel matching Shopify contracts via API
For each ghost subscription identified, call Shopify's subscriptionContractUpdate mutation to set the contract status to CANCELLED. This stops future billing attempts on the Shopify side and prevents fulfillment orders from being created after the dunning cancellation. If you cannot access the Shopify Admin API, cancel manually through Shopify Admin > Orders > Subscriptions.
Open in admin →Handle charge/max_retries_reached webhook explicitly
Add explicit handling for Recharge's charge/max_retries_reached webhook event in your webhook handler. When this event fires, immediately call subscriptionContractUpdate on the Shopify contract to CANCEL or PAUSE it. This is the most commonly missed Recharge webhook — most integrations handle charge/success and charge/failure but not the max_retries event that signals dunning exhaustion.
Frequently asked questions
How do I know how many ghost subscriptions I currently have?
Run a cross-stack audit: export all Recharge subscriptions cancelled in the last 90 days, then query Shopify for their corresponding contract statuses. Any Shopify contract showing ACTIVE for a Recharge CANCELLED subscription is a ghost. Most merchants find 2–5% of their cancelled subscriptions exist in this ghost state, representing significant fulfillment costs with no revenue.
What is the revenue impact of ghost subscriptions?
Ghost subscriptions cost the merchant in fulfillment (product shipped, not paid for) plus any subscription platform fees that continue accruing. A merchant with 500 active subscriptions and a 3% ghost rate has 15 ghost subscriptions — at $40 average order value, that is $600/month in unrecovered fulfillment costs, plus the cost of any goods shipped.
Detect this error automatically
Free cross-stack scan finds all billing errors in 60 seconds.
Run Free Scan →