A specialised industrial supplier sold maintenance, repair, and safety SKUs to about 300 factories. Odoo had been the system of record for five years, yet every board meeting still began with finance rebuilding an ad hoc Odoo inventory analysis in spreadsheets. IT enabled read-only API access one afternoon. By the next morning Flowra had produced a product risk report across the full five years, and the CEO used it in that week's board pack.
The situation
The catalog held 5,800 SKUs: gloves, filters, abrasives, lubricants, and a long tail of spare parts kept for specific customer machines. Most lines were cheap. A few were critical: if a plant's filter cartridge was out of stock, a production line waited.
The CEO wanted an honest picture of catalog health before each quarterly board: dead stock, margin leaks, and lines that looked fine on the shelf but were trending the wrong way. Internal BI was backlogged. A consultancy had quoted a three-month data warehouse project to answer questions that changed every quarter.
Finance spent the better part of two weeks per quarter exporting Odoo reports, joining them in Excel, and defending assumptions in the meeting instead of discussing decisions.
What the data showed, and didn't say
Odoo contained quotations, sales orders, deliveries, purchase receipts, and invoice lines with cost snapshots at the time of sale. The standard reports were organised around accounts and periods: revenue by customer, stock value by category, margin by product for a chosen month.
They were account-centric rather than decision-centric. No single document ranked products by combined operational and financial risk, and no report explained why a product with stable list prices was earning less each quarter. The cost snapshots held the answer, but nobody had time to read 60 months of them.
Connecting Flowra
IT created a read-only Odoo user with an API key. Flowra connected to Odoo 17 over XML-RPC through the Odoo connector and ingested five years of sales, purchase, stock-move, and invoice-line history that afternoon.
The overnight pipeline reconstructed a stock trajectory per SKU from net transaction flow, computed the product risk score and stockout signal for every line, and read the margin rate from the invoice history. The report was waiting the next morning. Odoo was never written to, and nothing about its configuration changed.
What Flowra surfaced
- A full product risk report: every SKU scored 0.00 to 1.00 with its slow-mover probability, velocity rank, and trend rank shown, and 412 lines in the critical tier.
- The top 30 SKUs with negative margin drift despite stable list prices, from the margin-squeeze signal. In most cases the cause was purchase cost creeping up while a volume-tier discount stayed fixed.
- Reorder recommendations weighted by supplier lead-time variance from purchase-to-receipt history, so the lines with unreliable suppliers carried more safety stock and the stable ones less.
- A dormancy list: 880 SKUs with no movement for over 90 days, ranked by cash trapped, and a separate dead-stock onset watchlist for lines still selling but likely to go silent.
- Fact
- Margin rate 14.2% over the last 12 weeks, down from 23.8% four quarters ago. List price unchanged. Average purchase cost up 11% across the last six receipts. Three accounts on a volume-tier discount take 72% of the volume.
- Forecast
- At the current cost trend and unchanged tiers, the line goes margin-negative for the two largest accounts within two quarters. Annualised leakage on this SKU alone: about €8,300.
- Recommendation
- Reprice the volume tier by 6% at renewal, or renegotiate purchase cost with the supplier on a 12-month commitment. Alternative: hold pricing and switch the two largest accounts to the equivalent cartridge from the second supplier, at a 9% lower cost.
- Hypotheses
- Purchase cost trend continues; the accounts' consumption holds at its 12-week rate; no competing quote on file.
- Next step
- Approve, adjust the quantity, or ask why. Nothing changes in Odoo until you do.
What the team did
The CEO took the risk report and the top-30 margin list into the board pack unchanged, with Flowra's explanations as the appendix. The board discussed three decisions instead of the numbers: a clear-down budget for the dormancy list, a repricing round on the 30 lines, and a supplier review for the two vendors driving the cost creep.
The operations lead exported the reorder recommendations into the weekly supplier call sheet. Finance stopped rebuilding the analysis and instead reviewed the Monday digest, asking Flowra in Slack for the evidence behind any line that looked surprising.
Sales challenged four of the 30 margin flags, where a rebate arrived through a separate credit note. The challenges were logged, the rebate lines were added to the ingestion, and the four flags cleared on the next nightly run. The score improved because a human corrected it.
Results
| Metric | Before | After | Timeframe |
|---|---|---|---|
| Board pack preparation | ~2 weeks, manual | 2 days | First quarter |
| Margin leakage identified on mispriced volume lines | Unknown | €61,000 annualised | First report |
| Dead SKU count (no movement over 90 days) | 880 | 678 (−23%) | One quarter |
| Time to a five-year product risk report | 3-month project quoted | Next morning | Day 1 |
"We connected Odoo in one afternoon. By the next morning, we had a complete product risk report for the past five years."
— CEO, specialised industrial supplier
What made it work
- The ERP stayed the ERP. Odoo kept doing what it does well: transactions, valuation, audit trail. Flowra became the decision layer on top. The split is explained in ERP analytics versus ranked action lists.
- The board got decisions, not data. A ranked list with explanations turned a two-hour numbers review into three decisions. Each line carried the fact, the forecast, the recommendation, and the hypotheses.
- History did the work. Five years of invoice-line cost snapshots exposed margin drift that a monthly report could not. How the score reads that history is in stock risk score explained.
Frequently asked questions
Which Odoo versions does Flowra support for Odoo inventory analysis?
Odoo 16 and 17, connected over XML-RPC with a read-only user and API key. Flowra reads sales orders, purchase orders, stock moves, invoice lines, and the product catalog, and syncs nightly or on demand, with webhook-triggered syncs when records change.
How much history does Flowra need?
Meaningful results start at about three months of transaction history. Twelve months or more sharpens the velocity trend and seasonality. This supplier had five years in Odoo, which is why the margin drift was visible quarter by quarter.
Can Flowra replace Odoo's inventory reports?
Not the valuation, audit, or compliance reports. What it replaced here was the manual analysis: the exports, the joins in Excel, and the debate about which SKUs matter. Odoo stayed the system of record; Flowra ranked the decisions on top of it.
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 →