Connect HubSpot to SiteOps

HubSpot is where a lot of teams keep the truth about their people: who is a lead, who is a customer, who belongs to which list. Those lists are audiences — carefully curated ones — and rebuilding them by hand in every other tool is exactly the kind of work that never gets done.

Connecting HubSpot to SiteOps makes those lists pickable by name. When you compose an email or accept a campaign plan, “Marketing qualified leads” and “Customer contacts” appear next to the audiences SiteOps derives from your site's own events — one click, no rebuilding, no export-import dance.

Reading is the default, and it's all most teams turn on: SiteOps reads list names and sizes so you can target them, and touches nothing. If you want to close the loop, you can opt into writeback — letting SiteOps set a lead's stage, status or score back on the contact when an ad or a sequence moves them. That write is off until you enable it, scoped to just those three fields, and rides your approval level like any other action. Everything else in your CRM stays exactly as your team keeps it.

The connection, in three moves

Set it up, step by step

0 of 4 done

    1. CRM
    2. Lists
    1. Settings
    2. Connections
    3. HubSpot
  1. Lists flow in, read-only — no contact is ever edited

    Lists join the audiences the engine already derives — everyone, the site-event cohorts, your ESP segments. One picker, every honest audience.

Let an agent do it

The OAuth consent is two clicks and stays yours. What an agent can do is the prep: with a HubSpot private-app token you mint, it can audit and build the lists you will want to email — before SiteOps ever connects.

Prompt for your agent
Prepare my HubSpot lists for email targeting, using HubSpot's API with this private-app token: <create one under Settings → Integrations → Private apps; grant the scopes crm.objects.contacts.read and crm.lists.read — add crm.lists.write ONLY if you want the agent creating lists>.

1. Fetch every list with its type, size and last update; flag near-duplicate names, empty lists and lists that look abandoned.
2. Propose the audience lists a lifecycle program wants — an engaged-newsletter list, a marketing-qualified list, a customer-contacts list — as ACTIVE lists with plain filters. With crm.lists.write granted, create them; otherwise output each list's exact filter definition for me to click in.
3. Name them the way they should read in a picker — short, plain, no internal jargon.
4. Report every list you touched or proposed: name, type, size, filter — so I know exactly what will appear when the lists show up in SiteOps.

Connecting SiteOps itself stays with you: the OAuth consent screen — picking the portal, approving the two read scopes — cannot be clicked by an agent. The private-app token above is for your own agent only; SiteOps never sees or asks for it.

If something does not work

My lists don't show up as audiences
Check three things: the connection status in Settings is Connected; the lists exist in the same portal you approved; and your HubSpot user actually has access to Lists (portals can restrict this by seat). Reconnecting and re-picking the portal fixes most cases.
The list size in SiteOps differs from HubSpot
Active lists change as people meet or leave the criteria, and SiteOps reads on a short delay. A small, shrinking gap is normal; a large one usually means you are looking at a different list with a similar name.
Does sending to a HubSpot list send through HubSpot?
No — HubSpot is the audience source, not the mailer. The send still goes through the email provider picked under “Sends go through” in Settings. HubSpot contributes who; your mailer does how.
Can SiteOps change my CRM data?
Only if you ask it to. Reading is the default and writeback is off until you turn it on. When enabled, the write is scoped to three fields — lead stage, status and score — and rides your approval level; it never creates properties, logs emails or edits anything else. Leave writeback off and the connection is strictly read-only, with no code path that touches a contact.
I want to disconnect — what happens?
Disconnect in SiteOps settings, or remove the app under HubSpot's Connected apps. Either way access stops immediately: the lists disappear from the audience picker and nothing in HubSpot changes.

Set up once, see everything every morning

Get started