
Curviate x HubSpot
Log LinkedIn replies and invites in HubSpot. Connect the two with Curviate’s webhooks and API, then build the flow you need.
What is HubSpot?
HubSpot is a customer platform with CRM, marketing, sales, service and content tools. Businesses of many sizes use it to manage contacts, deals and customer communication.
Visit hubspot.comHow HubSpot works with Curviate
Two directions, no middleware needed. A Curviate webhook with a body template posts to HubSpot’s contacts API the moment an invitation is accepted. A HubSpot workflow’s Send a webhook action posts back to a Curviate incoming event, so a booked meeting ends the follow-ups and its deal stage is saved on the Curviate Contact.
Events outmessage.receivedconnection.acceptedenrollment.finished
add contactsstart a MotionWhat you can build
Three flows teams set up first. Each one takes a few minutes.

Accepted invite, new HubSpot contact
The Motion’s acceptance event sends the Contact’s email, name, company and job title straight to HubSpot’s create contact endpoint.
enrollment.accepted
A booked meeting ends the Motion
A HubSpot workflow sends a webhook to your Curviate incoming event; the Step waiting on event.meeting_booked ends the Enrollment and keeps the deal stage on the Contact.
event.meeting_booked
Replies on the HubSpot timeline
An n8n workflow logs each LinkedIn reply as an engagement on the matching HubSpot contact.
message.receivedSet up HubSpot with Curviate
Everything runs on two things Curviate gives every account: signed webhooks out and a REST API in.
- 1
Copy your Curviate API key
In the Curviate dashboard, open Settings, then API & Webhooks, and copy your key.
# keep it in your tool's credentials, never in plain text
CURVIATE_API_KEY=cvt_live_••••3f9a - 2
Connect HubSpot to your automation
Sign in to HubSpot inside n8n, Make or Zapier, or create an API key in HubSpot if you write your own code.
- 3
Send Curviate events to it
Point a Curviate webhook at an n8n, Make or Zapier webhook trigger, or at your own endpoint. Each webhook covers one source:
messagingfor replies,userfor accepted invitations,motionfor Motion outcomes,account_statusfor account alerts.curl https://api.curviate.com/v1/webhooks \
-H "Authorization: Bearer $CURVIATE_API_KEY" \
-d '{
"source": "messaging",
"events": ["message.received"],
"account_ids": ["acc_…"],
"request_url": "https://hooks.zapier.com/hooks/catch/…"
}' - 4
Write to HubSpot
Add the HubSpot step your tool offers, such as creating or updating a contact, and map the fields from the Curviate event.
# what your tool receives
{ "event": "connection.accepted",
"data": { "account_id": "acc_…", "occurred_at": "2026-10-17T09:12:00Z", … } } - 5
Send HubSpot contacts into a Motion
Trigger on a change in HubSpot, then add each person to Curviate and start your Motion.
# add the person as a contact
POST https://api.curviate.com/v1/contacts
{ "linkedin_url": "linkedin.com/in/lenaweber", "first_name": "Lena" }
# start your Motion for them
POST https://api.curviate.com/v1/motions/mot_…/contacts
{ "contact_ids": ["con_…"] }
HubSpot details that matter
From HubSpot’s developer docs and Curviate’s HubSpot webhook recipe.
- 1
A token for the contacts API
The webhook calls
POST https://api.hubapi.com/crm/v3/objects/contactswith your HubSpot token asAuthorization: Bearer. HubSpot stopped creating new legacy private apps on October 26, 2026 (September 28 for newer accounts) and points new in-account integrations to Service Keys, under Settings › Integrations › Service Keys; existing private app tokens keep working.{ "properties": {
"email": "{{contact.email}}",
"firstname": "{{first_name}}",
"company": "{{company}}" } } - 2
Send a webhook needs Data Hub
The workflow action comes with Data Hub Professional or Enterprise, and its URL must start with HTTPS, which Curviate’s incoming event URL does. HubSpot retries a failed call for up to three days, but not a 4xx other than 429.
- 3
Email is the match
A post from HubSpot finds the Contact by email, so the Contact needs one; two Contacts with the same email match nothing (
ambiguous_email). A body template that uses{{contact.email}}skips a Contact without one and recordsskipped_no_email. - 4
Check arrivals, not HubSpot’s log
Curviate answers 200 to every post it can read and records the outcome on the arrival:
moved,no_contact,no_enrollment_waiting.curviate incoming arrivalsshows the last 20, without any value from the post.
Events you can use
message.receivedA LinkedIn message or InMail arrivedconnection.acceptedSomeone accepted an invitation you sent through Curviateenrollment.finishedA contact finished a Motion, with the reasonenrollment.repliedA contact replied to a Motion, with the reply textmotion.custom_eventA Motion ran a step you marked to notify youpost.publishedA scheduled post went liveaccount.reconnect_neededAn account needs to sign in againActions you can call
POST /v1/contactsAdd or update a contactPOST /v1/motions/{id}/contactsStart a Motion for contactsPOST /v1/{account_id}/chats/{chat_id}/messagesSend a messagePOST /v1/enrollments/{id}/eventsTell a waiting Motion to continueGET /v1/{account_id}/companies/{identifier}Read a company pageQuestions about Curviate x HubSpot
Do I need a developer?
No. n8n, Make and Zapier all have HubSpot steps, so you can connect the two without code. Developers can call the Curviate API and HubSpot’s API directly.
Can a HubSpot list start a Motion?
Yes. Add the list’s people to Curviate and start the Motion in the same flow; people already in another Motion can be skipped automatically.
What can I see in HubSpot afterwards?
Whatever you map: new connections as records, replies on the timeline and Motion outcomes as fields for your reports.
Is there a Curviate app in the HubSpot marketplace?
No. The connection is a Curviate webhook calling HubSpot’s API with your token, and a HubSpot workflow webhook calling Curviate back. Both are set up in a few minutes.
More CRM
Connect HubSpot today.Free for 7 days.
Create your API key, point a webhook at HubSpot and run your first flow.
