Skip to main content
Card class: HeroCategory: Ecommerce Platform
Percentage variance between Sage Intacct on-hand inventory and the ecommerce platform’s stock count. Intacct Inventory module required.

At a glance

The headline parity number between your book-of-record (Sage Intacct Inventory Control on-hand quantity) and your selling channel (Shopify, BigCommerce, or Adobe Commerce stock count), expressed as a single percentage across the catalogue. When this number drifts above the alert line, you are either overselling stock you do not have or hiding stock you could be selling, and both cost money. The card requires the Sage Intacct Inventory module; Sage Accounting, Sage 50, and Sage 200 standard do not ship a perpetual inventory ledger, so the card hides itself for those merchants rather than showing a misleading zero.
What it countsThe absolute variance between Sage Intacct on-hand quantity (InventoryItem.QuantityOnHand per Warehouse Location, summed across locations) and the ecommerce platform’s available-to-sell count for the matched SKU, expressed as a percentage of the Intacct figure. Computed per SKU, then rolled to a catalogue-level weighted percentage so one badly drifted high-volume SKU outweighs a hundred dormant ones.
Match keySKU or item number is the default join key. Where the ecommerce platform uses a different identifier (Shopify variant SKU, BigCommerce SKU, Adobe Commerce SKU), the field map aligns them. Unmatched SKUs are reported separately and do not silently inflate or deflate the parity number.
Direction signPositive variance means Sage shows more than the storefront (you could be selling stock the channel cannot see). Negative variance means the storefront shows more than Sage (oversell risk). The gauge shows magnitude; the SKU drill shows direction.
In-transitExcluded from the on-hand basis by default. Goods in Transit have no sellable on-hand position and would otherwise create phantom drift.
CurrencyNot applicable. This is a quantity-parity metric, not a value metric. Pair with Sage Total Inventory Value for the dollar exposure.
Entity scopeCard respects the dashboard entity filter. In Multi-Entity Console, parity is computed per entity then weighted to the consolidated view, because a SKU stocked in two entities can be in parity in one and drifting in the other.
Time windowRT/24H
Alert trigger>5% catalogue-weighted variance, sentiment inventory_drift. Configurable per workspace. Fast-moving DTC operations often tighten to 2%; slow-cycle B2B distributors relax to 8-10%.
Rolesowner, finance, operations

Calculation

Calculated automatically from your Sage data joined against the connected ecommerce platform. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

A UK home and garden merchant on Sage Intacct (single entity, GBP) with an Inventory Control module of roughly 4,200 active SKUs, selling through Shopify Plus DTC and an Adobe Commerce wholesale portal. Snapshot 14 Apr 26. The card reads 6.8% catalogue-weighted variance, above the 5% alert line. The operations lead opens the SKU drill and sees the variance is not evenly spread.
SKU cohortSKU countSage on-handStorefront countVariance direction
Bestseller planters (top 50 by velocity)5018,40017,950Sage higher (+2.4%)
Seasonal bulbs (just received)1209,6000Sage higher (not listed yet)
Discontinued furniture38410980Storefront higher (oversell risk)
Wholesale-only pallets2106,200n/aNot synced to DTC by design
Everything else~3,78041,30041,180In parity (under 1%)
Catalogue-weighted variance (this card)4,1986.8%
Five things to notice:
  1. The headline 6.8% is not one problem, it is three different problems with three different owners, and the card’s value is splitting them apart. A single percentage on a gauge tells you something is wrong; the SKU drill tells you what to do. The seasonal bulbs (received into Intacct, not yet listed on the storefront) are a merchandising backlog, not a data integrity fault. The discontinued furniture showing more on the storefront than in Sage is an active oversell risk and needs same-day attention. The wholesale-only pallets are correct as designed and should be excluded from the parity calculation through the field map. Three findings, three teams, one card.
  2. The discontinued furniture cohort is the dangerous one even though it is small. 38 SKUs where the storefront shows 980 units against Sage’s 410 means the channel will accept roughly 570 orders it cannot fulfil. Each of those becomes a cancelled order, a refund, a support ticket, and a customer who may not return. This is the negative-variance, oversell-risk case, and it is exactly what SKUs with Intacct-vs-Ecom Inventory Drift >5% drills into at the line-item level. The catalogue gauge flagged the problem; the SKU table makes it actionable.
  3. The seasonal bulbs inflate the headline without representing a real defect. 9,600 units sitting in Intacct with zero on the storefront because the listing has not gone live yet reads as 100% variance on those 120 SKUs and pulls the catalogue weighted figure up. This is why the card reports unmatched and not-yet-listed SKUs separately: the operations lead can see the bulbs are a “go list these” task, not a “fix the sync” task. Once listed, the variance on that cohort collapses to near zero.
  4. The wholesale-only pallets should be carved out, not counted. 210 SKUs sold only through the Adobe Commerce wholesale portal and deliberately never synced to the Shopify DTC catalogue will always read as variance against the DTC channel. The field map supports a per-SKU or per-Class channel_scope exclusion so the parity number reflects only SKUs that are supposed to be in parity. Leaving them in permanently parks the gauge above the alert line and trains the team to ignore it, which is the worst outcome.
  5. Pair the catalogue gauge with the dollar value to size the exposure. 6.8% quantity variance sounds tolerable until you weight it by value. The 38 discontinued furniture SKUs drifting on the oversell side are low-value clearance items; the parity problem there is reputational (cancelled orders) more than financial. If the same 6.8% had landed on the bestseller planters, the dollar exposure through Sage Total Inventory Value would be an order of magnitude larger. Always read the gauge next to the value card before deciding how hard to push.

Sibling cards merchants should reference together

CardWhy pair it with ERP-vs-Ecom Inventory Variance %
SKUs with Intacct-vs-Ecom Inventory Drift >5%The line-item drill behind this gauge. The gauge says how bad; the table says which SKUs.
Inventory Sync DriftThe sync-health view of the same join. Drift that persists across refreshes points to a broken connector mapping.
Sage Total Inventory ValueConverts quantity variance into dollar exposure so you can size the risk.
Low Stock AlertsDrift near reorder points is where oversell happens fastest.
OOS with Open Order DemandNegative variance plus open demand equals confirmed oversell.
Slow-Moving Inventory (>90d)Drift on cold SKUs matters less; this card tells you which SKUs are dormant.
Inventory Item On-Hand Went NegativeA negative Intacct on-hand is a guaranteed parity break and a data integrity flag.

Reconciling against Sage

Where to look in Sage Intacct: The native Sage Intacct views to run side by side with this card:
Reports → Inventory Control → Item Stock Status (real-time on-hand by Warehouse, the canonical Intacct on-hand figure this card uses as its book-of-record basis) Reports → Inventory Control → Inventory Valuation (on-hand quantity and value per Location at the same scope as the dashboard filter) Inventory Control → Items list with the on-hand column exposed, filtered to active items, exported to compare against the ecommerce stock export Interactive Custom Report (ICR) built on the Inventory data source listing ItemID, QuantityOnHand, and WarehouseID to align against the storefront’s stock export by SKU
The single most important reconciliation discipline is matching the as-of timestamp. Intacct’s Item Stock Status is real-time; the ecommerce platform’s stock count may lag by its own sync cadence. If you pull the Intacct report at 09:00 and the storefront export at 17:00, eight hours of orders and receipts will show as drift that is not really drift. This card timestamps both sides of the join and reports variance as of a single moment, which is why it can read lower than a manual two-export comparison done at different times of day. Common reconciliation pitfalls:
  • Available-to-sell vs on-hand. Intacct on-hand includes committed and allocated stock; the ecommerce platform usually shows available-to-sell (on-hand minus committed). Comparing on-hand against available-to-sell manufactures drift. The field map aligns the definitions; confirm which basis each side uses.
  • Multi-location aggregation. Intacct holds on-hand per Warehouse Location. The storefront typically shows a single number. If your fulfilment only ships from two of five Intacct locations, summing all five overstates the storefront’s effective availability. The field map can scope which locations feed the sellable basis.
  • Unit of measure mismatch. A SKU stocked in cases in Intacct but sold in eaches on the storefront will read as a large false variance until the UOM conversion is mapped.
Why our number may legitimately differ from a manual Intacct-vs-storefront comparison:
ReasonDirectionWhy
Timestamp alignmentEitherCard snapshots both sides at one moment; manual exports pulled hours apart show order and receipt activity as phantom drift.
Committed vs availableCard may read lowerCard aligns on-hand-minus-committed against available-to-sell; a raw on-hand comparison overstates variance.
Location scopingCard may read lowerCard sums only fulfilment-eligible locations; a manual all-location sum overstates the sellable basis.
Unit of measureCard may read lowerCard applies the UOM conversion; a raw case-vs-each comparison reads as huge drift.
Unmatched SKUsCard excludesSKUs with no storefront match are reported separately, not counted as 100% variance, which a naive join would do.
Channel-scope exclusionsCard may read lowerWholesale-only or marketplace-only SKUs deliberately not synced are carved out; a manual comparison counts them as drift.
Negative on-handCard may read higherA negative Intacct on-hand (data integrity issue) registers as drift; some manual reports floor on-hand at zero and hide it.
Sync lag windowSmallCard uses the most recent synced storefront count; if the connector last ran 10 minutes ago, very recent orders are not yet reflected on either side.
Cross-connector reconciliation:
CardExpected relationshipWhat the comparison reveals
shopify.inventory_valueQuantity-to-value bridgeShopify reports its own catalogue’s stock; the gap against Intacct on-hand for the same SKUs is the parity exposure for the DTC channel.
bigcommerce.inventory_valueQuantity-to-value bridgeSame dynamic for the BigCommerce catalogue. B2B stores often run deliberate channel-scope exclusions that must be mapped.
adobe_commerce.inventory_valueMulti-source caveatAdobe Commerce Multi-Source Inventory can hold per-source stock; the parity join must target the source that maps to the Intacct location.
SKUs with Intacct-vs-Ecom Inventory Drift >5%Drill-downThe catalogue gauge decomposes into a per-SKU table. The SKUs in that table are the ones moving this number.
Inventory Sync DriftDiagnosticPersistent drift across refreshes is a connector mapping fault, not real stock movement. This card tells you whether the gauge is a process problem or a plumbing problem.
OOS with Open Order DemandOversell confirmationNegative variance plus open order demand is a confirmed oversell in flight, the most urgent slice of the gauge.
The cross-channel high-leverage finding here is that Sage Intacct is the book of record and the ecommerce platform is the sales surface, and the gap between them is money. The storefront does not know what was received into the Warehouse this morning; Intacct does not know what the storefront promised a customer ten minutes ago. Neither system alone can compute parity, because each only sees its own half. This card joins the two and turns a problem that is normally discovered through cancelled orders and stockroom surprises into a single number on a gauge that the operations lead checks before the day starts. The Implementation Partner conversation usually starts when a merchant realises how many cancelled orders trace back to drift this card would have flagged a day earlier.

Known limitations / merchant FAQs

Why does this card not appear in my dashboard? The card requires the Sage Intacct Inventory Control module. Sage Accounting, Sage 50, and standard Sage 200 do not maintain a perpetual inventory ledger, so there is no on-hand quantity to compare against the storefront. Rather than show a misleading zero, the card hides itself for those merchants. If you run Intacct and still do not see it, confirm the Inventory module is provisioned and the connector has read scope on the Inventory data source. Is 5% the right alert threshold? It depends on velocity. Fast-moving DTC operations where a single SKU can sell hundreds of units a day should tighten to 2%, because even small percentage drift represents real oversell exposure within a day. Slow-cycle B2B distribution with weekly order cadence can relax to 8-10% because the drift self-corrects before it causes harm. The right number is the one where the alert fires before a customer is affected, not after. Tune per workspace, and consider a tighter threshold on the top-velocity Class. Positive variance and negative variance, which matters more? Negative variance (storefront higher than Sage) is the urgent one because it causes oversell: cancelled orders, refunds, support load, lost trust. Positive variance (Sage higher than storefront) is a missed-revenue problem: you are sitting on sellable stock the channel cannot offer. Both cost money, but negative variance costs it today and visibly, so most merchants weight the alert toward the oversell direction. How does the card handle SKUs sold on multiple channels? A SKU sold through both Shopify DTC and an Adobe Commerce wholesale portal has one Intacct on-hand position and two channel stock counts. The card can compare against each channel separately or against the channels’ combined committed view, depending on the field map. The common pattern is to compute parity per channel so the operations lead can see which channel’s sync is drifting. What about wholesale-only or marketplace-only SKUs? These should be carved out through a channel-scope exclusion in the field map, otherwise they permanently read as drift against the channel they are not synced to and park the gauge above the alert line. A well-tuned card only counts SKUs that are supposed to be in parity. Carving out by-design exclusions is one of the first onboarding tasks. Does the card see committed or allocated stock? Intacct on-hand includes committed stock by default. The storefront usually shows available-to-sell (on-hand minus committed). The field map aligns the two so the comparison is like-for-like. If you see steady-state drift that never resolves, an on-hand-vs-available mismatch is the most common cause. Single-entity vs Multi-Entity Console behaviour? Identical logic per entity. In Multi-Entity Console a SKU stocked in two entities can be in parity in one and drifting in the other, so the card computes per-entity parity then weights to the consolidated gauge. The most useful operational read is per-entity, because the sync fix usually lives in one entity’s connector configuration. Why does a newly received shipment show as drift? Stock received into Intacct but not yet listed or synced to the storefront reads as positive variance until the listing goes live and the sync runs. This is a merchandising backlog signal, not a data integrity fault. The card reports not-yet-listed SKUs separately so the team can distinguish “go list these” from “fix the sync”. How fresh is the data? The Intacct side refreshes from the most recent inventory movement, typically within 5 to 15 minutes. The storefront side refreshes on the connector’s sync cadence. The card timestamps both sides and reports variance as of a single aligned moment, which is why it is more reliable than two manual exports pulled at different times of day. Does unit of measure cause false drift? Yes, and it is the most common false-positive on first connect. A SKU stocked in cases in Intacct but sold in eaches on the storefront reads as a large variance until the UOM conversion is mapped. Once mapped, the drift disappears. Check UOM first whenever a SKU shows implausibly large variance. Implementation Partner role on this metric? The Partner usually owns the Intacct Inventory Control configuration, the location and UOM setup, and the connector field map that aligns SKUs and definitions across systems. If this card disagrees with a manual comparison, the cause is almost always a definition mismatch (on-hand vs available, all-locations vs fulfilment-locations, case vs each) that the field map can resolve. Bring the Partner into the field-map conversation early; it saves weeks of chasing phantom drift.

Tracked live in Vortex IQ Nerve Centre

ERP-vs-Ecom Inventory Variance % is one of hundreds of KPI pulses Vortex IQ tracks across Sage and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.