Overview of the expense process#
The expense process in Odoo follows four steps:
- Employee submits an expense (individual or batch)
- Manager approves the expense report
- Accounting posts the journal entries and confirms the expense report
- Employee is reimbursed - either via payslip or direct bank payment
Each step involves a different role and a different part of the system.
Step 1: Submitting an expense#
Employees submit expenses from Expenses → My Expenses → New. The mobile app is also supported - employees can photograph a receipt and Odoo will extract the amount using OCR (Enterprise feature).
Required fields on an expense#
- Expense Category: selects the correct account (Meals & Entertainment, Travel, Office Supplies, etc.)
- Total: the amount paid
- Date: the expense date (not submission date)
- Paid By: either "Employee (to reimburse)" or "Company" (if paid by corporate card)
If Paid By = Company, the expense appears in accounting as already paid and the employee does not need reimbursement. Only expenses where the employee paid out of pocket appear in the reimbursement flow.
Creating an expense report#
Individual expenses must be grouped into an expense report before submission. Click Create Expense Report from the expense list. Name the report (e.g., "London Trip – April 2026") and submit.
Step 2: Manager approval#
The employee's manager (set on the employee form under Work Information → Manager) receives a notification when an expense report is submitted.
The manager navigates to Expenses → Managers → Expense Reports to see pending reports. For each report, the manager can:
- Approve - moves the report to "Approved" state and notifies accounting
- Refuse - requires a reason; the employee is notified and can correct and resubmit
Step 3: Accounting posts the entries#
An accounting user navigates to Expenses → Accountants → Expense Reports and opens approved reports.
Click Post Journal Entries to create the accounting entries:
| Entry | Debit | Credit |
|---|---|---|
| Expense account (e.g., Travel Expenses) | Amount | |
| Employee payable account | Amount |
The employee payable account tracks what the company owes the employee - typically a specific liability account per employee or a general "Employee Advances and Expenses" account.
Step 4: Reimbursement#
After journal entries are posted, the finance team pays the employee. Odoo offers two methods:
Direct bank payment#
From the posted expense report, click Register Payment. This creates a vendor payment (the employee is treated as a vendor for this purpose) and generates a payment journal entry that clears the employee payable account.
If the employee's bank account is set up under their employee record (Private Information → Bank Account), the SEPA or ACH payment file can be generated automatically.
Reimbursement via payslip#
In setups using Odoo Payroll, expenses can be included in the employee's next payslip. On the expense report, enable Reimburse via Payslip. The amount appears as an input on the payslip and is paid along with salary.
This is common in companies where policy requires all reimbursements to go through payroll for tax and reporting purposes.
Expense categories and accounts#
Expense categories (Expenses → Configuration → Expense Categories) define:
- The GL account for the expense
- Whether re-billing to a customer is allowed (useful for consulting firms)
- Whether the expense requires product-level tracking
Configure categories before employees start submitting expenses. Using the wrong category maps expenses to the wrong account, requiring manual journal corrections.
Useful tips#
- Analytic accounting: Each expense line can carry an analytic account or project, enabling cost tracking per project or department.
- Multi-currency: Employees can submit expenses in foreign currencies. Odoo converts to the company currency using the rate on the expense date.
- Expense policy enforcement: Odoo does not enforce spending limits automatically. For that, use the Budget module combined with analytics accounts on expense categories.

