> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squid-id.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sync visitors to HubSpot

> Connect HubSpot with OAuth and sync each identified visitor as a contact and company, with ICP and high-intent page routing, requirements, lifecycle stage, owner assignment, and add-to-list.

When a visitor is identified, Squid ID syncs them to HubSpot as a contact matched by email, optionally creates and associates their company, and can set a lifecycle stage, assign an owner, and add them to a list. You connect HubSpot once with OAuth, then choose which visitors sync and what happens to them. Existing contacts are updated **non-destructively**. Squid ID writes only its own `squid_` properties and never overwrites fields your team manages.

## If you're coming from RB2B

RB2B syncs contacts, companies, and timeline activity on each identified visitor. Squid ID matches that and adds targeting, deeper data, and CRM actions RB2B leaves to you.

<div className="compare">
  <table>
    <thead>
      <tr><th /><th>RB2B</th><th>Squid ID</th></tr>
    </thead>

    <tbody>
      <tr><td>Connect</td><td>OAuth</td><td>OAuth</td></tr>
      <tr><td>Contacts + companies</td><td>Yes</td><td>Yes (company create + associate)</td></tr>
      <tr><td>Non-destructive update</td><td>Yes</td><td>Yes (writes only <code>squid\_</code> props on existing contacts)</td></tr>
      <tr><td>Create / update control</td><td>Create-new toggle; existing records always update</td><td>Create-new <em>and</em> update-existing each switchable (enrich known contacts only)</td></tr>
      <tr><td>Who syncs</td><td>Tag / company-size / industry</td><td>All, by ICP, or by high-intent page</td></tr>
      <tr><td>Requirements</td><td>Limited</td><td>Require company, LinkedIn, or work/personal email</td></tr>
      <tr><td>Premium contact data</td><td>Not provided</td><td>Mobile, personal email, mailing address via <a href="/add-ons/squid-id-plus">Squid ID+</a></td></tr>
      <tr><td>Field control</td><td>Fixed</td><td>Auto-created <code>squid\_</code> properties (ICP, intent pages, referrer, landing page, ID+ fields)</td></tr>
      <tr><td>Lifecycle stage</td><td>Not available</td><td>Set on create</td></tr>
      <tr><td>Owner assignment</td><td>Not available</td><td>Assign new contacts to an owner</td></tr>
      <tr><td>Add to segment</td><td>Not available</td><td>Add synced contacts to a static segment</td></tr>
      <tr><td>Connector status</td><td>Support article</td><td>In-dashboard connected / paused state</td></tr>
    </tbody>
  </table>
</div>

<p className="why"><strong>Why this matters.</strong> RB2B drops contacts into HubSpot and leaves routing, qualification, and assignment to you. Squid ID does that work at the connector: only the right segment syncs, each contact lands with a lifecycle stage and owner, and the deeper Squid ID+ contact data RB2B can't provide comes along for the ride.</p>

## Before you start

<Info>You'll move faster if these are already in place.</Info>

* You're an **Owner** or **Admin** on the website. Viewers can see the connector but can't change it.
* The [snippet is installed and verified](/getting-started/install-snippet), so there are visitors to sync.
* You can sign in to the HubSpot account you want to connect, with permission to grant app access.

## Connect HubSpot

<Steps>
  <Step title="Open the HubSpot connector">
    Go to **Settings → Integrations** and click **Connect with HubSpot** on the HubSpot card.
  </Step>

  <Step title="Authorize">
    A HubSpot window opens. Pick the account/portal and click **Connect app** to grant access.
  </Step>

  <Step title="Confirm">
    The window closes and the card shows **Connected** with your HubSpot domain. Squid ID also creates its `squid_` custom contact properties automatically.
  </Step>
</Steps>

<Info>
  During connect, HubSpot may show an **"unverified app"** warning that says the app hasn't been verified by HubSpot and asks you to type "I accept the risk". That is expected while our HubSpot Marketplace review is in progress, and it's safe to continue. You can confirm it's us: the **redirect domain reads `id-api.asksquid.ai`**. Type "I accept the risk" and click **Connect** to finish.
</Info>

## Choose who syncs

* **Send.** *Once per visitor* (the default) creates one contact the first time we identify a person; *every identified visit* re-syncs on return visits.
* **Create new contacts.** On by default. When a visitor isn't already in HubSpot, create them as a new contact. Turn it off to **enrich known contacts only**: Squid ID then acts on people already in your CRM and never adds net-new ones.
* **Update existing records.** On by default. When a visitor already exists in HubSpot, update their record (only the `squid_` properties, never your standard fields). Turn it off to leave existing contacts untouched and only add net-new ones. With both switches off, nothing syncs.
* **Who.** Sync *all identified visitors*, *any [ICP](/finding-visitors/icp-filtering) match*, *only specific ICPs*, *any high-intent page*, or *only specific high-intent pages*.
* **Only sync when.** Require a company, a LinkedIn profile, or a work or personal email. A visitor without an email is never synced (HubSpot contacts require one).
* **Create & associate companies.** When on, for each synced contact Squid ID finds the visitor's company in HubSpot **by domain**; if it doesn't exist, it creates the company record (name, domain, and industry from the identified firmographics) and then associates the contact to it. So your CRM gets real Company objects and contact-to-company links, not just loose contacts. It's idempotent: re-syncing the same visitor never duplicates the company or the association. Off syncs only the contact.

## What lands in HubSpot

On a **new** contact, Squid ID sets the standard fields (email, name, job title, company) and, when [Squid ID+](/add-ons/squid-id-plus) is unlocked for the record, the premium fields (mobile phone, mailing address). It always writes the `squid_` custom properties:

* `squid_icp`: the ICP the visitor matched
* `squid_intent_pages`: the high-intent pages the visitor viewed (when they hit one)
* `squid_linkedin`: LinkedIn URL
* `squid_referrer`, `squid_landing_page`: acquisition
* `squid_captured_at`: when we identified them
* `squid_mobile_phone`, `squid_personal_email`, `squid_home_address`: Squid ID+ data (only when unlocked)

On an **existing** contact, Squid ID writes **only** the `squid_` properties, so it never overwrites fields your team or other tools manage.

<Info>Squid ID+ premium fields sync only for records that are unlocked, either because the website is on [Squid ID+ Automatic](/add-ons/squid-id-plus#turning-on-automatic) or the record was revealed. This is the same egress rule used everywhere in Squid ID.</Info>

## On create: lifecycle, owner, and lists

These apply when a contact is first created:

* **Lifecycle stage.** Set new contacts to a stage (Lead, MQL, SQL, and so on). Skipped on existing contacts so you never move someone backward.
* **Owner.** Assign new contacts to a HubSpot owner.
* **Add to segment** *(previously "lists")*. Add synced contacts to a **static** segment, so a HubSpot workflow can take it from there. Only *static* segments appear in this dropdown — *active* segments build themselves from criteria, so nothing (including Squid ID) can add to them directly. To create one, go to **CRM → Segments** (click **More** in the nav if you don't see it), click **Create segment**, choose the **Contacts** object, then on the final step pick **Static**, name it, and save. Click the reload icon next to this dropdown and it will appear. For a worked example of pushing visitors into a static segment and then filtering them with an active segment, see [Build a segment of your best visitors](/integrations/hubspot-workflows#recipe-build-a-segment-of-your-best-visitors).

## Test it

Click **Send test contact** to sync a sample contact (a unique `squid-test@…` email) so you can confirm it lands in HubSpot with the properties you expect before real traffic flows.

## Pause or disconnect

* **Pause:** Use the toggle on the HubSpot card to stop syncing without losing the connection or settings.
* **Disconnect:** Open the connector and click **Disconnect**. This removes the connection from Squid ID; revoke the app inside HubSpot under **Settings → Integrations → Connected Apps** if you also want to remove it there.

## Multiple websites

The connection applies to the website you have selected. If your account owns more than one website, switch the active site and connect each one. Routing, requirements, and the on-create actions are set per website.

## Related

<CardGroup cols={3}>
  <Card title="What HubSpot receives" href="/integrations/hubspot-fields">
    Every field and squid\_ property, and when each is written.
  </Card>

  <Card title="HubSpot playbooks" href="/integrations/hubspot-workflows">
    Routing, re-engagement, and outreach recipes.
  </Card>

  <Card title="Troubleshooting and FAQ" href="/integrations/hubspot-troubleshooting">
    Reconnect, missing contacts, duplicates, and more.
  </Card>
</CardGroup>
