# Sync new Intercom leads and users straight into HubSpot

> The moment someone signs up in Intercom, their profile lands in HubSpot with lead source and lifecycle stage set, and your sales channel hears about it.

- Workflow type: code
- Services: Intercom, HubSpot, Slack
- Categories: Sales, Operations
- Published: 2026-08-04

## What it does

- Picks up every new lead or user the moment they are created in Intercom, along with their name, email, company and the details you capture at signup.
- Checks HubSpot for an existing contact with that email address, then updates that person instead of creating a second copy of them.
- Stamps each record with a lifecycle stage and an Intercom lead source, so you can still tell where someone came from months later.
- Drops one line into your sales channel naming the contact, their company and whether they were added or updated, and quietly skips anyone with no email or an internal test address.

## What you'll need

- An Intercom workspace where you can turn on notifications for newly created contacts.
- A HubSpot account with permission to view and edit contacts.
- A Slack workspace and the channel your sales team actually watches.
- The lifecycle stage you want new contacts to land on, such as Lead or Subscriber.
- A list of any internal or test email domains you would rather keep out of your CRM.

## Prompt

Whenever a new contact is created in Intercom, mirror that person into HubSpot so the sales team is never working from a stale list. Trigger this workflow from an Intercom webhook and subscribe to both contact creation topics, contact.lead.created and contact.user.created, so it fires both for leads captured while browsing and for people who complete signup. Each run handles one contact.

Take the contact ID from the webhook payload and call Get a Contact in Intercom to read the full profile rather than trusting the webhook body alone. Pull the email address, first and last name, phone, the associated company name, and the custom attributes we set at signup. Also read the role field, which is how Intercom distinguishes a lead from a signed-up user now that both live in the same contacts model, and carry that through so the two can be treated differently later if needed.

Before writing anything, apply the skip rules. If the contact has no email address, stop and do nothing. If the email is on an internal or test domain, stop as well. Keep the blocked domain list as a single editable constant near the top of the workflow so it is easy to extend, and seed it with the workspace owner's own company domain plus common test domains such as example.com and mailinator.com. Skipped contacts produce no HubSpot write and no Slack message.

Next, run Search Contacts in HubSpot with a filter on the email property equal to the contact's email address, to find out whether this person already exists. HubSpot has no dedicated search-contacts-by-email operation, so use the general Search Contacts operation with an email filter rather than looking for a more specific one. Treat a non-empty result as a hit and hold on to it, because that is what decides the wording of the Slack message at the end.

Then call Batch Upsert Contacts in HubSpot with a single contact in the batch, matched on the email property so that re-running the workflow can never create a duplicate. Map first name, last name, phone and company from Intercom onto the corresponding HubSpot contact properties, and map the signup custom attributes onto the HubSpot properties that match them. Stamp a lifecycle stage on every record, and set a lead source property to Intercom so attribution survives downstream reporting. When the search returned a hit this updates the existing record; when it did not, it creates a new one. Only write the fields being mapped, and leave every other HubSpot field untouched rather than blanking it.

Finally, post one line to the sales channel using Send a Message in Slack. Name the contact, name their company, and state plainly whether the record was created or updated, for example "New HubSpot contact created: Dana Reed (Northwind Trading), source Intercom" or "HubSpot contact updated: Dana Reed (Northwind Trading), source Intercom". Keep it to a single line so the channel stays readable, and include a link to the HubSpot record when the record identifier comes back from the upsert. Fall back to a sensible placeholder such as "no company" when Intercom has no company on the profile.

## How to customize

- Change the lifecycle stage new contacts land on, or set a different one for browsing leads than for people who completed signup.
- Point the notification at a different Slack channel, or stay quiet on updates and only announce brand new contacts.
- Extend the skip list with your own internal domains, free mail providers, or any other addresses you do not want in HubSpot.
- Map extra signup details from Intercom onto your own HubSpot properties, such as plan, company size or signup source.

## FAQ

### Will this create duplicate contacts in HubSpot?

No. Every contact is matched on email address before anything is written, so if the person already exists their record is updated in place rather than a second copy being created. Running the workflow twice on the same person is safe.

### Does it cover both browsing leads and people who finished signing up?

Yes. Intercom treats both as contacts and simply labels them differently, and this listens for both kinds of creation. You can send them to different lifecycle stages in HubSpot if you want to treat them separately.

### What happens to someone who signs up without an email address?

They are skipped entirely, and nothing is written to HubSpot and nothing is posted to Slack. The same applies to anyone on an internal or test domain you have listed, which keeps your own team's testing out of the CRM.

### Will it overwrite information already in HubSpot?

It only writes the fields you have mapped, such as name, company and lead source. Anything else on the existing HubSpot record, including notes, deals and fields your sales team has filled in by hand, is left untouched.

### How quickly does the contact appear in HubSpot?

Within seconds. This runs off a notification from Intercom rather than on a schedule, so there is no waiting for the next sync window and sales sees the person while they are still warm.

Use this prompt in General Input: https://www.generalinput.com/prompts/sync-new-intercom-leads-and-users-straight-into-hubspot