ERPNext handles multiple currencies natively. You set an accounting currency per account and per party, invoice customers and pay suppliers in their own currency, let ERPNext fetch or fix the exchange rate, and it posts the exchange gain or loss to your books automatically. Reports still consolidate everything into your base currency.
Short answer
To use multi-currency in ERPNext, set your company base currency, add a foreign-currency accounts-receivable or payable account, set the default billing currency on the customer or supplier, and let ERPNext pull the exchange rate from a Currency Exchange record or its built-in rate service. ERPNext records both the foreign and base amounts, then posts realized and unrealized exchange gain or loss to dedicated accounts.
I am Manoj, an ERPNext implementation consultant at Mith Tech in Bengaluru, and multi-currency is the single feature that decides whether an exporter or importer can actually run its books in one system. If you invoice a US buyer in USD but file GST and pay staff in INR, your ERP has to hold both truths at once. ERPNext is free and open source under GPLv3, and multi-currency is built into the core, not sold as an add-on. The honest catch: the mechanics are simple, but the discipline around exchange rates and revaluation is where most teams get their numbers wrong.
What does multi-currency mean in ERPNext?
Multi-currency in ERPNext means the system records a foreign transaction in two currencies at the same time: the currency your customer or supplier actually trades in, and your company's base currency. Every foreign invoice, payment, and ledger line carries both an exchange rate and a base-currency value, so your statutory books stay in one currency while trade happens in many.
For an Indian exporter, this is the whole point. Your GST returns, TDS, and payroll run in INR, but your export invoices go out in USD, EUR, GBP, or AED. ERPNext keeps the foreign face-value for the customer and the INR value for your ledger, and the gap between them at settlement becomes a real accounting figure rather than a spreadsheet guess.
Skimmable summary: multi-currency stores each foreign transaction in both the party currency and your base currency, so statutory books stay single-currency while trade stays global.
How do you set the company base currency and foreign accounts?
Base currency is fixed when you create the Company master, and for an Indian entity it is almost always INR. To transact in a foreign currency, you then add ledger accounts that carry a different currency, most importantly a foreign-currency receivable for exports and a foreign-currency payable for imports. Open the account in the Chart of Accounts and set its Currency field.
Confirm the company currency
Open the Company master under Accounting. The Default Currency here is your base currency and should match your statutory reporting currency, typically INR.
Create a foreign-currency receivable
In the Chart of Accounts, add an account such as "Debtors USD" under Accounts Receivable and set its Currency to USD. This holds export balances in the buyer's currency.
Create a foreign-currency payable
Add a matching payable account, for example "Creditors EUR", with its Currency set to EUR, so import purchases sit in the supplier's currency.
Add foreign bank accounts if needed
If you hold an EEFC or foreign-currency bank account, create a bank ledger in that currency so receipts and payments post at the right rate.
Currency locks after the first entry
Once a transaction posts against an account, ERPNext will not let you change that account's currency. Decide the currency of each foreign account before you start booking against it.
Skimmable summary: the Company master fixes base currency, then you add foreign-currency receivable, payable, and bank accounts in the Chart of Accounts, each with its own Currency field set before the first entry.
Where do you set currency on customers and suppliers?
Party currency is set on the Customer or Supplier master through the Default Billing Currency field. When that currency differs from your company base currency, ERPNext also asks you to map a Default Receivable Account for a customer, or a Default Payable Account for a supplier, in the matching foreign currency, so every transaction with that party lands in the right ledger automatically.
Setting currency at the party level saves your team from choosing it on every invoice. Tag your US buyer as USD once, point it at your "Debtors USD" account, and every future sales invoice defaults to USD with the correct receivable already selected. The same holds for a European supplier mapped to a EUR payable. This is also where much of the day-to-day accuracy comes from, because the currency is no longer a manual field somebody can forget.
Match the account to the party currency
The receivable or payable you assign to a foreign party must be in that party's currency. A USD customer needs a USD receivable, not the default INR one, or ERPNext will flag the mismatch.
If your whole business is import and export trading, the wider setup around items, pricing, and landed cost matters just as much as currency. I cover that end to end in the guide on ERPNext for a trading business.
Skimmable summary: set Default Billing Currency on the Customer or Supplier master and map a matching foreign-currency receivable or payable, so every transaction with that party defaults to the correct currency and account.
How does ERPNext get the exchange rate?
Exchange rates in ERPNext follow a clear order of priority. First, the system looks for a Currency Exchange record you created for that currency pair and date. If none exists, it fetches a market rate from its built-in online rate service. If that fails, you can type the rate manually on the transaction. Every foreign transaction shows an editable Exchange Rate field regardless of the source.
Currency Exchange record
A master record that fixes a rate for a currency pair. Use it to lock a rate for a period, for example your customs or booking rate, so all transactions use one agreed figure.
Live rate service
When no record exists, ERPNext pulls the current market rate automatically from an online source, so casual transactions do not need manual lookup.
Manual entry
You can always override the rate on the individual invoice or payment when the deal was struck at a specific negotiated rate.
A word on staleness. Accounts Settings has an "Allow Stale Exchange Rate" option that decides whether ERPNext accepts an older cached rate or forces a fresh one. For exporters and importers who care about accuracy, controlling this setting is worth a conversation with your accountant, because it changes how tightly your booked rates track the market.
Fixed rate for a period
Many Indian exporters book all invoices in a month at a single agreed rate for simplicity, then true up at close. A Currency Exchange record is exactly how you enforce that one rate across the period.
Skimmable summary: ERPNext sources rates in priority order, a Currency Exchange record first, then a live rate service, then manual entry, with an editable rate on every foreign transaction and a staleness control in Accounts Settings.
How do foreign-currency invoices actually post?
Foreign invoices carry the transaction amount in the party currency and, using the exchange rate, an equivalent value in your base currency. A USD sales invoice shows USD line amounts and a USD outstanding, while the accounting ledger records the INR equivalent. Outstanding and advance balances for that party display in the party's currency, so a customer statement reads the way the customer expects.
Consider a simple export. You raise a sales invoice on a US buyer for 10,000 USD at a booked rate. ERPNext posts the receivable in the USD account at face value and the INR equivalent in your general ledger. The buyer's outstanding shows in USD. When you file GST, the taxable value converts to INR using the same rate logic, so your statutory value is consistent with the ledger. Import purchase invoices work the mirror way, holding the supplier balance in the foreign currency while your books see INR.
For importers specifically, currency is only half the cost picture. Freight, customs duty, and clearing charges also load onto your inventory value, which is a separate mechanism. That is the landed cost voucher, and pairing it with multi-currency is what gives you a true landed cost per imported item.
Skimmable summary: foreign invoices show party-currency line amounts and outstanding balances while posting the base-currency equivalent to the ledger, with GST values converted consistently, and imports mirror the same logic for suppliers.
How does ERPNext handle exchange gain and loss?
Exchange gain or loss arises because the rate when you book an invoice rarely matches the rate when you settle it. ERPNext splits this into two cases. Realized gain or loss is posted automatically at payment, when cash actually changes hands at a different rate. Unrealized gain or loss on still-open balances is calculated separately using the Exchange Rate Revaluation tool at period close.
Book the invoice at the booking rate
Your USD export invoice records a base-currency value at the rate on the invoice date.
Settle it at the payment rate
When the USD payment arrives, the rate has usually moved. ERPNext compares the two rates during the Payment Entry and posts the difference as realized exchange gain or loss automatically.
Revalue open balances at close
For invoices still unpaid at month or year end, run Exchange Rate Revaluation to mark open foreign balances to the current rate and post the unrealized difference.
To make the automatic postings work, set the exchange gain and loss accounts on the Company master, including the Unrealized Exchange Gain/Loss Account used to balance revaluation differences. Once those are in place, ERPNext generates the journal entries itself rather than leaving you to compute the delta by hand.
Skimmable summary: realized gain or loss posts automatically at payment when the settlement rate differs from the booking rate, while unrealized gain or loss on open balances is handled by Exchange Rate Revaluation at close, using the accounts set on the Company master.
How do you run exchange rate revaluation at period close?
Exchange Rate Revaluation is the ERPNext tool that adjusts open foreign-currency balances in the general ledger to reflect the current rate. Run it at month or year end so unpaid export receivables and import payables are stated at a fair value. The tool scans your foreign accounts, compares booked rates to the current rate, and produces a journal entry for the difference.
Set the unrealized account first
On the Company master, populate the Unrealized Exchange Gain/Loss Account. The revaluation uses it to balance the credit and debit difference.
Create a revaluation
Go to Accounting, then Multi Currency, then Exchange Rate Revaluation, and create a new record for the company.
Fetch the open entries
Click Get Entries. ERPNext pulls the non-base-currency accounts with open balances and shows the current versus booked rates.
Submit and create the journal entry
Submit the revaluation, then click Create Journal Entry. Review the generated Exchange Gain/Loss journal and submit it to update your ledger balances.
Automate it if your volume is high
The Company master includes Exchange Rate Revaluation settings that can auto-create the revaluation on a schedule. For a busy exporter, that turns a manual month-end chore into a background job.
Skimmable summary: at close, set the unrealized account, create an Exchange Rate Revaluation, fetch open foreign balances, then submit and create the journal entry so open receivables and payables are marked to the current rate.
Frequently asked questions
Does ERPNext support multiple currencies out of the box?
Yes. Multi-currency is built into core ERPNext, which is free and open source under GPLv3. You can invoice customers and pay suppliers in any number of currencies while keeping one base currency for your statutory books, with no paid add-on required.
Can I invoice in USD while filing GST in INR?
Yes. A USD sales invoice records line amounts and outstanding in USD, while the accounting ledger and GST values are computed in INR using the transaction's exchange rate. Your export documents read in USD and your statutory books stay in INR.
Where does ERPNext get exchange rates from?
ERPNext checks for a Currency Exchange record you created for that currency pair first. If none exists, it fetches a live market rate from its built-in online service. If that fails, you enter the rate manually. The rate is editable on every foreign transaction.
What is the difference between realized and unrealized exchange gain?
Realized gain or loss happens when you actually settle a foreign invoice at a rate different from the booking rate, and ERPNext posts it automatically at payment. Unrealized gain or loss is on invoices still open at period end, calculated by the Exchange Rate Revaluation tool.
Do I need a separate receivable account for each currency?
For foreign parties, yes. A customer billed in USD needs a USD receivable account, and a EUR supplier needs a EUR payable, mapped on the party master. Your base-currency INR accounts continue to serve domestic customers and suppliers.
Can I lock one exchange rate for a whole month?
Yes. Create a Currency Exchange record for the currency pair and date, and ERPNext will use that fixed rate ahead of any live service. Many exporters book a month of invoices at one agreed rate, then revalue at close.
About the author
I am Manoj, an ERPNext implementation consultant at Mith Tech, an independent open-source ERPNext and Frappe studio based in Bengaluru. I help Indian exporters, importers, and trading SMBs run their books in multiple currencies on the ERPNext platform without losing sight of GST, TDS, and clean month-end close. My focus is getting the accounting structure right so the numbers hold up under audit.