ERPNext handles multiple currencies as standard. You set a 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. Reports still roll everything up 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 take the exchange rate from a Currency Exchange record or its online rate service. ERPNext records both the foreign and base amounts, then posts realized and unrealized exchange gain or loss to dedicated accounts.
I lead ERPNext and Frappe programmes at MithTech, a team of Frappe specialists in Bengaluru. Multi-currency decides whether an exporter or importer can 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 at once. ERPNext is open source under GPLv3, and multi-currency is part of the core, not an add-on. The mechanics are simple; the discipline around exchange rates and revaluation is where 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 an accounting entry, not a spreadsheet guess.
Skimmable summary: multi-currency stores each foreign transaction in both the party currency and your base currency, so statutory books stay in one currency while you trade in many.
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.
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. Much of the day-to-day accuracy comes from this, because the currency is no longer a field somebody can forget.
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 an 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 the online service set in Currency Exchange Settings. 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 "Allow Stale Exchange Rates" (with a number of stale days), which decides whether ERPNext accepts an older Currency Exchange record or looks for a fresh rate. Agree this setting with your accountant, because it changes how closely your booked rates follow the market.
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 amount in the party currency and, through the exchange rate, its 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. For GST, the taxable value is in INR at the invoice's exchange rate, so set that rate to the one the GST rules require: for goods, Rule 34 of the CGST Rules points to the rate CBIC notifies under the Customs Act; for services, the rate under generally accepted accounting principles. Check the rate for your case with your CA. 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 the real landed cost of each imported item.
Skimmable summary: foreign invoices show party-currency line amounts and outstanding balances while posting the base-currency equivalent to the ledger, with the GST value in INR at the invoice rate, 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 when the payment is allocated to the invoice 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 when the Payment Entry is allocated to the invoice and posts the difference as realized exchange gain or loss.
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 makes the journal entries itself instead of leaving you to work out the difference 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 the current rate. 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.
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.
At a glance
| What to set | |
|---|---|
| Company | Base currency (INR), Exchange Gain/Loss account, Unrealized Exchange Gain/Loss account |
| Chart of Accounts | A receivable, payable or bank account per foreign currency, set before the first entry |
| Customer / Supplier | Billing currency and a receivable or payable in that currency |
| Rates | Currency Exchange record first, then the online service, then manual |
| Settlement | Realized gain or loss posts when the payment is allocated |
| Period close | Exchange Rate Revaluation for open balances |
Frequently asked questions
+Does ERPNext support multiple currencies out of the box?
Yes. Multi-currency is part of core ERPNext, which is 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 ledger and the GST values are in INR at the invoice's exchange rate. Your export documents read in USD and your statutory books stay in INR. Which exchange rate GST requires (for goods, the CBIC-notified customs rate under Rule 34) is worth confirming with your CA.
+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 market rate from the online service set in Currency Exchange Settings. 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 settle a foreign invoice at a rate different from the booking rate, and ERPNext posts it when the payment is allocated. 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 with stale rates allowed for the period, ERPNext uses that fixed rate ahead of the online service. Revalue open balances at close, and check with your CA that the rate suits GST.
Comments & ratings
No comments yet. Start a new discussion.
Manoj · Published on 20 July 2026
Worked with us? Leave a Google review