See it in action
From a registered document to an automatic reminder and a one-click renewal — never miss a date again.
Renewals slip when nobody watches the dates
A lapsed license, an expired certificate or an unrenewed contract can cost you a fine — or a customer. This app keeps every expiring document in one place and reminds the right person, automatically, before it's too late.
Everything that's expiring, at a glance
Valid, Expiring Soon and Expired — colour-coded by type, with days remaining on every card.
Everything you need to never miss a renewal
Any document type
Contracts, licenses, certificates, insurance, warranties — and your own types, each with its own default lead time.
Automatic status
Valid, Expiring Soon or Expired, computed from the expiry date and the lead time, and kept fresh daily.
Email reminders
The responsible person gets an email the moment a document enters its lead-time window.
Renewal activities
A Renew to-do is scheduled on the document, dated to the expiry, so it lands in the right person's inbox.
Board & calendar
A kanban grouped by status and a month calendar of upcoming expiries — pick the view that suits you.
One-click renewal
Renew rolls the document forward a year, links the old and new, and keeps your full history.
Worklist
An Expiring & Expired list puts everything that needs attention now in one focused place.
Full audit trail
Every reminder and renewal is logged on the document's chatter for a complete history.
Multi-company
Documents are scoped per company via a record rule.
Up and running in three steps
Register documents
Type, expiry date and lead time.
Assign responsible
Who should be reminded.
Let it watch
Reminders fire before each expiry.
Renew
One click keeps you covered.
Real screens, real data
Every screenshot below is the actual app running on Odoo 19 — no mockups.
The reminder, on the document
A scheduled Renew activity and the reminder email land automatically on the document and its chatter.
A renewals calendar
See every upcoming expiry laid out by month, colour-coded by type — plan renewals ahead.
A sortable worklist
Every document with its expiry date and days remaining — overdue in red, expiring in orange.
Your own document types
Rename the types, set each one's default lead time and colour, or add your own.
Never let a renewal lapse again
Install in seconds. No Enterprise, no external libraries, no lock-in. Works on Odoo 19 Community and Enterprise.
Full manual included. The app ships with a complete in-app documentation page (Apps > this module > Documentation) covering setup, the board, reminders, renewals and FAQs. Questions? bambooforge.labs@gmail.com
BambooForge Expiry Reminders
Never miss a renewal again. Register any document with an expiry date — contracts, licenses, certificates, insurance, warranties — and the app reminds the responsible person automatically before it lapses, with a colour-coded board, a renewals calendar and one-click renewal.
This page is the complete manual. Follow it top to bottom and you can install, register documents, read the board and fix the common issues without contacting support.
Overview
Compliance and renewals slip through the cracks because nobody is watching the dates. This app watches them for you:
- Register any expiring document with a type, a related party, a responsible person, an expiry date and a lead time.
- Automatic status — Valid, Expiring Soon or Expired, computed from the expiry date and the lead time.
- Reminders before expiry — an activity for the responsible person and an email, fired automatically once the document enters its lead-time window.
- A board and a calendar — a kanban grouped by status and a month calendar of upcoming expiries.
- One-click renewal — roll a document forward a year, keeping the history.
Requirements
- Odoo 17.0. The app only depends on Discuss (mail), which is part of every Odoo install.
No Enterprise modules and no external Python libraries are required.
Installation
- Copy bambooforge_expiry_reminder into your addons path.
- Update the apps list (Apps > Update Apps List).
- Search for Expiry Reminders and click Install.
A Renewals app appears with a starter set of document types (Contract, License, Certificate, Insurance, Warranty, Other).
Quick start
- Open Renewals > Documents and click New.
- Enter a name, choose a Type, set the Expiry Date and, if needed, adjust the Lead Time (days) (it defaults from the type).
- Set the Responsible person and optionally a Related Party.
- Save.
The document gets a status automatically and appears on the board and the calendar. When it enters its lead-time window, the responsible person is reminded.
The board and calendar
Renewals > Documents opens a kanban grouped by Valid / Expiring Soon / Expired, each card showing the type, expiry date and days remaining. Switch to the list for a sortable table (overdue rows in red, expiring in orange) or the calendar to see expiries laid out by month.
Renewals > Expiring & Expired is a focused worklist of everything that needs attention now.
How reminders work
Each document has a Lead Time — the number of days before expiry to start reminding. A daily scheduled action recomputes every document's status and, the first time a document is Expiring Soon or Expired, it:
- schedules a Renew activity for the responsible person, dated to the expiry,
- sends them the reminder email,
and marks the reminder as sent so it does not repeat. Everything is logged on the document's chatter.
The scheduled action Expiry Reminders: Check & Notify ships disabled — enable it under Settings > Technical > Scheduled Actions to run it daily.
Renewing a document
When a document is renewed, open it and click Renew. The app creates a new document starting at the old expiry date and running one year (adjust as needed), links the two together, and archives the old one — so your history stays intact and the new period is tracked from day one.
Document types
Under Renewals > Configuration > Document Types you can rename the types, set each one's Default Lead Time and colour, or add your own (e.g. Safety Inspection, Domain Name, Visa).
Frequently asked questions
- Statuses look stale.
- Status is recomputed by the daily scheduled action and whenever a document is edited. Enable Expiry Reminders: Check & Notify so it refreshes every day.
- The reminder went to the wrong person.
- Reminders go to the document's Responsible user. Set it on each document.
- I was reminded once but want another nudge.
- Reminders fire once per document to avoid noise. Re-trigger by clearing the reminder (it resets automatically on renewal), or rely on the scheduled Renew activity.
- Does it work with multiple companies?
- Yes. Documents are company-scoped via a record rule.
Support
Questions or ideas: bambooforge.labs@gmail.com.
Usage
Everything happens under the Renewals app, which appears in the main menu after installation with a starter set of document types (Contract, License / Permit, Certificate, Insurance, Warranty, Other).
Register a document
- Go to Renewals > Documents and click New.
- Enter a Name and pick a Type. Choosing a type fills the Lead Time (days) from that type's Default Lead Time — for example Contract sets 45 days and Warranty sets 15. Override it per document if needed.
- Set the Expiry Date (required) and, optionally, a Start Date, a Reference, a Related Party and free-text Notes.
- The Responsible defaults to you; change it to the person who should be reminded and who owns the renewal.
- Save.
On save the status is computed automatically from the expiry date and lead time: Valid while more than the lead time remains, Expiring Soon once inside the lead-time window, and Expired once the date has passed. Days to Expiry counts down and turns negative after expiry.
Read the board and calendar
Renewals > Documents opens as a kanban grouped by status, colour-coded by document type (see screenshot_kanban.png). Switch views from the top-right: a List where expired rows show in red and expiring rows in orange (screenshot_list.png), or a Calendar month view of expiry dates coloured by type (screenshot_calendar.png). Use the search filters Expiring Soon, Expired, My Documents and Renewed (archived), or group by Status, Type or Responsible. Renewals > Expiring & Expired is a pre-filtered worklist of everything needing attention now.
How the scheduled action reminds people
The cron Expiry Reminders: Check & Notify (Settings > Technical > Scheduled Actions) runs the automatic notifications. It ships inactive, so enable it once and set it to run daily (its default interval is every 1 day).
Each run recomputes every active document's status, then finds documents that are Expiring Soon or Expired and not yet reminded (Reminder Sent unchecked). For each, once only, it schedules a Renew: <name> to-do activity for the Responsible user dated to the expiry date, sends that user the Document Expiry Reminder email (if they have an email address), ticks Reminder Sent, stamps Last Reminder and logs a chatter note.
Because the flag is set, a document is never reminded twice. To acknowledge a due document manually and stop the cron from notifying about it, use the Mark Reminded button on the form (shown while a document is not yet valid and not yet reminded); it ticks Reminder Sent and stamps Last Reminder.
Renew a document
When a document is up for renewal, open it and click Renew in the header. The app creates a fresh document that starts on the old expiry date and runs one year forward, links the pair (Renewed From / Renewed To), and archives the original — its history and chatter stay intact, and the new period is tracked with its reminder flag cleared from day one. The Renew button disappears once a document has already been renewed.
Worked example
A workshop registers its liability insurance: Type Insurance, Expiry Date 31/12/2026, Lead Time 30 days, Responsible the office manager. It stays Valid until 1 December 2026, when it becomes Expiring Soon. On the next cron run the office manager gets a Renew: Liability Insurance activity dated 31 December plus the reminder email, and the chatter records "Expiry reminder sent". After the new policy is agreed, clicking Renew produces the 2027 document (valid to 31/12/2027) and archives the 2026 one.
Configure document types
Managers can maintain the catalogue under Renewals > Configuration > Document Types (see screenshot_types.png): rename types, set each one's Default Lead Time and colour, add your own (e.g. Safety Inspection, Visa, Domain Name), or open a type to view its documents via the document count.
Upgrading & version compatibility
This build targets Odoo 19.0. Each Odoo major series (17.0, 18.0, 19.0) has its own dedicated build of this module — always install the build that matches your Odoo version. Mixing a build with a different Odoo series is not supported.
Patch upgrades (same series, e.g. 19.0.1.0.0 → later)
Back up your database and filestore first.
Replace the module folder with the newer build.
Restart Odoo with the module updated:
./odoo-bin -c your.conf -u bambooforge_expiry_reminder -d your_db
Odoo applies any schema/data changes automatically. Your existing records and configuration are preserved.
Cross-version migration (e.g. Odoo 17 → 18)
Upgrading Odoo itself is a database migration handled by Odoo's standard upgrade tooling. When you migrate the database to the next Odoo series, install the matching build of this module for that series. Data created by this module carries over with the database migration.
After any upgrade the module's scheduled actions resume on their normal cadence — no manual re-activation is required.
Uninstallation
You can remove this module at any time from Apps → (this module) → Uninstall, or from the command line. Uninstalling is clean and reversible by reinstalling — but note what is and is not deleted.
What is removed
- The module's own tables and every record in them (2 models, prefixed expiry.*) — this is the data this module created.
- The menus, actions, views and reports this module installed.
- Its scheduled actions (cron jobs) — they stop immediately on uninstall.
- The security groups this module defined (user assignments to them are dropped).
What is preserved
- Your standard Odoo data (partners, products, sales, invoices, inventory moves) is not deleted — this module only reads and annotates it; the underlying records stay.
- Attachments and chatter messages on standard records are kept.
As always, take a database backup before uninstalling in production.
Changelog
19.0.1.0.0
Current release for Odoo 19.0. This build includes:
- Track contracts, licenses, certificates, insurance and any document with an expiry date. Get reminded before they lapse with automatic activities and emails, a colour-coded board and a renewals calendar.
Feature additions and fixes ship as new builds on the Odoo Apps store; this page and the module's version reflect the current published release. Always keep the build matched to your Odoo series (see Upgrading & version compatibility).
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module