What dunning and collections look like in Odoo
Dunning is the disciplined, escalating sequence of reminders you send a customer whose invoice is overdue; collections is what the sequence turns into when reminders stop working. In Odoo Accounting both live in one place: the follow-up system. You define a ladder of follow-up levels, each with a delay and an action, and Odoo builds a follow-up report per overdue customer that groups every open invoice, shows how late each one is, and proposes the next action. Nothing here is an add-on or a third-party module: it is standard in Odoo Community and Enterprise, and most teams simply never configure it, so it sits idle while receivables age.
Set up your follow-up levels
Open Accounting, then Configuration, then Follow-up Levels, and design the ladder. A sensible default has four rungs: a gentle reminder at 7 days overdue, a firmer email at 15 days, a phone-call action at 30 days, and a final notice at 45 days before the account is handed to collections. Each level carries its own delay (counted from the invoice due date), its own email template and printable letter, and a tone you write once and reuse. Keep the early rungs friendly, most late payments are oversight rather than refusal, and reserve the hard language for the accounts that have ignored two reminders already. The levels are the policy; everything that follows just executes them consistently.
Automate the reminders so nobody has to remember
Odoo can send the reminders on its own. Each follow-up level can be marked to send automatically, and the built-in Payment Follow-ups scheduled action runs daily, finds every customer who has crossed a level's delay, and emails them the matching reminder with their overdue statement attached. You set it once and the cycle runs every morning without anyone opening the accounting app. For the levels you would rather keep a human in the loop on, leave them manual: the follow-up report queues them for one-click review, so an accountant clears a whole day's chasing in a few minutes instead of hunting invoice by invoice.
Handle promises, disputes, and holds
Real collections are not a straight line, and Odoo's follow-up report has the escape hatches for it. When a customer commits to a date, log a promise-to-pay on their report and Odoo pauses reminders until that date passes, so someone who has already promised is not chased in the meantime. When an invoice is genuinely disputed, exclude it from follow-ups so the argument over one line does not freeze reminders on everything else they owe. And you can add an internal note or assign the account to a specific person, so the next reminder goes out with full context instead of restarting the conversation. These controls are what keep automation from feeling robotic to the customers you most want to keep.
Escalate from reminders to real collections
When the automated ladder is exhausted and an account is still unpaid, it needs a person, not another email. Use the follow-up report to pull a clean statement of account for the customer, assign the account to a collector with a scheduled activity so the phone call is not forgotten, and let the final follow-up level print the formal notice that signals you are serious. The point of the earlier automation is exactly this: it clears the 80 percent of invoices that only needed a nudge, so your people spend their time on the 20 percent that actually need a conversation, a payment plan, or a decision about outside help.
Measure it: aged receivables and DSO
A collections process you do not measure will quietly drift back to manual. Odoo gives you two numbers to watch. The Aged Receivable report buckets every open invoice by how late it is, so you can see the shape of your debt at a glance and spot the accounts sliding into the 90-plus column. Days sales outstanding, the average time it takes to get paid, is the single figure that tells you whether the whole system is working: as consistent follow-ups take hold, DSO should fall and stay down. Put both in front of whoever owns cash flow every month, because consistency is what moves the number, and the only way to stay consistent is to see when you are slipping.
When native dunning is not enough
Odoo's follow-up engine covers most small and mid-sized collections cleanly, and for a lot of businesses turning it on properly is the entire fix. Some need more: auto-charging a saved card on the due date, dunning rules that differ by customer segment or currency, SMS and customer-portal reminders alongside email, or a sync to a dedicated collections platform. None of these replace the follow-up engine; they extend it, and they are where a custom automation earns its keep. If your receivables are big enough that a few days of DSO is real money, that is the point to bring in help, and the right plan and scope is a short conversation rather than a guess.
