Odoo
Invoice in Odoo the hours logged in Hilbana: one draft invoice per project, one line per task, nothing typed twice.
The Odoo integration takes the hours your team logged in Hilbana to your Odoo. In one click, Hilbana creates a draft invoice for the project’s customer, with one line per task and the hours as the quantity. You review it and confirm it in Odoo.
So the time report no longer ends in a CSV that someone types again into the invoicing software.
What it does not do, on purpose:
- It does not confirm, number or send the invoice. Issuing an invoice is a tax act, and you do it in Odoo.
- It does not create anything else in Odoo: no customers, products or projects. It only reads what you already have and creates draft invoices when you ask.
- It does not set prices. Odoo calculates the amount, taxes and discounts.
At a glance
- Odoo versions: 16 or later, on Odoo Online, Odoo.sh or installed on your servers; Community or Enterprise.
- What it creates in Odoo: one customer draft invoice each time you invoice a project.
- Which hours: finished, billable and not yet invoiced.
- Price: the Invoicing with Odoo module costs €39/month or €390/year, VAT not included.
- Requirements: a paid plan and the time tracking module.
- Who uses it: the workspace admins.
Supported versions
Hilbana works with Odoo 16 or later, in any of its forms:
- Odoo versions: 16 or later, on Odoo Online, Odoo.sh or installed on your servers; Community or Enterprise.
- What it creates in Odoo: one customer draft invoice each time you invoice a project.
- Which hours: finished, billable and not yet invoiced.
- Price: the Invoicing with Odoo module costs €39/month or €390/year, VAT not included.
- Requirements: a paid plan and the time tracking module.
- Who uses it: the workspace admins.
When you connect, Hilbana reads the version and shows it in Settings. If your Odoo is older than 16, it tells you and does not connect.
If Odoo runs on your servers, it must be reachable from the internet, because it is Hilbana’s server that talks to it. An instance that can only be reached through a VPN won’t do: Hilbana will tell you it could not reach it.
Before you start
In Hilbana
- A paid plan, with the Time tracking and Invoicing with Odoo modules. The owner subscribes to them in Settings → Billing → Modules. See Pricing and subscription.
- Being an admin of the workspace to connect, configure and invoice.
In Odoo
Get this ready before connecting. Menu names change a little from one version to another; these are the ones in recent versions.
-
The Invoicing or the Accounting app, installed. It is what lets you create customer invoices.
-
A service to invoice the hours with. In Accounting → Customers → Products → New:
- Product type: Service.
- Keep Sales ticked. Hilbana only offers products that can be sold.
- Sales price: your hourly price, for example €50.
- As the unit, pick Hours, so the invoice says “2 hours” and not “2 units”.
- Taxes: whichever apply, for example 21% VAT.
If you charge different customers different prices, create one service per price (“Development”, “Development ACME”…). See Per-customer prices.
-
Your customers, in Accounting → Customers → Customers. Hilbana offers top-level contacts, whether companies or people. It leaves out contacts that hang from a company, and those of your own users or your own company.
-
An API key. From your avatar → My profile (or Preferences) → Account Security tab → New API Key. Odoo asks for your password and shows the key only once: copy it right then.
-
Optional: analytic accounting. If you want each project’s invoiced amount to land in an analytic account, turn it on in Accounting → Configuration → Settings → Analytics → Analytic Accounting, and create the accounts you need. Without it, everything works the same.
The Odoo user you connect with must be allowed to create invoices. The cleanest option is a dedicated user with invoicing rights and nothing else.
Connect Hilbana to Odoo
In Settings → Integrations → Odoo, fill in:
| Field | What to enter |
|---|---|
| Instance URL | The address you use to open Odoo, for example https://mycompany.odoo.com. The root is enough: Hilbana drops whatever comes after it. |
| Database | The database name. On Odoo Online and Odoo.sh it usually matches the subdomain: mycompany in mycompany.odoo.com. On your own Odoo, ask whoever runs it. |
| User | Your Odoo login, the one you type to sign in. It is not always your email: on a self-hosted Odoo it is often admin. Careful, because Odoo’s sign-in screen calls it “Email” even when it is a login. |
| API key | The key you generated in Odoo. |
When you click Connect, Hilbana tests the connection before saving it: if something is off, it tells you what, and saves nothing. If it works, you’ll see Connected, the address, the database, which user and the Odoo version. For example, Odoo 20.0+e: the “+e” means the Enterprise edition, which is the one Odoo Online runs.
The API key is stored encrypted and never leaves our server again: the screen never shows it, not even masked.
What is invoiced, and to whom
Below the connection, under Invoice hours, you decide two things.
The default service
It is the Odoo service used to invoice the hours of every project that doesn’t say otherwise. You pick it from your Odoo’s list of services.
Each project: customer, service and analytic account
The Projects table has one row per project:
| Column | What it’s for |
|---|---|
| Customer | Who the project is invoiced to. Without a customer, the project can’t be invoiced. |
| Service | If this project is invoiced with a service other than the default one. Empty = the default. |
| Analytic (optional) | The Odoo analytic account the project’s invoiced amount goes to. Accounts only show up if analytic accounting is on in Odoo. |
You can also pick the customer from the project page, in the side panel, under Bill to. It is the same setting.
A Hilbana project does not become an Odoo project. What gets linked is the project and a customer, which is the only thing an invoice really needs. If you track the project in Odoo with an analytic account, that is the optional reference.
Per-customer prices
Odoo sets the amount with the service’s price. Odoo’s per-customer pricelists are not applied to invoices: Odoo only uses them in sales orders, not when an invoice is created directly.
If you charge a customer a different price, create a service with that price in Odoo (“Development ACME”, at €60/h) and pick it in the Service column of their project.
Which hours go to Odoo
Hours that meet all three conditions:
- They are finished. A running timer doesn’t count until it stops.
- They are billable. When logging time you can mark it as Internal, and then it stays out of the client report and out of any invoice.
- They haven’t been invoiced yet. Every hour sent to Odoo gets a mark and is never sent again.
The period does not rule: the queue is everything the project has left to invoice. That way, an hour someone logged late, in a month you already invoiced, isn’t lost: it goes into the next invoice on its own. If you want to invoice just one period, you can narrow it down.
Take the hours to Odoo
- Go to Time (side bar) → Client report and pick the project. With Only uninvoiced ticked, the report shows exactly what is pending.
- Click Invoice in Odoo. If the project is missing its customer or service, instead of the button you’ll see a notice and a link to complete it.
- In the dialog you review:
- the customer and the service it will be invoiced with;
- the lines: one per task, with its identifier, title and hours. You can untick the ones you don’t want to invoice yet;
- Only the report’s period, to keep only the hours in the chosen period;
- the total hours and how many time entries will be marked;
- an estimated amount, without taxes, worked out with the service’s price. It is only a guide: Odoo calculates the final one.
- Click Create draft. Nothing is written to Odoo until then: Cancel leaves no trace.
- Hilbana confirms how many hours were invoiced and gives you the Open the invoice in Odoo link.
Then, in Odoo, review the draft, confirm it (that’s when it gets its number) and send it as you always do.
What reaches Odoo
A customer draft invoice with:
| On the invoice | What it carries |
|---|---|
| Customer | The project’s. |
| Reference | hilbana: followed by a code. It lets Hilbana recognise the invoice and never create it twice. |
| Lines | One per task. The description is the task’s identifier and title: WEB-42 · Contact form. |
| Product | The project’s service or, if it has none, the default service. |
| Quantity | That task’s hours, with two decimals and no rounding: 90 minutes is 1.50 and 100 minutes, 1.67. |
| Price and taxes | Set by Odoo: the service’s sales price and whatever taxes apply. Hilbana sends no price. |
| Analytic | If the project has one, 100% of each line goes to that account. |
For example, a project with two tasks invoiced with a €50/h service and 21% VAT:
| Product | Description | Quantity | Price | Amount |
|---|---|---|---|---|
| Development | WEB-42 · Contact form | 2.00 | 50.00 | €100.00 |
| Development | WEB-45 · Mobile menu tweaks | 1.50 | 50.00 | €75.00 |
| Untaxed | €175.00 | |||
| VAT 21% | €36.75 | |||
| Total | €211.75 |
Hours already invoiced
- In the time report and on each task page, an invoiced hour carries the Invoiced label with the invoice number. If the draft has no number yet, it just says Invoiced.
- It can’t be edited or deleted. The invoice already went out with that quantity; if something was wrong, fix it on the invoice, in Odoo.
- Unmark. If you delete an invoice in Odoo, Hilbana doesn’t find out. An admin can unmark those hours so they go back to the queue. It is recorded in the audit log.
When something goes wrong
The same hours are never invoiced twice. Hours are reserved before talking to Odoo,
and the invoice carries its hilbana:… reference.
- Odoo rejects the invoice, for example because the customer or the service no longer exists. Nothing is created, no hour gets marked and Hilbana tells you what happened, along with Odoo’s answer.
- The connection drops halfway. The invoice may or may not have been created. The hours stay reserved with the Being invoiced label. When you open the dialog again you’ll see Resolve: Hilbana looks the invoice up in Odoo by its reference. If it exists, it links it; if not, it creates it. Either way you never end up with two invoices.
The messages you may see when connecting or invoicing:
| Message | What to check |
|---|---|
| Odoo refused access | The database, the user (the login, not always the email) and the API key. |
| Hilbana could not reach your Odoo | That the URL is right and, if Odoo runs on your servers, that it is reachable from the internet. |
| That URL answers, but it does not look like an Odoo | That it is the root of the instance (https://mycompany.odoo.com), not an inner page. |
| Your Odoo is older than version 16 | Hilbana needs Odoo 16 or later. |
| The Odoo user is not allowed to do this | Give the user rights to create invoices. |
| The linked customer, service or analytic account no longer exists | It was deleted or archived in Odoo: pick it again in Settings → Integrations. |
Changing the connection
The connection has a Disconnect button that deletes the stored API key. The default service, each project’s customer and the invoiced hours are kept. What happens when you connect again depends on what you connect to:
- The same Odoo, with another API key or another user. Disconnect and connect again with the new details. Everything is kept.
- You upgraded Odoo, for example from 17 to 18. If the URL and the database stay the same, as happens on Odoo Online and Odoo.sh, everything is kept. If either one changes, Hilbana can’t tell it is the same Odoo and treats it as the next case.
- Another Odoo or another database: from test to production, a new instance, another company. When you connect, Hilbana clears the default service and each project’s customer and service, because they belonged to the previous Odoo. In the new one, the same customer may be a different one, and the invoice would be issued in their name. You’ll have to pick them again before invoicing. If an invoice was half-created because of a connection drop, its hours go back to the queue: check in the previous Odoo whether it was created.
- Hours already invoiced. Their invoices stay in the Odoo where they were created, and the hours stay marked, so they are not invoiced again in the new one.
Security
- The API key is stored encrypted and never leaves our server again.
- Hilbana only reads customers, services and analytic accounts, and only creates draft invoices when an admin clicks Create draft. It never confirms, sends or deletes anything in Odoo.
- To cut access at any time, revoke the API key in Odoo, on the same screen where you created it. Or click Disconnect in Hilbana.
- Everything is done by the workspace admins: other members neither see the settings nor can invoice.
Pricing and subscription
Invoicing with Odoo is a module: it is bought on top of the plan, for €39/month or €390/year, VAT not included.
- The workspace owner subscribes in Settings → Billing → Modules, or by ticking it when subscribing to the plan, in the same payment.
- It requires a paid plan and the Time tracking module: without logged hours there is nothing to invoice. If you don’t have Time tracking, it’s added for you when you subscribe to Odoo, in the same operation.
- If the plan starts with free trial days, Odoo and Time tracking bought with it are free during the trial too.
- A workspace invoices in one place only: with one invoicing module active, no other is offered.
- If you cancel Time tracking, the Odoo integration is cancelled with it, at the end of the period. The cancellation notice tells you before you confirm.
- Cancelling deletes nothing: the hours and their invoiced marks stay in Hilbana, and the invoices, in Odoo.
FAQ
Can I invoice one project to several customers? No: each project has one customer. If you work for several customers, the natural setup is one project per customer.
Can several projects go into a single invoice? No: each time you invoice, one invoice per project is created.
Why isn’t the pricelist I have for this customer in Odoo applied? Because Odoo only applies pricelists in sales orders, not in invoices. Use a service with that price for their project. See Per-customer prices.
Does Hilbana round hours to quarter-hours? No. It sends the exact hours with two decimals. If you want to round, do it on the draft, in Odoo.
What if someone logs hours on a project after it was invoiced? They stay in the “uninvoiced” queue and go into the next invoice.
Can agents invoice? No. Agents connected through MCP log time like anyone else, but invoicing is done by an admin from the app.
Related: Time tracking · Project report · Billing and plans · Audit log · Security.