A building materials distributor with six branches carried deep stock so that a contractor asking "do you have it?" always heard yes. Building materials inventory was managed branch by branch, and each manager quietly over-ordered comfort stock. When credit tightened, finance needed cash out of the warehouses without hurting fill rate. Flowra, connected read-only to the branch ERP's MySQL database, found 41 SKUs holding €186,000 above target cover. The team released it in one quarter.
The situation
The catalog exceeded 3,100 SKUs across timber, fixings, insulation, and finishing lines, held in six branches with their own yards and their own managers. Availability was the sales pitch, so every branch manager kept local comfort stock on the lines their regulars asked for.
Finance tracked inventory days at company level and saw a number creeping up. Branch managers saw full racks and happy contractors. Nobody saw the same SKU sitting at 120 days of cover in one branch while a sister branch 40 km away ran a stockout on it and raised an emergency transfer.
When the bank tightened the credit line, the question became concrete: how much cash can come out of stock in 30 days without cutting fill rate, and where exactly is it?
What the data showed, and didn't say
The branch ERP held six years of sales, purchases, and inter-branch transfers by depot. Its ageing reports were built for receivables, not for stock cover by SKU and branch. Its stock reports gave quantities per location, accurate to the unit.
What no report answered was excess against a cover target at the SKU-branch level, or which excess could move to another branch instead of being discounted. The answer required current velocity per branch, a cover target per product class, and the transfer history, joined. It had never been joined.
Connecting Flowra
IT created a read-only MySQL user on the ERP database and shared the connection string, which Flowra stores encrypted and uses read-only. The SQL connector ingested six years of movement history across all six branches in a single overnight run.
Flowra reconstructed a stock trajectory per SKU and branch from net transaction flow, then computed forward cover, the product risk score, and the stockout signal at branch level. The first report was reviewed the next morning; the pipeline re-ran nightly from then on. Nothing was written back to the ERP.
What Flowra surfaced
- 41 overstocked SKUs tying up an estimated €186,000 above target cover, ranked by cash trapped, with the annual carrying cost shown once finance set a holding-cost rate of 18%.
- Branch-specific transfer suggestions: relocate-stock proposals wherever one branch was in the high or critical forward-cover tier while another had a stockout signal on the same SKU.
- Stop-buy flags on lines with three consecutive months of declining velocity, so the excess would not be refilled while it was being cleared.
- A clear-down list for the residual excess after transfers, sequenced by recovery probability.
- Fact
- East branch: forward cover 19 weeks (critical tier), 12-week velocity down 27%. North branch: stockout signal critical, 5 days of supply against a 12-day supplier lead time. Central branch: reorder soon, 14 days of supply. Cash above the 45-day cover target at east: about €14,800.
- Forecast
- Without action, north raises an emergency transfer or a rush purchase order within the week, and east still holds four months of cover in the autumn.
- Recommendation
- Transfer 800 units to north and 400 to central on the scheduled Thursday run. Cancel the open east purchase order for 600 units. Alternative: transfer 800 to north only and discount the remainder at east by 8% to the top five contractor accounts.
- Hypotheses
- North and central velocity hold at their 12-week rates; the Thursday inter-branch run has capacity; supplier accepts the cancellation.
- Next step
- Approve, adjust the quantity, or ask why. Nothing changes in the ERP until you do.
What the team did
The supply chain manager ran the 41-line list with the six branch managers in a single call. Transfers came first: 23 of the 41 lines had a sister branch with a stockout or reorder-soon signal, so the stock moved on the scheduled runs instead of being discounted. Purchasing froze replenishment on the stop-buy lines until cover normalised.
Sales built contractor bundles around the worst residual offenders, pairing slow finishing lines with fast fixings. Finance approved a clear-down budget against the ranked list and tracked cash released weekly through the Monday digest.
Branch managers kept the final say on their own yards. They overrode nine transfer suggestions in the first month, mostly for lines tied to a local project due to start. Every override was logged, and three of them turned into confirmed orders that Flowra then treated as firm demand.
Results
| Metric | Before | After | Timeframe |
|---|---|---|---|
| Cash held above target cover (41 flagged SKUs) | ~€186k | Under €20k | One quarter |
| Emergency inter-branch transfers | Baseline | −22% | One quarter |
| Fill rate on A-class lines, all branches | Baseline | Unchanged | One quarter |
| Branch planning tools | 6 local spreadsheets | 1 shared weekly action list | From week 4 |
"For the first time the six branches were looking at the same list. The stock was already ours. It was just in the wrong yard."
— Supply Chain Manager, building materials distributor
What made it work
- Transfer before discount. More than half the excess had a home in another branch. Moving it first protected margin, which is the execution order described in the overstock cash trap.
- Excess quantified per SKU and branch. "Inventory days are up" became 41 lines and €186,000, which finance could budget against. The dead-versus-slow distinction that kept clearance off healthy lines is in dead stock versus slow-moving inventory.
- Local judgment stayed local. Branch managers approved every move. Flowra coordinated the signal between branches, which is what the coordination layer is for.
Frequently asked questions
How did Flowra connect to a legacy building materials inventory system?
Through a read-only MySQL user on the ERP database. Flowra supports PostgreSQL, MySQL, MSSQL, and MariaDB with read-only credentials, stores the connection string encrypted, and leaves the schema untouched. Six years of history across six branches were ingested in one overnight run.
How is "overstock" defined in this case?
As forward cover: net stock expected over the next eight weeks divided by trailing weekly demand, tiered at under 4 weeks low, under 8 medium, under 16 high, and 16 or more critical. Cash above target was the units beyond the 45-day cover target multiplied by unit cost, per SKU and branch.
Did fill rate suffer while cash was being released?
No. Fill rate on A-class lines was unchanged over the quarter. Transfers moved stock toward branches with a stockout signal, and stop-buy flags applied only to lines with three months of declining velocity, so fast-moving lines were never touched.
Same playbook, your data. Book a 20-minute walkthrough or upload a file and get your first ranked action list.
Get my free inventory report →