HubSpot Destination

Overview

The HubSpot destination writes evaluation results to your HubSpot Contact and Company objects. TrailSpark maps scores, reasoning, and evaluation dates to custom properties you define in HubSpot, and optionally pushes buying-group coverage and role data when you enable that section.

Prerequisites

  • HubSpot integration connected (Settings > CRM Integration > Connect tab)
  • Custom properties created in HubSpot for TrailSpark data
  • Admin or Owner role in TrailSpark
  • HubSpot admin access to create properties

Custom Properties in HubSpot

Create these custom properties on the Contact object:

Property LabelSuggested Internal NameField Type
TrailSpark Scoretrailspark_scoreSingle-line text (values: hot, warm, cold)
TrailSpark Evaluation Datetrailspark_evaluation_dateDate picker
TrailSpark Reasoningtrailspark_reasoningMulti-line text

For company propensity, create on the Company object:

Property LabelSuggested Internal NameField Type
TrailSpark Propensitytrailspark_propensitySingle-line text (values: high_propensity, medium_propensity, low_propensity)
TrailSpark ICPtrailspark_icpSingle-line text (the ICP name the account was scored against)
TrailSpark Score statustrailspark_score_statusSingle-line text (values: current, retired, not_evaluated)
TrailSpark AI Reasoningtrailspark_account_reasoningMulti-line text (see the warning below)

If you also want the ICP or Score status on the Contact, create matching Single-line text properties (for example trailspark_icp and trailspark_score_status) on the Contact object.

Buying-group properties are documented below — add them only if you plan to use that feature.

Create a "TrailSpark" property group in HubSpot to keep all TrailSpark properties organized together.

Configuration

Go to Settings > CRM Integration > Destinations tab.

Destination Settings

  • Send Evaluations to HubSpot -- Toggle to enable/disable the destination
  • HubSpot Integration -- Select which connected HubSpot instance to use
  • Create Records if Not Found -- When enabled, creates new Contact records if no match exists. Filter by score level (Hot, Warm, Cold)

Contact Field Mapping

Map three required fields to HubSpot Contact properties:

UI LabelDescription
Score FieldWhere the evaluation score is stored
Evaluation Date FieldWhere the evaluation timestamp is stored
Reasoning FieldWhere the AI reasoning is stored
ICPWhere the name of the ICP the contact was scored against is stored (optional)
Score statusWhere the account's score status (current, retired, or not evaluated) is stored (optional)

TrailSpark loads your HubSpot property metadata automatically. Select properties from the dropdown. If a previously mapped property no longer exists in HubSpot, the field resets to blank.

Company Propensity Score

The propensity score card configures where account-level propensity (high/medium/low) is written:

  • Company Propensity Field (primary) -- Written to the Company object when a linked Company exists
  • Contact Propensity Field (fallback) -- Written to the Contact object when no Company is linked

Both fields are optional.

ICP

The ICP card configures where the name of the ICP each account was scored against is written on the Company. It travels on the same account-level sync as the propensity score, so a CRM automation can branch on which ICP produced a score (for example, route Trial-ICP hot accounts to Customer Success and Acquisition-ICP hot accounts to Sales). The field is optional. When an account was scored without a specific ICP, nothing is written.

AI reasoning

The AI reasoning card configures where each account's plain-language explanation is written on the Company — the same narrative you see on the account in TrailSpark and in Slack alerts. It travels on the same account-level sync as the propensity score and always describes that score, so the two can never disagree.

Map it when you want reps to read why an account is hot without leaving HubSpot — on the Company record, in an account view, in a report, or in a meeting sidebar. This is separate from the Contact-level Reasoning Field, which explains an individual person's score; map either, both, or neither.

Use a Multi-line text property. HubSpot updates a record in a single write, so a property that is too small to hold the explanation rejects the whole update — the propensity score and buying-group fields included, not just the reasoning. A Single-line text property is not large enough.

The field is optional. When an account's evaluation has no explanation, nothing is written — your existing property value is left untouched rather than blanked. When an account's score is retired, the last explanation stays in place and Score status flips to retired.

Score status

The Score status card configures where each account's score status is written on the Company (and, on the Contact tab, on the Contact). It travels on the same sync as the propensity score and takes one of three values:

  • current -- the pushed propensity score reflects the account's live standing.
  • retired -- the account no longer matches the ICP it was scored against, so its last pushed score is stale and should no longer be trusted.
  • not_evaluated -- the account has no evaluation yet.

When an account leaves the ICP it was scored against, TrailSpark promptly updates this field to retired in HubSpot (for destinations that map it) — you don't have to wait for the account's next sync. Without the field, a retired account simply stops receiving score updates and its last pushed score silently goes stale, so a CRM automation cannot tell a fresh score from a stale one. Map it to let automations suppress or flag scores that are no longer current. The field is optional; unmapped, nothing is written.

Enrichment Fields

The Enrichment Fields card writes data from your connected enrichment providers (for example Clay or Reo.dev) into HubSpot Company fields you choose. All fields are optional and only write when you map them.

UI LabelWritten toWhat it contains
IndustryCompanyIndustry, from your enrichment provider(s)
Employee CountCompanyEmployee count, from your enrichment provider(s)
RegionCompanyGeographic region, from your enrichment provider(s)
Market SegmentCompanyMarket segment, from your enrichment provider(s)
Website DomainCompanyWebsite domain, from your enrichment provider(s)
TrailSpark writes only enrichment-provider data into these fields -- never your HubSpot Company's own value, and never a blend of the two. A mapped field is left blank when there is no matched enrichment value; it is not filled from HubSpot.

This writes on the same account-level sync that pushes propensity and buying-group coverage, for accounts linked to a HubSpot Company record.

Custom enrichment fields

If your enrichment provider sends fields beyond the standard five and you've turned them on under Enriched fields (see Enrichment Rules & Budget Caps), each active field gets its own extra row on this card, using the label you gave it. Map it to a HubSpot Company property the same way as the standard fields. Turning a field off later doesn't remove an existing mapping -- the row is kept and marked "No longer active," and it stops writing until the field is reactivated.

Buying Group Fields

Enable the Push buying-group fields toggle to push coverage and role data alongside evaluation scores. All fields in this section are optional — they write only when you map them.

Contact properties

UI LabelWritten toWhat it contains
Buying-group rolesContactThe contact's assigned role names, semicolon-separated
CRM Role Source FieldRead from ContactTrailSpark reads this field from your HubSpot contacts. Set it to a field where you've recorded a role; TrailSpark uses it as the authoritative assignment.

Account properties (company-level)

UI LabelWritten toWhat it contains
Buying-group stageCompanyDormant, Forming, or Complete
Engagement completeness (%)CompanyShare of required roles with an actively engaged person
Known completeness (%)CompanyShare of required roles with any person assigned
People still neededCompanyCount of additional people needed to complete the group
Missing rolesCompanyRole names not yet filled (semicolon-separated)
Engaged rolesCompanyRole names currently active (semicolon-separated)
Propensity as-of dateCompanyDate the propensity score was last evaluated
At-risk statusCompany"At Risk" when high propensity meets stalled engagement; otherwise "Current"
Renewal healthCompanyHealth signal for renewal-ICP accounts: Healthy, Cooling, Fading, Cold, or Pending

For what these values mean, see Account coverage.

You do not need to map every buying-group property. Map only the ones you plan to act on in HubSpot workflows or lists.

Troubleshooting

IssueResolution
Property not in dropdownVerify the property exists on the Contact object and the internal name is correct
Data not writingCheck that the destination is enabled and integration is still connected
Contact not foundTrailSpark matches by email address -- ensure the contact exists in HubSpot
Buying-group fields not writingConfirm the "Push buying-group fields" toggle is on and the property is mapped

Next Steps