From shopify-admin-skills
Scores Shopify customers by churn probability based on purchase recency, frequency decay, and expected repurchase intervals.
How this skill is triggered — by the user, by Claude, or both
Slash command
/shopify-admin-skills:shopify-admin-churn-risk-scorerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
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.
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.
shopify store auth --store <domain> --scopes read_orders,read_customersread_orders, read_customers| 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 |
ℹ️ Read-only skill — no mutations are executed. Safe to run at any time.
For each customer with min_orders or more purchases:
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
Group orders by customer, calculate per customer:
OPERATION: customers — query (enrichment)
Inputs: Customer IDs for at-risk and likely-churned segments
Expected output: Contact details, tags, total spend
Calculate churn risk score and classify into segments
Estimate revenue at risk = sum of (annual_spend × churn_probability) for at-risk customers
# 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
}
}
}
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
══════════════════════════════════════════════
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 | 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 |
customer-win-back skill to take action on At-Risk and Likely Churned segments.rfm-customer-segmentation for a more holistic view of customer health.risk_threshold based on your product type: consumables (1.3), fashion (1.5), furniture (2.0).npx claudepluginhub 40rty-ai/shopify-admin-skills --plugin shopify-admin-skillsScores every customer by Recency, Frequency, Monetary value and segments them into actionable groups (Champions, Loyal, At-Risk, Lost). Read-only Shopify admin tool.
Scores customer segments for churn risk using behavioral signals (email engagement, purchase frequency, login patterns, support tickets) and generates intervention playbooks with timing, channel, and messaging recommendations.
Use this skill when the user wants to identify accounts at risk of churning, understand why users are cancelling, or find early warning signals before churn happens. Activate when the user says "churn analysis", "who might cancel", "accounts at risk", "why are people leaving", "usage drop", "inactive accounts", "retention analysis", "predict churn", or asks about subscription health, cancellation patterns, or which users are disengaged. Works best with Dataslayer MCP connected (Stripe + analytics). Also works with manual data.