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

Shopify Admin Delivery Time Analysis

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

shopify-admin-delivery-time-analysis is a read-only Claude Code skill that calculates average fulfillment-to-delivery transit time by carrier from Shopify fulfillment and order data.

About

This Claude Code skill analyzes fulfilled Shopify orders to compute average transit time from fulfillment creation to delivery, grouped by carrier. A fulfillment-ops user runs it to see which carriers are consistently slow or fail to confirm delivery. It is read-only and exports a per-order CSV of transit days.

  • Calculates average transit time from fulfillment to delivery, broken down by carrier
  • Surfaces consistently slow carriers and missing delivery confirmations
  • Read-only, exporting a per-order delivery-time CSV

Shopify Admin Delivery Time Analysis by the numbers

  • 7 all-time installs (skills.sh)
  • Ranked #1,583 of 2,064 Data Science & ML skills by installs in the Skillselion catalog
  • Data as of Aug 1, 2026 (Skillselion catalog sync)
At a glance

shopify-admin-delivery-time-analysis capabilities & compatibility

Free skill; requires an authenticated Shopify store session with read_orders

Capabilities
delivery time analysis · carrier benchmarking · fulfillment analytics
Use cases
data analysis
Runs
Runs locally
Pricing
Free
From the docs

What shopify-admin-delivery-time-analysis says it does

Analyzes fulfilled orders to calculate average transit time (fulfillment created → delivered) broken down by carrier.
SKILL.md
Surfaces which carriers are consistently slow or missing delivery confirmations. Read-only — no mutations.
SKILL.md
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-delivery-time-analysis

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

Measure average Shopify delivery transit time by carrier to compare shipping performance.

Who is it for?

Fulfillment teams comparing carrier transit times and delivery-confirmation reliability

Skip if: Real-time WISMO tracking or per-package status lookups

When should I use this skill?

You want average delivery times broken down by shipping carrier

What you get

A per-carrier table of average, min, and max transit days plus a CSV.

  • delivery_analysis_<date>.csv with per-order transit days

By the numbers

  • days_back defaults to 30
  • min_orders per carrier defaults to 5
  • 2 GraphQL operations (orders, fulfillmentOrders)

Files

SKILL.mdMarkdownGitHub ↗

Purpose

Analyzes fulfilled orders to calculate average transit time (fulfillment created → delivered) broken down by carrier. Surfaces which carriers are consistently slow or missing delivery confirmations. Read-only — no mutations.

Prerequisites

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

Parameters

ParameterTypeRequiredDefaultDescription
storestringyesStore domain (e.g., mystore.myshopify.com)
days_backintegerno30Lookback window for fulfilled orders
min_ordersintegerno5Minimum orders per carrier to include in averages
location_idstringnoFilter by fulfillment location (optional)
formatstringnohumanOutput format: human or json

Safety

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

Workflow Steps

1. OPERATION: orders — query Inputs: query: "fulfillment_status:shipped created_at:>='<NOW - days_back days>'", first: 250, pagination cursor Expected output: Orders with fulfillments { createdAt, updatedAt, deliveredAt, trackingInfo { company } }; paginate until hasNextPage: false

2. Calculate transit times per carrier: deliveredAt - createdAt (skip orders where deliveredAt is null)

3. OPERATION: fulfillmentOrders — query (optional, for location breakdown) Inputs: assignedLocationId: <location_id>, status: CLOSED, first: 250 Expected output: Fulfilled orders per location for location-level segmentation

GraphQL Operations

# orders:query — validated against api_version 2025-01
query FulfilledOrders($query: String!, $after: String) {
  orders(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        name
        createdAt
        fulfillments {
          id
          createdAt
          updatedAt
          deliveredAt
          status
          trackingInfo {
            company
            number
          }
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}
# fulfillmentOrders:query — validated against api_version 2025-01
query FulfillmentOrdersByLocation($locationId: ID!, $after: String) {
  fulfillmentOrders(
    assignedLocationId: $locationId
    first: 250
    after: $after
    query: "status:closed"
  ) {
    edges {
      node {
        id
        assignedLocation {
          location {
            id
            name
          }
        }
        order {
          id
          name
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

Session Tracking

Claude MUST emit the following output at each stage. This is mandatory.

On start, emit:

╔══════════════════════════════════════════════╗
║  SKILL: Delivery Time Analysis               ║
║  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):

══════════════════════════════════════════════
DELIVERY TIME ANALYSIS  (<days_back> days)
  Orders analyzed:     <n>
  With delivery data:  <n>

  Carrier              Orders  Avg Days  Min  Max
  ─────────────────────────────────────────────
  UPS                  <n>     <d>       <d>  <d>
  USPS                 <n>     <d>       <d>  <d>
  FedEx                <n>     <d>       <d>  <d>
  (carriers below min_orders threshold excluded)
  Output: delivery_analysis_<date>.csv
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "delivery-time-analysis",
  "store": "<domain>",
  "period_days": 30,
  "carriers": [
    { "name": "UPS", "orders": 0, "avg_days": 0, "min_days": 0, "max_days": 0 }
  ],
  "output_file": "delivery_analysis_<date>.csv"
}

Output Format

CSV file delivery_analysis_<YYYY-MM-DD>.csv with columns: order_name, fulfillment_id, carrier, fulfilled_at, delivered_at, transit_days

Error Handling

ErrorCauseRecovery
THROTTLEDAPI rate limit exceededWait 2 seconds, retry up to 3 times
deliveredAt is nullCarrier hasn't confirmed deliveryExclude from averages, count as "in transit"
No fulfilled orders in windowPeriod too short or no ordersExit with summary: 0 orders

Best Practices

  • Set min_orders: 10 for statistically meaningful averages — carriers with fewer orders will skew results.
  • deliveredAt is populated only when the carrier confirms delivery via tracking events; some carriers do not report this, so null values are expected.
  • Run monthly to track carrier performance over time and inform carrier contract negotiations.
  • Cross-reference with the wismo-bulk-status-report skill to correlate slow delivery carriers with WISMO ticket volume.

Related skills

FAQ

Why are some orders excluded from averages?

Orders where deliveredAt is null are excluded, because that field is only populated when the carrier confirms delivery via tracking.

How many orders per carrier are needed?

min_orders defaults to 5, and the skill recommends 10 for statistically meaningful averages.

This week in AI coding

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

unsubscribe anytime.