1. [Help](https://nuvia.ai/en/docs)
2. [Integrations](https://nuvia.ai/en/docs/colecoes/19378002-integrations)
3. [HubSpot](https://nuvia.ai/en/docs/colecoes/19431232-hubspot)

# How to sync contacts and deals between Nuvia and HubSpot

Two-way sync keeps contacts, deals and pipeline data always up to date on both platforms.

Updated on November 3, 2026

[HubSpot](https://nuvia.ai/en/docs/colecoes/19431232-hubspot)

1. [How to set up the HubSpot integration](https://nuvia.ai/en/docs/artigos/14501908-how-to-set-up-the-hubspot-integration)
2. [How to sync contacts and deals between Nuvia and HubSpot](https://nuvia.ai/en/docs/artigos/14590403-how-to-sync-contacts-deals-nuvia-hubspot)
3. [What Nuvia syncs with HubSpot and when](https://nuvia.ai/en/docs/artigos/16473526-what-nuvia-syncs-with-hubspot-and-when)
4. [How to map fields between Nuvia and HubSpot](https://nuvia.ai/en/docs/artigos/16474177-how-to-map-fields-between-nuvia-and-hubspot)
5. [Troubleshooting the HubSpot integration](https://nuvia.ai/en/docs/artigos/16474434-troubleshooting-hubspot-integration)
6. [How to send Nuvia WhatsApp templates straight from a HubSpot workflow](https://nuvia.ai/en/docs/artigos/15879535-send-nuvia-whatsapp-templates-from-hubspot-workflow)
7. [How to enroll leads/contacts in Nuvia campaigns directly from a HubSpot workflow](https://nuvia.ai/en/docs/artigos/15879734-enroll-contacts-nuvia-campaigns-from-hubspot-workflow)

On this page

1. How it works
2. Contact sync
3. Company sync (enrichment)
4. Conversation link sync
5. Scheduled meeting date sync
6. Deal sync
7. Create Leads in HubSpot by stage
8. Owner (agent) sync
9. Monitor history
10. Unlink a contact from HubSpot
11. Import lists from HubSpot
12. Frequently asked questions

**On this page12 sections**

1. How it works
2. Contact sync
3. Company sync (enrichment)
4. Conversation link sync
5. Scheduled meeting date sync
6. Deal sync
7. Create Leads in HubSpot by stage
8. Owner (agent) sync
9. Monitor history
10. Unlink a contact from HubSpot
11. Import lists from HubSpot
12. Frequently asked questions

Two-way sync keeps contacts, deals and pipeline data always up to date on both platforms.

**Prerequisite:** HubSpot integration connected and mappings configured.

## How it works

DirectionMechanism

HubSpot → Nuvia Webhooks (real time)

Nuvia → HubSpot Asynchronous queue (almost instant)

Sync has **two independent triggers**: by **field** (**Fields** tab) and by **funnel stage** (**Funnels** tab). Mapping a field doesn't move a stage, and mapping a stage doesn't sync a field; if you need both, configure both tabs. The full map of what goes out, what comes in and how long it takes is in [What Nuvia syncs with HubSpot and when](https://nuvia.ai/en/docs/artigos/16473526-what-nuvia-syncs-with-hubspot-and-when).

## Contact sync

-

**HubSpot → Nuvia:** Contact created/updated in HubSpot → webhook → mapped fields updated in Nuvia.

-

**Nuvia → HubSpot:** Contact created/updated in Nuvia → queue → mapped fields updated in HubSpot.

### How Nuvia finds the contact in HubSpot

When syncing a contact from Nuvia to HubSpot, the platform looks up the matching record by **email and phone** in a single query. If the contact has an email in Nuvia, the email match takes **priority** over the phone match, which makes linking more accurate, especially when the phone format differs between the platforms. When there are multiple results, the oldest HubSpot record is linked.

Good to know

If the contact has no email in Nuvia, the lookup keeps working normally by phone, as before. Email is an additional criterion, not a required one.

The phone lookup covers the number in international format, with and without a space after +55. If the phone is stored in HubSpot in another format ((11) 99999-9999, 11999999999 without the country code, or with a ninth-digit difference), the lookup doesn't find the record and a new contact is created.

Note

when the lookup doesn't find the contact on the first try, Nuvia waits about **30 seconds** and searches again before creating it. This avoids duplicate records while HubSpot is still indexing a newly created contact.

### Why the same contact became two records in HubSpot

The cause is almost always a phone format mismatch. Two actions fix most cases:

-

Standardize the phones in HubSpot in international format (+5511999999999)

-

Fill in the contacts' **email** in Nuvia; when there's an email, it takes priority in the lookup and linking becomes much more accurate

Good to know

the phone Nuvia sends to HubSpot is the country code and number exactly as stored on the contact. The **default country code** setting, in the **Advanced** tab, only applies to numbers coming from HubSpot; it doesn't affect what's sent.

For step-by-step fixes, see [Troubleshooting the HubSpot integration](https://nuvia.ai/en/docs/artigos/16474434-troubleshooting-hubspot-integration).

### Data pulled automatically

DataNuvia fieldHubSpot

Name name firstname + lastname

Email email email

Phone phone_number phone / mobilephone

Company company_name company

## Company sync (enrichment)

When a **company** is created or has properties changed in HubSpot, Nuvia gets notified and **enriches the matching company** in your workspace. You don't need to configure anything beyond the connected integration.

### What gets updated

HubSpot propertyField on the Nuvia company

name Name

domain Domain

industry Industry

numberofemployees Size (employee range)

hs_additional_domains Secondary domains

### Rules that always apply

-

**Nuvia never creates a company because of this notification.** If no company in your workspace matches the domain received, nothing happens. Companies in Nuvia come from a real link with a lead

-

**Without a domain in HubSpot, nothing is done**. The domain is what lets Nuvia find the right company

-

**Your manual edit wins.** Fields you edited by hand in the company panel aren't overwritten by enrichment

-

**An empty field doesn't erase what's there.** If the property isn't in the notification, the current value is kept

-

**The main domain doesn't change identity.** If the HubSpot company is recognized by a **secondary domain** of the Nuvia company, the other fields are enriched, but the main domain stays the one already on the record

-

**Secondary domains are cleaned up before saving**. Nuvia splits the list, removes duplicates and discards values that clearly aren't domains

Good to know

if two companies in your workspace end up competing for the same domain, enrichment doesn't block processing — the conflict is logged and the event continues.

## Conversation link sync

Nuvia can automatically send the direct link to each conversation to HubSpot. That way, anyone on the team who opens the contact in HubSpot can open the conversation in Nuvia with one click, without searching manually.

### How to set it up

1.

Go to **Integrations > HubSpot > Fields**

2.

Click **add mapping**

3.

In the **Smart Field** column (right), select **Conversation link** — it's in the **Conversation** group

4.

In the **HubSpot property** column (left), choose the contact property where the link will be saved (e.g. a custom property such as nuvia_link)

5.

Click **Save mappings**

### How it works

When a conversation is created in Nuvia, its direct link (in the format https://app.nuvia.ai/messages/conversation/{id}) is automatically sent to HubSpot in the mapped field. It's sent through the asynchronous queue, just like the other synced fields.

Good to know

The link is a system field; you don't need to fill in anything manually. Nuvia generates and sends the link as soon as the conversation is created.

## Scheduled meeting date sync

When the Smart Funnel books a meeting on the customer's calendar, Nuvia can save the **date and time of that meeting** to a HubSpot property. That way the sales team sees the appointment right in the CRM, without opening the conversation.

### How to set it up

1.

Go to **Integrations > HubSpot > Fields**

2.

Click **add mapping**

3.

In the **Smart Field** column (right), select **Scheduled date**; it's in the **Conversation** group

4.

In the **HubSpot property** column (left), choose a contact **date/time** property where the value will be saved

5.

Click **Save mappings**

### How it works

The synced value is the **start of the meeting** recorded in the conversation. It travels in the same sync cycle as the other fields (such as Summary, Temperature and Lead Score); there's no separate trigger or extra setting.

If the meeting is **canceled**, Nuvia sends the field **empty** to HubSpot, clearing the value that had already been synced. Conversations without a scheduled meeting don't change the property.

Note

The date comes from the meeting scheduled in the conversation (by the Smart Funnel, via Google Calendar). If the agent doesn't book meetings in that conversation, the field stays empty in HubSpot.

## Deal sync

The relationship between Nuvia funnel stages and HubSpot deal stages is defined in the **Funnels** tab. Each mapping row has three columns: **Stage → Destination** (the funnel stage and the matching deal stage), **Synced Objects** (the Contact, Deal and Lead switches) and **Direction**.

### Sync direction (per stage)

Direction is defined **per stage**, in the **Direction** column of the mapping:

DirectionWhat happens

**Nuvia → HubSpot** (default) When you move a conversation to this stage in Nuvia, the deal stage is updated in HubSpot. Changes made in HubSpot don't affect the stage in Nuvia.

**↔ Two-way** Works both ways. Besides Nuvia → HubSpot, when the deal moves to this deal stage **in HubSpot**, the linked conversation moves to the matching funnel step in Nuvia.

Good to know

Every stage starts as **Nuvia → HubSpot**. To also reflect the reverse path (HubSpot → Nuvia) for a stage, change its **Direction** column to **↔ Two-way** (the same as turning on **HS → Nuvia** for that row).

Important

When more than one funnel maps the same deal stage in the same pipeline, the change coming from HubSpot moves the conversation to the step of the **funnel/agent already handling that conversation** — not to just any mapping. The conversation must be linked to a deal.

### Advanced: the same stage in two funnels of the same object

A Nuvia stage can be mapped to **more than one funnel of the same object** in HubSpot. The most common case is the **contact**, which has two independent funnels in HubSpot:

-

**Lifecycle Stage** (lifecyclestage) → the contact's lifecycle stage

-

**Lead Status** (hs_lead_status) → the contact's lead status

You can map the **same Nuvia stage** to both at once: just add two mapping rows for that stage with the **Contact** object, each pointing to a different funnel. When the conversation reaches that stage, Nuvia updates **all** mapped properties; in the example, lifecyclestage **and** hs_lead_status.

Good to know

The system only blocks repeating the **same funnel** twice in the same stage (that would be ambiguous). Different funnels of the same object are allowed.

### When the deal isn't moved

Before moving a deal, Nuvia checks its current status in HubSpot and doesn't write in two cases:

-

**Deal already closed** (won or lost) in HubSpot: it isn't moved

-

**Stage earlier than the current one**: the deal doesn't move backward

In both cases the deal stays as is and the event is recorded in **History**, with no error. These safeguards apply **only to deals**: **contact** stages (Lifecycle Stage and Lead Status) and **lead** stages are written directly, even if they represent a step back.

The check depends on Nuvia being able to read the funnel in HubSpot. If the read fails, or if the deal's current stage isn't found in the funnel, Nuvia writes anyway; the safeguard doesn't block as a precaution.

### How many deals a contact can have

The deal is linked to the **conversation**, but Nuvia doesn't blindly create a new deal: before creating one, it searches HubSpot for a deal already associated with that contact **in the same funnel** and reuses that record. So two conversations with the same contact mapped to the same funnel share the same deal.

Two deals appear when the conversations are mapped to **different funnels** in HubSpot, when the contact wasn't yet linked to a HubSpot record at creation time, or when the lookup of associated deals fails.

Good to know

unlike the deal, the contact is unique per phone within the account. Talking to two different inboxes does **not** duplicate the contact in Nuvia.

Important

if you want a single deal per customer, keep the **Deal** switch on in only one stage, pointing to a single HubSpot funnel.

## Create Leads in HubSpot by stage

Besides contacts and deals, Nuvia can automatically create **Leads** in HubSpot as the conversation moves through the funnel stages. In the stage mapping (**Integrations > HubSpot**), each stage has the **Contact**, **Deal** and **Lead** switches.

-

**Lead** (per stage) → when the conversation reaches that stage, Nuvia creates a Lead in HubSpot. It's an **upsert**: if the contact already has a Lead, it's linked/updated instead of duplicated.

-

**Lead label** → this field appears when the **Lead** switch is on. It defines the lead's “stage” at that step (e.g. WARM). In HubSpot, Leads don't have a pipeline — the stage is exactly this label (hs_lead_label). Turning off the switch discards the label when you save (no ghost label is left).

-

**Lead name template** → below the deal name template, defines how the Lead is named in HubSpot, with the same variable autocomplete as the other templates.

### Lead triggers, owner and display

-

**Campaigns:** trigger events include **Lead created** and **Lead updated**, in addition to contact/deal events.

-

**Owner:** in owner sync (**Integrations > HubSpot > Users**), the **Sync source** also accepts **Lead Owner**, in addition to Contact Owner and Deal Owner.

-

**Contact panel:** in the HubSpot accordion (contact drawer), the **Lead ID** block appears, with a link to the record in HubSpot and a copy button.

**Leads created directly in HubSpot also show up in the conversation.** When a Lead is created in HubSpot itself (by an automation or by the sales team) and the contact has an **open conversation** in Nuvia, that Lead is **automatically linked to the conversation**. The conversation panel then shows the Lead, and its mapped fields are filled in and tracked during the conversation.

## Owner (agent) sync

When the **Contact Owner** or **Deal Owner** changes in HubSpot, Nuvia can automatically update the agent assigned to the contact's open conversation. This is useful for keeping traceability when the responsible salesperson changes in the CRM.

**How to turn it on:**

1.

In **Integrations > HubSpot > Users**, set the **Sync source** (Contact Owner, Deal Owner or Lead Owner) and map the HubSpot users to the Nuvia users

2.

In **Integrations > HubSpot > Advanced**, turn on the **Update the owner when the Contact/Deal is updated in HubSpot** toggle

**Behavior:**

SituationWhat happens

Contact has an **open** conversation + new owner is mapped The agent is updated. The AI or human who was replying keeps replying

Contact has no open conversation Nothing happens

New owner isn't mapped to a Nuvia user Nothing happens

Toggle off Nothing happens

Important

Owner sync doesn't transfer the conversation. The agent (AI or human) who was replying stays in charge — only the “who owns the conversation” information is updated. The toggle stays disabled while the **Sync source** is set to **Disabled**.

## Monitor history

1.

Go to **Integrations > HubSpot > History**

2.

Filter by object, direction, **status** and period

3.

Click any record to open the sync details panel

### Event types in the history

The history shows a **friendly label** for each event (instead of the technical name), and you can filter by it. Among the stage change events by object:

Label in the historyWhat it represents

**Contact stage updated** Nuvia updated the contact's stage in HubSpot (outbound, Nuvia → HubSpot).

**Lead stage updated** Nuvia updated the Lead's stage in HubSpot (outbound, Nuvia → HubSpot).

**Contact stage synced from HubSpot** A contact stage change came from HubSpot and was reflected in Nuvia (inbound, via webhook).

**Lead stage synced from HubSpot** A Lead stage change came from HubSpot and was reflected in Nuvia (inbound, via webhook).

### Sync statuses

StatusWhat it means

**Success** All objects in the operation were updated.

**Partial** Some objects synced and some failed — for example, the contact was updated, but the deal failed HubSpot's validation. The data that went through **stays saved**; only what failed needs fixing.

**Failed** No objects were updated — the whole operation failed.

### See why a sync failed

When you open a record with **Partial** or **Failed** status, the details panel shows:

-

**Summary** of the operation (what was synced)

-

**Error** → the actual message returned by HubSpot. When a property fails HubSpot's validation, you see the exact cause: which object (contact or deal) and which property failed

-

**Technical details** → the full HubSpot error body, useful for adjusting the field mapping

Important

Logs are kept for **7 days**. Deletions aren't propagated. There's no automatic failure alert; you track it in History.

### Why a contact didn't enter a campaign

When a HubSpot event should trigger a campaign and the contact isn't enrolled, the history records **the reason it was skipped**. Open the matching record and see the reason. The most common ones are:

ReasonWhat it means

**Open conversation** The contact already has an open conversation, so no campaign is triggered for them

**No compatible identifier** The contact has no phone (WhatsApp) or LinkedIn compatible with the campaign's channel

**Doesn't meet the criteria** The contact fell outside the campaign's target audience (the criteria/audience didn't match)

**Already enrolled / already completed** The contact is already in the campaign or has already gone through it, so they aren't enrolled again

**No campaign listening** There's no campaign set up to react to that HubSpot event

## Unlink a contact from HubSpot

You can remove the link between a contact in Nuvia and the matching record in HubSpot. After unlinking, changes in HubSpot no longer update that contact in Nuvia (and vice versa) until a new link is created.

### Step by step

1.

Go to **Lists and Objects > Contacts**

2.

In the list, find the contact linked to HubSpot

3.

Click the **three-dot** menu on the contact's row

4.

Click **Unlink HubSpot**

5.

A confirmation modal appears: “Unlink contact from HubSpot? The HubSpot ID will be removed from this contact. You'll need to relink it manually to sync again.”

6.

Click **Unlink** to confirm

### What happens

-

The HubSpot link fields (external ID, CRM type and last sync date) are removed from the contact

-

Two-way sync for that contact stops

-

The contact still exists in Nuvia with all its data; only the link with HubSpot is cut

-

To relink it, you'll need a new manual mapping or a reimport

Note

The “Unlink HubSpot” option only appears for contacts linked to HubSpot and for users with permission to edit contacts.

## Import lists from HubSpot

1.

In the HubSpot integration, open **Lists**

2.

Search for the list you want

3.

Click **Import members**

## Frequently asked questions

## Frequently asked questions

**Why didn't a contact enter the campaign (“the bot didn't reach out”)?**

Open the matching record in **History**; it shows why the contact was skipped. The most common reasons are: the contact already has an **open conversation**, the contact **has no phone or LinkedIn** compatible with the channel, the contact **doesn't meet the campaign's criteria**, the contact **is already enrolled or has already completed** the campaign, or **no campaign is listening** to that HubSpot event.

**I changed a deal's stage in HubSpot and the conversation in Nuvia didn't move. Why?**

HubSpot → Nuvia stage sync only works when the stage is set to **↔ Two-way** in the **Direction** column of the mapping (**Funnels** tab). By default the stage is **Nuvia → HubSpot**, meaning outbound only. The conversation also needs to be linked to a deal and to the funnel that maps that stage.

**Why does the same contact have two deals in HubSpot?**

Nuvia reuses the deal already associated with the contact when it's in the **same funnel**. Two deals appear when the conversations are mapped to **different funnels** in HubSpot, when the contact wasn't yet linked to a HubSpot record at creation time, or when the lookup of associated deals fails. If you want a single deal per customer, keep deal creation in a single stage pointing to a single funnel.

**Can I force a contact to resync?**

Edit any field on the contact to trigger a new sync.

**Do existing contacts sync?**

Only when they're updated. For existing contacts, import lists.

**Are custom fields supported?**

Yes. Any Contact, Deal or Lead property can be mapped. Pay special attention to dropdown and multiple-choice fields; see [How to map fields between Nuvia and HubSpot](https://nuvia.ai/en/docs/artigos/16474177-how-to-map-fields-between-nuvia-and-hubspot).

**Does owner sync switch the conversation's agent from AI to human (or vice versa)?**

No. Sync only updates which Nuvia user owns the conversation. The agent who was replying (AI or human) keeps replying, with no automatic transfer.

**Can I relink a contact to HubSpot after unlinking it?**

Yes. You'll need a new manual mapping (e.g. reimporting a HubSpot list) or an edit on the contact that triggers the sync again. Unlinking doesn't delete data; it only cuts the sync link.

**What is the “Partial” status in the sync history?**

It means the operation updated some objects and failed on others; for example, the contact was saved in HubSpot, but the deal failed validation. What went through stays saved; open the record and check the **Error** field to see which object and property need fixing.

**What's the difference between creating a Deal and creating a Lead by stage?**

They're different HubSpot objects. The **Deal** goes into a pipeline and changes stage; the **Lead** has no pipeline, and its “stage” is the **label** (hs_lead_label) you define for the stage. You can turn on Contact, Deal and Lead independently for each stage. Lead creation is an **upsert**: if the contact already has a Lead, it's updated instead of duplicated.

[PreviousHow to set up the HubSpot integration](https://nuvia.ai/en/docs/artigos/14501908-how-to-set-up-the-hubspot-integration) [NextWhat Nuvia syncs with HubSpot and when](https://nuvia.ai/en/docs/artigos/16473526-what-nuvia-syncs-with-hubspot-and-when)

Was this article helpful?

## Related articles

- [How to create and edit Smart Funnels through MCP (Agent Builder)](https://nuvia.ai/en/docs/artigos/16074655-create-edit-smart-funnels-through-mcp-agent-builder)
- [How to map fields between Nuvia and HubSpot](https://nuvia.ai/en/docs/artigos/16474177-how-to-map-fields-between-nuvia-and-hubspot)
- [Troubleshooting the HubSpot integration](https://nuvia.ai/en/docs/artigos/16474434-troubleshooting-hubspot-integration)

[HubSpot](https://nuvia.ai/en/docs/colecoes/19431232-hubspot)

1. [How to set up the HubSpot integration](https://nuvia.ai/en/docs/artigos/14501908-how-to-set-up-the-hubspot-integration)
2. [How to sync contacts and deals between Nuvia and HubSpot](https://nuvia.ai/en/docs/artigos/14590403-how-to-sync-contacts-deals-nuvia-hubspot)
3. [What Nuvia syncs with HubSpot and when](https://nuvia.ai/en/docs/artigos/16473526-what-nuvia-syncs-with-hubspot-and-when)
4. [How to map fields between Nuvia and HubSpot](https://nuvia.ai/en/docs/artigos/16474177-how-to-map-fields-between-nuvia-and-hubspot)
5. [Troubleshooting the HubSpot integration](https://nuvia.ai/en/docs/artigos/16474434-troubleshooting-hubspot-integration)
6. [How to send Nuvia WhatsApp templates straight from a HubSpot workflow](https://nuvia.ai/en/docs/artigos/15879535-send-nuvia-whatsapp-templates-from-hubspot-workflow)
7. [How to enroll leads/contacts in Nuvia campaigns directly from a HubSpot workflow](https://nuvia.ai/en/docs/artigos/15879734-enroll-contacts-nuvia-campaigns-from-hubspot-workflow)

## Still need help?

Customers reach support through the chat inside the platform. Not a customer yet? Talk to our team.

[Talk to support in the platform](https://app.nuvia.ai) [I'm not a customer yet](https://nuvia.ai/en/contact)

---
Source: https://nuvia.ai/en/docs/artigos/14590403-how-to-sync-contacts-deals-nuvia-hubspot
