Odoo automation · runs weekly
Chase overdue Odoo customer invoices
Every Monday someone opens the Odoo invoices list, works out which posted invoices are past due, and resends them one by one, often from a spreadsheet of who was already nudged.
Cotlet does it in your own Odoo account with list_invoices, get_invoice and send_invoice, called by your AI agent, an n8n workflow or a script.
Hosted · nothing to install or maintain
Can Odoo do this on its own?
Odoo has follow-up levels and the Send button for this job inside the app (checked 14 Oct 2026), so there is no gap in the app itself. The gap is outside it: the external API is Custom-plan only on Odoo Online, and the development-version MCP server has no tool that sends an invoice. A scheduled agent run that picks the overdue invoices and resends them needs one of those routes.
How you do it in Odoo today
- Open Accounting > Customers > Invoices and find the unpaid ones; Odoo's Aged Receivable report (Accounting > Reporting > Aged Receivable) shows outstanding customer invoices with their due dates.
- Open an overdue invoice and click Send. In the Send window, choose the sending method (Email or Download); a customer's preferred sending method set on the contact is selected by default.
- If follow-up levels are set up, Odoo bundles its follow-up actions by how many days an invoice is overdue, and with several overdue invoices the actions apply to the most overdue one.
- Repeat for every overdue invoice, then check next week which of them turned Paid.
How to chase overdue Odoo customer invoices
List the customer invoices in Odoo that are posted, unpaid and past their due date. For each one older than 14 days, resend the invoice by email and give me a list of what you sent, sorted by amount. - 01
Pull the unpaid invoices
The agent calls list_invoices with status posted, payment_status not_paid and overdue true, so drafts and already paid invoices never enter the list. It pages with offset until the list is empty.
- 02
Apply your age rule
Each invoice is compared with the cut-off in your prompt, for example more than 14 days past the due date. Younger ones are left alone and listed as "not yet due for a nudge".
- 03
Check the contact
For each invoice the agent calls get_invoice and reads the contact email. An invoice whose contact has no email address is skipped and reported, because there is nobody to send to.
- 04
Resend with your OK
send_invoice runs once per invoice and reaches your customer, so each call waits for your OK until you switch confirmation off for send_invoice. The agent never changes the invoice itself.
- 05
Report the list
The agent returns what it sent, what it skipped and why, sorted by amount, so you can phone the largest accounts yourself.
What you get back
Overdue and unpaid: 9 invoices, total 14,820.00 EUR
Resent by email: 6 (older than 14 days)
- INV/2026/00412 Northwind Studio, 3,200.00 EUR, 31 days late
- INV/2026/00398 Harbor Print, 2,150.00 EUR, 22 days late
Skipped: 3 (2 under 14 days late, 1 contact without an email) Other ways to ask
- Every Friday, list invoices more than 30 days overdue and only report them, do not send anything.
- Resend overdue invoices only for contacts in the Retail tag, and leave Wholesale to me.
- Show me the five largest overdue invoices with the date each was last sent.
What Odoo allows, and what to know first
- Odoo marks an invoice Posted when you click Confirm and assigns it a unique number from a sequence, so only posted invoices can be sent.
- The Send window in Odoo offers Email and Download, and a customer's preferred sending method is selected by default.
- Odoo's Aged Receivable report lists outstanding customer invoices with their due dates and lives under Accounting > Reporting.
- Odoo bundles its follow-up actions into follow-up levels that trigger by how many days an invoice is overdue.
send_invoice asks for your OK by default. To run it weekly without you, switch confirmation off for that tool in your dashboard.
Sources: Odoo documentation: Customer invoices · Odoo documentation: External API · Odoo documentation: Available MCP tools
Call send_invoice from a script
curl -X POST https://cotlet.dev/api/v1/odoo/invoices/4182/send-invoice \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"method":"email"}' {
"invoice_id": 4182,
"number": "INV/2026/00412",
"method": "email",
"sent_to": "billing@northwind.example",
"status": "posted"
} MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is odoo_write → send_invoice. Example data.
Schedule it in n8n, Make, Zapier or cronOdoo tools this automation uses
| Tool | Parameters |
|---|---|
| list_invoices | status, payment_status, overdue, contact_id, invoice_date_from, limit, offset |
| get_invoice | invoice_id, number |
| send_invoice | invoice_id, method |
Frequently asked questions
Is it safe to connect Odoo to Cotlet?
Yes. You sign in to Odoo yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Odoo once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.
Give your agent access to Odoo.
Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Odoo.