shopify-admin-wismo-bulk-status-report
SkillCommerce & financeIdentify orders at risk of generating WISMO support tickets: shipped orders with stale tracking, and unfulfilled orders past their SLA window.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the shopify-admin-wismo-bulk-status-report skill
What this skill tells your AI
The instructions your AI receives, as published by 40rty-ai/shopify-admin-skills in skills/customer-support/shopify-admin-wismo-bulk-status-report/SKILL.md and read by ahel’s review.
Purpose
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.
Prerequisites
shopify auth login --store <domain>- API scopes:
read_orders
Parameters
| 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 |
Workflow Steps
-
OPERATION:
orders— query (unfulfilled at-risk) Inputs:first: <limit>,query: "fulfillment_status:unfulfilled created_at:<='<NOW minus unfulfilled_sla_days>'", sort byCREATED_ATascending Expected output: Orders unfulfilled past SLA window withname,createdAt,customer,displayFulfillmentStatus; label asUNFULFILLED_OVERDUE -
OPERATION:
orders— query (shipped but potentially stale) Inputs:first: <limit>,query: "fulfillment_status:shipped updated_at:<='<NOW minus stale_tracking_days>'", sort byUPDATED_ATascending Expected output: Shipped orders not updated recently withname,createdAt,fulfillments.createdAt,fulfillments.trackingInfo; label asSHIPPED_STALE_TRACKING
GraphQL Operations
# 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
}
}
}
Session Tracking
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"
}
}
Output Format
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 Handling
| 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 |
Best Practices
- Run this report daily during your morning ops review alongside
fulfillment-status-digest— together they cover both the ops queue and the customer-facing risk. - Sort the CSV by
days_waitingdescending to prioritize outreach to the most overdue orders first. - For
UNFULFILLED_OVERDUEorders, forward to thefulfillment-status-digestskill to understand why they haven't been fulfilled and useorder-hold-and-releaseif needed. - For
SHIPPED_STALE_TRACKINGorders, check if the carrier tracking URL shows movement — if it's genuinely stalled, proactive outreach reduces ticket volume significantly. - Use
format: jsonto pipe the output into a Slack alert or CRM automation that creates follow-up tasks for your support team.
Signals
- GitHub stars
- 187
- Forks
- 18
- Last commit
- Aug 2026
ahel review
S4info
community integration — published by 40rty-ai, not shopify
Automated review, not a security audit. Ruleset v1.
Advanced
- Catalog kind
- skill
- Gateway key
shopify-admin-wismo-bulk-status-report- Source
- github.com/40rty-ai/shopify-admin-skills