shopify-admin-agentic-…
Edit the theme's robots.txt.liquid to explicitly allow AI crawlers (GPTBot, ClaudeBot,…
Mine order history to find which products are most frequently bought together, then rank pairs by support, confidence, and lift to power bundles and cross-sell recommendations.
$ npx -y skills add 40rty-ai/shopify-admin-skills --skill shopify-admin-product-affinity-cross-sell --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/shopify-admin-product-affinity-cross-sellContext preview
The summary Claude sees to decide when to auto-load this skill.
Mine order history to find which products are most frequently bought together, then rank pairs by support, confidence, and lift to power bundles and cross-sell recommendations.
name: shopify-admin-product-affinity-cross-sell role: order-intelligence description: "Mine order history to find which products are most frequently bought together, then rank pairs by support, confidence, and lift to power bundles and cross-sell recommendations." toolkit: shopify-admin, shopify-admin-execution api_version: "2025-01" graphql_operations: - orders:query status: stable compatibility: Claude Code, Cursor, Codex, Gemini CLI
Applies market basket analysis to your order history to surface product pairs that customers naturally buy together. For every co-purchased pair it calculates **support** (how often the pair appears), **confidence** (given product A, how likely is B?), and **lift** (how much more likely than chance). The output is actionable input for product bundles, "frequently bought together" widgets, cross-sell email flows, and homepage recommendations. Read-only — no mutations are executed.
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | store | string | yes | — | Store domain (e.g., mystore.myshopify.com) | | format | string | no | human | Output format: `human` or `json` | | dry_run | bool | no | false | Preview operations without executing mutations | | date_range_start | string | yes | — | Start date in ISO 8601 (e.g., `2025-01-01`) | | date_range_end | string | yes | — | End date in ISO 8601 (e.g., `2025-03-31`) | | min_support | integer | no | 5 | Minimum number of orders a pair must co-appear in to be included | | min_confidence | float | no | 0.1 | Minimum P(B\|A) threshold (0–1) | | min_lift | float | no | 1.0 | Only include pairs where lift > this value (> 1 means non-random) | | top_n | integer | no | 20 | Number of top pairs to show in the ranked output | | sort_by | string | no | lift | Ranking metric: `lift`, `confidence`, or `support` | | exclude_tags | string | no | — | Comma-separated product tags to exclude (e.g., `gift-wrap,donation`) |
1. **OPERATION:** `orders` — query **Inputs:** `first: 250`, `query: "created_at:>='<date_range_start>' created_at:<='<date_range_end>'"`, pagination cursor; select `lineItems` with `product { id, title }` and `quantity`; skip orders with a single line item **Expected output:** All multi-item orders in range; paginate until `hasNextPage: false`; build a product frequency map (`product_id → order_count`) and a pair frequency map (`(product_a_id, product_b_id) → co_occurrence_count`)
2. **In-memory analysis:**
# orders:query (multi-item basket analysis) — validated against api_version 2025-01
query OrdersForAffinityAnalysis($first: Int!, $after: String, $query: String) {
orders(first: $first, after: $after, query: $query) {
edges {
node {
id
createdAt
lineItems(first: 50) {
edges {
node {
quantity
product {
id
title
tags
}
}
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}**Claude MUST emit the following output at each stage. This is mandatory.**
**On start**, emit:
╔══════════════════════════════════════════════╗ ║ SKILL: product-affinity-cross-sell ║ ║ 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):
══════════════════════════════════════════════ OUTCOME SUMMARY Orders analysed: <n> Unique products: <n> Pairs evaluated: <n> Pairs above threshold:<n> Date range: <start> to <end> Sort by: <lift|confidence|support> Errors: 0 Output: product_affinity_<date>.csv ══════════════════════════════════════════════
Followed by an inline ranked table of the top `top_n` pairs:
| Rank | Product A | Product B | Support | Conf A→B | Conf B→A | Lift | |------|-----------|-----------|---------|----------|----------|------| | 1 | ... | ... | ... | ...% | ...% | ... |
For `format: json`, emit:
{
"skill": "product-affinity-cross-sell",
"store": "<domain>",
"started_at": "<ISO8601>",
"completed_at": "<ISO8601>",
"dry_run": false,
"steps": [
{ "step": 1, "operation": "OrdersForAffinityAnalysis", "type": "query", "params_summary": "<date_range_start> to <date_range_end>", "result_summary": "<n> orders, <n> multi-item baskets", "skipped": false }
],
"outcome": {
"orders_analysed": 0,
"unique_products": 0,
"pairs_evaluated": 0,
"pairs_above_threshold": 0,
"date_range_start": "<date_range_start>",
"date_range_end": "<date_range_end>",
"sort_by": "lift",
"results": [],
"errors": 0,
"output_file": "product_affinity_<date>.csv"
}
}CSV file `product_affinity_<YYYY-MM-DD>.csv` with one row per qualifying pair:
| Column | Description | |-
Community-maintained AI agent skills for operating Shopify stores — workflows, optimization, reports and more
Edit the theme's robots.txt.liquid to explicitly allow AI crawlers (GPTBot, ClaudeBot,…
Rewrite thin product descriptions into structured, fact-rich copy (materials, fit, use-cases,…
Generate and set descriptive alt text on product images so AI agents (which can't 'see'…
Generate and publish an /llms.txt guide (brand summary, flagship products, key policies,…
Define and populate agentic-commerce metafields (material, attributes, key features, specs,…
Inject an Organization JSON-LD block (name, logo, sameAs social links, contactPoint) into the…