Skip to main content
DualEntry’s multi-currency support lets you transact in foreign currencies while maintaining your books in a functional currency. You configure currency settings per entity, choose how exchange rates are sourced, and run period-end revaluation to keep balances current.

Setting the functional currency

You set the functional (base) currency for each company/entity during entity creation in Accounting Setup → Currencies. The functional currency is the currency your books are denominated in. All reporting for that entity ultimately resolves to this currency. DualEntry uses the functional currency as the basis for all journal entries, account balances, and financial statements produced for that entity. Changing the functional currency after initial setup is a significant operation that requires restating historical balances. Plan your functional currency carefully before creating transactions. If you operate across multiple entities with different functional currencies, DualEntry handles the translation during consolidation using the rate types described below.
Changing an entity’s functional currency after transactions have been recorded triggers a full restatement. Coordinate with your implementation team before making this change.
Troubleshooting: functional currency missing from the dropdownWhen you add a new company, the functional currency picker only lists currencies that are already enabled on the tenant. If the currency you need (for example, SGD for a new Singapore entity) is not in the list, enable it first:
  1. From an existing company, go to Accounting Setup → Currencies.
  2. Add the missing currency to the enabled list and save.
  3. Return to the new company form. The currency now appears in the functional currency dropdown.
Every ISO currency is available in Accounting Setup → Currencies; it just has to be enabled once before it can be selected as another entity’s base currency.

Enabling transactional currencies

Once your functional currency is set, you enable the additional currencies you transact in. Navigate to Accounting Setup → Currencies and add each currency to your enabled list. When you create a bill, invoice, or other transaction in a non-functional currency, DualEntry captures both the transaction amount in the foreign currency and the exchange rate used for conversion. You can enable as many transactional currencies as you need. Each enabled currency appears as an option when creating or editing transactions. DualEntry stores both the foreign-currency amount and the functional-currency equivalent on every transaction line, so you always have access to the original amounts alongside the converted figures in reports and account balances.

Viewing an account balance in its assigned currency

When you assign a currency to a GL account (bank or non-bank) via the account’s currency_iso_4217_code field in the chart of accounts, DualEntry keeps a running balance in that native currency in addition to the functional-currency equivalent. Two places show the native balance:
  • Account detail page. Open Chart of Accounts → the account. The header displays the current balance in the account’s assigned currency; the functional-currency equivalent appears alongside it. The transaction list underneath shows each entry’s original amount in the assigned currency.
  • General Ledger report. Run Reports → General Ledger, filter to the account, and enable the Transaction currency column from the column picker. Each line shows the amount in its native currency; the report footer totals the balance in that currency.
Standard financial statements (Balance Sheet, Income Statement) always present in the entity’s functional or the report’s reporting currency. They do not display per-account native balances. When you run a report at the company level, the amount for a currency-assigned account is translated to the functional currency using the rate type configured for that account type (see Rate types). To reconcile a currency-assigned account back to its native balance, use the account detail page or the General Ledger report as described above, or use the dual-currency view on custom reports.

FX rate sources

DualEntry provides three ways to source exchange rates:
  • Built-in provider - DualEntry pulls rates automatically from a built-in FX rate provider, updated daily. This is the default and requires no configuration beyond enabling it.
  • Manual entry - you enter rates directly for specific currency pairs and dates. Use this when you have negotiated rates or need to override the provider rate for a specific transaction.
  • CSV upload - upload a rate table with date, currency pair, and rate columns. This is useful for importing rates from your treasury system or central bank.

Rate types

DualEntry uses three rate types, each serving a different purpose:
  • Spot rate (historical rate) - used for individual transactions at the date they occur. Once a transaction is booked, its spot rate is locked to the transaction date and never retroactively adjusted.
  • Period-end rate - used for balance sheet revaluation at the closing date of each period.
  • Average rate - used for income statement translation when consolidating entities with different functional currencies.
You configure which rate type applies to each context. The built-in provider supplies daily spot rates; you derive period-end and average rates from these or enter them manually.

Historical rate locking on transactions

DualEntry locks every transaction to the spot (historical) exchange rate as of its transaction date. This happens automatically when the transaction is booked. You do not enter or update the rate manually, and the system does not retroactively re-rate posted transactions or average them across periods. Each transaction permanently retains its own historical rate, which is the correct accounting treatment for equity and other date-specific events under ASC 830 / IAS 21. If you need to override the rate on a specific transaction (for example, to match a negotiated contract rate), you can enter it manually at the time of booking; the manual rate is then locked to that transaction the same way. Example: CAD equity raise across two dates. Assume your functional currency is USD and you raise equity in CAD on two separate dates:
  • June 2025 raise - booked and locked at the June 2025 CAD/USD spot rate on the transaction date.
  • Later raise - booked and locked at that later date’s own CAD/USD spot rate.
Each raise stays on the books at its own historical rate. The combined equity balance in USD is the sum of the two USD-equivalent amounts (effectively a blended rate across the two raises), and DualEntry never retroactively adjusts either entry or averages them into a single rate. Equity accounts continue to translate at these historical rates in consolidation, consistent with the translation rules for reporting.

Foreign currency revaluation

At period end, you run foreign currency revaluation to restate open foreign-currency balances at the closing rate. Navigate to the revaluation screen, select the period, and run the process. DualEntry creates a revaluation journal entry that posts the unrealized gain or loss to the account you configure (typically an unrealized FX gain/loss account on the income statement). Revaluation applies to open AR, AP, and any other balance sheet accounts denominated in a foreign currency. The journal entry reverses on the first day of the next period, so the next revaluation starts fresh.

Realized gains and losses

When you pay a foreign-currency bill or receive payment on a foreign-currency invoice, DualEntry automatically computes the realized gain or loss. The realized amount is the difference between the rate at which the transaction was originally recorded and the rate at which settlement occurs. DualEntry posts the realized gain or loss to your configured FX gain/loss account. Realized FX amounts appear as separate line items in the journal entry that records the payment, making them easy to identify in the general ledger. You can report on realized gains and losses by account, entity, currency pair, and period using the custom report builder. For details on how multi-currency data appears in reports, see multi-currency reporting. For consolidation of entities with different functional currencies, see multi-entity consolidation.
Last modified on July 6, 2026