From shopify-admin-skills
Generates bulk reports of Shopify orders at risk of WISMO support tickets: shipped with stale tracking and unfulfilled past SLA window, via GraphQL queries.
npx claudepluginhub 40rty-ai/shopify-admin-skills --plugin shopify-admin-skillsThis skill uses the workspace's default tool permissions.
Generates a bulk report of orders most likely to generate "Where Is My Order?" (WISMO) support tickets — shipped orders whose tracking hasn't updated in N days, and unfulfilled orders sitting past a configurable SLA. According to industry research, WISMO accounts for ~18% of all incoming support requests, making proactive identification a direct ops capacity investment. Read-only. Replaces manu...
Generates daily fulfillment triage digest of Shopify open orders segmented by age buckets and flagging holds or exceptions via GraphQL queries. Replaces manual admin review for ops teams.
Manages Wix eCommerce shipping rates via REST APIs: query lists, retrieve details, create rules with costs, regions, logistics, and conditions. Includes tax config guidance.
Guides Shopify order management via GraphQL: lifecycle, FulfillmentOrder, returns/refunds, draft orders, editing, transactions, metafields, risk analysis.
Share bugs, ideas, or general feedback.
Generates a bulk report of orders most likely to generate "Where Is My Order?" (WISMO) support tickets — shipped orders whose tracking hasn't updated in N days, and unfulfilled orders sitting past a configurable SLA. According to industry research, WISMO accounts for ~18% of all incoming support requests, making proactive identification a direct ops capacity investment. Read-only. Replaces manual order-by-order admin scanning or helpdesk searches. The CSV output can be used to proactively contact customers before they contact you.
shopify auth login --store <domain>read_orders| 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 |
| unfulfilled_sla_days | integer | no | 3 | Flag unfulfilled orders older than this many days |
| stale_tracking_days | integer | no | 5 | Flag shipped orders where the last fulfillment was created more than this many days ago (proxy for stale tracking) |
| limit | integer | no | 250 | Max orders per page |
OPERATION: orders — query (unfulfilled at-risk)
Inputs: first: <limit>, query: "fulfillment_status:unfulfilled created_at:<='<NOW minus unfulfilled_sla_days>'", sort by CREATED_AT ascending
Expected output: Orders unfulfilled past SLA window with name, createdAt, customer, displayFulfillmentStatus; label as UNFULFILLED_OVERDUE
OPERATION: orders — query (shipped but potentially stale)
Inputs: first: <limit>, query: "fulfillment_status:shipped updated_at:<='<NOW minus stale_tracking_days>'", sort by UPDATED_AT ascending
Expected output: Shipped orders not updated recently with name, createdAt, fulfillments.createdAt, fulfillments.trackingInfo; label as SHIPPED_STALE_TRACKING
# orders:query — validated against api_version 2025-01
query WismoOrders($first: Int!, $after: String, $query: String) {
orders(first: $first, after: $after, query: $query, sortKey: CREATED_AT) {
edges {
node {
id
name
createdAt
updatedAt
displayFulfillmentStatus
displayFinancialStatus
customer {
id
firstName
lastName
defaultEmailAddress {
emailAddress
}
}
shippingAddress {
city
province
country
}
fulfillments {
createdAt
status
trackingInfo {
number
url
company
}
}
totalPriceSet {
shopMoney { amount currencyCode }
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Claude MUST emit the following output at each stage. This is mandatory.
On start, emit:
╔══════════════════════════════════════════════╗
║ SKILL: wismo-bulk-status-report ║
║ 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
Unfulfilled overdue orders: <n>
Shipped stale-tracking orders: <n>
Total at-risk orders: <n>
Errors: 0
Output: wismo-report-<YYYY-MM-DD>.csv
══════════════════════════════════════════════
For format: json, emit:
{
"skill": "wismo-bulk-status-report",
"store": "<domain>",
"started_at": "<ISO8601>",
"completed_at": "<ISO8601>",
"dry_run": false,
"steps": [
{ "step": 1, "operation": "WismoOrders", "type": "query", "params_summary": "fulfillment_status:unfulfilled, sla_days: <n>, limit: <n>", "result_summary": "<n> orders", "skipped": false },
{ "step": 2, "operation": "WismoOrders", "type": "query", "params_summary": "fulfillment_status:shipped, stale_days: <n>, limit: <n>", "result_summary": "<n> orders", "skipped": false }
],
"outcome": {
"unfulfilled_overdue_count": 0,
"shipped_stale_count": 0,
"total_at_risk": 0,
"errors": 0,
"output_file": "wismo-report-<YYYY-MM-DD>.csv"
}
}
CSV file wismo-report-<YYYY-MM-DD>.csv with columns: risk_type, order_name, customer_email, order_date, days_waiting, fulfillment_status, tracking_number, tracking_company, shipping_city, shipping_country.
Two sections in the CSV (separated by risk_type column value): UNFULFILLED_OVERDUE and SHIPPED_STALE_TRACKING. For human format, also shows a summary table before the CSV path.
| Error | Cause | Recovery |
|---|---|---|
| No orders returned | All orders are within SLA / recently updated | Good news — no WISMO risk detected |
| Very large result set | High order volume or wide SLA window | Narrow date range or reduce unfulfilled_sla_days |
customer is null | Guest checkout order | Order name and tracking still included — email column will be empty |
| Rate limit (429) | Many pages of orders | Reduce limit to 100 |
fulfillment-status-digest — together they cover both the ops queue and the customer-facing risk.days_waiting descending to prioritize outreach to the most overdue orders first.UNFULFILLED_OVERDUE orders, forward to the fulfillment-status-digest skill to understand why they haven't been fulfilled and use order-hold-and-release if needed.SHIPPED_STALE_TRACKING orders, check if the carrier tracking URL shows movement — if it's genuinely stalled, proactive outreach reduces ticket volume significantly.format: json to pipe the output into a Slack alert or CRM automation that creates follow-up tasks for your support team.