Sending through HubSpot Sequences
Kai can send through HubSpot Sequences instead of a dedicated outreach platform. It reads your sequence's steps, writes personalised copy per contact, and enrols them. Three parts of the setup are manual, because HubSpot's API does not allow them to be automated. This page covers all of it.
What you need first
- A Sales Hub Professional or Enterprise seat. Sequences are a paid feature and the API returns 403 without one.
- A private app token with
automation.sequences.readandautomation.sequences.enrollments.write. This is the same token as the CRM connection, so if HubSpot is already connected you are most likely only adding scopes. - A sequence already built in HubSpot. Kai never creates or edits sequences.
- The HubSpot user id that owns the sequence. Sequences belong to a user rather than to the portal, so reading one requires it. Set it as
hubspot_sequence_user_idunder Settings, Connections.
How personalisation works, and why it differs from Lemlist
On Lemlist, Kai writes the merge tags into your step templates for you. HubSpot's Sequences API has no endpoint to create or edit step content of any kind, so that part cannot be automated. You add the tokens once, by hand, in the HubSpot sequence editor.
Kai writes each contact's personalised copy into custom contact properties. Your sequence template then references those properties as personalisation tokens. The properties are created automatically the first time a sequence is linked, so you do not need to build them yourself.
The property names follow the step order in your sequence:
kai_email1_subjectandkai_email1_bodyfor the first email stepkai_email2_subjectandkai_email2_bodyfor the second, and so onkai_linkedin_notefor a LinkedIn connection notekai_call_briefshared by every call step, since the research and script do not change between calls
In each sequence step, insert the matching property as a personalisation token. The step's own subject and body should contain the token and nothing else, because Kai writes the entire message rather than filling a gap in a template.
Replies
HubSpot Sequences has no outbound webhook of its own, so replies reach Kai through a HubSpot workflow that you create.
- Trigger: a contact replies to a sequence email.
- Action: send a webhook to
https://app.hirekai.org/webhook/reply. - Add the header
X-Kai-Webhook-Secretwith your workspace's webhook secret. - Include the contact's email and the reply body in the payload.
Without this Kai still sends, but it never sees a reply, which means no classification, no hand-raiser detection, no handover and nothing in the Replies tab. This step is not optional.
Opens, clicks and sends
Same pattern, pointed at /webhook/activity. Send the event name as one of sent, opened, clicked, replied, bounced or unsubscribed. These are the names Kai's reporting already understands, so no mapping is needed on either side.
Stopping a sequence on a lead score
HubSpot's API has no unenroll endpoint, so Kai cannot pull a contact out of a running sequence. HubSpot's workflow engine can, using its native Unenroll from sequence action.
This is the better place for it regardless. The lead score lives in HubSpot, so a workflow triggered on the threshold stops the sequence the moment the score changes, with no polling and no window where Kai and a rep are both in the prospect's inbox.
- Trigger: lead score is greater than or equal to your threshold.
- Action: unenroll from sequence.
- Action: rotate the contact owner to the rep who now owns it.
- Optional: send a webhook to Kai so the contact is marked handed over and stops being counted as active nurture.
What HubSpot cannot do that Lemlist can
- No conditional branching or A/B variants. HubSpot sequences are linear. Kai reads them as a straight run of steps.
- No step editing from Kai. Tokens are added by hand, once per sequence.
- No unenroll from Kai. Use a workflow.
- No engagement analytics on the API. Kai's reporting is built from the webhook events above rather than pulled from HubSpot.
- Enrolment is capped at 1000 per inbox per day. Past that, enrolment fails rather than queueing, so stagger a large first push.