All posts
General6 min read

How employee expenses and reimbursements work in Odoo

Odoo's Expenses module covers the full cycle from expense submission to reimbursement - employees submit receipts on their phones, managers approve, and accounting posts the entries automatically. This guide walks through each step and explains what happens in the background.

Overview of the expense process#

The expense process in Odoo follows four steps:

  1. Employee submits an expense (individual or batch)
  2. Manager approves the expense report
  3. Accounting posts the journal entries and confirms the expense report
  4. 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:

EntryDebitCredit
Expense account (e.g., Travel Expenses)Amount
Employee payable accountAmount

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.

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free