NetSuite, Implementation, Data Migration, QuickBooks

Load financials and open transactions from QuickBooks to NetSuite


Companies implementing NetSuite need to load historical financial statements and open transactions to start using their new accounting system. This step is known as the financial data migration process. This step will allow you to utilize NetSuite's reporting functionality and begin processing transactions immediately after your implementation go-live date.

This article will discuss historical financial statements and open transactions, provide a simple example, and provide resources to complete this process. This article is relevant for companies planning to load summary-level data. If you plan to load detailed historical transactions, this article will not apply. 

What are historical financial statements?

Historical financial statements are the summarized results of thousands of individual transactions in your legacy accounting system. When moving to a new system, like NetSuite, it is common to bring over a summary journal entry to record this data. Several benefits of completing this task are:

  • Preparing comparative financial statements for use in a Securities and Exchange Commission (SEC) filing
  • Reducing the need to open your legacy accounting system for prior period financials and converting to your new NetSuite segment structure
  • Reviewing year-over-year comparison reports for analyzing changes in business activity

There are two approaches to preparing these journal entries. Please see this article to read more about each option.

What are open transactions?

Open transactions are activities that are midway through their respective business process. For example, an unpaid vendor bill is incomplete because it still needs to be paid. Examples of open transactions are:

  • Sales orders
  • Purchase orders
  • Customer invoices
  • Vendor bills
  • Uncleared bank transactions (for the beginning bank reconciliation)
  • Inventory items on hand

These items might need to be loaded to begin transacting in the accounting system. You won't be able to start using NetSuite without entering these transactions correctly. And it is essential to understand how to load these transactions without creating errors on your historical financial statements.

Requirements before starting

You should complete the following before preparing your historical financials:

  • Loaded all segment master records, including general ledger (GL) accounts, departments, classes, locations, and items
  • Loaded all relational master records, including customers, vendors, and employees
  • Create any suspense accounts and a fictitious customer/vendor record (see below for explanation) to prevent a no vendor/customer line on your subledger reports
  • Confirm with your implementation team that the system is ready for financial data to be loaded
  • Close the financial period in your legacy system, including addressing some of these frequent cleanup items

I recommend that you lock periods in the legacy system to prevent changes. If you fail to do this, you risk a new or updated transaction in the legacy system will get posted without being reflected in the new system. This error will create a reconciliation nightmare that can be painful to fix.

Why do I need to use a fictitious customer/vendor for the lines impacting accounts receivable (AR) and accounts payable (AP)?

Any transaction that impacts a subledger account, like AR or AP, creates a line on the detailed subledger report. Most native NetSuite transactions require a customer or vendor name on the transaction. However, journal entries do not. This feature creates an opportunity for users to inadvertently create a 'No Vendor' or 'No Customer' line on their detailed subledger report with no way to remove it.

Example No Vendor AP Aging Detail (1)Our historical financial statement journal entries create a unique situation. We prepared these journals at a summary level. However, subledger transactions are at a detailed level. Therefore, we make a fictitious customer and vendor on the summary level information to prevent this error. Then, when loading the open transactions, we will reverse the balance. When done correctly, the fictitious entity's balance is zero after loading the historical data.

How to load historical financials and open transactions

Key assumptions in our example

Below are the assumptions for the example:

  • The client, ABC Company, is going live with NetSuite on 2/1/2020. ABC Company previously used QuickBooks Online (QBO).
  • ABC Company plans to load the January 2020 historical financials as a journal entry. They are using the point-in-time approach described in this article.
  • ABC Company mapped the QBO GL account to the NetSuite GL account and department segments. See the screenshot below as an example:

Example segment map chart

We will need to assign a NetSuite GL account and a department for each GL account in the legacy system. 

  • ABC Company only has open accounts payable (AP) transactions in scope for the project.

This straightforward example will demonstrate the debits and credits for loading your historical financial statements and open transactions. Let's get started!

1. Run and format the legacy trial balance (TB) report

The first step is to run a TB report in your legacy system. Below is ABC's file:

QBO trial balance net change jeGet the data into a tabular format by removing any headers and footers. Once you've done that, we are ready to add the NetSuite segment values.

2. Add the necessary NetSuite segments

Remember above that we assume ABC Company is using the QBO GL account to map to the NetSuite GL account and NetSuite department. Below is what their segment map file might look like:

Example segment map fileUse an XLOOKUP formula to add the NetSuite segment value based on the legacy GL account.

Next, we need to add our fictitious vendor to the accounts payable lines. See above for an explanation of why this is a critical step.

Finally, we also need to add fixed field values to our spreadsheet. Examples of these might include:

  • The subsidiary
  • The date
  • A transaction number or external ID field
  • A header and line memo description

Here is what the final journal entry upload file should look like:

Example net change journal entry

3. Upload the financial statements as a journal entry

Once your trial balance report has the correct NetSuite segments, we are ready to load the journal entry. Go to Setup → Import/Export → Import CSV Records to navigate the CSV upload page. Select Transactions under the Import Type dropdown and Journal Entry under the Record Type dropdown. You can download our CSV template guide here

A few pointers when using the CSV upload functionality:

  • Your NetSuite implementation partner can provide the upload templates by transaction type.
  • I recommend loading a single transaction first when loading a large volume of transactions. You want to validate the upload worked as expected. It is much easier to correct one transaction manually. Also, always confirm the transaction didn't get caught up in an approval workflow.
  • Don't forget to adjust the upload file on the Field Mapping page to map based on the name or internal ID. I recommend using the internal ID for mapping files.

Most likely, these will fail the first few times. Keep at it! Do your best to decipher the error codes. It took me a few times to get it right too.

4. Prepare and load the open transactions

I've written extensively about loading open transactions. For step-by-step instructions, please check out these other articles:

Before moving on to the validation process, confirm that any suspense account used has a zero dollar balance.

5. Validate the upload process

After completing the open transaction load, you are ready to validate that your data migrated accurately. At a minimum, I'd recommend completing a trial balance tieout and a subledger tieout at the go-live date. First, check with your financial statement auditors to confirm what they will need to get comfortable with the implementation process. Check out this article for more tips on preparing audit documentation related to a NetSuite implementation.

Additional considerations

The example provided here was intentionally simple. Here are a few additional considerations that might apply to your specific situation:

  • You will need to complete this for each subsidiary you migrate to NetSuite. Journal entries can only have a single subsidiary.
  • The historical financial statement journal entry should be in the subsidiary's reporting currency. You should load the open transactions with the functional currency of the original transaction. Use the exchange rate on the original transaction to ensure that the fictional subledger entity nets to zero.
  • I recommend loading your historical financial statement journal entries in two batches. The first batch should be through a period that is locked, such as your last audited financial statement date. Splitting the work into two sets will provide two benefits. First, you reduce the amount of work at the go-live date. Second, you get some practice preparing and loading the data.
  • If your go-live date is on a month-end (i.e., February 1st), there might be a timing gap between when you close the January books and import your financial data. I'd recommend factoring this gap into your planning, especially if you decide to do a clean close in your legacy system.


The financial data migration step is one of the final steps before going live in your new accounting system. It is essential to get this step right to start transacting. Be sure and allocate plenty of time to completing this process.

If you or your team need additional assistance or an extra set of hands to complete this task, please contact us today. We have the experience and tools to complete this task quickly and efficiently.

OptimalData contact us CTA



Subscribe for updates!