Skip to content

Create HubSpot contacts from qualified leads

Connect one HubSpot portal with a private-app token and let Embers create or update a contact, with one note, every time a lead qualifies.

Updated 3 min read Solo and above

Embers can keep HubSpot in step with your LinkedIn pipeline. When a lead qualifies, Embers creates or updates one contact and, the first time it creates that contact, attaches one note explaining why the lead matters.

Before you start

  • Access to a HubSpot portal where you can create a private app.
  • The private app needs contact read and write scopes: crm.objects.contacts.read and crm.objects.contacts.write.
  • Nothing else. A private-app token works on its own. The Connect with HubSpot OAuth button only appears when the HubSpot app is configured on the Embers API.

Connect HubSpot

  1. Create the private app in HubSpot

    In your HubSpot portal, create a private app and grant it the two contact scopes above. Copy the access token it gives you. It starts with pat-.

  2. Paste the token into Embers

    In the Embers app, go to Settings, then Integrations (/settings/integrations) and find the HubSpot card. Paste the token into Private app token and choose Save token.

    Embers validates the token against HubSpot before storing it, so a bad token fails here rather than silently later. The token is stored encrypted and is never returned by the API or shown again.

  3. Choose what to send

    New leads start on. Everything else is opt-in, using the same toggles as Slack. Live lead.created, lead.engagement.added, and lead.status_changed events write to HubSpot.

  4. Send a test

    Choose Send test. The test validates the token and confirms the connection. It uses the webhook.test event type, so it does not create a HubSpot contact.

What Embers writes

One contact, and one note on first create. That is the whole footprint.

HubSpot propertyWhere it comes from
firstname and lastnameThe lead’s name, split into two parts
jobtitleThe lead’s title
companyThe lead’s company
websiteThe lead’s LinkedIn profile URL
emailThe stored contact email, when Embers already has one
phoneThe stored contact phone, when Embers already has one

Empty values are left out rather than written as blanks, so Embers never wipes a field you filled in yourself. Email and phone are never invented: they appear only when Embers already stored them for that person.

The note added on first create carries the score, the ICP verdict, the LinkedIn profile, and a link back into Embers.

report.generated events are recorded as delivered without writing anything to HubSpot.

How duplicates are avoided

Embers keeps its own link between a LinkedIn member and the HubSpot contact it created for them, so repeat events update that same contact.

  1. The stored link first. If Embers has already created a contact for this LinkedIn member in this account, it updates that contact.
  2. Email second. If there is no link yet and Embers has an email, it searches HubSpot by email before creating anything.
  3. Otherwise it creates a contact, and stores the link for next time.

Because the HubSpot contact id is stored on the delivery, a retry updates the same record instead of creating a second one.

Retries and pauses

HubSpot delivery uses the same schedule as webhooks: the first attempt plus seven retries, from 30 seconds out to roughly 6.3 days. Rate limits and HubSpot server errors are retried.

Authentication failures are terminal and pause the install instead: an invalid or revoked token, a 401, or a 403. The card shows Paused with the error, and a Resume button appears once you have fixed the token. Delivery history is kept for 30 days.

Disconnect stops Embers creating or updating contacts and leaves everything already in HubSpot untouched. You can reconnect the same portal later.

Frequently asked questions

Does Embers create companies or deals?
No. Embers creates or updates a contact and attaches one note on first create. Companies and deals are left to you.
Will a test create a contact in HubSpot?
No. Tests use the webhook.test event type and only validate the stored token.

Was this article helpful?

Still stuck?

Send us the article you were following and what happened. We answer from the same inbox that writes these pages.

Email support

to move to open esc to close