crossary
How it worksSee it workTrustPricingFree template
Log inStart free
Start free
Worked example

QuickBooks Online to NetSuite: a customer mapping, exactly as it came out

Two public vendor specs in, one draft mapping out, nothing edited afterwards. What matters isn't how much it filled in — it's that a reviewer can check any row in seconds, and the rows nobody can answer stay visibly open instead of quietly guessed.

Updated August 2026

What went in

Two documents, both published by the vendors themselves, both used as-is:

  • Source — Intuit’s QuickBooks Online Accounting API reference for the Customer entity: 42 fields with types, requiredness and descriptions.
  • Target — NetSuite’s public SuiteTalk schema for the Customer record: 139 fields, taken straight from the XSD.

Both files were read in full — no truncation, nothing dropped. That matters, because a mapping drafted from part of a spec that presents itself as a mapping of the spec is the first way this kind of tool lies to you.

Crossary's Fields tab for this run: 181 of 181 extracted fields applied, the 42 QuickBooks Online source fields listed with object, type and description, a banner naming the one blocker question open on that tab, and a clarifying-questions panel whose first blocker asks which NetSuite subsidiary should receive migrated customers.
181 fields out of two documents.The inventory both sides are mapped against — 42 from QuickBooks, 139 from NetSuite. The panel on the right is the extraction phase already stopping on the subsidiary problem: NetSuite requires one, QuickBooks has nothing to supply it.

How you check a row in ten seconds

This is the part practitioners tell us actually goes wrong: not the mapping, the review — a tidy sheet invites a rubber-stamp. So a derived rule that rests on something the spec states carries that verbatim line next to it; one that rests on nothing the spec states carries no quote, and says so. You judge the source, not the model. Three rows from this run show what that feels like; the full table follows below.

isInactiveconditionalhigh

CASE WHEN Active IS NULL THEN NULL ELSE NOT Active END

NetSuite inactivity is the logical inverse of QBO's enabled-for-use indicator.

“If true, this entity is currently enabled for use by QuickBooks.” — QuickBooks Online, Active

A polarity flip. Copy this one straight across and every active customer arrives in NetSuite switched off — and the quote is what lets a reviewer confirm the inversion in two seconds instead of trusting it.

parentlookuphigh

Lookup NetSuite Customer where externalId = ParentRef.value; return its RecordRef

QBO ParentRef identifies the immediate parent, and the parent can be resolved through the migrated QBO external identifier.

“A reference to a Customer object that is the immediate parent of the Sub-Customer/Job in the hierarchical Customer:Job list.” — QuickBooks Online, ParentRef

It didn’t just pair two fields — it worked out that the parent has to be resolved through the external ID the migration itself writes, which constrains the load order.

internalIdgeneratedhigh

Assigned by NetSuite when the Customer record is created

No source field applies: the target system produces this value itself.

No quote on this row — it makes no claim about the source document, so there is no passage to cite.

Not every unmapped field is a gap. This one has no source because it can’t have one, and saying so is different from shrugging.

What came out

Of the 139 NetSuite customer fields, the run proposed a source for 29 and abstained on 110, raising 21 questions along the way — nine of them serious enough to stop on, covering eight distinct problems. The abstentions are not a shortfall. QuickBooks Online has no credit limit, no sales rep, no territory, no subsidiary, no partner-and-campaign lineage; a tool that returned 139 confident rows here would have invented 110 of them — and every invented row is one a reviewer has to catch, or worse, doesn’t. The gaps are what make the review of the other 29 mean something.

Customer

QuickBooks Online→NetSuite

29 / 139 target fields mapped

28mapped from a source field
1need no source field
110the run declined to guess
One mark per NetSuite field in this run’s target inventory. 29 of 139 carry a mapping; the 110 open rings are the ones the run declined to guess, and they are the reason the review is worth doing.
Crossary's mapping review table for this run: 29 of 139 target fields mapped, 110 not yet mapped, and rows reading 'no source' each carrying the question the AI raised instead of a guess — customForm, entityId, isPerson, defaultAddress, subsidiary. A banner above the table names the eight blocker questions open on that tab, and the panel on the right holds them unanswered; the table below stays fully editable.
The gaps are rows, not silence.Every unmapped target stays in the table as a row — all 110, filterable as Gaps — rather than being quietly dropped or filled with a plausible guess, and the 16 the run raised a question about carry it. The eight blockers on the right hold the export until a human answers them — the review itself stays open, so the other rows can be worked meanwhile. Nothing is guessed to keep things moving.

The 29 it proposed

Unedited and in export order — each one checkable the way the three above were. Confidence is the model’s own self-assessment, a cue for what to review first, never a verification.

QuickBooks OnlineNetSuiteTypeConfidence
DisplayNamealtNamedirecthigh
AlternatePhonealtPhonetransformationhigh
Notescommentsdirecthigh
CompanyNamecompanyNamedirecthigh
CurrencyRefcurrencylookuphigh
PrimaryEmailAddremailtransformationhigh
IdexternalIddirecthigh
Faxfaxtransformationhigh
GivenNamefirstNamedirecthigh
—internalIdgeneratedhigh
ActiveisInactiveconditionalhigh
FamilyNamelastNamedirecthigh
MiddleNamemiddleNamedirecthigh
MobilemobilePhonetransformationhigh
BalanceopeningBalancedirecthigh
OpenBalanceDateopeningBalanceDatetransformationhigh
ParentRefparentlookuphigh
PrimaryPhonephonetransformationhigh
PrintOnCheckNameprintOnCheckAsdirecthigh
ResaleNumresaleNumberdirecthigh
Titlesalutationdirecthigh
Taxabletaxabledirecthigh
TaxabletaxExemptconditionalhigh
SalesTermReftermslookuphigh
BillAddr + ShipAddraddressbookListtransformationmedium
PreferredDeliveryMethodemailTransactionsconditionalmedium
PreferredDeliveryMethodprintTransactionsconditionalmedium
DefaultTaxCodeReftaxItemlookupmedium
WebAddrurltransformationmedium

The eight it stopped on

Nine blocker-severity questions came out of the run, covering eight distinct problems — the subsidiary one was flagged independently in both the field and the mapping phase. If you have done this migration, you have had these exact arguments:

  • Which NetSuite subsidiary should receive migrated customers? (raised in both phases)
  • Which QBO value should become the NetSuite Customer entityId?
  • What rule should determine NetSuite isPerson?
  • Which QBO address, if any, should populate NetSuite defaultAddress?
  • How should QBO tax identifiers be migrated given that API responses mask them?
  • How will customer receivables balances be migrated?
  • Which NetSuite account should be used for openingBalanceAccount when opening balances are loaded?
  • How should BillAddr and ShipAddr be represented in NetSuite addressbookList?

None of these can be answered from the two specs, which is precisely why they are questions and not mappings. The subsidiary one alone decides whether the load runs at all.

What this does not show

  • It is not a reviewed workbook. This is raw output. A real deliverable has a human decision on every row; that step is the product, and it hasn’t been done here.
  • The 29 are not verified correct. They are proposals with their evidence attached so you can check them quickly. At least one — url — carries an explicit assumption that the exact emitted property needs confirming.
  • Your specs are messier than these. Vendor API references are unusually clean. A client’s half-finished requirements sheet will produce more questions, not fewer.
  • It maps the spec, not your data. Nothing here touched a customer record, and nothing moves anything: Crossary produces the design a developer then implements.
Run on 2 August 2026 against the vendors’ then-current public specs. Both documents are the versions their owners publish; neither was edited before upload, and no mapping row was edited after. The blank version of this deliverable is available as a free source-to-target mapping template, and the same pipeline’s other runs are the QuickBooks → Business Central customer mapping and the Salesforce → HubSpot contact mapping.

See this on your own specs

The fastest way to judge this is on a case you know. Email a source and target spec pair — redacted is fine — to support@crossary.com and you’ll get back exactly what this page shows: the draft workbook, gaps and questions included. Not a reviewed deliverable, not a sales call — the honest first pass, on your case.

Or run it yourself — freeOr walk a smaller worked sample first
crossary

Source-to-target data mapping that shows its work — and flags the gaps instead of guessing.

Product
The reviewed rowHow it worksThe guided sampleWorked examplesGuidesFree mapping templatePricing
Trust
Trust mechanicsFAQSecurityPrivacy & data
Company
SupportTermsLog in
© 2026 Crossary. All rights reserved.AI proposes · you decide · nothing ships you didn't approve.
TermsPrivacyCookiesSubprocessorsDPA