Odoo Accounting Configuration: A Step-by-Step Guide to Localization, Chart of Accounts, Taxes, Fiscal Positions, and Journals
Most Odoo accounting problems trace back to one thing: the setup steps were done in the wrong order. Odoo's accounting module is genuinely capable, with invoicing, bank reconciliation, multi-currency, tax handling, and financial reporting out of the box, but almost every accounting problem we get called in to fix comes from a configuration step that was skipped before anyone touched a transaction.
This guide walks through the configuration in the order it should be done. For each step you get the menu path, what Odoo does internally, and what you're missing if you skip it. We use a US-based company as the example throughout, and the menu names are from Odoo 17 and 18, so check them against the version you run because they shift slightly between releases.
Step 1: Install the Accounting App and Set the Company Country
Where to go
- Apps → search Accounting → Install. Invoicing is the lighter version, and it also installs the accounting engine.
- Settings → General Settings → Companies → Update Info. Set the Country to United States and the Currency to USD.
Why this comes first
When the Accounting module installs, Odoo looks at the country on the company record and tries to load the matching localization package. If the country isn't set, Odoo has nothing to match, and it falls back to a generic chart of accounts. Set the country before anything else.
Step 2: Enable the Fiscal Localization Package
Odoo is built by a Belgium-based company and sold globally, so it doesn't assume any single country's accounting rules. Every company record needs a Fiscal Localization package selected, for example "United States - Accounting", before its accounting setup is actually complete. This is the step teams most often miss, because nothing in the interface forces you to complete it before you start creating journals, invoices, or migrating historical data.
Where to go
Accounting → Configuration → Settings → Fiscal Localization section → Package dropdown → select United States → Save. If your country isn't listed, click Install More Packages to see the available localization modules.
What Odoo does internally when you enable it
- Chart of accounts: creates the country-appropriate accounts (bank, receivable, payable, income, expense, equity, and so on) with the correct account types, plus account groups for reporting.
- Default accounts on the company: assigns the default receivable, payable, income, and expense accounts, and the bank, cash, and transfer account code prefixes.
- Journals: creates the standard journals (Customer Invoices, Vendor Bills, Miscellaneous Operations, Bank, Cash, Exchange Difference), each pointing to accounts from the new chart.
- Taxes and tax groups: loads the country's tax structure. For the US, rates are state- and county-specific, so expect a minimal set. Real US rates usually come from manual setup or a tax engine (see Step 5).
- Fiscal positions and tax reports: loads the country's standard fiscal positions and tax report structure where the package provides them.
What happens if you skip it
- Odoo installs a generic chart of accounts that doesn't match how a US company reports.
- Journals point to generic accounts, so entries land in accounts your accountant doesn't expect.
- Reporting tags used by tax and financial reports aren't set up, so migrated balances and reports don't map cleanly.
- The problem often only shows up later, when the trial balance doesn't tie out.
Important: switching localization after transactions exist is restricted or risky, so confirm this step before creating invoices or importing data.
A Real Configuration Issue: What Happens When You Skip It
On a recent US-based implementation, the team began configuring accounting and migrating historical financial data before enabling the US fiscal localization package. The consequences showed up fast:
- Migrated data landed in the wrong accounts. Without the localization package, Odoo hadn't auto-created the US chart of accounts or the reporting tags that data migration needed to map against, so historical balances had to be routed manually, and some of that manual mapping missed the mark.
- Reports stopped reconciling. The trial balance was the first place it surfaced. Transactions weren't posting to the accounts a standard US chart of accounts expects, so the numbers didn't tie out.
The fix was to enable the US fiscal localization package mid-project. That generated the missing chart of accounts entries, default taxes, and journals. Some accounts still needed manual configuration and remapping on top of it, because localization gets you a correct starting point, not a finished one, but once it was active, transactions began posting to the correct accounts and the reports reconciled.
Step 3: Review and Adjust the Chart of Accounts
Where to go
Accounting → Configuration → Chart of Accounts
What to do
- Review the auto-generated accounts against your accountant's reporting needs.
- Create missing accounts with New: enter the Code, Account Name, and Type.
- Check the Type of each account (Receivable, Payable, Income, Expense, Bank and Cash, and so on), because it decides where the account lands on the balance sheet or P&L.
- Archive accounts you'll never use, rather than deleting them.
What happens internally
Nothing in Odoo posts to an account by accident. Journals, products (via product categories), and fiscal positions all point at specific accounts. A wrong type or missing account here quietly affects every downstream posting.
Step 4: Configure Journals
Where to go
Accounting → Configuration → Journals → open a journal.
What to check on each journal
- Sales (Customer Invoices): default income account. Confirming an invoice debits the customer's receivable account and credits the income account.
- Purchases (Vendor Bills): default expense account. Confirming a bill debits the expense and credits the payable account.
- Bank: the linked bank account and the outstanding receipts and payments accounts. Reconciliation moves money between the bank account and the matched account.
- Cash: works like Bank, for cash transactions.
- Miscellaneous: manual entries, with no defaults.
What happens internally
Every operation (invoice, payment, bill) creates a journal entry behind the scenes. The journal decides which accounts are debited and credited. If these defaults are wrong, every transaction through that journal posts to the wrong place. That's also why a missing localization package causes so much downstream damage: the default accounts on every journal come from that package.
Version note: newer Odoo versions use a single default account per journal plus separate payment-account settings, while older versions had separate default debit and default credit fields. Match this step to what you see in your instance.
Step 5: Configure Taxes
Where to go
Accounting → Configuration → Taxes → New (or open an existing tax).
What to set
- Tax Name, Tax Type (Sales or Purchases), Tax Computation (percentage, fixed, and so on), and Amount.
- Tax Scope and Label on Invoices.
- The Distribution for Invoices and Refunds tabs, which control which tax accounts are posted to.
Then set the default taxes under Accounting → Configuration → Settings → Taxes → Default Taxes (sales and purchase).
Manual vs. automated
- Manual: works if you sell in one or two jurisdictions. You create each rate yourself.
- Automated: if you sell across multiple US states, rates vary by state, county, and city, and nexus rules change as revenue grows. Connect a tax engine like Avalara AvaTax, TaxJar, or Vertex. Check which integrations your Odoo edition supports (AvaTax is available in Enterprise), and enable it from Accounting → Configuration → Settings.
A tax engine calculates the correct rate per transaction automatically, tracks nexus exposure, and can handle exemption certificates, which takes tax accuracy off your team's plate inside Odoo.
Step 6: Set Up Fiscal Positions
A fiscal position is a rule set that automatically swaps the tax or account normally applied to a transaction, based on conditions tied to the customer or vendor: an out-of-state buyer, a tax-exempt organization, a foreign vendor, or an intercompany transaction, for example.
Where to go
Accounting → Configuration → Fiscal Positions → New.
What to do
- Give the fiscal position a name (for example, "Interstate Sale" or "Tax-Exempt Customer").
- On the Tax Mapping tab, map the original tax to the replacement tax (or to no tax).
- On the Account Mapping tab, map an original account to a replacement account if needed.
- Assign it to partners: open the customer or vendor → Sales & Purchase tab → Fiscal Position.
- Optionally turn on Detect Automatically so Odoo applies it based on country or state.
What happens internally
When you create an invoice for that partner, Odoo swaps the taxes and accounts automatically. Without fiscal positions, someone has to override taxes by hand on every invoice, and exceptions get missed.
Step 7: Test Before Going Live
- Create a test customer invoice and confirm it. Open Journal Items and check the debit and credit accounts.
- Register a payment, then reconcile a bank line.
- Create and confirm a vendor bill.
- Run the Trial Balance (Accounting → Reporting; availability depends on your edition) and check that it ties out.
- Check the tax report for the right base and tax amounts.
- Only then migrate historical data.
Quick Comparison: With vs. Without Localization
A Configuration Checklist Before You Go Live
For any Odoo accounting implementation, this is the order that avoids the rework:
- Company country and currency set.
- Fiscal localization package enabled.
- Chart of accounts reviewed and adjusted.
- Journal defaults verified.
- Taxes configured (manual or tax engine).
- Fiscal positions created and assigned.
- Test transactions posted and trial balance reconciled.
Odoo Accounting Localization: FAQ
What is a fiscal localization package in Odoo?
It is the country-specific module that sets up accounting for a company’s country, including the chart of accounts, the applicable taxes, and country-specific reports. Odoo installs the core localization automatically based on the company’s country when the Accounting app is installed, so set the country first.
Can I change the fiscal localization package after I start using Odoo Accounting?
Only if no journal entry has been posted yet. Odoo’s documentation says selecting another package is only possible if no entry has been posted, so confirm the package under Accounting > Configuration > Settings before creating invoices or importing historical data.
Does the Odoo US localization set up sales tax rates for every state?
No. US sales tax varies by state, county and city, and Odoo creates only default sales and purchase taxes. Companies selling in one or two places can create rates by hand under Accounting > Configuration > Taxes, while multi-state sellers usually connect a tax engine such as Avalara AvaTax, which Odoo integrates with for companies with US locations.
What is a fiscal position in Odoo?
A fiscal position is a rule that automatically swaps the taxes and income or expense accounts used on a transaction, for example for a tax-exempt customer or a foreign vendor. You can set one as a contact’s default on the Sales & Purchase tab, choose it manually on an order or invoice, or let Odoo apply it automatically by country or country group.
In what order should Odoo accounting be configured?
Set the company country and currency, confirm the fiscal localization package, review the chart of accounts, check journal default accounts, configure taxes, then set up fiscal positions. Post test transactions and check that the trial balance ties out before migrating historical data.
Final Thoughts
None of this is exotic. Chart of accounts, taxes, fiscal positions, and journals are standard accounting concepts. What trips up Odoo implementations is the order of operations: fiscal localization has to be right first, because the chart of accounts, default taxes, fiscal positions, and journal default accounts all inherit from it. Configure accounting in the right order, and most of this is generated correctly for you. Skip a step, and you end up rebuilding it by hand while your reports quietly stop matching.
Not sure your Odoo accounting setup is configured correctly?
Our Odoo implementation team can audit your fiscal localization, chart of accounts mapping, tax setup, and journal configuration — and fix what's off before it shows up in your next trial balance.
Talk to Our Odoo Team