Company context — and why migrations like this fail when rushed
The client is a B2B professional-services firm at $30M revenue, growing at 35% YoY, organized as a US parent with two operating subsidiaries (services delivery and a managed-services ARR business) plus a Canadian sub for cross-border engagements. They were running on QuickBooks Online Advanced — three separate company files, manually consolidated each month in Excel — and had been making the QBO stack work through three years of growth. Six months out from a planned debt-refinance audit, the workarounds finally tipped past the value of staying on QBO.
QuickBooks-to-NetSuite migrations have a famously rough success rate. The pattern that fails: companies treat it as an IT swap, scope it like a software install, and discover at cutover that their chart of accounts, project structure, and integrations don't translate cleanly. The pattern that works: treat it as a controller-led re-design of the operating model, with the new GL as the artifact that comes out the back. That's how this one was scoped.
- Manual multi-entity consolidation, 5+ days per month
- No native project accounting; workaround in spreadsheets and class hacks
- QBO class hierarchy exhausted; no real dimensional reporting
- Audit-ready needs for debt refinance in 6 months
- Annual revenue projected to hit $50M within 12 months
- 13 active integrations across QBO, including Bill, Stripe, HubSpot, Gusto, Concur
- Three years of GL history needed to migrate cleanly for trend reporting
Why migrate (and why now)
Three signals usually trigger the decision. First: consolidation pain — 5+ days of monthly close consumed by spreadsheets, with errors compounding as entities multiply. Second: reporting ceiling — class structure exhausted, dimensional needs (project, department, customer-segment) outgrowing QBO's three classes. Third: compliance pressure — debt covenants, audit cycles, or M&A diligence demand evidence and controls QBO can't produce natively.
Most companies hit at least one of these signals 12–18 months before they actually migrate. The decision usually comes when two of three are simultaneously painful and a triggering event (audit, refinance, equity round, M&A) creates a deadline. For this client, all three were live: the audit was scheduled, consolidation was eating the senior accountant's month, and HR was asking for project profitability the system couldn't produce.
What we implemented in 90 days
A standard NetSuite implementation done by a controller's playbook: design the chart of accounts and dimensions before configuration, plan integrations early, parallel close in month 1, and document everything for the auditor.
- NetSuite OneWorld with 3 subsidiaries (US parent + US ops + Canadian sub) and native consolidated reporting
- Redesigned chart of accounts: ~280 active accounts, normalized for GL roll-up
- Dimension model: subsidiary, department, project, customer segment — every transaction tagged on all four where applicable
- Project accounting native to NetSuite: services delivery, time-and-billing, milestone billing, project profitability dashboards
- AP automation via Bill (vendor onboarding, three-way match where applicable, approval routing)
- AR automation via NetSuite native (recurring invoicing, dunning, customer portal)
- Integrations with payroll (Gusto), CRM (HubSpot), bank feeds, expense (Concur), credit cards (Ramp), and Stripe for subscription billing
- Tool Box AI workflow layer for approvals, exception handling, audit-evidence packs from close 1
- 3 years of GL history migrated as summary balances; transaction detail kept in QBO read-only
- Reconciled before/after totals: trial balance to zero, sub-ledgers to GL, AR/AP detail to control accounts
90-day timeline — and what each phase actually delivers
| Days | Phase | Deliverables |
| 1–14 | Discovery & design | COA design, dimension model, integration map, controls register, risk register, project plan signed |
| 15–45 | Configuration | NetSuite core (subs, COA, roles, segments), integrations stood up, custom workflows, Tool Box AI layer, training plan, UAT scripts |
| 46–60 | Data migration | Master data (customers, vendors, items, projects) + opening balances reconciled; trial balance ties to zero across all 3 subs |
| 61–75 | Parallel close | Run NetSuite alongside QBO for one full close cycle; reconcile to zero; investigate and document every variance; auditor walk-through of evidence pack |
| 76–90 | Cutover & hypercare | Production cutover at month-start, daily standups for first two weeks, issue triage, user training delivered in waves, hypercare ticket queue |
| 91+ | First production close | First close completed on NetSuite, management pack delivered, audit evidence pack from day 1, lessons-learned retrospective |
Measured results
| Metric | QuickBooks (before) | NetSuite (after) | Delta |
| Multi-entity consolidation time | 5 business days | 0 (native) | −5 days / month |
| Project profitability reporting | Spreadsheet, 2 days | Real-time dashboard | −2 days / cycle |
| Close cycle (full close, all entities) | 10 business days | 5 business days | −50% |
| Manual JE volume per close | ~80 | ~25 | −69% |
| Audit-readiness prep per cycle | 3 days | Same-day evidence pack | −3 days |
| Reporting dimension count | 1 (class) | 4 (sub, dept, project, segment) | 4× depth |
| Integrations operating in production | 13 manually triggered | 13 fully automated | — |
| Senior-accountant time on close | ~140 hours / month | ~55 hours / month | −61% |
Controls, data, and risk management
- Risk register with named owner and rollback plan per migration milestone (28 risks tracked)
- Trial balance reconciled to zero before cutover across all 3 subsidiaries; documented and signed off
- Parallel close month: every variance investigated and resolved before cutover (47 reconciling items found and cleared)
- User roles and permissions designed for SOX-readiness in advance of debt-refinance audit
- Tool Box AI evidence packs operating from close 1 forward — auditor reaches every transaction in three clicks
- Segregation of duties: preparer ≠ approver enforced at the role level for AP, AR, JE, and master-data changes
- Master-data change log: every customer, vendor, item, and account change has a timestamp, user, and reason
- Cutover go/no-go gate: 14 mandatory checks signed off by named owners before production switch
Data migration — what to bring forward, what to leave behind
The migration scope decision is where most NetSuite projects either stay on schedule or quietly bloat. Pulling three years of transaction-level history into NetSuite is technically possible but rarely worth the cost. The right cut for most mid-market migrations is summary balances forward, transaction detail kept read-only in QBO, with clear documentation for auditors on where to look.
| Data type | What we migrated | What stayed in QBO read-only |
| GL history | 3 years of monthly summary balances by account-sub-dept | Transaction-level GL detail |
| Open AR | All open invoices as of cutover with full detail (customer, due date, terms, aging) | Closed invoices > 90 days old |
| Open AP | All open bills with full detail (vendor, due date, GL coding, approval status) | Closed bills > 90 days old |
| Customers / vendors | Active records only, deduplicated, normalized | Inactive records (with mapping) |
| Items / services | Full active catalog with revenue / COGS account mapping | Discontinued items |
| Projects | Active and recently closed (last 12 months) with budget, actuals, billed-to-date | Older closed projects |
| Fixed assets | Full register with accumulated depreciation and remaining life | — |
| Bank reconciliations | Beginning balance and outstanding items as of cutover date | Historical reconciliation detail |
The cutover playbook — go/no-go gates and freeze period
Cutover is a six-day operation, not a single weekend. The freeze period is the critical control: no transactions are entered into either system between freeze-start and cutover-end. Anything customer-facing (invoicing, payment processing) is paused for that window or runs through a documented bypass with reconciliation back into NetSuite at cutover-end.
- T-7 days: All open transactions in QBO classified for cutover treatment (carry forward, close before cutover, defer to NetSuite). Status meeting with full team.
- T-3 days: Final QBO snapshot taken. Outstanding bank items reconciled. AR/AP aging report locked.
- T-2 days (Saturday): Freeze starts. No new transactions in QBO. Final trial balance pulled. Reconciliations to sub-ledgers complete.
- T-1 day (Sunday): Opening balances loaded to NetSuite. Trial balance reconciled to zero. Open AR/AP / fixed assets / projects loaded. Spot-check sample of 30 records per category.
- T-0 (Monday): Go/no-go meeting at 8am. 14 checks signed off. Production cutover at 10am. First transactions entered in NetSuite. Read-only QBO archived.
- T+1 to T+5: Daily standup. Issue queue triaged twice daily. User training delivered in role-specific waves. Hypercare team on standby.
- T+30: First close on NetSuite. Variance walk-through with controller. Auditor walk-through of evidence pack.
Industry variants — how scope shifts across business types
The 90-day playbook holds for ~$25–50M services-led businesses with 2–4 entities. Other shapes typically need scope adjustments.
| Industry | Typical timeline | What's different |
| Professional services (this case) | 90 days | Project accounting, time-and-billing, ARR add-on |
| SaaS / subscription | 90–120 days | Add ASC 606 rev-rec module, Stripe integration depth, usage-based pricing |
| Light manufacturing | 120–150 days | Add inventory, MRP, work orders, BOM, costing methodology |
| Multi-channel ecommerce | 120–180 days | Add Shopify / Amazon / wholesale channels, inventory across warehouses, sales tax (Avalara) |
| GovCon / federal services | 150–210 days | Add DCAA-compliant timekeeping, indirect rate structures, ICE-readiness — most teams stay on Costpoint instead |
| Healthcare services | 120–150 days | Add HIPAA-aware controls, payer-mix reporting, multi-location revenue |
| Real estate / construction | 150–180 days | Add WIP accounting, percentage-of-completion, AIA billing — Sage Intacct often a better fit |
Common pitfalls — and how to avoid them
- Chart of accounts copied verbatim from QBO. The biggest source of post-go-live cleanup. QBO COAs grow organically; NetSuite needs a designed COA with clear roll-up logic. Spend the first two weeks on this and only this.
- Class hacks not refactored into dimensions. Classes that were doing double duty (entity, project, segment) need to be untangled into the right NetSuite dimension before configuration starts.
- Integrations underestimated. "We have a Bill integration" sounds simple. It isn't — vendor master sync, GL coding rules, approval routing, payment file generation, and reconciliation back to GL all have to be redesigned. Plan integration as its own workstream.
- Custom fields imported wholesale. Most QBO custom fields are workarounds for missing native functionality. Don't carry them forward — solve the underlying need with native NetSuite features.
- Vendor and customer master not deduplicated pre-migration. Duplicates compound after cutover. Run a deduplication pass with the AP/AR teams before opening balances are loaded.
- Auditor not engaged until cutover. Walk the auditor through your control design and evidence pack at week 5 or 6, not at first audit. Late-discovered control gaps are expensive to fix.
- Training delivered too late. Role-specific training has to happen during configuration, not at cutover. Users learn the new system over weeks, not a single 4-hour session.
- Over-customization in phase 1. Customizations that aren't blocking go-live belong on a post-go-live optimization list. Customizations during phase 1 add risk and slip the timeline.
- No rollback plan. Every milestone needs a documented rollback plan, even if you never use it. The exercise of writing them surfaces real risks.
Cost ranges and ROI breakeven
We share specific pricing in scoping calls. For context: a $25–50M services company with 2–4 entities typically runs in the mid-six-figures all-in (NetSuite license, implementation, integrations, hypercare). Cost components break down roughly as follows.
| Cost component | Typical range (Year 1) | Notes |
| NetSuite license | $30K–$80K | Scales with users, modules, transaction volume |
| Implementation services | $120K–$280K | Discovery, configuration, data migration, hypercare |
| Integrations | $25K–$80K | Bill, payroll, CRM, banks, channel apps |
| Training & change management | $15K–$40K | Role-specific training, documentation, adoption support |
| Hypercare & first-close support | $25K–$60K | 30–60 days post-cutover |
| Year 1 total | $215K–$540K | Wide range reflects scope diversity |
| Year 2+ run-rate (license + ongoing) | $45K–$110K / yr | License + minor optimization |
ROI breakeven typically lands between 14 and 24 months for companies replacing QBO + manual consolidation + ad-hoc reporting. The breakeven is faster (10–14 months) for companies whose finance team time savings alone covers the run-rate, and slower (20–28 months) for companies primarily migrating for compliance/audit-readiness rather than time savings.
When not to migrate (yet)
- Below ~$15M revenue with single entity and minimal dimension needs. QBO Advanced + bolt-on tools (Bill, Stripe Sigma, lightweight BI) usually delivers more bang for buck.
- Founder-led with a 1–2 person finance team and no audit pressure. The change-management cost on a small team is often higher than the technical benefit.
- Major M&A activity in flight. Migrate after the deal closes and the combined entity structure is known, not before.
- Heavy GovCon or DCAA-regulated. Costpoint or Unanet are typically a better fit; NetSuite GovCon plug-ins exist but rarely match purpose-built systems.
- Real estate, construction, or AIA-billing-heavy services. Sage Intacct often fits the percentage-of-completion and WIP patterns better than NetSuite.
- Pure ecommerce at high SKU velocity. Shopify Plus + dedicated inventory and 3PL tools sometimes outperform NetSuite at this shape.
What we'd do the same — and what we'd change
Same: spending the first 14 days on COA and dimension design before any configuration. The integration map up front. The 15-day parallel close. Tool Box AI layer planned in scope from day 1. Auditor engagement at week 5.
Change: more aggressive vendor-master cleanup before migration — we did some, but ran into duplicates post-cutover that compounded into a week of cleanup. Earlier engagement with the auditor on the evidence pack design (week 4 instead of week 6). Spec-out hypercare ticket categorization in advance so the team isn't building it during firefighting. Pre-write the cutover communications (to customers for invoice changes, to vendors for new remit-to addresses) instead of drafting them in the cutover week.
Frequently asked questions
Can a real NetSuite implementation actually finish in 90 days?
For this size and complexity (~$30M revenue, 3 entities, services delivery), yes — but only with disciplined scope and an experienced team. We say no to scope expansion during the implementation; new requests go on a post-go-live optimization list. Larger or more complex companies (5+ entities, manufacturing, regulated) typically run 120–180 days.
What was the cost ballpark?
We share specific pricing in scoping calls. For context: a $25–50M services company with 2–4 entities typically runs in the mid-six-figures all-in (NetSuite license, implementation, integrations, hypercare). We size to the actual scope, not a percentage of license. See the cost table above for component-level ranges.
Did you keep QuickBooks running for any period after cutover?
Read-only access for historical lookup, kept for 18 months post-cutover (until past the audit cycle). All current-period work moved to NetSuite at cutover; no dual-system bookkeeping. After 18 months the QBO file is exported to PDF and CSV and archived.
How do you handle 3 years of GL history?
Summary monthly balances by account-sub-department migrated to NetSuite for trend reporting. Transaction-level detail stays in read-only QBO with a documented map for auditors. Full transaction-level migration is technically possible but rarely worth the cost — adds 3–5 weeks and $40–80K to the project.
What about cutover at fiscal year-end vs. mid-year?
Both work; year-end has clean opening balances and no period-bridging work, mid-year requires migrating year-to-date detail or running comparative reporting across two systems. We recommend year-end if the timeline allows; otherwise mid-year is fine with a clear comparative-reporting plan.
How do you handle existing integrations?
Catalog every integration during week 1 with: source system, destination system, data flow direction, frequency, who owns it, and replacement priority. Most integrations rebuild against NetSuite native APIs in week 3–5. A small number (custom internal tools) need migration time of their own and may run on bridges through the cutover.
What if our team has never used NetSuite?
Role-specific training delivered in waves during weeks 5–9: AP team, AR team, accountants, controller, executives. Each role gets a written playbook and a recorded walkthrough they can rewatch. Hypercare for 30–60 days after cutover answers questions in real-time.
What's the most common reason these projects fail?
Treating it as an IT migration instead of a controller-led operating-model redesign. The chart of accounts, dimension structure, and integration map are accounting decisions, not configuration tasks. When the controller drives the design and the implementation team executes against it, the project lands. When implementation drives the design, the project ships but the operating model is broken.
Can you support our existing audit cycle during cutover?
Yes. We schedule cutover to avoid live audit fieldwork — typically January–February or July–August work best for companies with calendar or June year-ends. The auditor walk-through happens before fieldwork starts, with an evidence pack walkthrough as part of cutover prep.
Do you do the implementation, or partner with a NetSuite firm?
For most engagements we lead the controller-side design and project management, and partner with a NetSuite implementation firm for technical configuration. The split is intentional — a controller-led design produces better outcomes than letting the implementation firm drive the operating model. We have working relationships with several firms and recommend based on industry and size fit.
What happens if we discover a problem after cutover?
Hypercare triages issues into three buckets: blocking (fix immediately), important (fix in week 1–2), optimization (post-hypercare list). Every issue is logged with a named owner and target close date. Most companies have ~30–60 issues in the first 30 days; ~5 are blocking, the rest non-blocking.
Related Ledger Summit work