Retention Exposure
How much data you are holding past your own retention policy
The video below shows Retention Exposure running on a real Odoo 19 database. Want it driven against your own data, or a question answered first? Ask and we will set up a session.
Most organisations have a retention policy. Far fewer can say what they are actually still holding, and a policy nobody measures against is a document rather than a control.
This measures it. Say which model to look at, which date field says how old a record is, and how many months your policy allows - and it tells you how many records are past that, what share of the total they are, and how old the oldest one is.
Four measures against a real database - counts, percentages, and the oldest record still held.
What it does
It counts, and only counts
This app never changes, clears or deletes a record. There is no anonymisation, no purge and no scheduled job anywhere in it, and it stores no personal data of its own - a measure keeps its configuration and its totals, nothing more. A test in the module asserts both, so neither can creep in later.
A number you can check
Every measure has a View button that opens the over-retained records themselves. A compliance figure nobody can drill into is a figure nobody should act on.
Not tax advice
The counts are company-wide and taken with elevated rights, so the figure is not narrowed by the running user's own record rules. This app measures against the period you enter; it does not determine what your retention period should be.
What it does not do
Stated up front so nothing about the scope is a surprise after you install it.
Screenshots

Requirements
- Odoo 19.0, Community or Enterprise.
- Odoo.sh or On-Premise only. Third-party apps cannot be installed on Odoo Online (SaaS) databases — check your hosting before buying.
- Module
mh_gdpr_retention_exposure, version 19.0.1.0.9, licensed OPL-1.
Related apps
Eleven access tools in one app, from who-can-do-what across every model to safe offboarding
See exactly what every user can read, write, create and delete across every model, resolved through group inheritance and record rules
Set the default list view columns for a model and assign them per group, so a team opens the same layout instead of rebuilding it