> For the complete documentation index, see [llms.txt](https://docs.spara.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.spara.com/integrations/crm-integrations/hubspot-crm.md).

# Hubspot (CRM)

How Spara syncs lead data with HubSpot CRM using Push and Pull Rules.

Spara integrates with HubSpot to keep your CRM in sync with lead activity. Once connected, Spara can write conversation data and field values to HubSpot Contacts (Push), and import existing HubSpot Contacts into Spara as Leads (Pull).

For step-by-step setup instructions, see [Guide: Connecting HubSpot](https://docs.spara.com/guides/connecting-hubspot).

<figure><img src="https://4072969777-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FreCGkFdsmuPJzGP9ZgGA%2Fuploads%2Fgit-blob-bb0fba6fe5eb28254a8c92a93b7b90d940e7c9e5%2FHubSpot%20Integration%20Settings.png?alt=media" alt=""><figcaption><p>The HubSpot integration settings page, showing Push Rules, Pull Rules, and Data Model Sync.</p></figcaption></figure>

| HubSpot Object | Spara writes to HubSpot | Spara reads from HubSpot              |
| -------------- | ----------------------- | ------------------------------------- |
| Contact        | Any mapped property     | Any mapped property                   |
| Company        | *None* (read-only)      | Firmographics; see Company Data below |
| Owner          | *None* (read-only)      | Name and email; see Owner Data below  |
| Deal           | *None* (read-only)      | Deal fields; see Deal Data below      |

## Push Rules

Push Rules control how Spara writes data to HubSpot when a Spara Lead interacts with your agents. This is the primary sync direction: Spara pushes conversation insights and field values into matching HubSpot Contact objects.

Choose one of two sync modes:

* **Create or update**: Update a matching, pre-existing HubSpot Contact when one is found by email address or HubSpot ID; create a new Contact when no match is found.
* **Update only**: Update matching Contacts, but never create new ones. Use this when you want HubSpot record creation to stay under your team's control.

### How the sync operates

Spara's sync is event-driven, not scheduled:

* **A Contact is created or matched as soon as Spara knows an email address.** The first time an email is captured, whether in chat, on a call, or via a webform, Spara looks for a matching Contact (by stored HubSpot ID first, then email address) and, depending on your Push Rules, updates it or creates a new one. Spara does not wait for other fields like name or company to be gathered first.
* **Property updates push immediately.** Every time a mapped Spara field changes (a new answer in conversation, a booked meeting, an enrichment result), Spara writes it to HubSpot right away.
* **Conversation transcripts push shortly after the conversation goes quiet.** Transcript syncs are batched, so HubSpot receives one consolidated update a few minutes after the last message rather than one write per message.
* **Pull Rules run every few minutes.** New and modified HubSpot Contacts matching your Pull Rules are imported continuously.
* **Deal data syncs nightly.**

{% hint style="info" %}
**Common CRM integration concerns**

The behaviors above are the defaults. Each has a control or workaround, covered in full in [Guide: Working Around CRM Sync Limitations](https://docs.spara.com/guides/crm-sync-workarounds):

* [**Use data from HubSpot objects Spara doesn't support**](https://docs.spara.com/guides/crm-sync-workarounds#use-data-from-crm-objects-spara-doesnt-support): map fields from custom or other unsupported objects onto Spara's core objects (Enterprise).
* [**Require fields before a Contact is created**](https://docs.spara.com/guides/crm-sync-workarounds#require-fields-before-a-crm-record-is-created): hold Contact creation until more than an email is known (Enterprise).
* [**Keep Spara from overwriting HubSpot data**](https://docs.spara.com/guides/crm-sync-workarounds#keep-spara-from-overwriting-crm-data): use the "Update if field is empty" write rule or the Update only sync mode.
* [**Write to Companies, Deals, or other objects**](https://docs.spara.com/guides/crm-sync-workarounds#write-to-accounts-opportunities-or-other-objects): route data through Webhooks, the API workflow step, or the Web API.
* [**Log Spara activity in HubSpot**](https://docs.spara.com/guides/crm-sync-workarounds#log-spara-activity-in-your-crm): sync transcripts to a Contact property (emails are logged as engagements automatically), or build activity records from Webhooks.
* [**Control which HubSpot Contacts enter Spara**](https://docs.spara.com/guides/crm-sync-workarounds#control-which-crm-records-enter-spara): Pull Rules filter on any Contact property; configured with your Spara team.
  {% endhint %}

## Pull Rules

Pull Rules control which existing HubSpot Contacts are imported into Spara as Leads. This is useful for leads that exist in HubSpot but have not yet interacted with a Spara agent. Spara can pull them in so your agents and workflows can proactively reach out. Pull Rules can filter on any HubSpot Contact property; by default, Spara only pulls Contacts that have an email address.

{% hint style="info" %}
Pull Rules are configured by your Spara customer success representative.
{% endhint %}

## Data Model Sync

The Data Model Sync section maps individual Spara Lead fields to HubSpot Contact fields. Each row in the mapping table defines:

* **Spara Lead Field**: the field Spara gathers during conversations (e.g., First name, Company size, or any custom field)
* **HubSpot Contact Field**: the corresponding HubSpot Contact property to write to
* **Write rule**: whether Spara should overwrite any existing value, or only write when the HubSpot field is empty

The Email field is always mapped automatically and cannot be removed. You can add as many additional field mappings as needed.

<figure><img src="https://4072969777-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FreCGkFdsmuPJzGP9ZgGA%2Fuploads%2Fgit-blob-d05542a4334d497d0bf40a6ddeb888f872b5673c%2FHubSpot%20Data%20Model%20Sync.png?alt=media" alt=""><figcaption><p>The Data Model Sync table, mapping Spara Lead fields to HubSpot Contact properties with a write rule per row.</p></figcaption></figure>

Field mappings apply to both Push and Pull syncs. For a full list of available Spara fields, visit your [**Data Model**](https://app.spara.co/data-model) or click **View your Data Model** within the HubSpot settings page.

## Company Data

When company syncing is enabled, Spara reads the Company associated with each matched Contact, including name, domain, website, industry, employee count, annual revenue, and city. Synced companies appear on the [Accounts](/pipeline/accounts.md) page, and their fields are available in workflow conditions and agent personalization.

Company data is read-only: Spara never creates or updates HubSpot Companies.

## Owner Data

When owner syncing is enabled, Spara reads the assigned owner from matching HubSpot Contact records. If an owner is found and active, their details are available in Spara, including name and email, and appear in the lead's detail view and on the [Owners](/pipeline/owners.md) page.

Owner data is available as fields in workflow conditions and agent personalization, so you can reference a lead's assigned rep by name in emails, chat messages, or routing logic.

## Deal Data

Spara reads HubSpot Deal data nightly to power pipeline and revenue reporting in [Analytics](/pipeline/analytics.md), including which deals Spara-engaged leads influenced. Spara reads each Deal's name, amount, stage, close date, currency, and open/closed/won status. Deal data is read-only: Spara never creates or updates HubSpot Deals.

## Limitations

* **Writes are Contact-only.** Companies, Owners, and Deals are read-only. Spara cannot update them when it learns something new. HubSpot Lead objects are not synced; Spara Leads map to HubSpot Contacts.
* **Records are created as soon as an email is known.** Requiring additional fields before creation is available as Enterprise custom work.
* **Spara Events are not synced as structured activity.** Conversation transcripts sync through a mapped Contact property, and emails Spara exchanges with a lead are logged as HubSpot email engagements, but individual events (page visits, calls, meetings) are not written as HubSpot activities.
* **Unsupported objects require custom mapping.** Fields from HubSpot objects Spara doesn't model can be mapped onto Spara's Lead, Account, and Owner objects by Spara's engineering team, available for Enterprise customers.

For practical workarounds, see [Guide: Working Around CRM Sync Limitations](https://docs.spara.com/guides/crm-sync-workarounds).

## Sync Logs

The **Logs** tab on the [**HubSpot settings page**](https://app.spara.co/settings/integrations/hubspot/manage) shows every sync between Spara and HubSpot, newest first. Each entry records what happened (a contact created or updated, fields that didn't sync, a sync skipped because of your Push Rules, or a connection problem like an expired token) along with the Lead it affected, the HubSpot record, and how many fields synced.

<figure><img src="https://4072969777-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FreCGkFdsmuPJzGP9ZgGA%2Fuploads%2Fgit-blob-db930a71a8f69b8f3a33ebb0f130c8dc167e7bb7%2FHubSpot%20Sync%20Logs.png?alt=media" alt=""><figcaption><p>The Sync Logs tab, showing each sync's status, direction, Lead, HubSpot record, and field counts.</p></figcaption></figure>

Filter the list by status (**Synced**, **Needs attention**, or **Failed**), direction, or timeframe. Search covers the technical detail behind each entry as well as its summary, so you can look up a HubSpot error code or a property name and find every record hitting the same problem.

Select an entry to see its details:

* A plain-language explanation of what happened, and what to do about it, with a link to the setting that fixes it
* The Lead and the HubSpot record involved
* Every field the sync moved, shown as the Spara field, the HubSpot property it maps to, and the value
* For any field HubSpot rejected, the reason HubSpot gave. For example, a property that no longer exists, or a value that isn't one of its defined options

Each Lead also has a **CRM sync** row in its details showing that Lead's most recent sync outcome, which opens the same view. That answers "did this Lead reach HubSpot?" without leaving the Lead.

## FAQ

### How does Spara match a Lead to a HubSpot Contact?

Spara matches by stored HubSpot Contact ID first, then by email address. As soon as a lead provides their email in a conversation, Spara attempts to find a matching Contact and begin syncing.

### Will Spara overwrite existing data in HubSpot?

By default, yes. Spara uses the "Overwrite existing value" write rule for new field mappings. You can change individual mappings to "Update if field is empty" to protect existing HubSpot data.

### Can Spara update HubSpot Companies or Deals?

No. Spara only writes to Contacts. If you need Spara data written to other objects, use [Developer: Webhooks](https://docs.spara.com/developers/spara-api/webhooks) with your own automation. See [Guide: Working Around CRM Sync Limitations](https://docs.spara.com/guides/crm-sync-workarounds).

### What happens if HubSpot is disconnected?

Syncing stops immediately. Your field mappings are preserved so you can resume with the same configuration after reconnecting. To reconnect, go to [**Settings > Integrations**](https://app.spara.co/settings/integrations) and click **Authorize** on the HubSpot card.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.spara.com/integrations/crm-integrations/hubspot-crm.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
