HubSpot + Hightouch integration

Hightouch reads modelled warehouse tables and writes only the changed rows into HubSpot. What its app covers, where it breaks, and when a build fits.

Native app

Scope this integration Book a scoping call

Is there a native Hightouch + HubSpot integration?

Yes. Hightouch publishes its own app in the HubSpot App Marketplace as of September 2026, and it is the right route when a warehouse already holds modelled tables that each map to a HubSpot object on a schedule. It stops being enough when records need branching rules, a write back into an operational system, or a reaction in seconds rather than on the next run.

Recommended route
Native app
Build effort
15 to 30 hours
In the HubSpot App Marketplace?
Yes, Hightouch
Typical elapsed time
1 to 2 weeks

Marketplace checked September 2026.

Why teams connect Hightouch to HubSpot

The request usually comes from a data team that has already done the hard part. Accounts, usage, plans and revenue sit in a warehouse as clean, modelled tables, and the sales team still works from a HubSpot record that knows none of it. Hightouch closes that gap without a service to run: it reads a model, works out which rows changed since the last run, and writes those rows into HubSpot.

The ask is rarely all the data. It is a health score on the company record, a plan tier a workflow can branch on, a product event on the contact timeline, or a list of accounts whose usage dropped this week. Each of those is a model the data team already trusts and a HubSpot property somebody in revenue already wants.

Hightouch now sells itself as a marketing platform and a composable customer data platform, with a free Basic Reverse ETL tier, and reverse ETL is the part a HubSpot sync uses. Its about page describes a venture-backed company with no parent named. That matters when you compare it with Census, which Fivetran now owns.

The decision worth making first is which fields the warehouse owns. A property Hightouch writes on every run should be read-only for people in HubSpot, because the next run puts the warehouse’s value back. A property people edit belongs outside the mapping.

What syncs

Hightouch writes three kinds of thing into HubSpot: records on standard or custom objects, custom behavioural events on the contact timeline, and contact list membership. Records take upsert, update or insert modes, events take insert, and lists take add and remove.

The match key is the decision that lasts. Hightouch suggests matching on what HubSpot deduplicates on: email for contacts, domain for companies, or the HubSpot record ID. Email is right for contacts, because HubSpot refuses a second contact with an email already in use. Domain is weaker for companies. Two warehouse accounts can share one, and it changes when a business rebrands. We create a unique custom property holding the warehouse account key and match on that, and we do the same for deals and custom objects.

Events are the other stream worth planning. Each one needs a truly unique key in the model, or a replayed row arrives twice, and events need Hightouch connected with enterprise scopes. A custom object has to exist in HubSpot before Hightouch can sync to it.

Objects that sync between Hightouch and HubSpot
Source object HubSpot object Direction Match key Notes
Account model Company Into HubSpot Warehouse account key in a unique custom HubSpot property Domain is shared by some accounts and changes when a business rebrands.
Person model Contact Into HubSpot Email, which HubSpot already holds unique HubSpot refuses a second contact with an email already in use.
Subscription or order model Deal Into HubSpot Source order identifier in a unique custom HubSpot property Associated to its company in the same sync, after the company sync.
Usage or health metric model Company Into HubSpot Warehouse account key, written to numeric company properties Properties rather than an object, so workflows and lists can read them.
Product event model Engagement Into HubSpot A unique event key per row in the model Custom behavioural events, which need OAuth with enterprise scopes.
Audience model Contact Into HubSpot Email or HubSpot contact ID Kept as contact list membership, with add and remove modes.

Architecture

A Hightouch sync is polling on a snapshot rather than on a timestamp. On each scheduled run Hightouch queries the model, compares the result with the previous run’s snapshot by primary key, and sends only the rows that were added or changed, along with any rows that failed last time.

Where that comparison runs is a choice. The basic engine keeps the snapshot on Hightouch’s own infrastructure and needs only read access. The Lightning engine keeps it in a schema inside your warehouse, needs write access, and is what Hightouch recommends above 100 thousand rows.

Order matters for associations. The sync for the associated object has to run before the sync that points at it, so we chain them in a sequence and set each member to a manual schedule. Replay is a full resync, which treats every current row as new. A sync idle for more than 30 days needs a reset or a full resync, because its snapshot has expired.

  1. Sources

    • Product database
    • Billing system
    • Web and app events
  2. Warehouse

    • Snowflake
    • Microsoft Fabric
    • BigQuery or Databricks
  3. Reverse ETL

    • Hightouch Sends only the rows that changed
  4. Destinations

    • HubSpot Objects, events and lists
    • Advertising platforms
    • Customer success tools
Source systems load into a warehouse, where the data team models them. Hightouch reads those models on a schedule, works out which rows changed since the last run, and writes them into HubSpot and the other tools it feeds.
Hightouch queries a warehouse model on the sync schedule, compares the result with the last run's snapshot by primary key, and upserts only the added and changed rows into HubSpot companies. Contacts and deals follow in the next sync of the sequence with their company association, events go to the timeline, and rows HubSpot rejects raise an alert and retry on the next run.

What the API allows

API style
REST
Authentication
OAuth 2.0
Webhooks
No
Changed-since filter
Partial
Sandbox
Unknown
Rate limit
110 requests every 10 seconds per HubSpot account, HubSpot's limit for a marketplace app

Developer documentation hightouch.com

Three ways to connect

Three questions decide the route here. Does the warehouse already hold keyed, modelled tables? If it does, Hightouch reads them as they are, and if it does not, that modelling comes first whichever tool you pick. Is HubSpot the only place the data goes? Hightouch lists more than 300 destinations, so the same models can feed advertising and customer success tools as well. And does anything have to happen per record, such as a rule that routes a deal, a write back into an operational system, or a reaction within seconds? Then the logic needs somewhere to run, and a keyed service is that place.

Census is the like-for-like alternative. Where the warehouse is Snowflake, compare HubSpot’s own options on the Snowflake page. Where the operational data already lives in a lakehouse, see Microsoft Fabric.

  • Custom middleware

    Possible

    A keyed service earns its cost when a record's route depends on rules, when the sync must also write back into an operational system, or when a change has to land in seconds.

  • Automation platform

    Avoid

    An automation platform starts from a single trigger, such as a form or a new row. A warehouse model has neither, so every run would need its own logic for what changed and what disappeared.

What breaks and how we prevent it

Two syncs sharing one request budget

HubSpot allows a marketplace app 110 requests every 10 seconds per installing account, and every Hightouch sync into the portal shares that allowance. Hightouch traces its per-second limit error to concurrent syncs or association lookups. We stagger schedules, chain related syncs in one sequence, and keep backfills outside working hours.

One invalid row fails its batch

HubSpot counts every record in a batch as rejected when one of them is invalid, so a single bad value holds back the good rows sent with it. We turn on split retries, which retry only the failing records rather than the whole batch, and route the rejected rows alert to the delivery channel.

Enumeration properties accept only their internal values, and the match is case sensitive, so a warehouse value of Gold fails against an option stored as gold. Date properties take a date at midnight UTC. We list every mapped property’s type and options in discovery, and cast values in the model rather than in HubSpot.

A snapshot that expired

A sync idle for more than 30 days loses its baseline. A reset then sends nothing, and a full resync sends every row and spends the request budget in one go. Changing a model’s primary key breaks the same comparison. We treat either as a planned backfill with an agreed window.

Associations configured on both objects

An association belongs in one sync only, the one for the object that carries it. Configured on both sides, it produces conflicting one-to-one errors. The overwrite mode also removes associations created outside Hightouch, including ones a salesperson added by hand, so we use the mode that deletes only what the model removed.

Our approach

  1. Scope. We list the models the warehouse already holds, the HubSpot property each column lands in, and the owner of every field.
  2. Architect. We create unique custom properties for the match keys, choose the sync engine, and order the syncs into a sequence with parents first.
  3. Build. Models, syncs and field mappings in the client’s Hightouch workspace, with delete behaviour set per object and alerts routed to the delivery channel.
  4. Validate. A full run into a HubSpot sandbox portal, with counts compared object by object and every rejected row read.
  5. Operate. We review alerts and run history each week, and re-map when a warehouse model changes.

Common questions

Does Hightouch publish its own HubSpot App Marketplace listing?

Yes. The listing is published by Hightouch itself, so it is a vendor-built app rather than one HubSpot maintains. You connect it with OAuth from inside Hightouch, ideally as a Super Admin, and choose OAuth with enterprise scopes if you plan to send custom behavioural events or write sensitive properties. The Hightouch subscription belongs to your business, not to us.

How often can a Hightouch sync update HubSpot?

As often as every minute on a cron schedule, or on an interval, on set days and times, or when a dbt Cloud or Fivetran job finishes. The Free and Self-serve plans are limited to hourly runs. In practice the warehouse sets the pace: a model rebuilt nightly gives HubSpot nightly data, however often the sync itself runs.

How does Hightouch know which warehouse rows changed?

It compares each run's query results with a stored snapshot of the previous run, matched on the model's primary key, and sends only the rows that were added or changed. A warehouse keeps no change log for an arbitrary query, which is why it compares results instead. A duplicate or missing primary key breaks that comparison, so we test the key first.

What happens to HubSpot records when rows leave a Hightouch model?

Whatever the sync's delete behaviour says. In upsert mode the choices are do nothing, clear the mapped fields, archive the record, or, for contacts only, a permanent GDPR delete. Update mode allows only the first two, and insert mode has none. We leave delete behaviour at do nothing, flag rows that leave the model for review, and use archive only where the client wants it. An archived record stays restorable for 90 days, and a GDPR delete is final.

Can Hightouch write HubSpot association labels?

Yes, on Professional and Enterprise accounts, once the labels exist in HubSpot. The model column carries an object holding the associated record's value and its label, or an array of them for several labels. The associated object's own sync has to run first, so the record the label points at already exists when the association is written.

Can Hightouch read from Microsoft Fabric as well as Snowflake?

Yes. Hightouch lists Microsoft Fabric as a source, connected through a Microsoft Entra service principal, alongside Snowflake, BigQuery, Databricks, Redshift and PostgreSQL. Fabric is also one of the sources its Lightning engine supports, which keeps the change snapshot inside your own warehouse. Where the lakehouse must also write back to an operational system, notebooks usually fit better.

How much work is a Hightouch to HubSpot setup?

Usually 4 to 8 hours of discovery and 15 to 30 hours to build, where the warehouse models already exist. The hours go on unique match properties, field types and dropdown values, the order the syncs run in, and a validation run in a HubSpot sandbox portal. Modelling the warehouse data itself is separate work, and often the larger part.

Partnerships and accreditations

  • HubSpot Elite Solutions Partner
  • HubSpot Custom Integration Accreditation
  • HubSpot CRM Data Migration Accreditation
  • HubSpot Solutions Architecture Design Accreditation

HubSpot accreditations

  • HubSpot Onboarding Accreditation
  • HubSpot Academy Accreditations

Industry specializations

  • HubSpot Healthcare Industry Specialist
  • HubSpot Financial Services Industry Specialist
  • HubSpot Manufacturing Industry Specialist
  • HubSpot Quote to Cash Capability

Partnerships

  • Google Partner
  • Anthropic Solutions Partner

Scope a Hightouch integration

Send the systems, the direction and the record volume. We reply with a scope and an effort band within one business day.

  • Hightouch

Press Enter or comma to add another system.

Add more detail (optional)

Optional. A sentence or two about the workflow is enough.

We use these answers to scope the work and for nothing else. Privacy policy.

Prefer to talk it through first? Book a technical scoping call

Talk to the people who build these

  • Nijat
  • Sean
  • Prash

Book a scoping call