Skip to main content
Card class: Cross-ChannelCategory: Inventory
The percentage gap between what S/4HANA Cloud says you physically hold and what the storefront is selling, across the SKUs that actually matter.

At a glance

A single percentage that answers one question: how far apart are the books and the storefront on the inventory that matters most? The card takes the top-50 SKUs by value, pulls plant and storage-location unrestricted stock from S/4HANA Cloud MM-IM (the system of record), pulls the same SKUs’ available-to-sell quantity from each connected commerce platform, and reports the absolute on-hand variance as a percentage of the SAP figure. SAP is treated as truth because it is the legal inventory ledger that valuation, audit, and replenishment all run from. The storefront is the channel that takes the money. When those two drift apart you are either overselling stock you do not have or hiding stock you could be selling. This card is the gauge; the SKU-level companion is Inventory Sync Drift.
What it detectsA material on-hand mismatch between SAP MM-IM and commerce availability on your highest-value SKUs. A reading above the alert threshold means the storefront and the ledger disagree by more than a rounding margin on stock that drives most of your revenue and most of your write-off exposure.
What it countsFor each of the top-50 SKUs by extended value, the absolute difference between SAP unrestricted-use stock (MM-IM, summed across the relevant plants and storage locations, material-master Material MARC / storage-location MARD) and the commerce platform’s available quantity, divided by the SAP quantity. The card reports the value-weighted average variance across the 50 SKUs and surfaces the worst offenders.
How the join worksSKU identity is matched on the SAP Material number against the commerce SKU / variant identifier, using the connector’s material-to-SKU map. SAP availability is unrestricted stock net of reserved and blocked stock; commerce availability is the published sellable quantity. Both are snapshotted at the same poll so the comparison is like-for-like in time.
SAP sideMM-IM plant and storage-location stock. Unrestricted-use stock is the sellable pool; quality-inspection stock, blocked stock, stock in transit, and consignment are excluded unless your fulfilment model sells from them. The card respects the plant filter on the dashboard.
Commerce sideThe published available-to-sell quantity per SKU on Shopify, BigCommerce, Adobe Commerce, or other connected storefronts. This is the number a shopper sees, which is what determines whether you oversell.
Common root causeA broken or lagging stock-sync IDoc / API feed, multi-location stock not aggregated correctly, a safety-stock buffer applied on one side only, a unit-of-measure mismatch (SAP base UoM vs commerce selling UoM), or a SKU mapped to the wrong Material.
How to resolveReconcile the worst SKUs first in MMBE (Stock Overview) or the Manage Stock Fiori app, confirm the material-to-SKU map, check the stock-update IDoc partner profile and message status, and verify which plants and storage locations feed the storefront.
Data source / freshnessSAP MM-IM stock via OData against the live system; commerce availability via each platform’s inventory API. Vortex IQ polls every 15 minutes by default; both sides are snapshotted in the same poll cycle.
Time windowRT/24H (real-time snapshot, 24-hour drift trail)
Alert trigger>5% value-weighted variance across the top-50 SKUs
Rolesowner, finance, operations

Calculation

Calculated automatically from your SAP 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 homewares brand runs S/4HANA Cloud with one plant (1000, main DC) and two storage locations (0001 pick-face, 0002 reserve), selling through a Shopify Plus DTC store and a BigCommerce B2B portal. The snapshot is taken at 09:00 on 12 Mar 26. Five of the top-50 SKUs are shown below.
Material (SKU)SAP unrestricted (MM-IM)Commerce availableAbs varianceVariance %Extended value weight
HW-LAMP-01442042000.0%high
HW-RUG-2201802406033.3%high
HW-VASE-090969600.0%medium
HW-CHAIR-30154124277.8%high
HW-THROW-11831030551.6%low
Value-weighted variance (top-50)6.4%
Four things to notice:
  1. The headline gauge reads 6.4%, above the >5% alert. Two SKUs are driving it. The card is value-weighted, so HW-CHAIR-301 and HW-RUG-220 (both high-value) move the needle far more than a small percentage wobble on a low-value SKU like HW-THROW-118.
  2. HW-RUG-220 shows commerce higher than SAP (240 vs 180). That is the dangerous direction: the storefront is advertising 60 units the ledger does not have. This is an oversell-in-waiting. Once orders consume real stock, fulfilment fails, refunds spike, and the Material on Hand Went Negative card may fire. The likely cause is a stock-decrement IDoc that failed to post, leaving the storefront stale-high.
  3. HW-CHAIR-301 shows SAP higher than commerce (54 vs 12). That is lost sales, not oversell. The ledger holds 54 units but the storefront will stop selling at 12. The usual cause is reserve storage location 0002 not being aggregated into the published quantity, so 42 saleable units are invisible to shoppers.
  4. The SKU-level breakdown lives on the companion card. This gauge tells the owner the portfolio is 6.4% out of sync. To act, Operations pivots to Inventory Sync Drift, which lists every drifting SKU with its SAP quantity, commerce quantity, direction, and last successful sync. The gauge is the alarm; the list is the work queue.

Sibling cards merchants should reference together

This card is the percentage gauge that summarises inventory health across the top-50 SKUs. To act on a reading, pair it with the SKU-level and value-level cards below.
CardWhy pair it with ERP-vs-Ecom Inventory Variance %
Inventory Sync DriftThe SKU-level companion. This gauge gives the portfolio percentage; that card lists every drifting SKU with direction and last sync time. Always pivot here to act.
Material on Hand Went Negative (any plant)The failure state. When variance in the oversell direction is left unresolved, SAP on-hand can be driven negative by goods issues against stock that was never there.
Low Stock AlertsTells you which SKUs are near depletion. A low-stock SKU with high variance is the highest oversell risk on the board.
Inventory AgingThe opposite problem. SKUs sitting in SAP but under-published to the storefront age in the warehouse and tie up working capital.
SAP Total Inventory ValueThe valuation context. Variance on a high-value SKU is a bigger balance-sheet exposure than the same percentage on a cheap one, which is why this card is value-weighted.
Revenue Gap vs CommerceUnder-published stock is one structural reason commerce revenue and SAP-booked revenue diverge: stock you hold but never sold.
shopify.total_revenue / bigcommerce.total_revenue / adobe_commerce.total_revenueThe channels whose availability feeds this comparison. Oversell on a high-revenue channel does the most damage.

Reconciling against SAP

Where to look in S/4HANA Cloud: The closest native equivalents inside the SAP Fiori launchpad are:
Stock - Single Material Fiori app (the modern MMBE Stock Overview) for plant and storage-location on-hand Manage Stock Fiori app to view and adjust unrestricted, quality-inspection, and blocked stock by storage location Material Documents Overview Fiori app (the MB51 equivalent) to trace every goods movement on a Material Embedded Analytics: query the MM-IM stock CDS view for the same Material, plant, and storage-location scope
To reconcile, take the worst SKUs from the companion drift list, open Stock - Single Material for each, sum unrestricted-use stock across the storage locations that feed the storefront, and compare against the published commerce availability. They should match to the unit once any safety-stock buffer and unit-of-measure conversion are accounted for. Common mistakes when comparing against SAP’s own reports:
  • Reading total stock instead of unrestricted stock. MMBE shows unrestricted, quality-inspection, blocked, in-transit, and reserved separately. Only unrestricted-use stock is normally sellable. Summing all stock types overstates availability and makes SAP look higher than it really is for selling purposes.
  • Forgetting reserved stock. Stock reserved against open deliveries or production orders is physically present but committed. The card nets reservations out of SAP availability; a raw MMBE on-hand read does not, so the raw read looks higher.
  • Wrong storage-location scope. If the storefront sells only from the pick-face location but MMBE is read at plant level (all storage locations), the SAP figure includes reserve stock the storefront cannot see. Always reconcile at the storage-location scope that actually feeds the channel.
  • Unit-of-measure mismatch. SAP base UoM (each) vs a commerce selling UoM (pack of 6) will show an apparent variance that is really a conversion. Confirm the material-master alternative UoM before treating a gap as real.
Why our number may differ from SAP’s reports:
ReasonDirectionWhy
Unrestricted vs total stockCard lowerThe card counts only unrestricted-use stock as sellable; a raw MMBE total includes quality-inspection and blocked stock that cannot be sold.
Reserved / committed stockCard lowerStock reserved against open deliveries is netted out of availability; an on-hand-only report does not net it.
Storage-location scopeEitherThe card matches the storage locations that feed the channel; a plant-level report aggregates locations the storefront cannot sell from.
Safety-stock bufferEitherIf a safety buffer is applied on the SAP side or the commerce side but not both, the published quantities diverge by the buffer.
Snapshot timingSmallGoods movements posted between the SAP read and the commerce read create a transient gap; the card snapshots both sides in one poll to minimise this.
Unit-of-measure conversionEitherBase UoM vs selling UoM differences look like variance until the conversion factor is applied.
Cross-connector reconciliation, the killer finding: This card only exists because the storefront and the ledger are two different systems. The table below is where the value is.
CardExpected relationshipWhat causes legitimate divergence
shopify.total_revenueCommerce availability should equal SAP unrestricted on these SKUsStale stock-sync feed (commerce high, oversell risk), reserve location not aggregated (commerce low, lost sales), UoM mismatch, SKU mapped to wrong Material. Shopify Plus multi-location inventory can publish per-location quantities that do not match the SAP storage-location split.
bigcommerce.total_revenueAs ShopifyB2B portals often apply a separate safety buffer and quote-driven holds, so committed-but-unbilled stock looks like a gap. Confirm the buffer policy before treating it as drift.
adobe_commerce.total_revenueAs aboveAdobe Commerce MSI (Multi-Source Inventory) sources can map to SAP storage locations in non-obvious ways; a source mis-assignment shows as systematic variance on every SKU from that source.
The single most useful pivot from this gauge is into Inventory Sync Drift, which turns the portfolio percentage into a per-SKU, per-channel work queue with the last successful sync timestamp for each line.

Known limitations / merchant FAQs

Why only the top-50 SKUs and not my whole catalogue? Because variance on a long-tail SKU you sell twice a month is noise, while variance on a top-revenue SKU is a fire. The top-50-by-value cut keeps the gauge focused on the inventory that drives most of your sales and most of your write-off exposure. If you need the full catalogue view, the SKU-level companion Inventory Sync Drift covers every mapped SKU, not just the top 50. Why is the card value-weighted rather than a simple average? A flat average treats a 50% wobble on a 2accessorythesameasa502 accessory the same as a 50% wobble on a 400 chair. That hides the real risk. Value weighting means the gauge moves in proportion to the money at stake, so a reading above the alert always points at something worth acting on. Commerce is showing more stock than SAP. Is that a problem? Yes, and it is the more urgent direction. Commerce-higher-than-SAP means the storefront is advertising stock the ledger does not hold, which leads to oversell, failed fulfilment, refunds, and eventually negative on-hand in SAP. The usual cause is a stock-decrement IDoc or API call that failed to post. Check the stock-update IDoc partner profile and message status first. SAP is showing more stock than commerce. Is that a problem? A different one: lost sales. The ledger holds stock the storefront is not publishing, so shoppers see “out of stock” on units you actually have. The usual cause is a reserve storage location not being aggregated into published availability, or a safety buffer applied only on the commerce side. This ages inventory and ties up working capital. Does the card count quality-inspection or blocked stock? No. Only unrestricted-use stock is treated as sellable. Quality-inspection stock (awaiting QC release), blocked stock, and stock in transit are excluded unless your fulfilment model explicitly sells from them. This is deliberate: publishing QC or blocked stock to the storefront is itself an oversell risk. How does reserved stock affect the comparison? Reserved stock (committed against open deliveries or production orders) is physically present but not available to sell, so the card nets it out of SAP availability before comparing. A raw MMBE on-hand read does not net reservations, which is why a manual MMBE check can look higher than the card. My SKUs use a different unit of measure in SAP vs the storefront. Does the card handle that? It applies the material-master alternative unit-of-measure conversion where the map provides one. If a SKU is sold in packs on the storefront but stocked in eaches in SAP, confirm the conversion factor in the material master. An unconverted UoM mismatch is the most common false-positive on this card. How fresh is the comparison? Both sides are snapshotted in the same poll, every 15 minutes by default. Goods movements posted between two polls create a transient gap that resolves on the next cycle. For a live check during a stock count or a sync incident, the native SAP Stock - Single Material app is always real-time; this card is at most one poll behind. Does it work with multi-location / multi-plant fulfilment? Yes, but the storage-location and plant scope must be configured to match the locations that actually feed each storefront. Multi-Source Inventory on Adobe Commerce and multi-location inventory on Shopify Plus both need their sources mapped to the correct SAP plant and storage location, or the card reports systematic variance that is really a mapping problem.

Tracked live in Vortex IQ Nerve Centre

ERP-vs-Ecom Inventory Variance % (top-50 SKUs) is one of hundreds of KPI pulses Vortex IQ tracks across SAP 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.