Data Migration, Multi-Entity Consolidation, Case Studies

Affordable Housing Nonprofit Moves 4 QuickBooks Files to NetSuite

Valley Community Development (Valley), a Northampton, Massachusetts nonprofit affordable housing developer, went live in August 2026 on NetSuite with 14,864 transactions loaded across four entities, spanning June 2018 through go-live. Every construction cost carried its funding source and cost category forward because the organization's tax credit compliance depends on producing that detail years after a building is finished. Tax credit compliance shaped the migration scope, how the QuickBooks structure mapped to NetSuite, and why staggering the entity go-lives mattered.

Key Takeaways

  • A Massachusetts affordable housing nonprofit moved 14,864 transactions across four QuickBooks Desktop files into NetSuite, covering June 2018 through go-live in the summer of 2026.
  • The driver was tax credit compliance. Cost certification on a development project can require years of construction expense detail, broken out by cost category and funding source.
  • Dozens of QuickBooks sub-accounts per entity, used to track construction cost types, collapsed into a single Activity Code segment in NetSuite. Government loan and grant sources became their own trackable segment.
  • Go-live was staggered by entity, smallest first, so the team could absorb any issues on a small entity before cutting over the largest one.
  • A $5,000 conversion error surfaced the following month as an exact variance, was traced to a single check, and corrected without disrupting the rest of the reconciliation.

Why load detailed transaction history for a real estate development nonprofit?

Because cost certification does not happen on your schedule.

Valley develops affordable housing through a parent organization and a set of project-specific entities, each carrying its own construction budget. Well after a building is finished and rented, the tax credit compliance process can require the organization to produce years of construction-phase expense detail: what was spent, in what category, funded by which loan or grant.

If that detail is sitting in a QuickBooks Desktop file nobody opens anymore, cost certification turns into a research project. The organization's finance team wanted that history live in NetSuite, not archived somewhere that only gets touched under pressure.

What data needed segment-level detail, and what could stay summarized?

The construction and grant activity needed full transaction detail. What could stay summarized was anything without an ongoing compliance tie, which is the same scoping discipline behind any well-run migration: load what has to be queryable, and leave the rest as a clean opening balance.

For Valley, that meant all four active entities came over at the transaction level, because construction activity and grant funding touched each transaction.

What did the migration actually include?

We migrated 14,864 transactions across four entities: the parent organization and three project-specific entities, dated from June 2018 through go-live in July and August 2026.

Transactions migrated, June 2018 to go-live
Transaction type Count
Journal entries 5,420
Bills 4,129
Bill payments 3,740
Invoices 551
Checks 512
Payments 487
Bill credits 25
Total 14,864

The parent entity carried the bulk of the volume, which tracks with how the organization operates: most accounts payable and cash activity run through the parent, while the project entities carried lighter, more construction-specific activity. The high journal entry count reflects the allocation and fund accounting a multi-property nonprofit needs across four sets of books that roll up to one balance sheet.

How do construction costs and grant funding map to NetSuite segments?

Before migration, each entity tracked its construction costs (construction loan interest, construction testing, developer overhead, energy consulting, and financing fees) as separate QuickBooks sub-accounts. The sub-account name carried multiple dimensions at once: the cost category and funding source were both embedded in the account name. Multiply that across cost categories and entities, and the chart of accounts gets unwieldy fast.

Segment mapping, QuickBooks to NetSuite
NetSuite segment QuickBooks source
GL Account GL account name
Activity Code (Custom Segment 1) GL account name
Loan/Grant (Custom Segment 2) GL account name

In NetSuite, the activity code and the funding source each became their own segment, applied on the transaction line instead of buried inside an account name. A GL account tagged with an activity code and a loan/grant value replaced what used to be a dozen or more sub-accounts per entity, and the finance team can now trace a construction cost back to both its category and funding source without parsing an account name. As a result, the parent entity's chart of accounts went from 546 GL accounts in QuickBooks to 252 in NetSuite. Moving that kind of detail out of the account name and into a proper NetSuite segment structure is what makes a chart of accounts that size usable rather than just smaller.

Why stagger the go-live by entity?

Valley staggered its four entity go-lives, smallest first, because not every entity carries the same risk, and there is no reason to find that out during the largest cutover.

Valley's smallest entity had lower transaction volume and required less mapping, making it a low-risk way to confirm the account, class, and segment mapping held up in practice. Once that entity was live and reconciled, the parent entity and the remaining project entities followed.

Staggering also gave the accounting team room to run bank reconciliations and close out each QuickBooks file in sequence rather than all at once, catching small account mapping issues before they compounded across four entities.

Two of the four entities, including one with thirty homes going up for sale in early September, were added to the scope after the initial go-lives were already complete. Because the migration approach and mapping process were already established, both entities moved from scoping to loaded data in about two weeks, giving the finance team clean records in NetSuite before cash activity began.

What happens when a migrated balance does not tie out cleanly?

One balance did not tie out cleanly on this project. Here is what happened and why it cost a quick correction instead of an open-ended investigation.

During the historical bank reconciliation conversion for one entity, a $5,000 check that was still outstanding in QuickBooks as of June 30 was marked as cleared in NetSuite. The variance did not show up right away. It surfaced the following month, when the accounting team's July reconciliation came back exactly $5,000 off from what the bank statement supported.

Because the accounting team reconciles every account against the actual bank statement each month rather than assuming a migrated balance is correct on its face, the variance was easy to isolate. The beginning balance agreed to the statement, and the July activity had already been matched and verified, so the difference had to be in what came over during conversion. That narrowed the search to a single outstanding check, and the fix was a one-line correction rather than rebuilding the reconciliation from scratch. This is the same discipline behind completing your first bank reconciliation in NetSuite: a known, cleared starting position is what makes a variance like this findable instead of a mystery.

A similar, smaller case came up earlier in the project: a five-dollar variance traced to a check that had been voided and reissued under a new check number. Once identified, it was a known, explainable difference instead of an open question sitting on the books.

Neither the $5,000 variance nor the $5 voided-check variance changed the reconciliation process. Both got caught by the same discipline: matching every transaction on the bank statement against NetSuite, month over month, rather than treating a reconciled balance as settled the moment it ties on the surface.

What should you expect for downtime during a multi-entity migration?

Expect it to scale with the number of files, not just the transaction count. A single-entity migration can often cut over in a single business day. With four separate QuickBooks Desktop files, each with its own chart of accounts and reconciliation status, staggering the cutover by entity is usually a better trade than trying to force one shared downtime window across all four.

The shorter windows were possible because of the client's preparation. Valley's accounting team ran bank reconciliations and confirmed each entity was fully posted in QuickBooks before its cutover, which is the same discipline any detailed migration depends on: NetSuite can only reconcile forward cleanly from a known, cleared position in the legacy system. As a result, the client was only out of their QuickBooks Desktop file for a single business day, a Friday, before working in NetSuite the following week.

What audit documentation should you get after a migration?

Every OptimalData project closes with an audit documentation package, following the same approach we use to validate and document a NetSuite data migration on every engagement. For this migration, that included:

  • A data migration memo documenting scope, method, and mapping assumptions per entity
  • Trial balance tie-outs between QuickBooks and NetSuite for each of the four entities
  • Summary and detailed accounts payable tie-outs
  • Documentation of the Activity Code and funding source segment mapping, for reference the next time a cost certification comes due

For an organization managing tax credit compliance, that package is not paperwork for its own sake. It is what lets the finance team answer a funder's question about a specific project year without reopening QuickBooks.

What the client said

"Valley is so grateful for the attention to detail and expertise that OptimalData Consulting provided in transferring our data from an outdated and challenging system into NetSuite."

 Alexis Breiteneicher, Executive Director

"Our agency needs to prepare multi-year balance sheet reports on a monthly basis, and having to regularly merge reports from two systems was a real barrier for doing a conversion. Importing the transaction detail changed that. Paul guided us through the mapping process and was very easy to work with. It was fantastic to log into NetSuite and be able to instantly verify that not only did each entity's trial balances match, but we could easily see the detailed transactions behind each account. It made the transition to NetSuite so much easier for us!"

 Catherine Wolkowicz, Finance Director

Frequently asked questions

How far back should an affordable housing nonprofit load construction transaction history?

Far enough to cover the compliance window on your longest-running development project. If a cost certification can require six years of construction expense detail, your migration needs to reach back that far, not just to your most recent fiscal year.

Does migrating multiple entities at the transaction level increase the project cost significantly?

Volume matters less than the number of separate files. Four QuickBooks files each need their own chart of accounts review, mapping, and reconciliation, which is where the added effort comes from, more than the transaction count itself. To get pricing for your specific project, use our pricing calculator.

Can historical construction detail be loaded after an entity is already live on NetSuite?

Yes, though it is more involved than doing it during implementation, since any summary entries already posted typically need to be removed first.

What does the client's team have to do?

The mapping decisions: which GL accounts, activity codes, and funding sources map where. OptimalData builds and maintains the map file and handles the extraction, transformation, and load, but that judgment belongs with the people who own the numbers.

The takeaway

A nonprofit real estate developer that loads only summary balances into NetSuite gets a clean general ledger and a compliance gap. The moment a funder or auditor asks for construction-phase detail on a project from several years back, the answer lives in a QuickBooks file nobody has opened since go-live.

Valley scoped its migration around the opposite outcome: every construction cost, tagged to its category and its funding source, lives in the system the finance team actually works in. That decision gets made during the implementation, whether or not anyone names it as a choice, and it is the part worth copying.

If your organization is developing affordable housing, or managing any project with multi-year compliance requirements, and you are weighing how much history to bring into a new ERP, let's talk through what a detailed load would involve.

Subscribe for updates!