Migrating NetSuite Multi-Currency and Multi-Subsidiary Data to QuickBooks Desktop
NetSuite-to-QuickBooks migrations with foreign-currency balances and subsidiary rollups fail without a transaction-level reconciliation plan; this playbook covers the full process.
Migrating from NetSuite to QuickBooks Desktop is never a simple list-and-transaction copy when the source environment uses multiple currencies and multiple subsidiaries. NetSuite stores every transaction in its native currency, posts realized and unrealized gains or losses to dedicated FX accounts, and rolls subsidiary ledgers up into parent-level consolidated balances. QuickBooks Desktop handles multi-currency differently, and subsidiary consolidation has no native equivalent. Our engineers treat these migrations as a structured reconciliation project rather than a file conversion. The full NetSuite to QuickBooks conversion process hinges on getting the trial balance to match at each checkpoint.
Phase 1: Scope and Pre-Flight Assessment
Before exporting anything, confirm two things about the NetSuite environment: whether multi-currency is enabled, and whether the account hierarchy spans more than one subsidiary. Both factors determine whether the migration is viable and how the target QuickBooks file must be structured.
Request a Transaction Detail CSV export from NetSuite covering the full migration period, along with current list counts for accounts, customers, vendors, employees, and items. Pull a Trial Balance report and a General Ledger detail report for the same as-of date. These three artifacts — Transaction Detail, Trial Balance, and General Ledger — form the reconciliation triangle. If any leg is missing or covers a different date range, stop and re-pull.
Phase 2: Currency and Subsidiary Mapping
NetSuite's base currency may differ from the home currency the QuickBooks file will use. Identify every foreign-currency account in NetSuite and document its currency, its current balance in that currency, and the translated balance in the home currency.
For each subsidiary, decide whether it maps to a single QuickBooks company file or whether multiple subsidiaries will consolidate into one file using class tracking or separate account number ranges. This decision drives the entire chart-of-accounts mapping. Document the mapping in a spreadsheet before touching any data.
Phase 3: Transaction-Level Export and Normalization
Export the Transaction Detail CSV from NetSuite with columns for internal transaction ID, date, account, subsidiary, currency, debit amount, credit amount, exchange rate, and posting status. Filter to include only posted transactions — exclude pending, voided, or non-posting entries.
Normalize the CSV by stripping NetSuite-specific account numbering prefixes that will not exist in QuickBooks. Apply the account mapping from Phase 2. Flag any transaction that hits an account with no QuickBooks counterpart; these require a mapping decision before proceeding.
Phase 4: Foreign-Currency Balance Translation
For each foreign-currency account, calculate the home-currency equivalent using the exchange rate in effect on the as-of date, not the historical rate on each transaction. QuickBooks Desktop multi-currency posts the home-currency value at the time of the transaction and adjusts the balance through realized and unrealized gain/loss entries.
Reconcile the translated balance against NetSuite's translated Trial Balance. Variances here typically stem from exchange-rate timing differences or from gain/loss accounts that NetSuite posts automatically but that must be recreated manually in QuickBooks. Document every variance and its resolution.
Phase 5: Subsidiary Rollup and Consolidation
If multiple subsidiaries are consolidating into a single QuickBooks file, eliminate intercompany transactions at this stage. NetSuite's elimination entries appear in the Transaction Detail and must be excluded from the QuickBooks import to avoid double-counting.
Roll subsidiary-level balances up to the parent level and compare against NetSuite's consolidated Trial Balance. Any rounding differences from currency translation across subsidiaries must be adjusted into a cumulative translation adjustment account.
Phase 6: Trial Balance Reconciliation
Load the normalized, mapped, and translated balances into the target QuickBooks file. Run a Trial Balance report in QuickBooks as of the same cut-off date used throughout.
Compare it line-by-line against the NetSuite Trial Balance. Every account must match to the penny. If an account is off, trace back through the General Ledger detail for that account in both systems until the discrepancy is isolated. Common causes include transactions posted after the export cut-off date, accounts mapped to the wrong QuickBooks account, or exchange-rate rounding that accumulated across thousands of transactions.
Rollback Points
The migration is reversible at three checkpoints: after Phase 3 (before any data is loaded into QuickBooks), after Phase 5 (after mapping but before import), and after Phase 6 (the verification pass). If the trial balance does not reconcile, revert to the last clean checkpoint rather than patching individual accounts.
Clean Outcome
A successful migration produces a QuickBooks Desktop file whose Trial Balance matches the NetSuite source to the penny on every account, with foreign-currency balances correctly translated, subsidiary data properly consolidated or class-tagged, and intercompany eliminations excluded. The General Ledger detail in QuickBooks should foot to the same totals as the NetSuite Transaction Detail for any date range sampled.