Home / Blogs & Insights / Odoo Multi-Currency Accounting Guide

Odoo Multi-Currency Accounting Guide

Odoo Multi-Currency Accounting Complete Setup Guide

Table of Contents

Businesses that sell, buy, or hold bank balances in multiple currencies need more than a currency dropdown on invoices. In Odoo Accounting, multi-currency setup affects the company currency, active foreign currencies, exchange rates, journal configuration, bank accounts, invoice and payment flows, reconciliation, and exchange gain/loss entries.

Odoo supports foreign-currency invoices, bills, payments, and bank accounts when the required accounting settings and journal configuration are in place. Correct exchange difference treatment depends on reconciliation status, rate configuration, and finance review at period close.

Exchange-rate treatment, realized gains/losses, month-end revaluation, tax reporting, and statutory reporting should be reviewed with your accountant or finance advisor before go-live.

This guide is useful for

Businesses selling internationally in multiple currencies
Finance teams issuing foreign-currency invoices
Purchasing teams receiving vendor bills in foreign currencies
Companies maintaining foreign-currency bank accounts
Odoo admins configuring Accounting multi-currency settings
Finance teams reviewing exchange differences and month-end FX entries

Coverage

What Odoo Multi-Currency Accounting Covers

Odoo Accounting’s multi-currency functionality covers the full transaction cycle – from activating currencies and managing rates, through foreign-currency invoices and payments, to exchange difference entries at reconciliation. For businesses going through Odoo implementation services, multi-currency configuration, exchange difference account setup, and transaction testing should be included in the project scope.

AreaWhat it means in Odoo
Main currencyCompany's primary accounting currency - all reports anchor to this
Active currenciesForeign currencies enabled for invoices, bills, payments, and bank accounts
Currency ratesManual or scheduled automatic exchange-rate updates via a configured provider
Foreign-currency invoicesCustomer invoices issued in a currency other than the company currency
Foreign-currency billsVendor bills received in a currency other than the company currency
Payment registrationPayments recorded in a currency that differs from the invoice or company currency
Exchange difference journalDedicated journal that receives FX gain/loss entries on reconciliation
Gain/loss accountsChart-of-accounts entries that record realized exchange gains and losses
Currency-specific journalsBank or cash journals restricted to one currency
Currency-specific accountsAccounts restricted to a single currency where required
ReportsValues shown in company currency; foreign-currency context available per transaction

Foundation

Main Currency vs Foreign Currencies in Odoo

The main currency is the company’s accounting base – all financial reports anchor to it. Foreign currencies are activated for specific transactions, invoices, payments, or bank accounts. Understanding this distinction matters before any configuration, because reports show values in the company currency while individual transactions retain their foreign-currency context.

Main currency

  • Primary accounting base for all reports
  • Set during company creation
  • Changing after entries exist requires migration planning
  • All journal entries record amounts in main currency

Foreign currencies

  • Activated per currency in Accounting settings
  • Used on specific invoices, bills, payments, or journals
  • Exchange rates map foreign amounts to company currency
  • Exchange differences arise when rates differ across the lifecycle

Confirm the company currency before go-live. Changing the main currency after accounting entries exist can require migration planning and finance review.

Setup Sequence

How to Enable Multi-Currency in Odoo

Multi-currency is enabled from Accounting settings. Activating it opens the currency management area where foreign currencies are toggled, exchange-rate sources are configured, and the exchange difference journal and accounts are set. Each step must be confirmed before transaction testing begins.

Confirm Main Currency
Enable Multi-Currency
Configure Rates
Set Gain/Loss Accounts
Configure Journals
Test Transactions

Configuration checklist

Enable multi-currencies in Accounting settings
Activate required foreign currencies
Choose manual or automatic rate update
Configure exchange difference journal
Set gain account in Accounting settings
Set loss account in Accounting settings
Set journal currency on FX bank journals
Test invoice and payment flow

Exchange Rates

Manual vs Automatic Currency Rates

Odoo allows currency rates to be updated manually, or automatically at daily, weekly, or monthly intervals using a selected exchange-rate service. The right choice depends on transaction volume, finance team control requirements, and whether contract-specific rates apply.

OptionBest ForWatch Out For
Manual ratesSmall transaction volume, accountant-controlled rates, contract-specific ratesRates become outdated if not regularly updated; requires a defined review process
Automatic ratesRegular foreign-currency activity, high transaction volume, operational efficiencyProvider selection and update frequency must be reviewed with the finance team
One-off manual adjustmentSpecial contract rate or accounting correctionRequires finance approval and documentation before posting

Automatic rates are convenient for high-volume FX operations, but finance teams should still review rates at period close - particularly for significant transactions where rate accuracy affects reported gains or losses.

Invoice Workflow

Foreign-Currency Invoices and Vendor Bills

When a foreign-currency invoice is confirmed in Odoo, the system records the accounting value in the company currency at the invoice date rate. The invoice remains visible in its original currency. When payment arrives – often at a different rate – reconciliation triggers an exchange difference entry.

Foreign-Currency Invoice
Rate on invoice date
Invoice Date Rate
Amount locked in Odoo
Payment at New Rate
Rate may differ
Reconciliation
Triggers FX entry
Gain or Loss Entry
Posted to FX journal

How it works

Invoice currency set on the invoice document
Rate at invoice date converts to company currency
Payment registered in foreign currency at new rate
Reconciliation creates gain/loss entry automatically

Key nuances

Partial payments defer the final FX entry
Exchange difference requires full reconciliation
Older Odoo versions may handle partial differently
Finance must review open residual balances at close

FX Gains and Losses

Exchange Difference Journal: Gains and Losses

Odoo records exchange difference entries in a dedicated journal using configured gain and loss accounts. These entries are created automatically when reconciliation occurs and the invoice date rate differs from the payment date rate. Configuring these accounts correctly before any FX transaction is essential – the journal and accounts cannot be retroactively corrected without rework.

ItemWhat it does in Odoo
Exchange difference journalRecords rate differences between invoice/bill date rate and payment date rate on reconciliation
Gain accountReceives credit entries when the company benefits from a favourable rate movement
Loss accountReceives debit entries when the company is disadvantaged by an adverse rate movement
Payment reconciliationUsually the trigger for gain/loss recognition; partial payments may defer the final entry
Month-end reviewFinance should review exchange difference entries for completeness and reasonableness

Bank Accounts

Foreign-Currency Bank Accounts in Odoo

A foreign-currency bank account in Odoo requires a bank journal with the currency set, and a bank/cash account with the matching currency. This setup allows bank statements to be imported in the foreign currency while reporting balances in the company currency. Exchange-rate differences arising from payments and transfers post through the configured exchange difference journal.

Foreign-currency bank account workflow
Foreign Currency Journal
Bank Statement Import
Payment Matching
FX Difference Review

Setup steps

Create a bank journal and set type to Bank
Assign the foreign currency to the journal
Create the bank account with the same currency
Test statement import and payment matching

Check before importing

Journal currency set before first import
Bank account currency matches journal
Exchange difference accounts configured
FX entries reviewed after each reconciliation

For businesses connecting external bank feeds, treasury systems, or financial data platforms to Odoo, Odoo integration services help ensure foreign-currency bank data flows correctly into Odoo before reconciliation.

Currency Settings

Account Currency vs Journal Currency

Odoo allows currency restrictions at three levels: the individual account, the journal, and the document. Understanding when each applies prevents configuration mistakes that are difficult to correct after transactions are posted.

SettingWhere it appliesUse whenRisk if wrong
Account currencyChart of accounts - individual accountAn account should only handle one currencyTransactions may be blocked or forced into an unintended currency
Journal currencyJournal (sales, purchase, bank, cash)A bank or cash journal should handle one specific currencyUsers may post in an unintended currency; reporting may be inconsistent
Document currencyIndividual invoice, bill, or paymentA single transaction needs a foreign currencyWrong rate selection or payment mismatch may cause incorrect exchange entries

Quick Decision Guide

Multi-Currency Configuration Path: Match Your Situation

Match your situation to one of the six paths below. Each shows who it is for, three suggested next steps, and the most important thing to avoid.

Standard Multi-Currency Setup
First-time FX setup for invoices, bills, and payments
Suggested next steps
  • Confirm company currency, then activate required foreign currencies in Accounting settings.
  • Configure the exchange difference journal and gain/loss accounts before any FX transaction.
  • Test a foreign-currency invoice, payment, and reconciliation to verify the gain/loss entry appears.
Do not post FX transactions before configuring the exchange difference journal and gain/loss accounts. Missing configuration means entries post to unexpected or incorrect accounts.
Automatic Exchange Rate Updates
High-volume FX transactions requiring operational efficiency
Suggested next steps
  • Select an exchange-rate provider and configure the update frequency (daily, weekly, or monthly).
  • Test that rates update correctly and verify finance team can override a rate when needed.
  • Define a rate review process with the finance team before go-live - automatic does not mean unsupervised.
Do not rely solely on automatic rates without a defined review process. Finance should still review rates before period close, particularly for significant FX transactions.
Foreign-Currency Bank Account Setup
Companies holding bank balances in a currency other than company currency
Suggested next steps
  • Create a bank journal in Odoo and set its currency to the foreign currency.
  • Set the bank account's currency to match the journal, then test a bank statement import.
  • Reconcile a test payment and verify the FX difference entry posts correctly in company currency.
Do not import bank statements into a journal with a mismatched currency. Currency must be set on both the journal and the bank account before importing statements.
Exchange Difference Review
Finance teams needing to understand or review FX gain/loss entries
Suggested next steps
  • Confirm the exchange difference journal and gain/loss accounts are correctly configured in Accounting settings.
  • Run a test: post a foreign-currency invoice, pay at a different rate, and reconcile - then review the journal entry.
  • Train finance users to review exchange difference entries monthly as part of the period-close checklist.
Do not assume exchange differences appear automatically without full reconciliation. Partial payments may defer the final gain/loss entry until the invoice is fully settled.
Multi-Company Multi-Currency
Groups with different company currencies across entities
Suggested next steps
  • Configure and test multi-currency separately for each company - do not assume shared settings apply.
  • Test intercompany transactions and verify that FX differences post to the correct entity and accounts.
  • Review consolidation and reporting requirements with the accountant before go-live.
Do not treat multi-company FX as a single-currency setting issue. Each entity requires independent configuration, and consolidation reporting may require custom setup or accountant review.
Custom Integration or Post-Live Review
External treasury systems, custom rate providers, or fixing an existing live setup
Suggested next steps
  • Map all external systems that provide or consume FX rate data into or out of Odoo.
  • For post-live issues: audit the exchange difference journal, gain/loss accounts, and reconciliation status before making changes.
  • Apply any configuration corrections on a copy of the database before applying to production.
Do not change exchange rate or journal configuration on a live system without testing on a database copy first. Post-live changes to FX accounts can affect already-posted entries and financial reports.

Troubleshooting

Common Odoo Multi-Currency Setup Errors

Most multi-currency errors in Odoo originate from missing configuration, outdated rates, or incomplete reconciliation rather than software defects. Each issue below has a preventable root cause.

Error TypeCommon CauseHow to Prevent
Wrong main currencyCompany currency not confirmed before posting entriesConfirm with finance before go-live; changing after entries exist requires migration planning
Inactive currencyRequired currency not enabled in Accounting settingsActivate all currencies before creating transactions
Outdated exchange ratesManual rates not updated; no automatic update scheduledDefine a rate review process or enable scheduled automatic updates
Missing gain/loss accountsExchange difference accounts not configured before testingConfigure gain and loss accounts in Accounting settings before any FX transactions
Exchange difference not appearingInvoice and payment not fully reconciled; partial payment pendingConfirm reconciliation status; review open residual balances
Wrong bank journal currencyBank journal not assigned the correct currency before statement importSet journal and bank account currency before importing statements
Partner currency mismatchCustomer or vendor default currency not reviewedValidate partner and pricelist currency settings before invoicing
Multi-company confusionCompanies use different main currencies but share configuration assumptionsConfigure and test each company separately; do not assume shared currency settings
Reporting mismatchFinance team compares foreign-currency amounts with company-currency reportsTrain finance team on report currency logic before go-live

Recurring exchange difference issues, reconciliation errors, or bank statement import problems should be reviewed systematically rather than corrected one transaction at a time. Post-go-live Odoo support helps identify root causes without disrupting live accounting records.

Need help validating your Odoo multi-currency setup?

SDLC Corp can review your currencies, exchange-rate settings, gain/loss accounts, foreign-currency journals, bank reconciliation flow, and reporting checks before go-live.

Review my Odoo multi-currency setup

Readiness

Odoo Multi-Currency Readiness Checklist

Work through all five groups before issuing live foreign-currency transactions. Each item should be confirmed – not assumed – and accountant sign-off completed before the first real FX entry is posted.

Company Setup
Main currency confirmed with finance before any entries posted
Active currencies selected in Accounting settings
Exchange-rate source selected (manual or automatic)
Rate update frequency defined and reviewed with accountant
Accountant approved FX accounting treatment
Accounting Setup
Exchange difference journal configured
Gain account configured in Accounting settings
Loss account configured in Accounting settings
Account currency restrictions reviewed per account
Journal currency set on foreign-currency journals
Transaction Testing
Foreign-currency sales invoice tested
Foreign-currency vendor bill tested
Payment after rate change tested
Partial payment scenario tested
Credit note/refund in foreign currency tested
Bank reconciliation tested end-to-end
Bank Setup
Foreign-currency bank journals created
Bank account currency set to match journal
Bank statement import tested
Bank fees and transfers in foreign currency tested
Exchange difference entries reviewed after reconciliation
Reporting and Sign-Off
Receivables and payables reviewed in company currency
FX gain/loss entries reviewed for reasonableness
Tax reports checked where applicable
Month-end close process documented
Accountant sign-off completed before go-live

Implementation

Step-by-Step Implementation Roadmap

A structured multi-currency implementation covers currency model confirmation, accounting configuration, transaction testing, reporting review, and team training in sequence. Compressing steps increases the risk of exchange difference errors that are difficult to correct after live entries are posted.

1
Confirm business currency model

Confirm the main company currency, required transaction currencies, foreign-currency bank account needs, customer and vendor currencies, and reporting requirements with finance before configuration.

2
Enable and configure currencies

Activate required currencies in Accounting settings, choose manual or automatic rate updates, define the update interval, and test a manual rate update before advancing.

3
Configure exchange difference accounts

Set the exchange difference journal, gain account, and loss account in Accounting settings. Get finance approval on the accounts before creating any FX transactions.

4
Configure journals and accounts

Set currency restrictions on any foreign-currency bank or cash journals. Review account currency restrictions where a ledger account should handle only one currency.

5
Test all transaction scenarios

Test foreign-currency invoices, vendor bills, payments after rate changes, partial payments, credit notes, and bank statement reconciliation. Verify exchange difference entries appear correctly after each reconciliation.

6
Review reporting

Review receivable and payable balances in company currency, FX gain/loss journal entries, bank balances, and relevant tax reports. Get accountant sign-off before month-end close.

7
Train finance users

Train users on selecting the correct invoice currency, reviewing and updating rates, reconciling foreign-currency payments, reading exchange difference entries, and understanding reporting in company currency.

Business Scenarios

Business Scenarios to Test in Odoo

These five scenarios cover the most common multi-currency situations businesses encounter. Each should be tested in Odoo before go-live, including edge cases like partial payments and multi-company FX flows.

Sell in USD, report in EUR
  • Invoice currency: USD; company currency: EUR
  • Payment arrives later at a different rate
  • Exchange difference entry expected on reconciliation
  • Finance reviews gain or loss in EUR at month-end
Buy from supplier in GBP
  • Vendor bill in GBP; company currency is different
  • Payment made in GBP at a new rate
  • Gain or loss depends on rate change between bill and payment dates
  • Payable balance reviewed in company currency before close
Maintain a USD bank account
  • Bank journal currency: USD
  • Statements imported in USD; Odoo converts to company currency
  • Reconciliation tested against payments in USD
  • FX difference review completed after each statement period
Customer pays partially
  • Partial payment does not always trigger the final exchange difference
  • Residual open balance remains until fully settled
  • Finance must review reconciliation status and open amounts
  • Final gain/loss entry appears only on full reconciliation
Multi-company with different currencies
  • Company A reports in EUR; Company B reports in USD
  • Intercompany transactions require careful rate and account mapping
  • Consolidation reporting requires accountant review
  • Not just a currency setting - each entity configured separately

Decision Guide

Native Odoo Multi-Currency vs Customization

Native Odoo multi-currency covers standard FX invoicing, payments, bank journals, and exchange difference accounting for most businesses. Customisation or integration is needed when rate sources, treasury systems, or reporting requirements fall outside the standard Odoo scope.

Native Odoo is usually sufficient when:
  • Invoices and bills use standard Odoo Accounting workflows
  • Exchange rates can be manual or scheduled via standard providers
  • Bank accounts follow standard journal setup in Odoo
  • Gain/loss accounts follow standard chart-of-accounts structure
  • Finance team reviews month-end FX entries without custom dashboards
Customisation or integration may be needed when:
  • A custom exchange-rate provider or treasury system is required
  • Rates must follow contract-specific or hedge-specific logic
  • Multi-company consolidation involves complex FX reporting
  • FX exposure dashboards or approval workflows for rate changes are needed
  • Bank statement imports require custom field mapping or external system sync

If your multi-currency workflow includes custom rate providers, treasury integrations, or automated bank data flows, Odoo customization services can extend the system without disrupting standard accounting flows.

Team Responsibilities

Finance, Odoo Admin and IT Responsibilities

Multi-currency accounting involves finance policy, accounting configuration, and technical integration. Define ownership across all five roles before go-live to prevent gaps in rate review, reconciliation, and period close.

RoleResponsibilities
Finance teamCurrency policy, rate review process, gain/loss review, reconciliation, month-end sign-off
Odoo adminCurrency activation, journal and account settings, permissions, rate update scheduling
Accountant/advisorFX accounting treatment, statutory reporting treatment, tax implications, revaluation policy
IT/integrationBank feeds, exchange-rate providers, external system integrations, data sync
ManagementFX approval policy, risk controls, reporting expectations, go-live sign-off

How SDLC Corp Helps

How SDLC Corp Helps with Odoo Multi-Currency Accounting

SDLC Corp helps businesses configure Odoo multi-currency accounting, including foreign-currency invoices and vendor bills, exchange-rate setup, gain/loss account configuration, foreign-currency bank journals, bank reconciliation workflows, reporting checks, custom rate provider integrations, and post-go-live support.

Multi-currency activation and rate setup
Exchange difference journal and account configuration
Foreign-currency bank journal setup
Invoice, payment, and reconciliation testing
Bank statement reconciliation workflow
Reporting review and post-go-live support

FAQ

Frequently Asked Questions

Yes. Odoo Accounting supports foreign currencies, exchange rates, foreign-currency invoices and bills, payments in different currencies, exchange difference journals, and gain/loss accounts when configured correctly.
Yes. Odoo lets users update currency rates manually or automatically at scheduled intervals – daily, weekly, or monthly – using a selected exchange-rate service. The choice should be reviewed with the finance team based on transaction volume and control requirements.
Odoo records exchange difference entries in a dedicated exchange difference journal using configured gain and loss accounts when exchange-rate differences arise during payment and reconciliation.
Yes. Odoo can create bank journals and bank accounts in a specific foreign currency. This is useful for companies holding foreign-currency balances. The journal currency and bank account currency should match before statement imports begin.
One common reason is that the invoice and payment are not fully reconciled. Exchange difference behavior depends on payment and reconciliation status. Partial payments may defer the final gain/loss entry until the invoice is fully settled.
Automatic rates suit frequent foreign-currency transactions and high volume operations. Manual rates may be appropriate when finance teams need rate control or when contract-specific rates apply. The decision should be reviewed with the company’s accountant.
Not always. Native Odoo is usually sufficient for standard foreign-currency invoices, bills, payments, and bank journals. Customization may be needed for custom rate providers, treasury integrations, special approval workflows, or complex multi-company reporting.
Test foreign-currency invoices, vendor bills, payments after rate changes, partial payments, credit notes, foreign-currency bank statements, exchange difference entries after reconciliation, and month-end reporting figures.
Odoo Accounting Specialists
Planning multi-currency accounting in Odoo?

Start with the right company currency, active foreign currencies, exchange-rate policy, gain/loss accounts, bank journals, and finance review process before go-live.

Talk to an Odoo expert

ABOUT THE AUTHOR

sdlccorp

Sam Symonds is a digital transformation leader with 25+ years of experience across iGaming, blockchain, AI, machine learning, and mobile app development. He empowers startups and enterprises to innovate, scale operations, and thrive using cutting-edge, future-ready technology solutions.
PLAN YOUR SOLUTION

More Insights
You Might Find Useful

Explore expert perspectives, practical strategies, and real-world solutions related to this topic.

Agentforce vs Traditional Customer Support

Traditional customer support runs on human agents, queues, scripts, and

Bitcoin casino software support evaluation with SLA incident response wallet monitoring and escalation structure

How to Evaluate Technical Support From Bitcoin Casino Software Providers Before You Sign

Technical support is not a secondary service in a bitcoin

Let’s Talk About Your Product

Get expert guidance on scope, architecture, timelines, and delivery approach so you can move forward with confidence.

What happens next?