How to Set Up Multi-Currency and Revalue Balances in NetSuite
how to set up multi-currency in NetSuite
Also searched as
- NetSuite revalue open currency balances
- NetSuite unrealized gain loss
- NetSuite exchange rate table update
- NetSuite foreign currency customer setup
Short answer
Enable Multiple Currencies under Setup > Company > Enable Features > Accounting, add currencies at Lists > Accounting > Currencies, maintain rates at Lists > Accounting > Currency Exchange Rates, and run Transactions > Financial > Revalue Open Currency Balances each period. Revaluation books unrealized gain or loss on open foreign balances; payments book realized gain or loss.
Applies to: NetSuite with Multiple Currencies (all editions); OneWorld adds consolidated rates and translation to a subsidiary's functional currency
Set up and run multi-currency
- 1Enable Multiple Currencies at Setup > Company > Enable Features > Accounting and save. In OneWorld, each subsidiary also has a base currency.
- 2Add each currency at Lists > Accounting > Currencies > New, with symbol, precision and rounding. Optionally enable Currency Exchange Rate Integration so NetSuite pulls rates automatically.
- 3Maintain rates at Lists > Accounting > Currency Exchange Rates. Enter the rate against base for each date you need, or review the automatic updates.
- 4Set the customer or vendor currency on the record's Financial / Currencies subtab. Add extra currencies only if you trade in more than one with that party.
- 5Create transactions in the party's currency. The transaction rate defaults from the exchange rate table and can be overridden on the form.
- 6At period end, go to Transactions > Financial > Revalue Open Currency Balances, choose the subsidiary, period and accounts (AR, AP, bank, other), and run it.
- 7Review the journal entries NetSuite creates to the Unrealized Gain/Loss account. They reverse automatically at the start of the next period.
Realized versus unrealized gain and loss
A realized gain or loss appears when a foreign currency invoice or bill is settled at a different rate than it was booked. NetSuite posts the difference automatically when you apply the payment. An unrealized gain or loss is a period-end estimate on balances still open, produced by Revalue Open Currency Balances.
Revaluation applies to balance sheet accounts denominated in a foreign currency: Accounts Receivable, Accounts Payable, bank accounts, and any other account whose currency is not the base. It does not touch income statement accounts. The entry reverses on day one of the next period so the final settlement posts a clean realized result.
Exchange rate maintenance
NetSuite uses the rate effective on the transaction date. If no rate exists for that date, it falls back to the most recent earlier rate, which is how stale rates silently distort a month. Set an owner for rate updates, or enable the exchange rate integration, and check coverage before each close.
In OneWorld, consolidation uses its own rate types (Current, Average and Historical) stored in Consolidated Exchange Rates. Balance sheet accounts translate at current, income at average, and equity at historical, with the difference landing in Cumulative Translation Adjustment. These are separate from transaction rates.
-- SuiteQL: exchange rates for a currency pair, latest first SELECT basecurrency, transactioncurrency, effectivedate, exchangerate FROM currencyrate WHERE transactioncurrency = 2 ORDER BY effectivedate DESC
Things that cannot be changed afterwards
A customer's or vendor's primary currency cannot be changed once they have transactions. If an account was created in the wrong currency, the standard route is a new record in the correct currency and a transfer of open balances, or adding a second currency on the Currencies subtab for future documents.
Account currency is likewise fixed once postings exist. Decide up front whether a bank account is held in the foreign currency or in base, because it controls both revaluation and how statements reconcile.
Common pitfalls
- !Running revaluation before all open transactions for the period are entered, which understates or overstates the adjustment.
- !Allowing exchange rates to lag so transactions use an old rate and realized gains look random.
- !Choosing the wrong currency on a customer and discovering it after invoices exist.
- !Confusing transaction exchange rates with consolidation rates in OneWorld reports.
- !Forgetting that the revaluation journal reverses, then being surprised by the opening balance in the next period.
How an ERP-grounded AI assistant handles this
An assistant grounded in NetSuite can answer which open invoices are exposed in a given currency, what the revaluation impact would be at today's rate, and which dates have no exchange rate row. ERPray queries live data read-only and shows the query, so the controller can verify the numbers before running the actual revaluation, which remains a human-approved posting.
Frequently asked questions
What does Revalue Open Currency Balances do?
It adjusts open foreign currency balances in AR, AP, bank and other balance sheet accounts to the period-end rate and posts the difference as unrealized gain or loss to the account you choose. The journal entries reverse automatically in the next period.
Why can't I change a customer's currency?
Once a customer has transactions, NetSuite locks the primary currency because open balances depend on it. Add another currency on the Currencies subtab for new documents, or create a new customer record in the correct currency and move the balances.
Where do exchange rates come from?
You can enter them manually at Lists > Accounting > Currency Exchange Rates or enable Currency Exchange Rate Integration to update them automatically from a rate provider. Either way, each transaction uses the rate effective for its date unless overridden.
Is revaluation needed in a single-currency account?
No. Revaluation only matters when you hold balances in a currency other than the base. If everything is booked in base currency, there is nothing to revalue and the Revalue Open Currency Balances page has no work to do.
Related
How to run intercompany transactions in NetSuite (OneWorld)
Enable the Intercompany Framework and Automated Intercompany Management features (Setup > Company > Enable Features > Company), then create an Intercompany Sales Order or Purchase Order between two subsidiaries in the same NetSuite account; NetSuite auto-generates the matching intercompany transaction on the counterparty subsidiary and posts the elimination journal entries during period close if Advanced Intercompany Journal Entries is also enabled.
How-toHow to Set Up Budgets and Budget vs Actual in NetSuite
In NetSuite, budgets are entered per account, year and optional dimensions (subsidiary, department, class, location) at Transactions > Financial > Set Up Budgets, or loaded by CSV import. Reports such as Budget vs. Actual under Reports > Financial then compare the plan to posted actuals by period.
How-toHow to Build NetSuite Dashboards and KPI Scorecards
NetSuite dashboards are assembled from portlets (KPI, KPI Scorecard, List, Trend Graph, Report Snapshot) added via Personalize Dashboard, where KPI portlets show a single metric with a comparison period and KPI Scorecards show a table of multiple KPIs across time periods and can be published to a role for standardized reporting.
How-toHow to write and run SuiteQL queries in NetSuite
SuiteQL is NetSuite's read-only SQL dialect over the underlying record tables, run either interactively from Analytics > SuiteQL Query Tool (or the older /app/suiteanalytics query page), through REST at /services/rest/query/v1/suiteql, or programmatically via the N/query module in SuiteScript 2.x. It supports standard SELECT, JOIN, WHERE, GROUP BY and window functions against table names that mostly match record type IDs (transaction, transactionline, item, customer).
Error fixFix NetSuite SSS_USAGE_LIMIT_EXCEEDED Error
SSS_USAGE_LIMIT_EXCEEDED fires when a SuiteScript execution consumes all the governance units (usage points) allotted to its script type before it finishes. Fix it by checking runtime.getCurrentScript().getRemainingUsage() before expensive calls, yielding or rescheduling in Scheduled scripts, and moving heavy record-count work into Map/Reduce, which yields automatically across stages.
Error fixFix NetSuite INVALID_FLD_VALUE Error
INVALID_FLD_VALUE means NetSuite rejected a value you tried to set on a field because it does not match the field's expected type, list option, or reference record. Fix it by confirming the internal ID or text value actually exists on that field's source list and matches the field's value type (text versus list versus record reference) before setting it.
AI for ERPAI for NetSuite OneWorld Multi-Subsidiary Consolidation
Grounded AI for NetSuite OneWorld consolidation: intercompany, elimination, and multi-subsidiary questions answered through SuiteQL, without sending financial data to a public model.
AI for ERPAI for NetSuite, Beyond the Built-In Text Tools
NetSuite's built-in AI covers text generation, not grounded answers on your own data. See how a private LLM over SuiteQL adds real Q&A and controls.
Stuck on Oracle NetSuite?
Talk to engineers who work inside Oracle NetSuite every week, and who build private AI that answers these questions from your own ERP data.