What Recharge skips tell you about subscriber LTV
A Recharge skip never reaches Shopify, so it looks like nothing happened. Keep skips as events in a unified customer view and test whether they predict churn.
Written by Linus Tse, founder of Greyfield Data
ยท 7 min read
On this page 9 sections
A Recharge skip tells you a subscriber is still active but didn't want this shipment. Shopify never sees it, because no order is placed. Keep skips, unskips, swaps, frequency changes, cancels, and reactivations as dated events next to Shopify orders, then test whether skip patterns predict cancels and lower LTV for your subscribers.
This customer didn't place an order, therefore it didn't hit Shopify, but they skipped. That one sentence is why order-only reporting misreads subscribers. We build a unified view that puts both on one timeline, and our customer timeline demo shows it on synthetic data.
Key takeaways
- A skipped charge creates no Shopify order, so a Shopify-only view can't tell a skipping subscriber from a lapsed one.
- Recharge links its customers to Shopify customer IDs, which makes it possible to put skips on the same customer profile as orders.
- Keep subscription changes as an append-only event history, because some Recharge actions overwrite or remove earlier state.
- Skip rate, consecutive skips, and skip-then-churn are the three metrics that turn skips into a retention signal.
- Involuntary cancels from failed payments can arrive through a different Recharge webhook than voluntary cancels, so check both.
Why are skips invisible in Shopify?
Skips are invisible in Shopify because Shopify records orders, and a skip is the absence of one. Recharge holds the subscription and its schedule. When a subscriber skips, the skipped charge stays in Recharge and nothing is created in Shopify.
So in Shopify, a subscriber who skipped March and a customer who cancelled in February look the same for March: no order. Any metric built on orders alone, like repeat rate or orders per customer, counts the skipper as less engaged than they are.
Recharge has their profile IDs between Recharge and Shopify
Recharge has their profile IDs between Recharge and Shopify, so the join is straightforward. A Recharge charge carries the Shopify customer ID in customer.external_customer_id, under the ecommerce key, and the Shopify order in external_order_id.
That lets you understand behaviors around that, around the overall Shopify customer profile. Each skip, swap, or cancel can sit on the same customer record as their orders, refunds, and email events. How to combine Shopify, Klaviyo, and Recharge data covers the keys and the timeline query in detail.
Which subscription events should you keep?
Keep every event that changes what a subscriber will receive or pay. We checked each of these against Recharge's public API reference for the 2021-11 version.
| Event | Where it comes from in Recharge | Why it matters for LTV |
|---|---|---|
| Skip | subscription/skipped webhook, or a charge with skipped status |
Active but paused demand |
| Unskip | subscription/unskipped webhook |
Reverses a skip, so count net skips |
| Skip removed by the system | subscription/removed_from_skipped_charge webhook |
A reschedule or frequency change can remove a skip |
| Swap | subscription/swapped webhook |
Product or variant change, often a save from cancel |
| Frequency change | subscription/updated webhook, compare interval fields between snapshots |
Slower cadence lowers 12-month value |
| Voluntary cancel | subscription/cancelled webhook, with cancellation_reason and cancellation_reason_comments |
The reason is the most useful text you'll get |
| Involuntary cancel | charge/max_retries_reached webhook |
Failed payments, a different fix than a voluntary cancel |
| Reactivation | subscription/activated webhook |
Win-back, and it resets the cancel fields |
The webhook topics and their behavior come from Recharge's webhooks reference. Two details there change how you build the history:
- The reference says an involuntary cancel after max retries triggers only
charge/max_retries_reached, notsubscription/cancelled. Listen for both or you'll undercount churn. - Activating a cancelled subscription sets
cancelled_at,cancellation_reason, andcancellation_reason_commentsback to null. If you only keep the current subscription row, the original cancel reason is gone.
There's no dedicated frequency-change topic in that list, so detect it by comparing interval fields in dated snapshots of the subscription. Store every event in one append-only table keyed on subscription ID, event type, and event date.
What skip metrics should you track?
Track three metrics, each by acquisition channel and cohort month.
Skip rate. Skipped charges divided by charges scheduled in the period. Count a skip that was later unskipped as not skipped.
Consecutive skips. Subscribers with two or more skips in a row. A single skip can be a vacation. A run of skips may be a slow cancel.
Skip-then-churn. Of subscribers who skipped in a period, the share who cancelled within the next 90 days. Compare it with the same rate for subscribers who didn't skip.
Whether skips predict churn for your brand is a question for your own data. Don't assume the pattern below holds.
A worked example: skips across 2,000 subscribers
These numbers are synthetic. A DTC subscription brand has 2,000 subscribers with a charge scheduled this month. 240 skip, so the skip rate is 240 / 2,000 = 12.0%. Shopify shows 1,760 orders and nothing at all for the other 240 subscribers.
Now group the same 2,000 subscribers by skips in their first six months, and count cancels in the 90 days after month 6.
| Skip pattern, months 1 to 6 | Subscribers | Cancelled within 90 days | Cancel rate |
|---|---|---|---|
| No skips | 1,200 | 96 | 8.0% |
| Skipped, never twice in a row | 500 | 55 | 11.0% |
| Two or more consecutive skips | 300 | 102 | 34.0% |
| All subscribers | 2,000 | 253 | 12.7% |
Skip-then-churn for anyone who skipped is (55 + 102) / (500 + 300) = 157 / 800 = 19.6%, against 8.0% for non-skippers.
In this sample, isolated skips barely move the cancel rate. Two or more in a row is where it jumps. That's the kind of split that tells you when to send a save offer or a swap suggestion, and when to leave a subscriber alone.
A Shopify-only view would see these 300 subscribers as customers with a two-month order gap. It couldn't separate them from customers who already cancelled, so it couldn't target them.
How do skips change subscriber LTV?
Skips lower LTV directly, because each skip is a shipment that didn't happen, and indirectly, if a run of skips leads to a cancel. Model both in your forecast.
For the direct part, measure 12-month contribution per subscriber by skip pattern, using the same cohort rules as contribution margin LTV by acquisition channel. For the indirect part, use skip-then-churn as a candidate early indicator and test it the way early indicators of cohort quality by channel describes.
A swap after a skip is often a better sign than a skip alone, since the subscriber chose to stay. Keep swaps in the same table so you can see that sequence. The retention value calculator gives a quick estimate of what a lower cancel rate is worth.
For the identity side, how to track a customer across Shopify, Klaviyo, Recharge, and your ad platforms explains the identity table we use under the unified view.
Frequently asked questions
Why don't Recharge skips show up in Shopify?
A skip means no charge is processed, so no Shopify order is created. The skip only exists in Recharge, so you need Recharge data joined to the Shopify customer to see it.
How do you calculate subscriber skip rate?
Divide skipped charges by charges scheduled in the period. Treat skips that were later unskipped as not skipped, and report the rate by channel and cohort.
Do skips predict subscription churn?
They can, but test it on your own subscribers. Compare cancel rates over the next 90 days for subscribers with no skips, one skip, and consecutive skips.
How do you join Recharge and Shopify customers?
Recharge stores the Shopify customer ID in customer.external_customer_id on its charge records. Use that to put Recharge events on the same customer profile as Shopify orders.
Why does my cancel reason disappear after a reactivation?
Recharge sets the cancel date and cancel reason fields back to null when a cancelled subscription is activated. Keep cancels as events in your own table so the reason survives.
What to do next
Count how many of last month's scheduled charges were skipped, then check how many of those subscribers show as "no order" in your Shopify reports. If that gap is large, open the customer timeline demo to see what a unified view looks like, or book a call with me to plan one on your own data.
Part of the Ecommerce reporting guides, a reading path through related articles.

Linus Tse
Founder of Greyfield Data. Built 400+ dashboards. Certified in Sigma, Snowflake, Tableau, and Power BI.
About Linus

