shopify-admin-customer-win-back
Automates the identification and tagging of customers who haven't ordered in a set number of days.
Install
mkdir -p .claude/skills/shopify-admin-customer-win-back && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/19430" && unzip -o skill.zip -d .claude/skills/shopify-admin-customer-win-back && rm skill.zipInstalls to .claude/skills/shopify-admin-customer-win-back
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Identify customers who have not ordered in N days, export a re-engagement list, and tag them in Shopify.Key capabilities
- →Identify lapsed customers based on inactivity duration
- →Filter customers by lifetime order count
- →Apply custom tags to segmented customer groups
- →Perform dry run simulations to preview tagging
- →Export re-engagement lists in CSV format
How it works
The skill queries the Shopify data layer for customers meeting specific inactivity and order count criteria. It then iterates through the results to apply a designated tag via a GraphQL mutation.
Inputs & outputs
When to use shopify-admin-customer-win-back
- →Find customers inactive for over 90 days
- →Tag lapsed shoppers for a re-engagement email campaign
- →Create a list of repeat buyers who have not returned recently
- →Perform a dry run to check how many customers qualify for a win-back campaign
About this skill
Purpose
Segments lapsed customers — those who placed at least one order but have not purchased again within a configurable window — and tags them for re-engagement. This skill handles the Shopify-native data layer; sending re-engagement emails requires an external tool.
Prerequisites
- Authenticated Shopify CLI session:
shopify auth login --store <domain> - API scopes:
read_customers,write_customers
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain |
| format | string | no | human | human or json |
| dry_run | bool | no | false | Preview without tagging |
| inactive_days | integer | no | 90 | Days since last order to qualify as lapsed |
| min_orders | integer | no | 1 | Minimum lifetime order count to include |
| tag | string | no | win-back | Tag applied to lapsed customers |
| max_customers | integer | no | 500 | Maximum customers to process per run |
Workflow Steps
-
OPERATION:
customers— query Inputs: filterlast_order_date:<(NOW - inactive_days days),orders_count:>=(min_orders),first: 250, pagination Expected output: List of customer objects withid,defaultEmailAddress { emailAddress },firstName,lastName,ordersCount,lastOrder.processedAt; paginate untilhasNextPage: false -
OPERATION:
tagsAdd— mutation Inputs: Customerid, tag string fromtagparameter Expected output: Confirmation per customer; collectuserErrors
GraphQL Operations
# customers:query — validated against api_version 2025-04
query LapsedCustomers($first: Int!, $after: String, $query: String) {
customers(first: $first, after: $after, query: $query) {
edges {
node {
id
defaultEmailAddress {
emailAddress
}
firstName
lastName
ordersCount
lastOrder {
processedAt
totalPriceSet {
shopMoney {
amount
currencyCode
}
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
# tagsAdd:mutation — validated against api_version 2025-01
mutation TagsAdd($id: ID!, $tags: [String!]!) {
tagsAdd(id: $id, tags: $tags) {
node {
id
}
userErrors {
field
message
}
}
}
Session Tracking
Claude MUST emit the following output at each stage. This is mandatory.
On start, emit:
╔══════════════════════════════════════════════╗
║ SKILL: Customer Win-Back ║
║ Store: <store domain> ║
║ Started: <YYYY-MM-DD HH:MM UTC> ║
╚══════════════════════════════════════════════╝
After each step, emit:
[N/TOTAL] <QUERY|MUTATION> <OperationName>
→ Params: <brief summary>
→ Result: <count or outcome>
If dry_run: true, prefix mutation steps with [DRY RUN] and do not execute.
On completion, for format: human:
══════════════════════════════════════════════
OUTCOME SUMMARY
Lapsed customers found: <n>
Customers tagged: <n>
Errors: <n>
Output: winback_<date>.csv
══════════════════════════════════════════════
For format: json, emit the standard JSON schema with outcome keys: lapsed_found, customers_tagged, errors, output_file.
Output Format
CSV winback_<YYYY-MM-DD>.csv with columns:
customer_id, email, first_name, last_name, orders_count, last_order_date, tag_applied
Error Handling
| Error | Cause | Recovery |
|---|---|---|
THROTTLED | Rate limit | Wait 2s, retry up to 3 times |
userErrors on tagsAdd | Customer not found or invalid ID | Log, skip, continue |
Best Practices
- Use a dated tag (e.g.,
win-back-2026-04) so you can track which cohort was targeted each month and avoid re-tagging customers who already received a win-back campaign. - Set
min_orders: 2to focus on customers who had a genuine purchase relationship, not one-time buyers who may never have intended to return. - Run with
dry_run: truefirst to validate the lapsed customer count before tagging — the count informs the scale of your re-engagement campaign.
When not to use it
- →Sending re-engagement emails directly
- →Processing customers without prior order history
Prerequisites
Limitations
- →Maximum of 500 customers processed per run
- →Requires external tools for sending emails
How it compares
Unlike manual list exports, this skill automates the identification and tagging process directly within the Shopify admin environment.
Compared to similar skills
shopify-admin-customer-win-back side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| shopify-admin-customer-win-back (this skill) | 0 | 3mo | No flags | Intermediate |
| churn-prevention | 2 | 1mo | Review | Intermediate |
| klaviyo | 1 | 3mo | Review | Intermediate |
| shopify-admin-refund-and-reorder | 0 | 3mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by 40RTY-ai
View all by 40RTY-ai →You might also like
churn-prevention
alirezarezvani
Reduce voluntary and involuntary churn through cancel flow design, save offers, exit surveys, and dunning sequences. Use when designing or optimizing a cancel flow, building save offers, setting up dunning emails, or reducing failed-payment churn. Trigger keywords: cancel flow, churn reduction, save offers, dunning, exit survey, payment recovery, win-back, involuntary churn, failed payments, cancel page. NOT for customer health scoring or expansion revenue — use customer-success-manager for that.
klaviyo
alinaqi
Klaviyo email/SMS marketing - profiles, events, flows, segmentation
shopify-admin-refund-and-reorder
40RTY-ai
Process a full or partial refund on an order and optionally create a replacement draft order for the customer.
reverb-listings-draft
ZacharyEggert
Reverb: Create a listing in draft state.
revops
Anhvu1107
ALWAYS use this when the request matches Revops: Design and improve revenue operations, lead lifecycle rules, scoring, routing, handoffs, and CRM process automation.
shopify-automation
FISCFED9
Automate Shopify tasks via Rube MCP (Composio): products, orders, customers, inventory, collections. Always search tools first for current schemas.