Retail analytics has an uncomfortable secret: most "customer behaviour" data is merchandise behaviour observed from a distance. RFID makes the merchandise side genuinely precise, and that precision is worth more than a vague story about footfall.
Item-level RFID measures garments, not people
Be clear about the unit of observation before designing anything.
- A tag identifies an article of clothing, its size, its colour and its location.
- A tag does not identify a person, an intention, or a household.
- What you infer about people is a model layered on top of garment events.
- The value is in the garment's journey: floor, fitting room, till, or back to stock.
- Any claim about "customer journeys" should state which garment events support it.
The fitting room signal and what it proves
A garment entering a fitting room is the strongest non-transactional signal in a store.
- Entry is a real event: the item left the floor and entered a private space.
- Non-purchase after fitting is a specific, actionable failure, not a generic "lost sale".
- The difference between "tried and rejected" and "never noticed" is the whole point.
- Size availability explains a large share of fitting-room rejections and is fixable.
- A pile of untagged returns from the fitting room means the process, not the customer, failed.
Store traffic: counting bodies is not identifying them
Traffic counting and item tracking answer different questions.
- A door counter gives a denominator; without it, conversion has no meaning.
- Traffic systems that count bluetooth probes or camera tracks carry legal obligations that vary by country.
- Staff exclusion matters; a store where employees are counted inflates the denominator by a third.
- Group entry breaks the "one person, one visit" assumption and should be acknowledged.
- Never attempt to match a specific person to a specific purchase; that is where analytics becomes surveillance.
The join key problem
Item events and sales events are recorded in different systems with different clocks.
- The POS knows the basket, the timestamp and the tender; the RFID system knows the garment.
- The join is by EPC at the point of sale, and only if the tag was actually read at the till.
- A till without a reader produces a sale with no item event, and the model silently loses it.
- Time-window joins are a proxy, and proxies must be labelled as such.
- Reconcile the counts daily: items sold, items read, and the gap explained.
What Odoo can hold and what it cannot
Odoo is good at transactions and inventory; it is not a behavioural data platform.
- Sales orders, POS orders, stock moves and product variants are native and reliable.
- Fitting-room events have no native model and need a custom table with a clear schema.
- Traffic counts belong in a separate time-series store, not in the product master.
- Keep analytics tables out of the transactional path, so a heavy query cannot slow the till.
- Expose the results as a read-only reporting layer, refreshed on a schedule.
Attribution windows and the honesty of conversion
Conversion rate is the most quoted and least defined retail metric.
- Define the window: same visit, same day, or within seven days, and state it everywhere.
- A garment fitted at 14:00 and bought at 14:20 is a clean conversion; one bought next week is a guess.
- Returns should reduce conversion, or the metric rewards the wrong behaviour.
- Exclude staff purchases and known wholesale transactions from the denominator.
- Publish the definition next to the number, because the argument is always about the definition.
Sell-through, dwell and the size curve
The operational value is in assortment and replenishment decisions.
- Sell-through by variant tells you which size and colour combination is actually moving.
- Dwell time on the floor separates "not seen" from "seen and rejected".
- Fitting-room rejection rate by size is the clearest signal for a replenishment gap.
- Use the data to fix the size curve, not to blame the store team.
- A single week is noise; require at least four weeks before changing a buy.
Privacy: the boundary you must not cross
The legal line is closer than the marketing ambition.
- Never link a tag to a payment card, a loyalty account or a phone identifier in the analytics layer.
- Fit-room data should be aggregate and, ideally, not retained at the individual garment level beyond the season.
- Staff must be able to explain, in one sentence, what is collected and why.
- Signage and notice requirements differ by jurisdiction; assume the strictest one you operate in.
- A privacy impact assessment before the pilot is cheaper than a deletion order afterwards.
Data quality: the reads that never happened
Missing reads do not announce themselves, and they bias every conclusion.
- A fitting room without a reader records nothing, which looks like "no fittings today".
- Metal fixtures, mirrors and crowded rails reduce read rates in ways that vary by hour.
- Duplicate reads inflate dwell time; deduplicate by tag and by minute.
- Items leaving the store without a till read appear as permanent stock, distorting availability.
- Publish a data quality score alongside every dashboard, because trust is the actual product.
From dashboard to decision
A report nobody acts on is a cost, not an insight.
- Every metric should have a named owner and a decision it changes.
- Size-level replenishment is the most reliable first use case.
- Fitting-room rejection review belongs in the weekly merchandising meeting, not in a monthly deck.
- Kill metrics that nobody has acted on for two quarters.
- Measure whether the decisions changed, not whether the dashboard was opened.
Piloting in one store without fooling yourself
A pilot is an experiment, and experiments need a control.
- Choose a store with stable staffing and a representative size curve.
- Run a baseline period of at least four weeks before switching anything on.
- Compare against a control store, or the season will take the credit.
- Instrument the fitting room first, because that is where the signal is densest.
- Decide in advance what result would make you stop, and honour it.






