Key Takeaways: An Invoice Chaser agent works best when tone and escalation rules are configured before deployment, not adjusted after the first complaint. Human approval is not a bottleneck for most reminders — only final notices before legal action warrant it. In the first month, the biggest gain is not collection rate; it’s consistency: every overdue invoice gets touched, on schedule, with the right message. The agent finds its limits quickly: disputed invoices, long-term clients needing a phone call, and amounts below the cost-of-chasing threshold all require human judgment it doesn’t have.
A collections workflow run by a finance team of three people looks like this: someone opens the aged receivables report on Monday, flags invoices past 30 days, drafts reminder emails one by one from memory or a saved template, and hopes the follow-up happens before Friday. When it doesn’t — and it often doesn’t, because month-end closes and payroll runs take priority — another week passes. The invoice is now 45 days overdue. The customer has forgotten it too.
The Invoice Chaser agent doesn’t fix the relationship problem. It fixes the consistency problem. Every overdue invoice gets a message, on schedule, with tone calibrated to days overdue and amount outstanding. That alone changes collection dynamics.
What the Agent Actually Does
The agent runs on a cron schedule — typically daily at 08:00 — and queries account.move for posted invoices where payment_state is not paid and invoice_date_due is in the past. It groups results by res.partner, calculates days overdue and total outstanding amount per customer, and applies escalation rules to decide what action to take.
The output is not a sent email. It’s a set of proposed actions dropped into an approval queue. For most reminders, that queue is auto-approved — the agent sends without human review. For final notices, a finance team member sees the draft before it goes out.
Three things get configured before the agent runs its first cycle: tone thresholds, escalation rules, and channel selection. Getting these wrong produces either an agent that pesters customers over €50 invoices or one that stays polite with a customer three months past due.
Tone Configuration: Polite to Firm
The agent uses three tone levels, each mapped to a mail.template in Odoo:
- Reminder — used for invoices 1–14 days overdue. Friendly, assumes an oversight. Subject line: “Friendly reminder: Invoice [ref] due [date].”
- Follow-up — 15–45 days overdue. Direct, references the previous reminder, asks for a payment date. No apology, no threats.
- Final notice — over 45 days, above a configurable amount threshold (we typically set this at €500 for SMEs). States the consequence clearly: credit hold, escalation to collections, or legal action depending on what the client has agreed to.
The tone levels are not just copy changes. Each template uses different mail.template fields — sender, reply-to, and cc — to reflect the escalation. A Reminder goes from the account manager’s email address. A Final Notice goes from the finance director.
One thing worth stating plainly: the templates need to be written by a human who knows the business. The agent sends them verbatim. If the Final Notice template says “we may be forced to take legal action” and the company has no intention of pursuing legal action against this particular customer, the agent will send that anyway. Template governance matters.
Escalation Rules: Days and Amounts Together
Days overdue alone is a poor escalation trigger. A €40 invoice at 60 days overdue costs more to chase than to write off. A €40,000 invoice at 12 days overdue deserves more attention than the default Reminder suggests.
The escalation matrix has two axes:
| Days Overdue | Amount < €500 | Amount €500–5,000 | Amount > €5,000 |
|---|---|---|---|
| 1–14 | Reminder | Reminder | Reminder + internal alert |
| 15–45 | Follow-up | Follow-up | Follow-up + internal alert |
| 46–90 | Archive (below cost to chase) | Final Notice (auto-approve) | Final Notice (human approval) |
| 90+ | Archive | Escalate to manager | Escalate to manager + legal flag |
The “internal alert” is a note posted to the customer’s chatter in Odoo, visible to the account manager. It’s not a customer-facing email — it’s a heads-up that this invoice is aging and may need a phone call.
The “archive” action deserves comment. Invoices below €500 at 46+ days with no payment signal are unlikely to be collected by email. The agent marks them as reviewed and stops chasing. A human still needs to decide whether to write them off or pursue them through another channel — the agent just stops burning effort on them.
Channel Selection: When Not to Send an Email
Email is the default channel for every reminder. But the agent checks two conditions before sending:
- Does the customer have a valid email on
res.partner? If not, the action becomes an internal task assigned to the account manager. - Has this customer explicitly requested invoice communication by phone or portal? This is stored as a custom field on
res.partner.category— a tag applied during onboarding for customers who have raised this preference.
For Vietnamese customers specifically, we added a third check: is the invoice a VAT invoice (l10n_vn_edi_* fields populated) that may require the customer to match it against their own records before payment? For these, the Reminder tone includes a line asking the customer to confirm receipt of the corresponding hóa đơn GTGT before the payment deadline. This sounds minor. In practice, it eliminates the most common reason Vietnamese B2B customers give for delayed payment: “We haven’t registered your invoice in our system yet.”
Human Approval for Final Notices
The human approval step is deliberately narrow. It only triggers for:
- Final Notices above the amount threshold (configurable, default €500)
- Any customer tagged as a key account in
res.partner.category - Invoices with an open dispute flag on
account.move(custom field)
Everything else auto-approves. The approval interface is a simple Odoo form view: the proposed email on the left, an approve/modify/skip action on the right. A finance team member typically clears the queue in under five minutes.
The approve/modify path is important. The agent often gets the action right but the tone slightly wrong for a specific customer. The human reviewer can edit the email body before sending without breaking the agent’s record of the action taken. The audit trail logs both the original proposed text and the final sent text.
What the approval step is not: a mechanism for second-guessing the escalation rules. If the rules say Final Notice for a €2,000 invoice at 60 days overdue, the reviewer’s job is to approve or modify that specific email — not to decide whether a Final Notice is appropriate. If they find themselves skipping Final Notices because the rules are too aggressive, that’s a signal to adjust the escalation matrix, not to keep manually overriding.
First Month Results
The collection rate improvement in month one is real but modest — typically 5–10 percentage points on invoices in the Reminder and Follow-up tiers. The bigger gain is elsewhere.
Consistency. Before the agent, the finance team chased invoices when they had time. After, every invoice on the schedule gets touched. In the first month on one deployment, the agent sent 143 reminders that would not have been sent under the manual process — not because the team was negligent, but because the manual process had no reliable way to track which invoices had been contacted and when.
Response rate on Reminders. Polite first reminders sent within 48 hours of the due date have a meaningfully higher response rate than the same reminder sent at day 10 or 14. The agent’s timing discipline — it runs at 08:00 daily, catches invoices the morning after they become overdue — makes a measurable difference here. This is the one result that consistently surprises finance teams when they see the data.
Disputed invoices surfaced faster. The agent’s actions generate replies. Customer objections, dispute notifications, and payment confirmations all land in the inbox and get flagged. In manual processes, disputed invoices often sit in a grey zone because no one sent a reminder that triggered a response. The agent makes disputes visible within days of the invoice going overdue, rather than weeks.
What didn’t improve: collection on invoices above 90 days. The agent escalates these to the manager queue, but the underlying issue — a damaged relationship, a disputed delivery, or a customer in financial difficulty — doesn’t respond to email. The agent correctly identifies these as requiring human intervention. It just can’t perform that intervention.
Lessons Worth Taking
Three things hold across every deployment:
Configure the escalation matrix before go-live, not during. The pressure to launch often leads teams to start with a single tone and “tune it later.” The result is a first month of incorrect messages that damage customer relationships and require manual cleanup.
Write the templates as if a human wrote them. The agent sends whatever is in the template. If the template reads like it was written by a bot, customers notice — and the polite first reminder loses its warmth. The Final Notice loses its credibility. Have someone in the finance team write the first draft; the agent will carry it faithfully.
The approval queue only works if it stays small. If the volume of human-approval items grows beyond what the team can clear in a sitting, they start skipping approvals or approving without reading. Calibrate the approval threshold so the queue stays under 10 items per day. Everything else should auto-approve.
At Trobz, we deploy the Invoice Chaser agent as part of the Odoo AI AgentAn AI system that autonomously perceives its environment, reasons about goals, and takes actions to achieve them — often through multiple steps and tool calls. Unlike a simple chatbot, an agent can… suite — if you’re looking at collections automation and want to talk through what the escalation rules should look like for your customer base, get in touch.