A 120-person regional FMCG distributor ran Odoo for eight years across two warehouses and 2,400 active SKUs. FMCG inventory management there was a quarterly debate about slow movers that never ended in a clear-down. After connecting Odoo read-only to Flowra, purchasing had a ranked stop-buy and clear-down list the next morning, and cleared €240,000 of slow stock before the summer peak.

€240kslow stock cleared in one season
89SKUs put on stop-buy in week one
15 mindaily action review, down from weekly debates
0increase in stockouts on top movers

The situation

The operations director owned availability and working capital for the whole catalog: beverages, snacks, personal care, and household lines with shelf-life windows between four months and two years. Two warehouses, twelve buyers and merchandisers, and a peak season that starts in late May.

Monthly reviews mixed Odoo pivot tables, buyer memory, and supplier promotion calendars. Everyone knew slow stock existed. Nobody could say which 80 lines mattered, in what order, or how much cash they tied up. By the time the list was agreed, seasonal demand had shifted again and the debate restarted.

The cost was not abstract. Slow lines occupied pallet positions needed for peak-season inbound, and the credit line was being used to fund stock that had not moved since the previous winter.

What the data showed, and didn't say

Odoo held complete sales orders, deliveries, returns, and purchase receipts for eight years. The standard inventory valuation report listed quantities and value by product category. The stock forecast view showed incoming and outgoing moves per product.

What no report answered was a ranked decision: which SKUs to stop buying, which to discount, which to return to the supplier, and in what order, given current cover and a declining sales velocity. The signal was in the transaction history. It was simply never assembled into one list with evidence attached.

Connecting Flowra

IT created a read-only Odoo user and an API key one afternoon. Flowra connected over XML-RPC to Odoo 16, ingested sales, purchase, and stock-move history, and reconstructed a stock trajectory per SKU from net transaction flow. No opening stock count was needed and nothing was written back to Odoo.

The first product risk report was ready the next morning. From then on Flowra re-scored the catalog nightly, with webhook-triggered syncs when Odoo records changed. The Odoo connector was the only integration work involved.

What Flowra surfaced

  • A stop-buy list of 89 SKUs in the high and critical risk tiers: rising forward cover combined with a falling 4-week versus 12-week velocity trend.
  • A clear-down list ranked by cash trapped above the cover target, with the estimated annual carrying cost for each line.
  • A dead-stock onset watchlist: 31 lines still selling and still being restocked that were likely to go silent for eight consecutive weeks before the season ended.
  • Evidence on every line: velocity trend, reconstructed cover, last movement date, and the weighted components behind the risk score.
Flowra · recommendation draftConfidence: High
Stop purchasing SKU 3140 (sparkling lemonade 6×1.5L) and transfer 380 cases to the south warehouse before discounting
Fact
Risk score 0.81 (critical). 12-week velocity in the bottom 14% of the catalog; 4-week velocity down 38% versus the 12-week baseline. Reconstructed cover 96 days against a 30-day target. Open purchase order for 600 cases due in 9 days.
Forecast
At current velocity, the open order pushes cover past 140 days and past the best-before window for roughly a third of the pallets.
Recommendation
Cancel or postpone the open order. Transfer 380 cases to the south site, where cover is 11 days. Alternative: keep the order and run a trade promotion on 40 top accounts, which clears the same volume at an estimated 6% lower margin.
Hypotheses
South-site demand holds at its 12-week rate; supplier accepts postponement; no promotion already committed by sales.
Next step
Approve, adjust the quantity, or ask why. Nothing changes in Odoo until you do.
Data refreshed 9 h ago · 8 years of history · Source: Odoo 16 (read-only)

What the team did

Purchasing approved the stop-buy list in the first review, overriding 11 lines where a supplier rebate depended on annual volume. Each override was logged with a reason, which later exposed three lead times in Odoo that were six weeks out of date.

Sales took the top 40 clear-down lines and ran a targeted promotion with the accounts whose RFM segment showed rising frequency on those categories. Merchandising handled returns to suppliers on the 12 lines where return terms made recovery better than discounting.

The weekly review became a daily 15-minute action review in Slack. Flowra posted the lines whose tier changed overnight, the buyer approved or adjusted, and the Monday digest gave the operations director cash released against the plan. The decisions stayed with people. The assembly of evidence moved to the assistant.

Results

MetricBeforeAfterTimeframe
Slow stock value above cover target~€310k~€70kOne season (14 weeks)
Reorder review cadenceWeekly, 2-hour debateDaily, 15-minute action reviewFrom week 2
Stockouts on top 200 moversBaselineNo increaseSame season
Time to first product risk reportQuarterly, manualNext morning after connectionDay 1

"We were sitting on three months of slow stock we couldn't see in one view. Flowra flagged it in the first analysis. We cleared it before the season ended."

— Operations Director, regional FMCG distributor

What made it work

  • Separate the two problems. Velocity tiers kept clearance actions away from core lines, so the clear-down never touched the top movers. The distinction is explained in dead stock versus slow-moving inventory.
  • Rank by cash, not by SKU count. Forty lines carried most of the trapped cash. The method is in the overstock cash trap.
  • Log the overrides. Eleven documented exceptions surfaced stale master data that no report would have caught. Every recommendation carried the fact, the forecast, and the hypotheses, so disagreeing took one line, not a meeting.

Frequently asked questions

Does Flowra need an opening stock count for FMCG inventory management?

No. Flowra reconstructs a stock trajectory per SKU from net transaction flow: sales out, purchases and returns in. It is a reconstructed trajectory rather than a verified physical count, which is why the team kept its cycle counts for valuation and used Flowra for prioritisation.

Did Flowra change anything in Odoo?

No. The connection was read-only through an Odoo API key. Stop-buys, transfers, and promotions were executed by the buyers and sales team in Odoo after approving each recommendation. Write-back needs connector support, explicit opt-in, and the right user role, and it stayed off.

How long did setup take?

One afternoon to create the read-only Odoo user and connect over XML-RPC, and the first product risk report was ready the next morning. From then on the catalog was re-scored nightly, with webhook-triggered syncs when Odoo records changed.

Related reading

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 →