SH

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.zip

Installs 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.
104 charsno explicit “when” trigger
Intermediate

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

You give it
inactive_days, min_orders, and tag parameters
You get back
CSV file containing customer details and applied tags

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

ParameterTypeRequiredDefaultDescription
storestringyesStore domain
formatstringnohumanhuman or json
dry_runboolnofalsePreview without tagging
inactive_daysintegerno90Days since last order to qualify as lapsed
min_ordersintegerno1Minimum lifetime order count to include
tagstringnowin-backTag applied to lapsed customers
max_customersintegerno500Maximum customers to process per run

Workflow Steps

  1. OPERATION: customers — query Inputs: filter last_order_date:<(NOW - inactive_days days), orders_count:>=(min_orders), first: 250, pagination Expected output: List of customer objects with id, defaultEmailAddress { emailAddress }, firstName, lastName, ordersCount, lastOrder.processedAt; paginate until hasNextPage: false

  2. OPERATION: tagsAdd — mutation Inputs: Customer id, tag string from tag parameter Expected output: Confirmation per customer; collect userErrors

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

ErrorCauseRecovery
THROTTLEDRate limitWait 2s, retry up to 3 times
userErrors on tagsAddCustomer not found or invalid IDLog, 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: 2 to focus on customers who had a genuine purchase relationship, not one-time buyers who may never have intended to return.
  • Run with dry_run: true first 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

Authenticated Shopify CLI sessionread_customers API scopewrite_customers API scope

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.

SkillInstallsUpdatedSafetyDifficulty
shopify-admin-customer-win-back (this skill)03moNo flagsIntermediate
churn-prevention21moReviewIntermediate
klaviyo13moReviewIntermediate
shopify-admin-refund-and-reorder03moNo flagsIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry