Guides / n8n × HubSpot / Field mapping

Fix "property does not exist" errors on the HubSpot API

Fix HubSpot property errors by checking internal names, object type, archive state, payload shape, and current API version.

Advertisement
Short answer: Retrieve properties for the exact object and account, match the display label only as a lookup step, and send the internal name in the documented properties object. Confirm the property is active, writable, and available to the token. Do not copy a label from the UI or assume a property created in one HubSpot account exists in another.

Label versus internal name

Keep a dictionary with label, internal name, type, field type, object, and last metadata refresh. Use the internal name in the API. Labels can change for usability or translation; internal names are the integration contract.

Example:

Do not create an internal name from a label at runtime. That can produce a different name after punctuation, capitalization, or localization changes.

{
  "displayLabel": "Customer Segment",
  "internalName": "customer_segment",
  "object": "contacts",
  "type": "enumeration"
}

Confirm the object

A contact property is not automatically a deal property. Custom objects have their own property definitions. Check the route, object type, record ID, and property metadata together. Generic code should carry object type as an explicit parameter.

If the same label exists on contacts and companies, a label-only lookup is unsafe. Require an object-specific match.

Advertisement

Retrieve current metadata

Use HubSpot’s current CRM properties endpoint for the object you are working with. Inspect internal name, label, type, field type, options, archived state, and calculated or read-only flags. Cache metadata, but refresh after schema changes or a property error.

Then build the minimal payload:

The value must match the property type. An enumeration may require an internal option value rather than its label.

{
  "properties": {
    "customer_segment": "enterprise"
  }
}

Read-only and archived properties

Some returned properties are system-managed, calculated, or not writable. An integration should maintain an allowlist of fields it is permitted to write. An archived property may remain visible in historical responses but should not be used for new writes.

If a property was deleted and recreated with the same label, treat it as a new schema field. The internal name and options may differ.

Property names in filters

Search filters and request bodies can use property names differently depending on the endpoint. Check the current endpoint documentation. A property that appears in a response is not automatically valid in every search, sort, or update parameter.

Search source code for both the label and internal name. Remove stale aliases only after confirming no historical workflow needs them.

Debug transformations

Inspect the final serialized body. A mapper can change customer_segment into Customer Segment, add a hidden property, or place properties at the root instead of under properties. If curl succeeds but an automation tool fails, compare the actual outbound request.

Log method, path, object, property names, and status while redacting values where they contain personal data.

Multi-account environments

Property definitions are account-specific. Load metadata per account and do not share one global dictionary. A private app token also limits which account the request can access. Include account alias in cache keys and logs.

At deployment, run a schema check for every connected account. Fail clearly when a required property is missing, and provide the owner with the creation or mapping action.

Prevent recurring failures

Version your property contract, review changes, and test text, number, date, enumeration, and association-related fields separately. Add read-after-write checks for important fields. Keep a migration path when a property is renamed: update code, backfill data if needed, and remove the old field only after consumers are migrated.

The trap: matching a property by display label across accounts. The same label can map to different internal names, types, or options.

Schema drift and deployment order

Create or update the HubSpot property before deploying code that writes it. For a multi-account product, run the schema check during connection setup and again before the first write. If one account lacks the property, mark that connection incompatible instead of sending a request guaranteed to fail.

When renaming a label, keep the internal name stable if the business meaning is unchanged. When the meaning changes, create a new property and migrate deliberately. Test a property’s type as well as its name; a text value sent to a number, date, or enumeration property can produce a different validation error.

Useful failure diagnostics

Include account alias, object, route, property name, property metadata version, operation, and source row in the failure report. Redact contact values and tokens. A clear report lets an operator fix one property contract without rerunning every record.

Build a schema check into connection setup

When a new HubSpot account connects, load the properties for every object the integration supports. Compare required internal names, types, enumeration options, archived state, and write capability. Show a clear connection warning when a property is absent or incompatible. Do not wait for the first customer record to expose the defect.

For an existing account, run the same check before a release that changes mappings. Store a metadata timestamp and contract version. If a label changes but the internal name remains stable, no data migration may be needed. If the internal name or type changes, create a deliberate migration with a backfill and a rollback plan.

Keep source values and HubSpot values separate. A CRM property called customer_segment may accept internal enumeration values that differ from the labels shown to users. Normalize and map at the integration boundary, then verify a read-after-write result for one test record.

For unknown properties, stop only the affected feature and place records in a replayable queue. This is safer than dropping updates or taking every customer workflow offline.

Document the queue owner and maximum retention period.

Document the queue owner and maximum retention period for unresolved schema failures.

Expire sensitive source values from the queue while retaining enough metadata to reproduce the mapping problem safely.

Keep the contract version and object type.

That context prevents cross-account debugging mistakes.

Review it whenever a property is archived or recreated.

This small discipline prevents stale mappings from reaching production records.

Keep a schema-drift fixture

Create a harmless test record and store the expected object, internal property name, type, field type, and allowed option values. Run the fixture when a connection is created and after a metadata deployment. If it fails, report the exact missing or changed property before customer records are processed. This gives the integration an early warning that a UI change has become an API contract change.

Where these facts come from

Advertisement
Advertisement