How Shopify POS sales sync with Carpe Inventory IQ
In-store sales decrement the retail location. Online sales decrement your warehouse. Each Shopify location is pushed back independently.
What works today
- Shopify POS sales decrement inventory at the retail location identified on the order.
- Online sales decrement your designated primary shipping location.
- Each Shopify location is pushed back independently — retail and warehouse counts stay separate.
- Cancellations restock unfulfilled lines at the originating location.
- POS sales feed velocity, reorder suggestions, and every report — same ledger as online.
- No extra connection step. The standard Shopify scopes already cover POS.
How a POS sale flows through
From the moment a cashier rings up a sale to the moment Shopify reflects the new count, every step happens automatically.
A cashier rings up a sale at the POS terminal
Shopify creates an order in the background, just like an online sale — with one important difference: the order carries a source location identifying the retail store where the sale happened.
Shopify fires the standard order webhook
POS and online orders use the same webhook topic. Carpe Inventory IQ verifies the webhook signature, looks up your merchant account by store domain, and hands the order off to a background worker.
The worker matches the retail location to your Carpe Inventory IQ ledger
If the POS sale's source location maps to a location you imported during onboarding, that location's stock is decremented. If no source location is set on the order (e.g., an online sale), inventory is pulled from your designated primary shipping location instead.
The new on-hand quantity is pushed back to every Shopify location
Each Shopify location you track gets its own per-location quantity write. The retail store reflects the new count, the warehouse reflects its own count, and the merchant-facing Shopify Admin matches the Carpe Inventory IQ ledger.
Setup scenarios
Two configurations are supported today. Both are picked up automatically when you import locations during onboarding.
Single Shopify location
Most common for brands with one storefront. Online sales and in-store sales draw from the same pool of inventory — the one bucket Shopify already maintains. No extra setup required.
During onboarding, that single Shopify location is imported as your primary shipping location. POS sales and online sales both decrement it.
Multiple Shopify locations with separate stockpiles
For brands with a retail store plus a warehouse — each physically separate, each with its own inventory.
Import each Shopify location during onboarding. Designate the warehouse (or wherever you ship online orders from) as your primary shipping location. POS sales decrement the retail store. Online sales decrement the warehouse. Each location is pushed back to Shopify independently.
Need to change your primary shipping location later? Go to Settings → Locations, find the warehouse you want as primary, and toggle Primary Shipping on. The change applies to all future online orders.
Refunds and cancellations
Cancellations are handled automatically. Refunds that leave merchandise unsellable are handled with a stock adjustment so the reason is recorded.
Cancelled orders restock unfulfilled lines
If you cancel a Shopify POS sale before the order is marked fulfilled, the line items are restored to the location the sale came from. Fulfilled-and-cancelled line items are not restocked automatically — that pattern matches Shopify's own restock rules.
Refunds that don't restock require a stock adjustment
If a refund leaves the merchandise unsellable (damaged, returned-but-broken), use Adjust Stock on the Inventory page to remove the unit with a reason. The Activity Ledger keeps the full audit trail.
What’s not yet supported
POS support is intentionally scoped to inventory tracking. The following behaviors are not handled today — some are on the roadmap, some are intentionally out of scope.
Pooled inventory across multiple Shopify locations
Carpe Inventory IQ does not currently mirror one master number across a retail store and a warehouse. Each Shopify location is tracked as its own stockpile. If you want one shared number visible in both places, consolidate to a single Shopify location — or wait for pooled-inventory support, which is on the roadmap.
Ship-from-store routing
If Shopify dynamically picks a retail store as the fulfillment location for an online order (rather than your designated primary shipping location), the decrement may go to the wrong location. Today, online order decrement defaults to your configured primary shipping location.
Shopify POS UI extensions
There is no Carpe Inventory IQ surface inside the POS terminal itself yet — no cashier-facing app, no POS-side overrides. Inventory tracking happens behind the scenes through the standard order webhook.
POS Pro-specific surfaces
Cash-tracking sessions, staff-role reporting, and end-of-day reconciliation are Shopify-side features that Carpe Inventory IQ does not surface. We track the inventory impact of POS sales — not the cashiering workflow.
Exchanges via the orders/updated webhook
Carpe Inventory IQ subscribes to orders/create and orders/cancelled. Exchanges processed through Shopify's POS exchange flow may not trigger a re-sync depending on how the order is updated. For now, treat exchanges as a stock adjustment if the result doesn't match your records.
Verifying POS sales are syncing
The fastest way to confirm the integration is working end-to-end after your first POS sale.
Open the SKU detail page in Carpe Inventory IQ
Find the SKU that was sold at the retail counter and open it. Scroll to the Activity Ledger — each POS sale appears as an ISSUE entry tagged with the source Shopify order ID.
Compare against the Shopify order
In Shopify Admin, open the same order. The fulfillment location on the order should match the Carpe Inventory IQ location that was decremented.
Confirm the push-back to Shopify
Back in Shopify Admin, view the product's inventory by location. Carpe Inventory IQ writes the new per-location quantity within seconds of the order webhook. If the numbers don't match, check the merchant dashboard for sync errors.
Doing a clean test sale? Ring up a single low-value SKU at the POS terminal, then immediately check the SKU detail page in Carpe Inventory IQ. The Activity Ledger entry should appear within seconds of the order.
Frequently asked questions
Ready to get started? Sign up and try it free for 14 days.