Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/odoo/documentation/llms.txt

Use this file to discover all available pages before exploring further.

Odoo Expenses provides a complete end-to-end workflow for employee expense management. Employees log individual expenses — manually, by uploading a receipt, or by emailing a photo of a receipt — and then group them into expense reports for submission. Managers review and approve or refuse those reports, accountants post the approved expenses to the correct accounting journals, and finally employees are reimbursed through direct payment or via their next payslip. Every step is tracked and auditable, and approved expenses flow directly into Odoo Accounting without manual re-entry.

Expense Categories

Before employees can log expenses, the types of reimbursable expenses must be configured as expense categories (managed as products in Odoo). Default categories cover common business expenses including communication costs, meals, gifts, mileage, and general travel.

Viewing Expense Categories

Navigate to Expenses app → Configuration → Expense Categories to see all available categories. The general-purpose category EXP_GEN is available for expenses that do not fit any specific category.

Creating a New Expense Category

1

Open the new category form

Navigate to Expenses app → Configuration → Expense Categories, then click New.
2

Enter the product name

Enter a short, descriptive Product Name (for example, TOOLS or CONF_TRAVEL).
3

Set the cost

  • Leave Cost at 0.00 if employees should report the actual amount they paid. The employee enters the real expense total when logging the expense, and is reimbursed that amount.
  • Enter a fixed Cost if the expense should always be reimbursed at a set rate. For example, set 1.00 per mile for mileage reimbursements, or 125.00 per day for a per-diem category.
4

Configure taxes, account, and other settings

Assign an expense Account, applicable Taxes, and optionally configure re-invoicing rules if expenses in this category can be billed back to a customer.
5

Save the category

Click Save (or navigate away — Odoo auto-saves).
Expense categories behave like standard Odoo products. Any configuration available on a product form — units of measure, vendor details, accounting accounts — is also available on an expense category.

Logging Expenses

Before a reimbursement can be processed, each individual expense must be recorded in the database. Odoo supports four methods for creating expense records.
Open the Expenses app (which displays the My Expenses page by default), then click New. Fill in the following fields:
FieldDescription
DescriptionA concise label such as Lunch with client or Hotel for trade show.
CategoryThe expense category that most closely matches the expenditure.
Total / QuantityFor single-item expenses, enter the total paid. For fixed-rate categories (like mileage), enter the Quantity and the unit price is applied automatically.
Included TaxesAuto-populated from the category’s tax configuration.
EmployeeThe employee to be reimbursed.
Paid BySelect Employee (to reimburse) or Company.
Expense DateThe date the expense was incurred.
AccountDefaults to the category’s linked account, or 600000 Expenses if none is set.
Customer to ReinvoiceIf a customer agreed to pay for this expense, select the related Sales Order.
Analytic DistributionAssign the cost to one or more projects or departments for analytic reporting.
NotesAny supporting context or justification.
After saving, click Attach Receipt to upload the supporting document.
Multiple receipts can be attached to a single expense record. Each attachment is logged in the record’s chatter, and the paperclip icon shows a count of attached files.

Submitting an Expense Report

Once individual expenses have been logged, they must be grouped into an expense report and submitted for manager approval.

The My Expenses Dashboard

Open the Expenses app to view the My Expenses dashboard. Expenses are color-coded by status:
  • Blue textDraft (created but not yet submitted).
  • Black textSubmitted, Approved, or Refused.
A summary banner above the list shows:
  • To Submit — total value of Draft expenses.
  • Waiting Approval — total value of Submitted expenses.
  • Waiting Reimbursement — total value of Approved expenses.

Submitting Expenses

1

Select expenses to submit

On the My Expenses dashboard, tick the checkbox next to each Draft expense you want to include in the report. Only Draft expenses show the Submit button.
2

Click Submit

Click the Submit button. Odoo groups the selected expenses into an expense report and changes their status to Submitted.
To quickly select all Draft expenses, click into the search bar, choose To Submit under Filters, then tick the Employee checkbox to select all results.

Manager Approval Workflow

Only users with at least Team Approver rights in the Expenses app can process submitted expense reports. Managers access the approval queue at Expenses app → My Expenses → Expenses to Process. The Expenses to Process dashboard lists all reports with a status of Submitted. Reports in other statuses (Draft, Approved, Posted, In Payment, Paid, or Refused) are hidden by default; use the Status panel on the left to filter them in.

Approving Expenses

Click on any submitted expense report to open the detail view. The available action buttons are:
  • Approve — advances the report to Approved status.
  • Refuse — opens a dialog to enter a refusal reason, which is sent to the employee.
  • Reset — returns the report to Draft.
  • Post Journal Entries — posts directly to accounting (requires Accounting access rights).
  • Report in Next Payslip — queues the expense for reimbursement in payroll.
  • Split Expense — splits the report into separate line items.
  • Attach Receipt — adds a supporting document.
Click Approve to approve the report.
Team managers can filter the list to show only their direct reports’ expenses. Click the dropdown in the search bar and select My Team under Filters.

Refusing an Expense

Expenses can only be refused individually, not in bulk. Open the individual report from Expenses to Process, then click Refuse. Enter a reason in the popup — the reason is communicated back to the employee via the chatter.

Posting Expenses to Accounting

Once a report is Approved, an accountant (with Accountant or Adviser role in Accounting and Manager role in Expenses) must post the journal entries.
1

Filter for Approved expenses

Navigate to Expenses app → My Expenses → Expenses to Process. On the left panel, tick only the Approved checkbox to show reports ready to post.
2

Post individually or in bulk

  • Individually: Click an approved report, then click Post Journal Entries. Verify the Journal (defaults to Purchases) and Accounting Date, then click Post Expenses.
  • In bulk: Select multiple approved reports and click Post Journal Entries in the action bar.
3

Verify the posted entries

After posting, the report status changes to Posted and the journal entry is visible in the Accounting app.

Reimbursing Employees

Once an expense report is posted, the final step is to reimburse the employee. Odoo supports two reimbursement methods.
Navigate to the posted expense report and click the Register Payment button. Select the payment method — Manual Payment (Bank), Batch Deposit (Bank), Checks (Bank), or any other method configured in Expenses app → Configuration → Settings under the Payment Methods section. Confirm the payment to mark the expense as Paid.
Only expenses with Approved or Posted status can be added to a payslip. Attempting to reimburse a Draft or Submitted expense via payslip will trigger a warning.

Reinvoicing Expenses to Customers

If an expense was incurred on behalf of a customer (for example, travel costs for an on-site project), Odoo can bill the expense back to the customer through an existing Sales Order. Set the Customer to Reinvoice field on the expense record to the relevant Sales Order. After approval and posting, the expense is automatically added to the sales order and can be invoiced to the customer in the usual way.

Expense Cards

Odoo offers physical and virtual expense cards that allow for real-time expense tracking. When an employee makes a purchase with an expense card, a new expense record is created automatically — eliminating the need to manually log individual expenses after the fact.
Expense cards require both the Accounting and Invoicing apps to be installed. They operate as pre-paid debit cards connected to a company Stripe account; funds must be added to the Stripe account before employees can make purchases.

Availability

Expense cards are currently available for companies located in the following countries: Austria, Belgium, Croatia, Cyprus, Estonia, Finland, France, Germany, Greece, Ireland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Portugal, Slovakia, Slovenia, and Spain.

Fees

Odoo covers all fees associated with creating virtual and physical expense cards.

Setup Overview

1

Configure and activate the card

Navigate to Expenses app → Configuration → Settings to configure the expense card feature and activate cards for your company.
2

Create a Stripe account

A Stripe account must be created and connected to Odoo before cards can be funded.
3

Add funds

Add funds to the company’s connected Stripe account. Note that transfers typically take 2–3 business days to become available.
4

Issue cards to employees

Once funds are available, employees can be issued physical or virtual cards. Employees must have a user profile in Odoo to access confidential card details (card number, CVV, or PIN).

Expense Analysis

Navigate to Expenses app → Reporting → Expenses Analysis to view pivot and graph reports of expense data across employees, categories, departments, and time periods. Use the standard Filters, Group By, and Measures tools to build custom analyses and save them as favorites.

Build docs developers (and LLMs) love