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.
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.readandcrm.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
-
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-. -
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.
-
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, andlead.status_changedevents write to HubSpot. -
Send a test
Choose Send test. The test validates the token and confirms the connection. It uses the
webhook.testevent 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 property | Where it comes from |
|---|---|
firstname and lastname | The lead’s name, split into two parts |
jobtitle | The lead’s title |
company | The lead’s company |
website | The lead’s LinkedIn profile URL |
email | The stored contact email, when Embers already has one |
phone | The 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.
- The stored link first. If Embers has already created a contact for this LinkedIn member in this account, it updates that contact.
- Email second. If there is no link yet and Embers has an email, it searches HubSpot by email before creating anything.
- 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.
Related
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?
What went wrong?
Thank you. We read every answer.
Still stuck?
Send us the article you were following and what happened. We answer from the same inbox that writes these pages.