From shopify-admin-skills
Measures average Shopify return processing time from request creation to refund, flags SLA breaches on completed returns, lists longest-pending open returns.
npx claudepluginhub 40rty-ai/shopify-admin-skills --plugin shopify-admin-skillsThis skill uses the workspace's default tool permissions.
Calculates the time from return request creation to refund issuance for all completed returns in a period. Surfaces the average processing time, identifies orders that breached a configurable SLA threshold, and lists the longest-pending open returns. Read-only — no mutations.
Aggregates Shopify return reasons by product, SKU, and reason code to identify high-return items and issues like damage or wrong size over a date window.
Analyzes D2C ecommerce order CSV data across 30d/90d/365d periods to generate KPI trees, health signals, structured findings, and action plans.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Calculates the time from return request creation to refund issuance for all completed returns in a period. Surfaces the average processing time, identifies orders that breached a configurable SLA threshold, and lists the longest-pending open returns. Read-only — no mutations.
shopify store auth --store <domain> --scopes read_orders,read_returnsread_orders, read_returns| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain (e.g., mystore.myshopify.com) |
| days_back | integer | no | 30 | Lookback window for return requests |
| sla_days | integer | no | 5 | Maximum acceptable days from request to refund |
| format | string | no | human | Output format: human or json |
ℹ️ Read-only skill — no mutations are executed. Safe to run at any time.
OPERATION: returns — query
Inputs: query: "created_at:>='<NOW - days_back days>'", first: 250, pagination cursor
Expected output: Returns with createdAt, status, refunds { createdAt }, order { name }
For each completed return: calculate processing_days = refund.createdAt - return.createdAt
Identify SLA breaches: processing_days > sla_days
OPERATION: orders — query
Inputs: Filter for orders with return_status:open to find pending returns exceeding SLA
Expected output: Open return orders with request dates
# returns:query — validated against api_version 2025-01
query ReturnProcessingTimes($query: String!, $after: String) {
returns(first: 250, after: $after, query: $query) {
edges {
node {
id
status
createdAt
order {
id
name
}
refunds(first: 3) {
id
createdAt
totalRefundedSet {
shopMoney {
amount
currencyCode
}
}
}
returnLineItems(first: 10) {
edges {
node {
quantity
returnReason
}
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
# orders:query — validated against api_version 2025-01
query OrdersWithOpenReturns($query: String!, $after: String) {
orders(first: 250, after: $after, query: $query) {
edges {
node {
id
name
createdAt
returnStatus
returns(first: 5) {
edges {
node {
id
status
createdAt
}
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Claude MUST emit the following output at each stage. This is mandatory.
On start, emit:
╔══════════════════════════════════════════════╗
║ SKILL: Return Processing SLA ║
║ 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):
══════════════════════════════════════════════
RETURN PROCESSING SLA (<days_back> days, SLA: <sla_days> days)
Returns analyzed: <n>
Avg processing time: <d> days
Within SLA (<sla_days>d): <n> (<pct>%)
SLA breaches: <n> (<pct>%)
Open returns pending: <n>
Longest open returns (no refund yet):
Order <name> — requested <n> days ago
Output: return_sla_<date>.csv
══════════════════════════════════════════════
For format: json, emit:
{
"skill": "return-processing-sla",
"store": "<domain>",
"period_days": 30,
"sla_days": 5,
"returns_analyzed": 0,
"avg_processing_days": 0,
"within_sla_count": 0,
"sla_breach_count": 0,
"open_pending_count": 0,
"output_file": "return_sla_<date>.csv"
}
CSV file return_sla_<YYYY-MM-DD>.csv with columns:
return_id, order_name, return_requested_at, refunded_at, processing_days, sla_breach, return_status
| Error | Cause | Recovery |
|---|---|---|
THROTTLED | API rate limit exceeded | Wait 2 seconds, retry up to 3 times |
| No refund on completed return | Exchange-only resolution | Exclude from time calculation, note as exchange |
| No returns in window | No return activity | Exit with summary: 0 returns |
sla_days to match your published returns policy (e.g., "refunds processed within 5 business days").sla_days — reducing WISMO-style "where's my refund" tickets.return-reason-analysis to correlate slow processing with specific return reason types.processing_days measures calendar days; adjust your SLA threshold accordingly if your team only processes returns on business days.