
Shopify Admin Churn Risk Scorer
- 2 installs
- 173 repo stars
- Updated June 26, 2026
- 40rty-ai/shopify-admin-skills
shopify-admin-churn-risk-scorer is a Claude Code skill that scores Shopify customers by churn probability based on purchase recency, frequency decay, and expected repurchase intervals.
About
This skill analyzes a Shopify store's order history to score repeat customers by churn probability using purchase recency and average purchase interval. It computes an expected next-purchase date and classifies each customer into Active, Cooling, At Risk, or Likely Churned segments. It is read-only and exports a CSV with churn scores and estimated revenue at risk.
- Scores customers 0-100 for churn risk from purchase recency and frequency decay
- Computes an expected next-purchase date and flags overdue repeat customers
- Read-only; exports a CSV segmenting Active / Cooling / At Risk / Likely Churned
Shopify Admin Churn Risk Scorer by the numbers
- 2 all-time installs (skills.sh)
- Ranked #1,759 of 2,064 Data Science & ML skills by installs in the Skillselion catalog
- Data as of Aug 1, 2026 (Skillselion catalog sync)
shopify-admin-churn-risk-scorer capabilities & compatibility
Free skill; requires an authenticated Shopify store session with read_orders and read_customers scopes.
- Capabilities
- churn scoring · customer segmentation · retention analysis · csv export
- Works with
- stripe
- Use cases
- data analysis
- Pricing
- Bring your own API key
What shopify-admin-churn-risk-scorer says it does
Read-only: scores customers by churn probability based on purchase recency, frequency decay, and expected repurchase intervals.
Calculates an expected next-purchase date for each repeat customer, then scores churn risk based on how overdue they are. Read-only — no mutations.
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-churn-risk-scorerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2 |
|---|---|
| repo stars | ★ 173 |
| Last updated | June 26, 2026 |
| Repository | 40rty-ai/shopify-admin-skills ↗ |
What it does
Score Shopify repeat customers by churn risk from their purchase cadence and export at-risk segments for win-back.
Who is it for?
Merchants who want to identify repeat customers who are overdue for a purchase and target them for win-back.
Skip if: One-time or guest buyers; it needs at least two orders per customer to compute a purchase interval.
When should I use this skill?
You want to rank customers by how likely they are to churn based on how overdue their next purchase is.
What you get
Each repeat customer gets a 0-100 churn score and segment, plus an estimate of annual revenue at risk.
- CSV churn_risk_<date>.csv with churn score and risk segment per customer
- estimate of revenue at risk
By the numbers
- churn score on a 0-100 scale
- 365-day default analysis window
- 4 risk segments (Active/Cooling/At Risk/Likely Churned)
Files
Purpose
Predicts which customers are at risk of churning by analyzing their purchase patterns against their historical buying frequency. Calculates an expected next-purchase date for each repeat customer, then scores churn risk based on how overdue they are. Read-only — no mutations.
Prerequisites
- Authenticated Shopify CLI session:
shopify store auth --store <domain> --scopes read_orders,read_customers - API scopes:
read_orders,read_customers
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain |
| days_back | integer | no | 365 | Historical window for purchase pattern analysis |
| min_orders | integer | no | 2 | Minimum orders to calculate purchase interval (need 2+ for frequency) |
| risk_threshold | float | no | 1.5 | Multiplier of avg purchase interval before flagging as at-risk |
| format | string | no | human | Output format: human or json |
Safety
ℹ️ Read-only skill — no mutations are executed. Safe to run at any time.
Churn Risk Scoring Model
For each customer with min_orders or more purchases:
1. Average Purchase Interval (API) = total days between first and last order / (order_count - 1) 2. Days Since Last Order (DSLO) = today - last_order_date 3. Overdue Ratio = DSLO / API 4. Churn Risk Score (0-100):
- Overdue ratio ≤ 1.0 → Score 0-20 (Active)
- Overdue ratio 1.0–1.5 → Score 20-50 (Cooling)
- Overdue ratio 1.5–2.5 → Score 50-80 (At Risk)
- Overdue ratio > 2.5 → Score 80-100 (Likely Churned)
5. Customer Lifetime Value (CLV) = total spend / customer age in years × expected remaining years
Workflow Steps
1. OPERATION: orders — query Inputs: query: "created_at:>='<NOW - days_back days>'", first: 250, select createdAt, totalPriceSet, customer { id, email, firstName, lastName }, pagination cursor Expected output: All orders with customer association
2. Group orders by customer, calculate per customer:
- Order dates (sorted chronologically)
- Average purchase interval
- Days since last order
- Total spend
- Order count
3. OPERATION: customers — query (enrichment) Inputs: Customer IDs for at-risk and likely-churned segments Expected output: Contact details, tags, total spend
4. Calculate churn risk score and classify into segments
5. Estimate revenue at risk = sum of (annual_spend × churn_probability) for at-risk customers
GraphQL Operations
# orders:query — validated against api_version 2025-01
query OrdersForChurnAnalysis($query: String!, $after: String) {
orders(first: 250, after: $after, query: $query) {
edges {
node {
createdAt
totalPriceSet { shopMoney { amount currencyCode } }
customer {
id
email
firstName
lastName
numberOfOrders
}
}
}
pageInfo { hasNextPage endCursor }
}
}# customers:query — validated against api_version 2025-01
query AtRiskCustomers($ids: [ID!]!) {
nodes(ids: $ids) {
... on Customer {
id
email
firstName
lastName
totalSpentV2 { amount currencyCode }
numberOfOrders
tags
createdAt
}
}
}Session Tracking
Claude MUST emit the following output at each stage. This is mandatory.
On start, emit:
╔══════════════════════════════════════════════╗
║ SKILL: Churn Risk Scorer ║
║ Store: <store domain> ║
║ Started: <YYYY-MM-DD HH:MM UTC> ║
╚══════════════════════════════════════════════╝After each step, emit:
[N/TOTAL] <QUERY|MUTATION> <OperationName>
→ Params: <brief summary of key inputs>
→ Result: <count or outcome>On completion, emit:
For format: human (default):
══════════════════════════════════════════════
CHURN RISK REPORT (<days_back> days analyzed)
Repeat customers scored: <n>
─────────────────────────────
Active (score 0-20): <n> (<pct>%)
Cooling (score 20-50): <n> (<pct>%)
At Risk (score 50-80): <n> (<pct>%) ⚠️
Likely Churned (80-100): <n> (<pct>%) 🔴
Revenue at risk: $<amount>/year
Top at-risk by value:
<name> (<email>) Score: <n> Last order: <date> Lifetime: $<n>
Output: churn_risk_<date>.csv
══════════════════════════════════════════════Output Format
CSV file churn_risk_<YYYY-MM-DD>.csv with columns: customer_id, email, first_name, last_name, order_count, total_spent, avg_purchase_interval_days, days_since_last_order, overdue_ratio, churn_risk_score, risk_segment, expected_annual_value
Error Handling
| Error | Cause | Recovery |
|---|---|---|
THROTTLED | API rate limit exceeded | Wait 2 seconds, retry up to 3 times |
| Single-purchase customers | Can't calculate interval | Exclude from scoring (need 2+ orders) |
| Guest orders | No customer linkage | Skip — cannot build customer profile |
Best Practices
- Pair with
customer-win-backskill to take action on At-Risk and Likely Churned segments. - Use with
rfm-customer-segmentationfor a more holistic view of customer health. - High-value churning customers (top 20% by spend) should get personalized outreach.
- Export At-Risk segment to email marketing platform for automated win-back sequences.
- Adjust
risk_thresholdbased on your product type: consumables (1.3), fashion (1.5), furniture (2.0).
Related skills
FAQ
How is churn risk calculated?
It computes an overdue ratio (days since last order divided by average purchase interval) and maps it to a 0-100 score across Active, Cooling, At Risk, and Likely Churned bands.
Does it modify customer records?
No. It is a read-only skill; it exports a CSV and executes no mutations.