Skip to main content
Card class: HeroCategory: Ecommerce Platform
Inventory value bucketed by days-on-hand. Aged stock is cash trapped on the floor.

At a glance

On-hand inventory bucketed by Item Ledger Entry receipt date. Bars: 0-30D, 31-60D, 61-90D, 91-180D, 181-365D, 365D+. Aged stock is cash trapped on the floor.
What it countsAging buckets of on-hand inventory by Posting Date of the originating Item Ledger Entry (the date stock was received). Each bucket carries unit count and dollar value at landed cost.
Aging start dateItem Ledger Entry.Posting Date of the Receipt entry. For FIFO Items, the original receipt date of the layer still on hand. For Average-cost Items, weighted average date of contributing receipts.
Stock excludedIn-Transit (configurable), Quarantined, Reserved (configurable).
CurrencyMulti-Company: each Company’s bucket value translated to Reporting Currency at current rate.
Aging cohort vs FIFO layerThe card uses FIFO layer date for FIFO-costed Items. Average-cost Items use weighted average across contributing receipts; this is an approximation but close to economic reality.
Power BI complementarityPower BI’s Inventory Performance pack does not include an aging buckets tile by default. This card fills that gap.
Time windowRT (real-time snapshot)
Alert trigger>15% in 180+ bucket (signal: ageing inventory crossing the standard write-down threshold)
Sentiment keyinv_aging
Rolesowner, finance, operations

Calculation

Calculated automatically from your Microsoft Dynamics 365 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 UK omnichannel apparel brand on Business Central, single Company GBP. Snapshot 14 Apr 26.
Aging bucketInventory value (GBP)% of totalAction
0-30 days£842,00032%Healthy, fresh stock
31-60 days£620,00024%Healthy
61-90 days£470,00018%Watch, season-end approaching
91-180 days£390,00015%Markdown candidate
181-365 days£220,0008%Clearance / write-down
365 days+£80,0003%Write-off / dispose
Total£2,622,000100%
Five things to notice:
  1. 23% of inventory is over 90 days old. For apparel (seasonal), 90 days is the markdown threshold. £610K is at risk of margin compression. The merchant should be running clearance promotions on these SKUs now, not next month.
  2. The 181-365D bucket (£220K, 8%) is the dead-stock candidate. Pair with Dead Stock Value which uses zero-velocity (no sales in 90+ days) as the criterion. Aging and zero-velocity overlap heavily but not perfectly.
  3. 365D+ bucket (£80K) is auditor-write-down material. UK accounting standards (FRS 102 / IFRS) require provisions on inventory expected to be sold below cost. A 365D+ apparel SKU rarely sells at full price. The Controller should be booking a Provision for Inventory Write-down at fiscal year-end.
  4. The alert (>15% in 180+ bucket) fires at 11% (8% + 3%). Not yet over the threshold, but trending towards it. The Vortex IQ trendline shows the 180+ bucket has grown from 7% to 11% over 6 months.
  5. Cross-connector finding (the kill-shot): of the £610K aged > 90D, £128K of those SKUs are still receiving Google + Meta ad spend. See Dead Stock with Active Ad Spend for the pause list.

Sibling cards merchants should reference together

CardWhy pair it with Inventory Aging
Total Inventory ValueThe denominator across all buckets.
Dead Stock ValueDifferent lens: zero-velocity vs aging. Most aged stock is dead, but not all.
Top SKUs by Inventory ValueWhich SKUs concentrate the aged buckets.
Margin by SKUAged SKUs often have compressed margins from markdowns.
Dead Stock with Active Ad SpendCross-connector kill-shot: aged stock you are still advertising.
Inventory Carrying CostThe annualised cost of holding the aged buckets.
Dead Stock Threshold BreachAlert fires when 180D+ bucket crosses threshold.

Reconciling against the vendor’s own dashboard

Where to look in Business Central:
Reports > Inventory > Inventory Aging (the closest native equivalent) Reports > Inventory > Item Age Composition (Value or Quantity variant) Item List > drill to Item Ledger Entries with date filter Power BI > Inventory Performance > add aging bucket calculation manually
The Item Age Composition report renders the same buckets when run for the same Locations. Date-bucket boundaries differ slightly between BC’s defaults (30 / 60 / 90 / 180 / 365) and the card; ensure the report is run with matching periods. Why our number may legitimately differ from BC’s reports:
ReasonDirectionWhy
FIFO vs Average agingEitherThe card uses FIFO layer date for FIFO Items; Average uses weighted-average date. BC’s Item Age Composition uses the same logic but the reporting bucket boundaries can differ.
In-Transit treatmentEitherCard includes by default; some merchants exclude.
Reservation handlingNoneReserved stock still counts as on-hand.
OData freshnessCard up to 15 min behindItem Ledger Entries appear via OData within 15 minutes.
Multi-Company aggregationCard materially higherCard consolidates; BC’s report runs per-Company.
Cross-connector reconciliation:
CardDirectionNotes
google_ads.adwords_total_spendCross-channel kill-shotAged SKUs with active ad spend. The most actionable finding any apparel merchant gets. See Dead Stock with Active Ad Spend.
shopify.collection_agingDifferent lensShopify’s collection-level aging is sales-velocity-based, not receipt-date-based. Different metric.

Known limitations / merchant FAQs

What is a healthy aging distribution? Apparel: 60-80% in 0-90D, < 20% in 91-180D, < 5% in 180D+. Electronics with longer product lifecycles: 50-70% in 0-90D, < 30% in 91-180D, < 10% in 180D+. Wholesale durables can run higher in older buckets without alarm; fast-fashion cannot. Why are my Average-cost items showing weird aging? Average-cost commingles receipts into a single Unit Cost layer. Aging by single date is therefore approximated. The card uses the weighted-average receipt date across contributing layers; if you want strict FIFO aging, change the Costing Method on the Item. Does the card respect Item Tracking (Lot No., Serial No.)? Yes for FIFO Items with Item Tracking. The Lot/Serial-specific Receipt date drives the layer date. For Average-cost Items, Lot/Serial does not affect aging (Item-level weighted average). Multi-Location: can I see per-Location aging? Yes, sliceable on the dashboard. The default view is consolidated; click a bucket to drill to per-Location breakdown. How does this differ from Dead Stock Value? Aging asks “when did this stock arrive?”. Dead Stock asks “when did this SKU last sell?”. The two heavily overlap (old stock often does not sell) but differ in the tails. Newly-received SKUs that flopped on launch show as Dead Stock but in young aging buckets; old SKUs that still trickle out show as Aged but not Dead. The 180+ bucket alert is firing. What action? Three steps. First, run Dead Stock with Active Ad Spend to pause ads on the worst SKUs. Second, set markdown promotions on the 180D+ SKUs (typically 30 to 50%). Third, review Purchase Orders to ensure new receipts are not adding to aged inventory. Does the card include kit / BOM components? For Manufacturing tenants: only finished goods at FIFO/Average layer date. Component aging in WIP is separate. Ask Vortex IQ for the BOM-extended variant. Can I write off aged stock from this card? Vortex IQ surfaces; you act in BC. The recommended flow is: identify SKUs > 365D, post an Inventory Reclassification Journal to scrap-out at zero value, or post a Sales Credit Memo to a Disposal Customer at clearance price. The card flags the candidates; the BC Functional Consultant executes. Power BI parity? The Inventory Aging Power BI tile (if installed via the Inventory Performance content pack) shows the same buckets per-Company. Multi-Company users need this card.

Tracked live in Vortex IQ Nerve Centre

Inventory Aging is one of hundreds of KPI pulses Vortex IQ tracks across Microsoft Dynamics 365 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.