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 counts | The 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 key | SKU 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 sign | Positive 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-transit | Excluded from the on-hand basis by default. Goods in Transit have no sellable on-hand position and would otherwise create phantom drift. |
| Currency | Not applicable. This is a quantity-parity metric, not a value metric. Pair with Sage Total Inventory Value for the dollar exposure. |
| Entity scope | Card 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 window | RT/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%. |
| Roles | owner, 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 cohort | SKU count | Sage on-hand | Storefront count | Variance direction |
|---|---|---|---|---|
| Bestseller planters (top 50 by velocity) | 50 | 18,400 | 17,950 | Sage higher (+2.4%) |
| Seasonal bulbs (just received) | 120 | 9,600 | 0 | Sage higher (not listed yet) |
| Discontinued furniture | 38 | 410 | 980 | Storefront higher (oversell risk) |
| Wholesale-only pallets | 210 | 6,200 | n/a | Not synced to DTC by design |
| Everything else | ~3,780 | 41,300 | 41,180 | In parity (under 1%) |
| Catalogue-weighted variance (this card) | 4,198 | 6.8% |
- 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.
- 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.
- 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.
- 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_scopeexclusion 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. - 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
| Card | Why 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 Drift | The sync-health view of the same join. Drift that persists across refreshes points to a broken connector mapping. |
| Sage Total Inventory Value | Converts quantity variance into dollar exposure so you can size the risk. |
| Low Stock Alerts | Drift near reorder points is where oversell happens fastest. |
| OOS with Open Order Demand | Negative 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 Negative | A 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 listingThe 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:ItemID,QuantityOnHand, andWarehouseIDto align against the storefront’s stock export by SKU
- 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.
| Reason | Direction | Why |
|---|---|---|
| Timestamp alignment | Either | Card snapshots both sides at one moment; manual exports pulled hours apart show order and receipt activity as phantom drift. |
| Committed vs available | Card may read lower | Card aligns on-hand-minus-committed against available-to-sell; a raw on-hand comparison overstates variance. |
| Location scoping | Card may read lower | Card sums only fulfilment-eligible locations; a manual all-location sum overstates the sellable basis. |
| Unit of measure | Card may read lower | Card applies the UOM conversion; a raw case-vs-each comparison reads as huge drift. |
| Unmatched SKUs | Card excludes | SKUs with no storefront match are reported separately, not counted as 100% variance, which a naive join would do. |
| Channel-scope exclusions | Card may read lower | Wholesale-only or marketplace-only SKUs deliberately not synced are carved out; a manual comparison counts them as drift. |
| Negative on-hand | Card may read higher | A negative Intacct on-hand (data integrity issue) registers as drift; some manual reports floor on-hand at zero and hide it. |
| Sync lag window | Small | Card 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. |
| Card | Expected relationship | What the comparison reveals |
|---|---|---|
| shopify.inventory_value | Quantity-to-value bridge | Shopify 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_value | Quantity-to-value bridge | Same dynamic for the BigCommerce catalogue. B2B stores often run deliberate channel-scope exclusions that must be mapped. |
| adobe_commerce.inventory_value | Multi-source caveat | Adobe 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-down | The catalogue gauge decomposes into a per-SKU table. The SKUs in that table are the ones moving this number. |
| Inventory Sync Drift | Diagnostic | Persistent 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 Demand | Oversell confirmation | Negative variance plus open order demand is a confirmed oversell in flight, the most urgent slice of the gauge. |