Variations showing different on-hand quantity between the POS view and the Square Online view. The root oversell risk for unified-commerce merchants.
At a glance
A real-time count of item variations whose on-hand inventory differs between what the POS register sells from and what Square Online sells from. On a true unified-commerce setup these should always agree, both read the same Square Inventory record. When they drift, the same physical unit can be sold twice (once in-store, once online), which is the root cause of the worst customer experience in retail: the oversell. This card surfaces the drift before it becomes a cancelation or a refund.
| What it counts | COUNT(item variations WHERE POS-visible on-hand != online-visible on-hand) across the catalog, at the variation (catalog_object_id) level. A non-zero count means at least one variation can be oversold. |
| Root cause of drift | Drift arises when a variation is not configured for unified inventory: it may use present_at_all_locations = false with location-specific stock, have inventory tracking disabled for one surface, or be served by a separate fulfilment location that the online channel does not draw from. A correctly unified variation reads one on-hand number everywhere. |
| VAT / tax treatment | n/a, this is an inventory parity count. |
| Refunds / orders | n/a to the count, but drift is the upstream cause of oversell-driven cancelations and refunds. |
| Channels / sources | This card is the channel-parity check. It compares the on-hand a POS sale would decrement against the on-hand Square Online would decrement, per variation. |
| Currency / unit | number (count of drifting variations) |
| Time window | RT (real-time, polled from the Square Inventory API every 5-15 minutes) |
| Alert trigger | > 0 variations with an on-hand count mismatch, threshold-based. Any drift is worth surfacing. |
| Roles | owner, operations |
Calculation
Calculated automatically from your Square Online data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A US specialty retailer on Square: a flagship store and a stockroom location, plus a Square Online storefront that ships from the stockroom. Catalog of 1,200 active variations. Snapshot taken on 12 Apr 26 at 14:00 UTC.| Variation | POS on-hand | Online on-hand | Drift? | Likely cause |
|---|---|---|---|---|
| Wool throw, charcoal (SKU WT-CHR) | 8 | 8 | No | Unified, correctly configured |
| Ceramic mug, 12oz (SKU CM-12) | 0 | 3 | Yes | Online still drawing from stale stockroom count |
| Candle, cedar (SKU CA-CED) | 14 | 11 | Yes | Recent in-store sales not yet reflected online |
| Tote bag, natural (SKU TB-NAT) | 5 | 5 | No | Unified |
| Notebook, A5 (SKU NB-A5) | 22 | -2 | Yes | Online oversold; negative on-hand projected |
| Drifting variations (this card) | 3 |
- Any non-zero count is actionable, which is why the alert is
> 0. Three drifting variations out of 1,200 sounds small, but each one is a live oversell waiting to happen. The mug (POS shows 0, online shows 3) will take three web orders Square cannot fulfil, each ending in a cancelation or refund and an unhappy customer. Parity is binary: it is either clean or it is leaking. - The notebook is already past the warning stage. Online on-hand of -2 means two orders have already been taken for stock that does not exist. This variation should also be lighting up Oversell Risk (Negative On-Hand Projected). Drift is the leading indicator; negative on-hand is the confirmation that the damage is done.
- The fix is configuration, not firefighting. Each drifting variation traces to a setup gap:
present_at_all_locations = falsewith location-specific stock, inventory tracking off for one surface, or an online channel pointed at a different fulfilment location than the register. Clearing the alert means unifying the variation’s inventory config in the Square Item editor, not just manually re-syncing the count, which will drift again.
Sibling cards merchants should reference together
| Card | Why pair it with POS to Online Inventory Drift |
|---|---|
| Oversell Risk (Negative On-Hand Projected) | Drift is the cause; negative projected on-hand is the effect. A drifting variation that keeps selling becomes an oversell. Watch them together. |
| POS vs Online Inventory Parity | The positive-framed companion: the share of the catalog that is correctly in parity. This card counts the failures; that card scores overall health. |
| Out-of-Stock Products | A variation that is OOS at POS but in stock online is a drift case that converts into oversells. The two cards overlap on the dangerous variations. |
| Refund Rate | Drift-driven oversells end in fulfilment fails and refunds. A drift spike often precedes a refund spike by a day or two. |
| Canceled Orders (24h) | Oversold orders are frequently canceled. A drift count climbing alongside a cancelation burst confirms the link. |
| Online-Only SKUs | Online-only items are intentionally not at POS, so they should never count as drift. Useful to confirm a drift case is a real misconfiguration, not a deliberate online-only item. |
Reconciling against Square
Where to look in the Square Dashboard: Square Dashboard, Items, Inventory, and the Stock by location view. Square does not surface a single “drift” report, you reconcile by comparing the on-hand a location-filtered POS view shows against the on-hand the Square Online channel is configured to draw from. For each variation this card flags, open the item in the editor and check its Stock per location and its Site visibility settings. Other Square Dashboard views that look like the same number but aren’t:- Items, Inventory, single-location filter: shows one location’s on-hand, not the POS-vs-online comparison. You need to compare two surfaces.
- Items, item editor, Stock field: shows the master on-hand. Drift shows up only when a variation’s online-served count diverges from its POS-served count, which the single Stock field does not reveal on its own.
- Square Online, product visibility: tells you whether an item is published online, not whether its inventory agrees with POS.
| Reason | Direction of divergence |
|---|---|
| Sync lag. Square Inventory has a small lag (typically <5 minutes). A register sale that creates momentary drift is reflected here ~1-5 minutes later; the dashboard updates on its own schedule. | Brief mismatch around live sales |
| Intentional location-specific stock. A merchant who genuinely runs separate POS and online stock pools (different fulfilment locations) will see “drift” that is by design. Confirm whether the variation is meant to be unified. | Vortex IQ flags intended setups as drift |
| Untracked variations. Variations with inventory tracking off always read “in stock” on both surfaces and never count here, even if physically depleted. | Vortex IQ may understate true risk |
| Online-only / POS-only items. Items deliberately on one channel only are not drift; we exclude clearly single-channel items. | No divergence when correctly classified |
| Negative on-hand. Square permits negative on-hand from oversells. We treat any mismatch including negatives as drift; some dashboard views floor the display at zero. | Vortex IQ may show drift where dashboard shows 0 |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
| Marketplace listing stock (Amazon, eBay via Square Inventory vs Marketplace Listings) | A variation drifting between POS and online will usually also drift against marketplace listings | If Square inventory and a marketplace listing disagree, the same root configuration gap is likely feeding both. Fix the Square parity first, then re-push to the marketplace. |
present_at_all_locations = false, a separate fulfilment location, tracking disabled on one surface). Any non-zero count means the unification is not actually unified for those variations.
Known limitations / merchant FAQs
Isn’t Square inventory supposed to be unified? How can it drift at all? Square’s design is one on-hand record per variation per location, shared by POS and Square Online. Drift happens when a variation is not configured for that unification:present_at_all_locations = false with location-specific stock, inventory tracking disabled on one surface, or the online channel pointed at a different fulfilment location than the register draws from. The card catches exactly these configuration gaps. A fully unified variation cannot drift.
Why is the alert set to fire on a single drifting variation?
Because every drifting variation is a live oversell risk. Unlike a count metric where a small number is tolerable, parity is binary, one variation that can be sold twice produces one customer who orders something you cannot ship. The > 0 trigger reflects that any drift is worth a look, even if the operational fix can be batched.
A variation shows online on-hand below zero. What does that mean?
It means orders have already been taken for stock that does not exist, an oversell that has happened, not just a risk. That variation should also appear on Oversell Risk (Negative On-Hand Projected). Those orders typically end in cancelations or refunds. Fix the inventory config, then triage the affected orders before they auto-cancel and frustrate the customer.
I deliberately keep separate stock for my store and my website. Is that drift?
Technically yes, this card will flag it, because from its perspective the POS and online on-hand disagree. If running separate stock pools is intentional (different fulfilment locations, a reserve set aside for walk-ins), you can treat those variations as expected and focus on the unintended cases. The card cannot read your intent, so it surfaces all mismatches; you decide which are by design.
Does an untracked variation ever count as drift?
No. Variations with inventory tracking disabled always read “in stock” on both POS and online, so they never disagree and never count here. The trade-off is that untracked variations can still oversell physically without any signal. If a variation matters for fulfilment, enable tracking so parity can be checked.
How fast does drift clear after I fix the config?
Once you unify the variation’s inventory configuration in the Square Item editor, the next inventory poll (every 5-15 minutes) reconciles the on-hand and the variation drops off this card. Note that manually re-syncing the count without fixing the underlying config is a temporary patch, it will drift again on the next location-specific sale.
Does this card cover online-only or POS-only items?
Deliberately single-channel items are not drift and are excluded when correctly classified. An Online-Only SKU is supposed to be absent from POS, so its “missing at POS” state is not a mismatch. If a single-channel item is showing up as drift, it is likely misconfigured, check its present_at_all_locations and ecom_visibility settings.