From shopify-admin-skills
Calculates average transit time from fulfillment creation to delivery by carrier using Shopify order and fulfillment data. Read-only analysis for identifying slow or unreliable carriers.
How this skill is triggered — by the user, by Claude, or both
Slash command
/shopify-admin-skills:shopify-admin-delivery-time-analysisThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
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.
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.
shopify store auth --store <domain> --scopes read_ordersread_orders| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain (e.g., mystore.myshopify.com) |
| days_back | integer | no | 30 | Lookback window for fulfilled orders |
| min_orders | integer | no | 5 | Minimum orders per carrier to include in averages |
| location_id | string | no | — | Filter by fulfillment location (optional) |
| format | string | no | human | Output format: human or json |
ℹ️ Read-only skill — no mutations are executed. Safe to run at any time.
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
Calculate transit times per carrier: deliveredAt - createdAt (skip orders where deliveredAt is null)
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
# 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
}
}
}
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"
}
CSV file delivery_analysis_<YYYY-MM-DD>.csv with columns:
order_name, fulfillment_id, carrier, fulfilled_at, delivered_at, transit_days
| Error | Cause | Recovery |
|---|---|---|
THROTTLED | API rate limit exceeded | Wait 2 seconds, retry up to 3 times |
deliveredAt is null | Carrier hasn't confirmed delivery | Exclude from averages, count as "in transit" |
| No fulfilled orders in window | Period too short or no orders | Exit with summary: 0 orders |
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.wismo-bulk-status-report skill to correlate slow delivery carriers with WISMO ticket volume.npx claudepluginhub 40rty-ai/shopify-admin-skills --plugin shopify-admin-skillsCompares delivery times and shipping costs across carriers used in Shopify fulfillments, segmented by country or weight class. Informs carrier mix and contract decisions.
Manages Wix e-commerce shipping rules via REST APIs: query rates, retrieve details, create rates with costs, regions, logistics, and conditions like free shipping over subtotal. For store shipping configuration.
Activate for: logistics, carrier, freight, shipping, route, delivery, on-time delivery, OTD carrier, logistics performance, carrier review, freight cost, cost per kg, lane analysis, route optimisation, logistics brief, carrier scorecard, logistics KPI, shipping performance, freight audit, expedited freight, premium freight, mode of transport, logistics network, carbon emissions, Scope 3 logistics. NOT for: supply network facility placement (use network-design), vendor assessment (use vendor-assessment), spend category analysis (use spend-analysis).