Skip to content

Syncing Custom Fields From a Legacy NetSuite to HubSpot

A practical guide for NetSuite admins and implementation consultants worried that a heavily customized, decades-old NetSuite instance will not map cleanly to HubSpot. Covers how auto-detection surfaces standard and custom objects, how custom fields map to HubSpot properties, how field-level source of truth and bulk conflict resolution handle records that disagree, and how duplicates on messy data are matched instead of recreated.

Author
Ruben Burdin · Founder & CEO
Published
July 20, 2026
Read time
9 min read
Syncing Custom Fields From a Legacy NetSuite to HubSpot
DATA ENGINEERING

Ask anyone who runs a mature NetSuite account about connecting it to HubSpot and you get the same worried question first: will it even pick up our custom fields? These are accounts that have been live for years, sometimes since the early days of NetSuite, customized by every admin and consultant who ever touched them. Custom fields, custom record types, custom forms, layered on top of layers. The fear is that an integration will only understand the standard objects and quietly miss everything that makes the account theirs.

It is a fair fear, because plenty of connectors do exactly that. The good news is that it is a solved problem when detection reads your real schema instead of assuming a template. This guide covers how custom and standard objects get auto-detected on even a heavily customized NetSuite, how those custom fields map to HubSpot, and what happens when the same record disagrees across the two systems.

Four aspects of syncing a legacy NetSuite to HubSpot: auto-detected custom objects, standard objects, field-level source of truth, and bulk conflict resolution

The setup below assumes a managed sync platform such as Stacksync connecting NetSuite and HubSpot. For the full method, cost, and API-limit picture, see the HubSpot and NetSuite integration guide. This post goes deep on the part that worries NetSuite admins most: custom data on a legacy instance, and who wins when records collide.

Why a customized NetSuite scares integrations

No two NetSuite accounts are alike. A retailer's instance and a manufacturer's instance share the standard objects and almost nothing else. Years of SuiteBuilder work add custom fields to contacts and customers, custom record types for whatever the business actually does, and custom forms that reshape how those records look. That is the account working as intended. It is also what a naive integration cannot see.

A connector built around a fixed list of standard fields maps contacts and companies fine, then stops. The custom fields that carry the important context, the ones a project spent weeks defining, are invisible to it. The workaround is usually a developer hand-coding against the NetSuite API for each custom field, which is slow, brittle, and breaks the moment the schema changes. On a decades-old instance with hundreds of custom fields, that is not a workaround, it is a project.

Diagram showing a legacy NetSuite with standard and custom objects being auto-detected and mapped to HubSpot properties
Detection reads the real schema, so custom objects and fields map alongside the standard ones.

So the real question is not whether the sync is possible. It is whether the integration can see what your account actually contains, without a developer translating it field by field. That comes down to how it detects the schema.

Auto-detecting standard and custom objects

The approach that works on a legacy account is to read the schema, not assume it. Stacksync introspects your NetSuite account through the API and surfaces the objects and fields that are really there: standard objects like contacts, customers, and invoices, and the custom fields and custom record types your account has accumulated. You are picking from your instance, not from a generic default set.

This is what makes an old, heavily customized account a non-issue. The more customization, the more there is to detect, but the mechanism is the same. A field added in an implementation years ago appears in the mapping just like a standard one. Nothing has to be pre-registered, and no developer has to write code against each custom field for it to show up.

  • Standard objects like contacts, companies, and invoices are detected and ready to map immediately.
  • Custom fields from SuiteBuilder appear on their parent objects, with their real names and types.
  • Custom record types unique to your business are surfaced so you can sync them, not just the built-in ones.
  • Schema changes are picked up on re-detection, so a new custom field is available to map without a rebuild.

Mapping custom fields to HubSpot properties

Once the fields are detected, mapping is a matter of pairing each NetSuite field to a HubSpot property and setting the direction. Standard pairs are obvious. Custom fields map to existing HubSpot properties or to new ones you create for them, with type handling so a NetSuite date, number, or list value lands as the right kind of HubSpot property.

NetSuite field (example)HubSpot propertyNotes
Contact (standard)ContactMatched on external ID, not created twice
Customer (standard)CompanyLinked by the NetSuite internal ID
Account manager (custom)Owner or custom propertyCustom field, mapped like any other
Region or segment (custom list)Dropdown propertyList values mapped to HubSpot options
Note ID or legacy key (custom)External IDUsed as a matching key for clean linking

Standard and custom NetSuite fields mapping to HubSpot properties, with a stable key for matching.

Because direction is set per field, you can pull a custom NetSuite field into HubSpot one-way, push a HubSpot field the other way, or run a field two-way, all on the same record. That per-field control is what makes the mapping match how your teams actually use the data rather than forcing one global direction.

When records disagree: source of truth and conflict resolution

Detecting and mapping fields is the easy half. The half that decides whether the sync is trustworthy is what happens when the same record has different values on each side. On legacy data this is guaranteed: a customer whose address changed in NetSuite but not in HubSpot, a contact with two different phone numbers, a title updated in the CRM but stale in the ERP. Something has to decide which value wins, and it should not be a coin flip.

The control that matters here is source of truth set at the field level. You say NetSuite wins for billing and financial fields, HubSpot wins for marketing and engagement fields, on the same record. When a conflict occurs, that rule resolves it automatically. The cases that genuinely need a person are collected in an issues view where you can review them and bulk-resolve rather than hunting record by record. For a deeper look at how that engine works across systems, see the conflict resolution engine deep dive.

State diagram of field-level conflict resolution: a record changes on both sides, the source-of-truth rule decides the winner, and unresolved cases go to an issues view for bulk resolution
Field-level source of truth resolves most conflicts automatically; the rest go to an issues view.

This is the difference between a sync that copies a mess across and one that helps you clean it up. A blunt one-system-wins rule would overwrite good HubSpot marketing data with stale ERP values, or the reverse. Field-level source of truth keeps each team's authoritative fields authoritative.

Book a Stacksync demo: see your NetSuite custom fields detected and mapped to HubSpot

Cleaning up duplicates and mismatches as you connect

Legacy data comes with duplicates and mismatches already baked in, and the goal is to not make them worse. Matching on a stable key, usually the NetSuite internal ID stored as a HubSpot external ID, means an existing record updates in place instead of spawning a second copy. Where duplicates already exist, they surface in the issues view so you can merge and resolve them rather than syncing both.

In practice, connecting a customized NetSuite to HubSpot becomes a chance to tidy the data, not a way to spread the problem. You see the conflicts and duplicates the two systems have been hiding from each other, and you resolve them with a rule or a bulk action. For the reliability side of this, why real-time and observable beats a scheduled job that fails silently, see real-time versus batch HubSpot and NetSuite sync.

Your customization is the point, not the problem

The worry that a decades-old, heavily customized NetSuite will not map to HubSpot has the answer backwards. When detection reads your real schema, that customization is exactly what gets picked up: the custom fields, the custom record types, the account as your business actually built it. You map what is there, set direction and source of truth per field, and resolve the conflicts legacy data always carries.

No developer hand-coding every field, no fixed template that ignores your custom work, and no blunt rule that overwrites good data. To see your own NetSuite objects and custom fields detected and mapped to HubSpot, book a demo.

Start syncing NetSuite custom fields to HubSpot with Stacksync

FAQ

Frequently asked questions

Can Stacksync sync custom fields and custom objects from NetSuite to HubSpot?
Yes. Stacksync auto-detects the objects and fields in your NetSuite account, standard and custom, by reading the schema through the API. Custom fields added with SuiteBuilder and custom record types show up alongside the standard ones, so you map what actually exists in your instance rather than a fixed list of default fields. Each custom field can map to a matching HubSpot property, with type handling and transformations where needed.
Will it work on an old, heavily customized NetSuite account?
Yes, and that is the common case. Accounts that have run for years, some going back to the early days of NetSuite, accumulate custom fields, forms, and record types from every project and admin who touched them. Because detection reads your account's real schema instead of assuming a template, a heavily customized instance is not a blocker. The customization is exactly what gets picked up and mapped.
Do I have to map every field by hand?
No. Detection surfaces the full set of objects and fields for you, so you are choosing from what is really there rather than hunting for field names. You map the ones you want to sync, set the direction per field, and leave the rest. Standard objects like contacts and companies map quickly, and custom fields are added to the same mapping without a developer writing code against the NetSuite API.
Which system wins when a contact has different info in NetSuite and HubSpot?
You decide, at the field level. Stacksync has a choose-source-of-truth setting so you can say NetSuite wins for billing fields while HubSpot wins for marketing fields, for example. When the same record differs on both sides, the source-of-truth rule resolves it, and anything that needs a human is collected in an issues view where you can review and bulk-resolve conflicts instead of fixing them one at a time.
How are duplicates handled when syncing a messy NetSuite to HubSpot?
Records match on a stable key, usually the NetSuite internal ID stored as an external ID in HubSpot, so an existing record updates in place instead of being created twice. On legacy data that already has duplicates, the issues view surfaces them so you can resolve and merge rather than syncing the mess across. The goal is to clean up as you connect, not to copy the problem into HubSpot.
Can I set the source of truth per field instead of per system?
Yes. Direction and source of truth are set per field, not just per system or per object. That lets NetSuite own the financial and billing fields while HubSpot owns the marketing and engagement fields on the same record, which is usually how teams actually want it. It is the difference between a blunt one-system-wins rule and a mapping that matches how each team uses the data.

About the author

Ruben Burdin
Founder & CEO

Ruben Burdin is the Founder and CEO of Stacksync, the first real-time and two-way sync for enterprise data at scale. Ruben is a Y Combinator alumni with a strong background in software engineering and business.

All posts by Ruben Burdin

About Stacksync

Stacksync powers real-time, two-way sync between CRMs, ERPs, and databases. Engineers sync data at scale and automate workflows, not dirty API plumbing.

Coworkers laughing in front of a laptop in a casual office setting

Your last integration took months.
Your next one takes a prompt.