What Is Cross-Stack Subscription Monitoring? (Shopify + Recharge + Stripe)
Cross-stack subscription monitoring is the practice of comparing subscription state across all platforms involved in a merchant's billing infrastructure — Shopify, Recharge, and Stripe — to detect discrepancies that indicate revenue loss. Each platform maintains its own record of subscription status. When those records disagree, revenue is usually leaking. A subscription marked ACTIVE in Shopify but CANCELLED in Recharge is a ghost subscription. A billing attempt with an errorCode in Shopify that Recharge never received means dunning never started. No single platform dashboard shows the full picture. Cross-stack monitoring does.
What is a cross-stack subscription state mismatch?
A cross-stack state mismatch occurs when two or more platforms in a merchant's subscription stack disagree on the status of the same subscription. The most common example: Recharge marks a subscription CANCELLED after exhausting payment retries, but Shopify's subscription contract still shows ACTIVE. Another example: Shopify records a billing attempt failure with errorCode PAYMENT_PROVIDER_IS_NOT_ENABLED, but Recharge never receives this failure notification and continues showing the subscription as healthy.
State mismatches are not immediately obvious because each platform's dashboard only shows its own data. Merchants looking at Shopify see active subscriptions and normal-looking subscription counts. Looking at Recharge separately shows errors. Only by comparing the two does the mismatch surface — and most merchants do not do this comparison manually.
What is a Shopify subscription billing attempt?
A SubscriptionBillingAttempt is a Shopify object created each time Shopify tries to charge a customer for a subscription renewal. It is created via the subscriptionBillingAttemptCreate GraphQL mutation and lives under the SubscriptionContract in the Shopify Admin API. Each billing attempt has a status (SUCCESS, FAILED) and, when failed, an errorCode field that identifies why the charge failed.
The errorCode field is the most important signal in Shopify subscription monitoring. It tells you exactly what went wrong: PAYMENT_PROVIDER_IS_NOT_ENABLED means a gateway configuration issue, INSUFFICIENT_FUNDS means a temporary card issue, PAYMENT_METHOD_REVOKED means the Shop Pay token is invalid. Without checking billing attempt errorCodes, these failures are invisible in the standard Shopify Admin UI.
What is a subscription contract in Shopify?
A SubscriptionContract is the core Shopify object representing a recurring billing agreement between a merchant and customer. It has a status field with possible values: ACTIVE (billing is ongoing), PAUSED (billing is suspended), CANCELLED (billing has ended), FAILED (billing has permanently failed), and EXPIRED. The contract is the parent object that contains all billing attempts.
Subscription apps like Recharge and SKIO create and manage subscription contracts on behalf of merchants. The contract status in Shopify should always match the subscription status in the app. When they diverge — Shopify shows ACTIVE but the app shows CANCELLED — that divergence is a cross-stack mismatch indicating lost revenue.
What is a SubscriptionBillingAttemptErrorCode?
SubscriptionBillingAttemptErrorCode is a Shopify GraphQL enum that identifies why a subscription billing attempt failed. Key values: PAYMENT_PROVIDER_IS_NOT_ENABLED (gateway not configured for recurring billing), PAYMENT_METHOD_REVOKED (Shop Pay token invalidated), INSUFFICIENT_FUNDS (customer account lacks funds), CARD_DECLINED (generic bank refusal), AUTHENTICATION_REQUIRED (3DS authentication needed), EXPIRED_PAYMENT_METHOD (card expired).
These error codes are only visible via the Shopify Admin API — they do not appear in the standard Shopify Admin UI notifications. Merchants using subscription apps like Recharge may never see these codes unless they query the API directly, which is why they accumulate silently and why cross-stack monitoring that surfaces them is necessary.
What is a webhook delivery failure in subscription management?
A webhook delivery failure occurs when Shopify fires a subscription event webhook — such as subscription_billing_attempts/failure — and the receiving endpoint returns a non-2xx response or times out. Shopify retries the delivery for up to 48 hours. If the endpoint stays unavailable, the event is permanently lost and the receiving app never learns about the state change.
The downstream consequence of missed webhooks is a state mismatch. Recharge does not receive the failure notification, does not start dunning, does not send a customer email. The subscription continues appearing active in Recharge while Shopify has recorded the failure. This is one of the hardest failure modes to detect because it leaves no obvious trace in either platform's dashboard.
What is dunning in Shopify subscriptions?
Dunning is the automated sequence of payment retry attempts and customer communications that runs after a subscription billing failure. For Recharge merchants, dunning is configured in Recharge Admin > Settings > Dunning and includes a retry schedule and email templates. For Shopify native subscriptions, merchants build dunning logic on top of the subscription_billing_attempts/failure webhook.
Effective dunning distinguishes between error types. INSUFFICIENT_FUNDS warrants a retry after 3–5 days. PAYMENT_METHOD_REVOKED warrants an immediate payment update email with no retries — the token is permanently invalid. AUTHENTICATION_REQUIRED warrants sending a 3DS confirmation URL. Treating all failures with the same retry cadence is the most common and most expensive dunning mistake.
What is MRR leakage from subscription failures?
MRR leakage is Monthly Recurring Revenue lost when active subscriptions fail to bill. The calculation is straightforward: number of subscriptions with billing failures multiplied by average subscription value equals monthly revenue lost. At $30K MRR, a 15% billing failure rate equals $4,500 per month in MRR leakage — revenue that appears in your subscription count but never arrives in your bank account.
MRR leakage compounds over time. A subscription that fails silently in January and is not caught until March has leaked three months of revenue. The longer the detection lag, the higher the total leakage. Cross-stack monitoring reduces detection lag from weeks to hours, significantly limiting the compounding effect.
What is a silent subscription failure?
A silent subscription failure is a billing attempt that fails with an errorCode but generates no merchant-facing alert. Shopify does not send email notifications to merchants when individual billing attempts fail. Recharge may not receive the failure signal if webhook delivery failed. The subscription appears active in all dashboards, revenue stops arriving, and no alert fires.
AltorLab monitors for silent failures by querying Shopify billing attempt errorCodes and cross-referencing Recharge subscription state on a daily cadence. When a mismatch is found — a billing attempt with an errorCode in Shopify, or a Recharge subscription marked CANCELLED while Shopify shows ACTIVE — AltorLab surfaces it as an actionable alert with estimated revenue impact.
Frequently asked questions
What is the difference between a subscription cancellation and a silent subscription failure?
A cancellation is an intentional state change — the merchant or customer explicitly ended the subscription. A silent failure is an unintentional state where billing attempts fail with an errorCode but no one is notified. The subscription appears active while revenue stops. Silent failures are recoverable; some cancellations are not.
How do I know if my Shopify store has cross-stack subscription monitoring in place?
If you can answer 'which of my subscriptions had a billing attempt errorCode in the last 7 days?' without querying the Shopify Admin API manually, you have some form of monitoring. If that question is hard to answer, you likely have no cross-stack monitoring and silent failures are accumulating undetected.
What tools monitor cross-stack subscription state across Shopify, Recharge, and Stripe?
AltorLab is purpose-built for cross-stack subscription monitoring on Shopify. It queries billing attempt errorCodes from Shopify, cross-references Recharge subscription state, and surfaces mismatches with revenue impact. General analytics tools like Google Analytics do not monitor subscription billing state.
Why do silent subscription failures not show up in Shopify dashboard reports?
Shopify's built-in reports show subscription counts and revenue trends but do not surface individual billing attempt errorCodes. Failures only appear if you drill into a specific subscription contract's billing attempts tab. There are no dashboard-level alerts for billing failures across all subscriptions.
How much revenue do merchants typically lose to undetected subscription failures?
Based on merchant reports, stores with undetected cross-stack failures at $30K MRR have reported losing 40–60% of subscription revenue. At $10K MRR, a 15% silent failure rate equals $1,500 per month in unrecovered revenue — losses that compound weekly until someone audits billing attempts manually.