Days on hand reporting

Track days on hand at the SKU level. Combine inventory from your ERP with velocity from your storefront. Flag slow-moving and at-risk stock before it becomes write-down exposure.

Get a demo

The prompt

I want to track days on hand across our SKU catalog to flag slow-moving and at-risk inventory. Can you build me a flow that pulls current inventory levels from our ERP and sales velocity from our storefront, calculates days on hand per SKU, and outputs a report flagging anything outside our target range?

Just copy and paste the prompt into a new Prowork flow to get started.

What Prowork builds for days on hand reporting

A workflow with six steps you can edit:

1. Pull current inventory. From NetSuite or your ERP. On-hand by SKU, by warehouse, with reservations excluded.

2. Pull sales velocity. From Shopify, your WMS, or a sales feed. Units sold per SKU over the chosen lookback window.

3. Standardize the SKU. Trim, uppercase, strip prefixes, map between code systems so velocity and inventory line up.

4. Calculate days on hand. On-hand divided by daily velocity, with seasonality smoothing if the planner asks for it.

5. Apply your bands. Slow-mover threshold, target range, at-risk-of-stockout threshold. Different bands per category if needed.

6. Output the report. Full table for the record, flagged-only view for merchandising, and a Slack alert when a SKU crosses a threshold.

What is days on hand?

Days on hand is how long the inventory you are holding will last at the rate it is currently selling: units on hand divided by average daily sales velocity. It converts a stock number into a time horizon, which is the form a planner can actually act on.

Both halves of that fraction come from different places — on-hand from the ERP or warehouse, velocity from the sales channels — and the lookback window used for velocity is a judgement call. Thirty days flatters a SKU coming off a promotion; a seasonal item needs a window that reflects its own curve.

Merchandising and planning read it weekly, and it drives reorder timing, markdown decisions, and which SKUs are quietly tying up cash on a shelf.

Why teams stop calculating days on hand manually

Days on hand is the metric merchandising wants every week and the metric nobody has on a fresh report. The numerator lives in the ERP. The denominator lives in the storefront. The lookback window depends on whether the category is steady or seasonal, and the planner has to make that call on every refresh.

The manual version is a workbook the planner builds Monday morning. Export inventory, export sales, line them up, calculate the ratio, apply the thresholds, build the deck for the merch meeting. The numbers are clean for about thirty hours, then a Shopify push or a 3PL receipt makes the workbook stale and the meeting on Wednesday is debating yesterday's view.

The judgment in days on hand is in the threshold and the merch response. Reorder, mark down, push paid, hold and wait. That belongs in the meeting. The arithmetic belongs in a flow. Run the flow daily and the merchandising conversation gets the actual answer, not the version that was true on Monday.

How it works

Step 1. Paste the prompt.

Open Prowork, paste the prompt in section 2, and let it ask follow-up questions about your inventory source, your velocity window, and what bands count as slow or at-risk.

Step 2. Connect your data.

NetSuite, Shopify, your WMS. Plus the threshold table that says what target range applies per category.

Step 3. Run it on the cycle merch needs.

Daily for fast categories, weekly for steady ones. The flow refreshes against the latest data each time.

FAQ

What lookback window should I use for velocity?

Whatever matches your category dynamics. Trailing seven days for fast-moving consumables, trailing thirty for steady categories, season-adjusted for products with cyclicality. The flow supports a different window per category.

Does this work if I sell through multiple channels?

Yes. Pull velocity from each channel and aggregate to the SKU level. The flow can also report days on hand per channel if merch wants to see where a SKU is selling fastest.

How does it handle new SKUs without enough velocity history?

Optional fallback rule. New SKUs use a category-average velocity for the first N days, then transition to actual once enough history exists.

Can the flow trigger a markdown candidate list?

Yes. When a SKU crosses the slow-mover threshold, the flow can drop a row into a markdown queue with the current cover days and the dollar exposure.

How is this different from a native NetSuite stock report?

NetSuite shows on-hand and historical sales. The flow combines them with your velocity window, your category bands, and your seasonality logic. The output is the call merch needs to make, not the raw numbers.
Catch the slow-mover before it becomes a write-down.
Paste the prompt, point it at your inventory and sales velocity, and let the report run on its own.
Start for free