Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
40rty-ai avatar

Shopify Admin Return Processing Sla

  • 7 installs
  • 173 repo stars
  • Updated June 26, 2026
  • 40rty-ai/shopify-admin-skills

shopify-admin-return-processing-sla is a Claude Code skill that measures average return-to-refund time and flags SLA breaches from Shopify returns data.

About

shopify-admin-return-processing-sla calculates how long returns take from request to refund and flags orders that breached a configurable SLA threshold. A returns or operations owner runs it to monitor processing speed and find the longest-pending open returns. It is read-only and outputs both a summary and a CSV.

  • Measures average time from return request to refund completion
  • Surfaces SLA breaches against a configurable sla_days threshold
  • Read-only; exports a return_sla CSV with per-return processing days

Shopify Admin Return Processing Sla by the numbers

  • 7 all-time installs (skills.sh)
  • Ranked #1,587 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
  • Data as of Aug 1, 2026 (Skillselion catalog sync)
At a glance

shopify-admin-return-processing-sla capabilities & compatibility

Free; needs a Shopify CLI session with read_orders and read_returns scopes

Capabilities
returns analytics · sla reporting · return processing
Use cases
data analysis
Runs
Runs locally
Pricing
Free
From the docs

What shopify-admin-return-processing-sla says it does

Calculates the time from return request creation to refund issuance for all completed returns in a period.
SKILL.md
Read-only skill — no mutations are executed. Safe to run at any time.
SKILL.md
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-return-processing-sla

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs7
repo stars173
Last updatedJune 26, 2026
Repository40rty-ai/shopify-admin-skills

What it does

A returns team runs it to report average return-to-refund time and catch SLA breaches over a lookback window.

Who is it for?

Returns and ops teams tracking return-to-refund SLA compliance

Skip if: Modifying or issuing refunds (this skill is read-only)

When should I use this skill?

You need to report return processing speed or find returns breaching the refund SLA

What you get

An SLA report with average processing days, breach counts, and the longest-pending open returns.

  • return_sla CSV report
  • average processing time and SLA-breach summary

By the numbers

  • default 30-day lookback window
  • default 5-day SLA threshold

Files

SKILL.mdMarkdownGitHub ↗

Purpose

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.

Prerequisites

  • Authenticated Shopify CLI session: shopify store auth --store <domain> --scopes read_orders,read_returns
  • API scopes: read_orders, read_returns

Parameters

ParameterTypeRequiredDefaultDescription
storestringyesStore domain (e.g., mystore.myshopify.com)
days_backintegerno30Lookback window for return requests
sla_daysintegerno5Maximum acceptable days from request to refund
formatstringnohumanOutput format: human or json

Safety

ℹ️ Read-only skill — no mutations are executed. Safe to run at any time.

Workflow Steps

1. 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 }

2. For each completed return: calculate processing_days = refund.createdAt - return.createdAt

3. Identify SLA breaches: processing_days > sla_days

4. 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

GraphQL Operations

# 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
    }
  }
}

Session Tracking

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"
}

Output Format

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 Handling

ErrorCauseRecovery
THROTTLEDAPI rate limit exceededWait 2 seconds, retry up to 3 times
No refund on completed returnExchange-only resolutionExclude from time calculation, note as exchange
No returns in windowNo return activityExit with summary: 0 returns

Best Practices

  • Set sla_days to match your published returns policy (e.g., "refunds processed within 5 business days").
  • Use the open returns list to proactively contact customers whose returns have been waiting more than sla_days — reducing WISMO-style "where's my refund" tickets.
  • Run weekly as a returns ops health check; pair with return-reason-analysis to correlate slow processing with specific return reason types.
  • Note that processing_days measures calendar days; adjust your SLA threshold accordingly if your team only processes returns on business days.

Related skills

FAQ

What is the default SLA threshold?

The sla_days parameter defaults to 5 days from return request to refund.

Does it change any data?

No, it is read-only with no mutations, safe to run at any time.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.