
Shopify Admin Automated Order Tagger
- 2 installs
- 173 repo stars
- Updated June 26, 2026
- 40rty-ai/shopify-admin-skills
shopify-admin-automated-order-tagger is a Claude Code skill that applies tags to Shopify orders based on configurable rules like geography, value, product type, risk level, and customer tier.
About
shopify-admin-automated-order-tagger scans recent Shopify orders and applies tags based on configurable rule sets covering geography, order value, product type, customer tier, risk level, and more. An operator runs it to auto-classify orders for downstream routing, review, or segmentation. It executes orderUpdate mutations and defaults to dry-run.
- Applies tags to Shopify orders based on configurable rules (geography, value, product type, risk, customer tier)
- Supports dry-run preview and skips already-tagged orders
- Batches order updates to respect API rate limits
Shopify Admin Automated Order Tagger by the numbers
- 2 all-time installs (skills.sh)
- Ranked #1,839 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 1, 2026 (Skillselion catalog sync)
shopify-admin-automated-order-tagger capabilities & compatibility
Free; requires an authenticated Shopify session with read_orders and write_orders scopes.
- Capabilities
- automated order tagger · bulk customer tag update · cancel and restock
- Use cases
- orchestration
- Pricing
- Free
What shopify-admin-automated-order-tagger says it does
Mutation: applies tags to orders based on configurable rules (geography, value, product type, risk level, customer tier).
Supports dry-run mode for safe preview.
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-automated-order-taggerAdd 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
Automatically tag Shopify orders by rules such as value, geography, product type, and risk level.
Who is it for?
Operators auto-classifying orders for routing, review, or segmentation.
Skip if: Tagging customers rather than orders, which the bulk-customer-tag-update skill handles.
When should I use this skill?
You want recent orders auto-tagged by value, geography, risk, or product-type rules.
What you get
Recent orders receive rule-based tags, previewed in dry-run before being applied.
- Rule-based tags applied to matched orders
- Order tagging report
By the numbers
- Default 7-day order lookback
- Processes updates in batches of 10 to respect rate limits
- Example rule set lists 12 conditions
Files
Purpose
Applies tags to orders based on configurable rule sets — geography-based (domestic/international), value-based (high-value, low-value), product-type-based, customer-tier-based, or custom conditions. Supports dry-run mode for safe preview.
Prerequisites
- Authenticated Shopify CLI session:
shopify store auth --store <domain> --scopes read_orders,write_orders - API scopes:
read_orders,write_orders
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain |
| rules | object[] | yes | — | Array of tagging rules (see Rules Format below) |
| days_back | integer | no | 7 | Lookback window for orders to tag |
| skip_tagged | boolean | no | true | Skip orders that already have the target tag |
| dry_run | boolean | no | true | Preview only — don't apply tags |
| format | string | no | human | Output format: human or json |
Rules Format
Each rule has a condition and a tag:
[
{ "condition": "total_price > 500", "tag": "high-value" },
{ "condition": "total_price < 20", "tag": "low-value" },
{ "condition": "shipping_country != US", "tag": "international" },
{ "condition": "shipping_country = US", "tag": "domestic" },
{ "condition": "line_items_count > 5", "tag": "bulk-order" },
{ "condition": "customer_orders > 3", "tag": "repeat-buyer" },
{ "condition": "customer_orders = 1", "tag": "first-time" },
{ "condition": "risk_level = HIGH", "tag": "needs-review" },
{ "condition": "financial_status = PARTIALLY_REFUNDED", "tag": "partial-refund" },
{ "condition": "fulfillment_status = null", "tag": "unfulfilled" },
{ "condition": "discount_codes contains WELCOME", "tag": "welcome-discount" },
{ "condition": "product_type contains Subscription", "tag": "subscription-order" }
]Safety
⚠️ Mutation skill — always run with dry_run: true first to preview tag assignments before applying.Workflow Steps
1. OPERATION: orders — query Inputs: query: "created_at:>='<NOW - days_back days>'", first: 250, select id, name, tags, totalPriceSet, shippingAddress { countryCode }, customer { numberOfOrders }, displayFinancialStatus, displayFulfillmentStatus, riskLevel, lineItems { product { productType } }, discountCodes, pagination cursor Expected output: All recent orders with data needed for rule evaluation
2. For each order, evaluate all rules:
- Parse each condition against order data
- Collect all matching tags
- If
skip_tagged: true, exclude tags already present on the order
3. If dry_run: true: report matches without applying If dry_run: false:
4. OPERATION: orderUpdate — mutation (for each order needing new tags) Inputs: { id: <order_id>, tags: <existing_tags + new_tags> } Expected output: Updated order with new tags Batch: Process in batches of 10 to respect rate limits
GraphQL Operations
# orders:query — validated against api_version 2025-01
query OrdersForTagging($query: String!, $after: String) {
orders(first: 250, after: $after, query: $query) {
edges {
node {
id
name
tags
totalPriceSet { shopMoney { amount currencyCode } }
shippingAddress { countryCode provinceCode }
customer { id numberOfOrders }
displayFinancialStatus
displayFulfillmentStatus
riskLevel
discountCodes
lineItems(first: 20) {
edges {
node {
product { productType }
quantity
}
}
}
}
}
pageInfo { hasNextPage endCursor }
}
}# orderUpdate:mutation — validated against api_version 2025-01
mutation TagOrder($input: OrderInput!) {
orderUpdate(input: $input) {
order { id name tags }
userErrors { field message }
}
}Session Tracking
Claude MUST emit the following output at each stage. This is mandatory.
On start, emit:
╔══════════════════════════════════════════════╗
║ SKILL: Automated Order Tagger ║
║ Store: <store domain> ║
║ Mode: <DRY RUN | LIVE> ║
║ 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):
══════════════════════════════════════════════
ORDER TAGGING REPORT (<days_back> days, <mode>)
Orders scanned: <n>
Orders matched: <n>
Tags applied: <n> (or "would apply" in dry run)
─────────────────────────────
RULE MATCHES:
"high-value" → <n> orders
"international" → <n> orders
"first-time" → <n> orders
"repeat-buyer" → <n> orders
Output: order_tags_<date>.csv
══════════════════════════════════════════════Output Format
CSV file order_tags_<YYYY-MM-DD>.csv with columns: order_id, order_name, existing_tags, new_tags, matched_rules
Error Handling
| Error | Cause | Recovery |
|---|---|---|
THROTTLED | API rate limit exceeded | Wait 2 seconds, retry up to 3 times |
| Invalid rule | Unparseable condition | Skip rule, warn in output |
ACCESS_DENIED | Missing write_orders scope | Switch to read-only mode, report matches only |
Best Practices
- Always run
dry_run: truefirst to preview changes. - Tags are additive — this skill never removes existing tags.
- Use with
order-risk-reportto auto-tag risk levels. - Combine with downstream automation tooling for post-tagging actions (e.g., tag "high-value" → assign to VIP fulfillment queue).
- Useful for filtering orders in Shopify admin — tags make complex order segments searchable.
Related skills
FAQ
Will it re-tag orders that already have the tag?
No by default. With skip_tagged: true it excludes tags already present on the order.
Is it safe to run live immediately?
It defaults to dry_run: true so you can preview tag assignments before applying them.