
Shopify Admin Inventory Transfer Between Locations
- 7 installs
- 173 repo stars
- Updated June 26, 2026
- 40rty-ai/shopify-admin-skills
shopify-admin-inventory-transfer-between-locations is a Claude Code skill that moves inventory between two Shopify locations by decrementing the source and incrementing the destination via paired inventoryAdjustQuantitie
About
This Claude Code skill transfers a set quantity of inventory from a source Shopify location to a destination by running paired inventory adjustments that decrement the source and increment the destination. An operator uses it for inter-warehouse rebalancing, pre-positioning stock before a sale, or redistributing after a location change. It validates locations and defaults to a dry_run preview, but does not create a formal transfer-order record.
- Moves inventory between two Shopify locations via paired inventoryAdjustQuantities (decrement source, increment destinat
- Validates both locations are active and warns when source stock is insufficient
- Defaults to dry_run: true to preview transfers before committing
Shopify Admin Inventory Transfer Between Locations 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)
shopify-admin-inventory-transfer-between-locations capabilities & compatibility
Free; requires write_inventory scope on a Shopify CLI session.
- Capabilities
- inventory transfer · location rebalancing · stock adjustment
- Pricing
- Free
What shopify-admin-inventory-transfer-between-locations says it does
Moves inventory units from one location to another by decrementing the source and incrementing the destination.
This does NOT create a transfer order record in Shopify; it is a direct adjustment.
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-inventory-transfer-between-locationsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 7 |
|---|---|
| repo stars | ★ 173 |
| Last updated | June 26, 2026 |
| Repository | 40rty-ai/shopify-admin-skills ↗ |
What it does
Rebalance stock between two Shopify locations using paired inventory adjustments.
Who is it for?
Rebalancing inventory between warehouses or pre-positioning stock before a sale across Shopify locations.
Skip if: Creating an official Shopify transfer order record; it performs direct adjustments only.
When should I use this skill?
You need to move stock quantities from one Shopify location to another.
What you get
Stock is decremented at the source and incremented at the destination for each listed SKU.
- Paired per-SKU decrement/increment adjustments across two locations
By the numbers
- 2 adjustments per SKU (source decrement + destination increment)
- 3-step workflow (locations query, inventoryItems query, inventoryAdjustQuantities mutation)
Files
Purpose
Transfers a specified quantity of inventory from a source location to a destination location using paired inventory adjustments (decrement source, increment destination). Used for inter-warehouse rebalancing, pre-positioning stock before a sale, or redistributing inventory after a location change. Replaces manual inventory transfer in Shopify Admin.
Prerequisites
- Authenticated Shopify CLI session:
shopify store auth --store <domain> --scopes read_products,write_inventory,read_inventory - API scopes:
read_products,read_inventory,write_inventory - Both source and destination must be active Shopify locations
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain (e.g., mystore.myshopify.com) |
| source_location_id | string | yes | — | GID of the location to move stock FROM |
| destination_location_id | string | yes | — | GID of the location to move stock TO |
| transfers | array | yes | — | List of {sku, quantity} objects to transfer |
| dry_run | bool | no | true | Preview adjustments without executing mutations |
| format | string | no | human | Output format: human or json |
Safety
⚠️inventoryAdjustQuantitiesdirectly modifies inventory levels. Decrementing the source below zero is possible if the quantity exceeds available stock — the skill will warn but Shopify does not block negative adjustments. Run withdry_run: trueto verify available quantities at the source before committing. This does NOT create a transfer order record in Shopify; it is a direct adjustment.
Workflow Steps
1. OPERATION: locations — query Inputs: first: 50 Expected output: All locations with id, name — validate source and destination IDs exist
2. OPERATION: inventoryItems — query Inputs: Batch lookup by SKU to get inventoryItem.id for each transfer SKU Expected output: Inventory items with current quantities at source location
3. Validate: for each SKU, confirm available >= quantity at source. Warn if not but proceed if dry_run: false
4. OPERATION: inventoryAdjustQuantities — mutation Inputs: Two changes per SKU: { inventoryItemId, locationId: source, delta: -quantity, reason: "correction" } and { inventoryItemId, locationId: destination, delta: +quantity, reason: "correction" } Expected output: inventoryAdjustmentGroup { changes { delta, location } }, userErrors
GraphQL Operations
# locations:query — validated against api_version 2025-01
query ActiveLocations {
locations(first: 50, includeInactive: false) {
edges {
node {
id
name
isActive
fulfillsOnlineOrders
}
}
}
}# inventoryItems:query — validated against api_version 2025-01
query InventoryLevelsAtLocation($ids: [ID!]!) {
nodes(ids: $ids) {
... on InventoryItem {
id
sku
inventoryLevels(first: 20) {
edges {
node {
location {
id
name
}
quantities(names: ["available", "on_hand"]) {
name
quantity
}
}
}
}
}
}
}# inventoryAdjustQuantities:mutation — validated against api_version 2025-01
mutation InventoryAdjustQuantities($input: InventoryAdjustQuantitiesInput!) {
inventoryAdjustQuantities(input: $input) {
inventoryAdjustmentGroup {
createdAt
reason
changes {
delta
quantityAfterChange
item {
id
sku
}
location {
id
name
}
}
}
userErrors {
field
message
}
}
}Session Tracking
Claude MUST emit the following output at each stage. This is mandatory.
On start, emit:
╔══════════════════════════════════════════════╗
║ SKILL: Inventory Transfer Between Locations ║
║ 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>If dry_run: true, prefix every mutation step with [DRY RUN] and do not execute it.
On completion, emit:
For format: human (default):
══════════════════════════════════════════════
OUTCOME SUMMARY
SKUs transferred: <n>
Total units moved: <n>
Warnings (low stock): <n>
Errors: <n>
Output: inventory_transfer_<date>.csv
══════════════════════════════════════════════For format: json, emit:
{
"skill": "inventory-transfer-between-locations",
"store": "<domain>",
"started_at": "<ISO8601>",
"dry_run": true,
"source_location": "<name>",
"destination_location": "<name>",
"outcome": {
"skus_transferred": 0,
"units_moved": 0,
"warnings": 0,
"errors": 0,
"output_file": "inventory_transfer_<date>.csv"
}
}Output Format
CSV file inventory_transfer_<YYYY-MM-DD>.csv with columns: sku, product_title, inventory_item_id, source_location, destination_location, quantity_transferred, source_qty_before, source_qty_after, destination_qty_before, destination_qty_after
Error Handling
| Error | Cause | Recovery |
|---|---|---|
THROTTLED | API rate limit exceeded | Wait 2 seconds, retry up to 3 times |
| SKU not found | SKU not in catalog | Log warning, skip transfer for that SKU |
userErrors on adjustment | Location not stocking item | Log error, skip SKU, continue |
| Quantity would go negative | Transferring more than available | Log warning; abort SKU if dry_run: false |
Best Practices
- Always run with
dry_run: truefirst — the skill verifies available quantities and shows exactly what will change. - This creates raw inventory adjustments, not a transfer order. For audit trail purposes, add a note in the reason field and document the transfer separately.
- For large transfers (50+ SKUs), run during off-peak hours to avoid interfering with live inventory reads by the storefront.
- Pair with
multi-location-inventory-auditto identify which locations have excess stock before deciding transfer quantities.
Related skills
FAQ
Does it create a transfer order?
No. It is a direct paired adjustment and does not create a transfer order record in Shopify.
Can the source go negative?
Yes. Shopify does not block negative adjustments; the skill warns if the quantity exceeds available stock but proceeds when dry_run is false.