Anyone who’s migrated from QuickBooks or Xero to Odoo in the United States has probably noticed the terminology gap. European accounting frameworks use “Revenue” where Americans say “Income.” They call it “Cost of Revenue” instead of “Cost of Sales.” The bottom line is “Net Profit” rather than “Net Income.” It sounds cosmetic, but when your CFO or auditor opens a report and sees unfamiliar labels, it creates friction — and in accounting, friction breeds errors.
Odoo has now fixed this with a properly mapped Profit and Loss statement for the US localization. The underlying math hasn’t changed. What has changed is that every line item now uses the terminology that American accountants, bookkeepers, and the IRS expect to see.
The Full Terminology Mapping
The changes run through the entire income statement structure. Here’s what shifted:
| Generic Label | US GAAP Label |
|---|---|
| Revenue | Income |
| Less Costs of Revenue | Cost of Sales |
| Gross Profit | Gross Profit |
| Less Operating Expenses | Expense |
| Operating Income (or Loss) | Net Operating Income |
| Plus Other Income | Other Income |
| Less Other Expenses | Other Expense |
| (subtotal) | Net Other Income |
| Net Profit | Net Income |
Two sections from the European framework are gone entirely: “Less Allocations and Plus Withdrawals” and “Net Profit Left After Allocations and Withdrawals.” Under GAAP standards as defined by the Financial Accounting Standards Board (FASB), the P&L statement summarizes operating performance only. Profit appropriation is a separate concern and doesn’t belong on the income statement.
Cleaner Configuration Verification
Alongside the P&L changes, Odoo has reworked how the US localization confirms its own setup. Instead of checking for an abstract “chart template,” the system now looks at the Package field in Accounting Settings. If it shows “United States,” the base localization is active. It’s a small change, but it makes the initial configuration check more intuitive, especially for people setting up their first Odoo database.

Nine Optional Modules for the Full Stack
The US localization isn’t just one module. The base l10n_uspackage gives you the GAAP chart of accounts and the remapped P&L. But there are eight more modules that extend the system into specific American accounting workflows:
- US Accounting Reports— adds the Check Register and other US-specific report layouts
- US Checks Layout— prints checks in Quicken, Peachtree, and ADP-compatible formats with configurable margins and multi-page stubs
- NACHA Payments— generates ACH batch payment files with CCD and PPD entry class codes
- 1099 Reporting— exports contractor payment data to CSV for IRS filing
- AvaTax Integration— connects to Avalara’s cloud tax engine for real-time, jurisdiction-specific sales tax calculations
- US Payroll— handles federal and state tax withholding, W-2 and W-4 forms, and pay schedules from annual to daily frequency
- US Payroll with Accounting— bridges payroll transactions into the general ledger
- Payroll Export to ADP— generates CSV files for companies using ADP as their payroll processor
The GAAP Chart of Accounts Underneath
The P&L relabeling sits on top of a chart of accounts that follows GAAP’s seven-category structure: Receivable (prefix 1), Payable (2), Equity (3 and 9), Assets (1), Liability (2), Income (4 and 6), and Expenses (6). Several accounts are locked and cannot be deleted — Bank Suspense, Outstanding Receipts, Outstanding Payments, Stock Valuation accounts, Foreign Exchange Gain/Loss, and Undistributed Profits — because they’re wired into Odoo’s core accounting logic.
For publicly traded companies subject to SEC reporting requirements, the account structure supports the level of granularity that regulatory filings demand. For small businesses, the same chart works out of the box without requiring someone to understand why there are separate accounts for cash difference gains and stock interim deliveries.
Cash Flow Gets the Direct Method
The Cash Flow Statement uses the direct method, which measures actual cash movements rather than working backward from accrual figures. It pulls exclusively from Bank and Cash journals, grouped into Operating Activities, Financing Activities, and Investing & Extraordinary Activities. Accounts Receivable and Accounts Payable activity is excluded until cash actually moves — which is exactly how the direct method is supposed to work, but something that plenty of accounting software gets wrong.
ISO 20022 with an American Accent
One detail worth noting: Odoo now distinguishes between global ISO 20022 and US ISO 20022 payment standards. The global version uses IBAN numbers and SEPA credit transfer conventions. The US version uses ABA routing numbers and follows rules set by the Federal Reserve, The Clearing House, and NACHA. Both standards are available in the same bank journal, and the recommendation is straightforward — use US ISO 20022 for domestic transfers and the global version for international ones.
Why This Matters
The P&L terminology change sounds like a small thing, but it’s the kind of detail that signals maturity in a localization. When an American CPA opens the Profit and Loss report and sees “Net Income” instead of “Net Profit,” they don’t have to mentally translate. When they see “Cost of Sales” instead of “Cost of Revenue,” it matches their training, their other clients’ systems, and the IRS forms they file every quarter.
Combined with the check printing, NACHA batch payments, 1099 exports, AvaTax integration, and now a properly structured income statement, Odoo’s US localization is no longer a European accounting system wearing an American costume. It’s starting to feel native.