Odoo Accounting includes a full set of standard financial reports plus a configurable report engine for custom layouts. This guide covers how to generate the standard reports, customize them, and build a CFO-ready reporting workflow.
Standard financial reports#
Navigate to Accounting → Reporting to find the built-in reports. The most commonly used:
| Report | Path | Description |
|---|---|---|
| Profit and Loss | Reporting → Profit and Loss | Income minus expenses by account group |
| Balance Sheet | Reporting → Balance Sheet | Assets, liabilities, and equity at a date |
| Cash Flow Statement | Reporting → Cash Flow Statement | Operating, investing, financing activities |
| Executive Summary | Reporting → Executive Summary | KPI dashboard with key ratios |
| Aged Receivable | Reporting → Aged Receivable | Customer balances by aging bucket |
| Aged Payable | Reporting → Aged Payable | Vendor balances by aging bucket |
| Tax Report | Reporting → Tax Report | VAT/GST balances by tax code |
Profit & Loss report#
Open Accounting → Reporting → Profit and Loss. The report shows revenue and expense accounts grouped into sections defined by your Account Groups configuration.
Date range and comparison#
Use the date picker at the top to set the reporting period. Click Comparison to add a prior period column:
- Previous Period (e.g., prior month for a monthly P&L)
- Same Period Last Year (year-over-year comparison)
- Custom Date Range (compare any two periods)
The comparison column shows both absolute and percentage variance.
Filtering by journal#
By default, the P&L includes all posted journal entries. Use the Journals filter to restrict to specific journals (e.g., exclude the depreciation journal for a pre-depreciation view, or include only the Sales and Purchase journals for a quick trading P&L).
Drill-down#
Click any line amount to drill into the individual journal entries contributing to that balance. The drill-down view shows the move lines with document references, allowing you to investigate unexpected balances without leaving the report.
Balance Sheet#
Open Accounting → Reporting → Balance Sheet. Like the P&L, it uses account groups to organize assets, liabilities, and equity.
Key setup requirement: For the balance sheet to balance (Assets = Liabilities + Equity), your account groups must be configured correctly. The retained earnings account must be mapped in Accounting → Configuration → Settings → Default Accounts → Retained Earnings. Odoo calculates net income as a computed equity component from the P&L - it does not require a year-end close entry to post net income to retained earnings.
Multi-company consolidation#
If your database has multiple companies and you have the Consolidation feature (Enterprise), the Balance Sheet filter includes a Companies selector. Select multiple companies to see a consolidated balance sheet with intercompany elimination lines.
Cash Flow Statement#
Accounting → Reporting → Cash Flow Statement generates an indirect-method cash flow statement: starts with net income, then adjusts for non-cash items and working capital changes.
The cash flow statement requires correct Cash Flow Tags on each account. These tags classify accounts as:
- Operating Activities (trade receivables, payables, inventory)
- Investing Activities (fixed asset purchases and sales)
- Financing Activities (loans, equity)
Review your account configuration under Accounting → Configuration → Chart of Accounts and verify each account has the correct cash flow tag. Accounts without a tag are excluded from the statement, which causes the statement to not reconcile to the change in cash.
Custom report configuration#
The report engine is extensible. From Accounting → Configuration → Financial Reports, you can create or modify report templates.
A custom report template defines:
- Lines: each line has a name, expression, and grouping logic
- Formulas: reference account balance functions (
sum(account_id.balance),count_entries()) - Domain: filter by account type, journal, or custom domain
- Hierarchy: indent levels for summary/detail layout
This is the mechanism behind all the standard reports - they are all defined as report templates in the system, which you can inspect and copy as a starting point for custom layouts.
Common custom report use cases#
- Department P&L using analytic account filters to show profitability by cost center
- Project profitability combining revenue and timesheet cost by project
- Budget vs actual by adding budget lines alongside actual balance expressions
- Rolling 12-month view using date range formulas that reference the current date minus 12 months
Locking periods and audit trail#
After month-end review, lock the accounting period to prevent retroactive adjustments. Navigate to Accounting → Accounting → Lock Dates:
- Lock Date for Non-Advisors - prevents regular users from posting in locked periods
- Lock Date for Advisors - harder lock that requires the Accounting Advisor role to override
An audit trail of every journal entry modification is available in Accounting → Reporting → Audit Reports → Journal Audit. This report shows who created or modified each entry and when.
Exporting reports#
Each financial report has an Export button in the toolbar:
- PDF - formatted report via the browser print/PDF dialog
- XLSX - Excel file with account totals (no formulas - use for presentation, not for further calculation)
For Excel-based reporting that updates from live Odoo data, use the Spreadsheet feature (Enterprise): Accounting → Reporting → Spreadsheet to create a spreadsheet with live pivot tables connected to Odoo data.
CFO dashboard via Accounting Overview#
Accounting → Overview is the default landing page for accountants. It shows:
- Bank and cash balances
- Bills and invoices due today vs this week vs overdue
- Expense reports awaiting approval
- Recent journal entries with anomaly highlighting
For a CFO-level dashboard with revenue trends, receivable aging, and cash runway, install the Dashboards app and use the pre-built Accounting KPI tiles or build a custom layout using the available Odoo data sources.
Common reporting mistakes#
- P&L not matching expectations: Check that all expense accounts have the correct account type (Expense, not Asset). Misclassified accounts appear in the wrong report section.
- Balance sheet not balancing: Usually caused by a missing cash flow tag or an account incorrectly classified between balance sheet and income statement types.
- Comparison not showing: The comparison feature requires that the prior period also has a fiscal year defined. Check Accounting → Configuration → Fiscal Years.
- Cash flow statement showing zero: All accounts have no cash flow tag set. Add tags starting with the cash/bank accounts (mark as Operating Activities) and work outward.
Ask ERPeek to explain specific line items in your Odoo financial reports - "Why is the trade receivables balance different from the aged receivable report total?" or "Which journal entries contributed to the unexpected expense balance in account 6100?"

