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

Shopify Admin Revenue By Location Report

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

shopify-admin-revenue-by-location-report is a Claude Code skill that attributes Shopify order revenue to the fulfillment location that shipped each order.

About

shopify-admin-revenue-by-location-report attributes order revenue to the fulfillment location that shipped each order and produces a per-warehouse revenue breakdown. A finance owner runs it for multi-location P&L and staffing decisions. It is read-only and outputs a summary plus a CSV.

  • Attributes order revenue to the fulfillment location that shipped it
  • Produces a revenue breakdown by warehouse for multi-location P&L
  • Read-only; exports a revenue_by_location CSV

Shopify Admin Revenue By Location Report by the numbers

  • 7 all-time installs (skills.sh)
  • Ranked #826 of 1,106 Finance & Trading skills by installs in the Skillselion catalog
  • Data as of Aug 1, 2026 (Skillselion catalog sync)
At a glance

shopify-admin-revenue-by-location-report capabilities & compatibility

Free; needs a Shopify CLI session with read_orders scope

Capabilities
revenue reporting · location analytics · fulfillment analytics
Use cases
data analysis
Runs
Runs locally
Pricing
Free
From the docs

What shopify-admin-revenue-by-location-report says it does

Attributes order revenue to the fulfillment location that shipped the order.
SKILL.md
useful for multi-location P&L, location staffing decisions, and understanding where demand is being fulfilled from.
SKILL.md
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-revenue-by-location-report

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 finance owner reports revenue by fulfillment location for multi-warehouse P&L.

Who is it for?

Finance teams doing multi-location or multi-warehouse P&L

Skip if: Real-time inventory decisions or non-fulfillment revenue attribution

When should I use this skill?

You need revenue attributed to the warehouse or location that fulfilled each order

What you get

A per-location revenue breakdown with order counts and revenue share.

  • revenue_by_location CSV report
  • per-location revenue and share summary

By the numbers

  • default 30-day lookback window
  • 3 GraphQL operations (locations, orders, fulfillmentOrders)

Files

SKILL.mdMarkdownGitHub ↗

Purpose

Attributes order revenue to the fulfillment location that shipped the order. Produces a revenue breakdown by warehouse or fulfillment center, useful for multi-location P&L, location staffing decisions, and understanding where demand is being fulfilled from. 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
formatstringnohumanOutput format: human or json

Safety

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

Workflow Steps

1. OPERATION: locations — query Inputs: first: 50, active only Expected output: Location IDs and names for enrichment

2. OPERATION: orders — query Inputs: query: "fulfillment_status:shipped created_at:>='<NOW - days_back days>'", first: 250, select fulfillments { assignedLocation }, totalPriceSet, pagination cursor Expected output: Fulfilled orders with location attribution

3. OPERATION: fulfillmentOrders — query (for open orders attribution) Inputs: Per location, status: CLOSED, first: 250 Expected output: Closed fulfillment orders for revenue attribution

4. Aggregate revenue by location; orders without location data attributed to "Unknown"

GraphQL Operations

# locations:query — validated against api_version 2025-01
query LocationsList {
  locations(first: 50, includeInactive: false) {
    edges {
      node {
        id
        name
      }
    }
  }
}
# orders:query — validated against api_version 2025-01
query RevenueByLocation($query: String!, $after: String) {
  orders(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        name
        createdAt
        totalPriceSet {
          shopMoney {
            amount
            currencyCode
          }
        }
        fulfillments {
          assignedLocation {
            location {
              id
              name
            }
          }
          status
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}
# fulfillmentOrders:query — validated against api_version 2025-01
query ClosedFulfillmentOrders($locationId: ID!, $after: String) {
  fulfillmentOrders(
    assignedLocationId: $locationId
    first: 250
    after: $after
    query: "status:closed"
  ) {
    edges {
      node {
        id
        order {
          id
          name
          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: Revenue by Location 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):

══════════════════════════════════════════════
REVENUE BY LOCATION  (<days_back> days)
  Total revenue:   $<amount>
  Orders included: <n>

  Location                Orders   Revenue    Share
  ─────────────────────────────────────────────────
  Warehouse A             <n>      $<n>       <pct>%
  Warehouse B             <n>      $<n>       <pct>%
  Output: revenue_by_location_<date>.csv
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "revenue-by-location-report",
  "store": "<domain>",
  "period_days": 30,
  "total_revenue": 0,
  "currency": "USD",
  "by_location": [],
  "output_file": "revenue_by_location_<date>.csv"
}

Output Format

CSV file revenue_by_location_<YYYY-MM-DD>.csv with columns: location_id, location_name, order_count, total_revenue, currency, share_pct

Error Handling

ErrorCauseRecovery
THROTTLEDAPI rate limit exceededWait 2 seconds, retry up to 3 times
Order with no fulfillment locationUnfulfilled or POS orderAttribute to "Unassigned"
Single-location storeAll revenue from one locationReport still valid, shows full total

Best Practices

  • For multi-3PL operations, this report helps identify if one 3PL is handling a disproportionate share and may need capacity relief.
  • Revenue attribution here is based on fulfillment assignment, not customer shipping address — it reflects operational throughput per location, not geographic demand.
  • Pair with the inventory valuation report to calculate inventory turns per location (revenue / inventory value).

Related skills

FAQ

How are orders without location data handled?

Orders without location data are attributed to an 'Unknown' bucket.

Does it modify anything?

No, it is read-only with no mutations.

Finance & Tradingecommercefinance

This week in AI coding

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

unsubscribe anytime.