Mapping console
Every source column is matched to a target column automatically, then shown to you for confirmation. Nothing is written until you approve it.
Where these definitions come from
Source — Intuit's published XSD schemas, the same ones that generate Intuit's official QuickBooks V3 SDK. Field names, types and permitted values are read directly from them.
Target — Oracle's published SuiteTalk schemas, version v2019_1_0.
Target field names are read from the SOAP schema, which is public. If the migration writes over REST, confirm the names against your own NetSuite account before the production run — custom fields and anything added after that schema version will not appear here.
The source schemas also cannot tell us which fields are mandatory: almost everything is optional in the schema because one file serves both QuickBooks Online and Desktop. Requiredness is left blank until a profiling run measures it against your actual data.
Choose what to migrate
Load order matters. Accounts, customers and vendors must exist before the transactions that point at them.
Master data
Transactions
Dimensions
Tax
Match the columns
Confident matches are ticked already. The ones below them are guesses — read those.
| ✓ | Source field | Target field | Transform | Required | Confidence | Why |
|---|---|---|---|---|---|---|
| Idstring | none | Curated | Becomes the NetSuite externalId — what makes re-runs idempotent | |||
| Namestring | none | Curated | Account name | |||
| AcctNumstring | none | Curated | Account number | |||
| AccountTypeenum · 16 values | value map | Curated | Systems spell the values differently — translated below | |||
| Activeboolean | negate | Curated | NetSuite stores the inverse — value must be negated | |||
| OpeningBalancedecimal | none | Curated | Parsed as exact minor units, never floating point | |||
| ParentRefReferenceType | ref_to_externalid | Curated | Hierarchy parent, resolved by externalId | |||
| CurrencyRefReferenceType | ref_to_externalid | Curated | Reference resolved to a NetSuite RecordRef | |||
| Descriptionstring | none | Curated | Direct correspondence | |||
| OpeningBalanceDatedate | date_format | Curated | NetSuite carries the opening balance date on tranDate | |||
| SyncTokenstring | none | None | QuickBooks version stamp — usually dropped, but only you decide | |||
| SubAccountboolean | none | None | No proposal — nothing on the target resembles this field |
Value translation — AccountType → acctType 16 values · 16 matched
| Source value | Target value | Match |
|---|---|---|
| Bank | _bank | High |
| Accounts Receivable | _accountsReceivable | High |
| Accounts Payable | _accountsPayable | High |
| Cost of Goods Sold | _costOfGoodsSold | High |
| Long Term Liability | _longTermLiability | High |
| Non-Posting | _nonPosting | High |
Proof the numbers survived
After loading, the engine recomputes each figure from the source and reads the same figure back out of NetSuite. Anything that disagrees is reported with the records behind it.
Review and export
; QuickBooks Online -> NetSuite migration configuration ; Generated by the mapping console [provenance] qbo_catalog_source = https://github.com/intuit/QuickBooks-V3-Java-SDK netsuite_wsdl_version = v2019_1_0 netsuite_catalog_is_provisional = true [engine] batch_size = 100 rate_limit_rps = 10 reject_unverified_required = true ; Refuse to start if any mapping still carries required = UNVERIFIED. [entity.Account] enabled = true load_order = 1 netsuite_record_type = Account operation = upsert [mapping.Account.001] source_path = Id target_path = externalId required = UNVERIFIED [mapping.Account.005] source_path = Active target_path = isInactive transform = negate ; NetSuite stores the inverse. Value must be negated. [valuemap.Account.AccountType] map[] = Bank|_bank map[] = "Accounts Receivable"|_accountsReceivable ; …16 entries… unmapped_action = REJECT