Logo

Lemlist

Run a workflow on Lemlist activity — a lead replies, a LinkedIn invite is accepted, an enrichment finishes, a campaign completes. Lemlist has a large, channel-organized event catalog; each activity becomes the workflow's input.

For behavior shared by every provider (the delivery URL, testing), see the webhook triggers reference.

Prerequisites

Lemlist webhooks are auto-registered: Cotera creates the hook for you over Lemlist's API. You supply a Lemlist API Key on the trigger's setup page (see Lemlist's webhook API docs). Without it, install fails with lemlist_credentials_missing.

Setup

  1. Add a From an app trigger and pick Lemlist, and enter your Lemlist API key.
  2. Choose a channel, then the event within it (see the catalog below).
  3. Optionally set a campaign ID to scope the trigger to a single campaign. Leave it empty to receive the event across all campaigns.
  4. Save. Cotera registers the hook with Lemlist for that activity type, pointed at the trigger's unique URL.

Deleting the trigger removes the hook from Lemlist. When a campaign is set, Lemlist filters server-side so the trigger only ever receives that campaign's deliveries.

Authentication

Lemlist doesn't sign deliveries or send a signature header. Instead, Cotera sets a shared secret when it creates the hook, and Lemlist echoes that secret inside the JSON body of every delivery. Cotera constant-time compares it against the trigger's secret and rejects anything that doesn't match. Cotera strips the secret field out before the payload reaches your workflow, so it never lands in a run input.

Payload

Each delivery is a Lemlist activity object, passed through as the workflow input (minus the stripped secret). The type field is the event key. An emailsOpened delivery looks like:

{
  "_id": "act_ExAmPlE0123456789",
  "type": "emailsOpened",
  "teamId": "tea_ExAmPlE0123456789",
  "createdAt": "2026-01-15T10:30:00.000Z",
  "campaignId": "cam_ExAmPlE0123456789",
  "campaignName": "Q1 Outbound",
  "sequenceId": "seq_ExAmPlE0123456789",
  "sequenceStep": 1,
  "leadId": "lea_ExAmPlE0123456789",
  "leadEmail": "jane@example.com",
  "leadFirstName": "Jane",
  "leadLastName": "Doe",
  "contactId": "ctc_ExAmPlE0123456789",
  "sendUserId": "usr_ExAmPlE0123456789",
  "sendUserName": "Alex Rep",
  "sendUserEmail": "alex@mycompany.com",
  "subject": "Quick question, Jane",
  "to": [{ "address": "jane@example.com", "name": "Jane Doe" }],
  "cc": [],
  "bcc": []
}
FieldDescription
_idThe activity's unique id, used to deduplicate retries.
typeThe event key — matches the trigger's selected event.
createdAtWhen the activity happened.
campaignId / campaignNameThe campaign the activity belongs to.
sequenceId / sequenceStepThe sequence and step within it.
leadId / leadEmail / leadFirstName / leadLastName / contactIdThe lead the activity is about.
sendUserId / sendUserName / sendUserEmailThe sending user.
subject / to / cc / bccPresent on email events.

Event catalog

Pick a channel, then an event. The event key is Lemlist's activity type — the same string that appears in the delivery's type field.

Lead journey

Aggregate lead-state events that span channels — Lemlist's engagement funnel.

EventFires when
contactedA lead was contacted for the first time (first outreach sent).
hookedA lead became "hooked" — the aggregate opened stage, when they open a message on any channel.
attractedA lead became "attracted" — the aggregate clicked stage, when they click a link or accept a LinkedIn invite.
warmedA lead became "warmed" — the aggregate replied stage, when they reply on any channel.
interestedA lead was marked as interested (an opportunity).
notInterestedA lead was marked as not interested.

Email

EventFires when
emailsSentAn email step was sent to the lead.
emailsOpenedThe lead opened one of your emails.
emailsClickedThe lead clicked a link in one of your emails.
emailsRepliedThe lead replied to one of your emails.
emailsBouncedAn email bounced — the recipient's server rejected delivery.
emailsFailedAn email failed to send.
emailsInterestedThe lead was marked interested from an email interaction.
emailsNotInterestedThe lead was marked not interested from an email interaction.
emailsUnsubscribedThe lead unsubscribed from your emails.

Unsubscribe

EventFires when
entityUnsubscribedThe lead unsubscribed and was removed from all outreach.
variableUnsubscribedThe lead unsubscribed via an unsubscribe link/variable.

LinkedIn

EventFires when
linkedinSentA LinkedIn message was sent to the lead.
linkedinOpenedThe lead opened your LinkedIn message.
linkedinRepliedThe lead replied to your LinkedIn message.
linkedinInterestedThe lead was marked interested from a LinkedIn interaction.
linkedinNotInterestedThe lead was marked not interested from a LinkedIn interaction.
linkedinSendFailedA LinkedIn message failed to send.
linkedinVisitDoneA LinkedIn profile-visit step completed.
linkedinVisitFailedA LinkedIn profile-visit step failed.
linkedinFollowDoneA LinkedIn follow step completed.
linkedinFollowFailedA LinkedIn follow step failed.
linkedinFollowSkippedA LinkedIn follow step was skipped.
linkedinInviteDoneA LinkedIn connection request was sent.
linkedinInviteFailedA LinkedIn connection request failed to send.
linkedinInviteAcceptedThe lead accepted your LinkedIn connection request.
linkedinEndorseDoneA LinkedIn skill-endorsement step completed.
linkedinEndorseFailedA LinkedIn skill-endorsement step failed.
linkedinEndorseSkippedA LinkedIn skill-endorsement step was skipped.
linkedinVoiceNoteDoneA LinkedIn voice note was sent to the lead.
linkedinVoiceNoteFailedA LinkedIn voice note failed to send.
linkedinLikeLastPostDoneA step to like the lead's last post completed.
linkedinLikeLastPostNoPostA step to like the lead's last post found no post to like.
linkedinLikeLastPostFailedA step to like the lead's last post failed.
linkedinWithdrawInvitationDoneA pending LinkedIn invitation was withdrawn.
linkedinWithdrawInvitationFailedWithdrawing a pending LinkedIn invitation failed.

Other channels

The remaining channels follow the same sent → delivered → opened → replied → failed shape as email, plus per-channel and workspace events. Every key below is a valid activity type.

ChannelEvents
WhatsAppwhatsappMessageSent, whatsappMessageDelivered, whatsappMessageOpened, whatsappReplied, whatsappMessageFailed
SMSsmsSent, smsDelivered, smsReplied, smsFailed
Call (Aircall)aircallCreated, aircallEnded, aircallDone, aircallInterested, aircallNotInterested, callRecordingDone, callTranscriptDone
API stepsapiDone, apiInterested, apiNotInterested, apiFailed
ManualmanualInterested, manualNotInterested
Workspace / Campaignpaused, resumed, stopped, campaignComplete, customDomainErrors, connectionIssue, sendLimitReached, lemwarmPaused
Tasks / Notesannotated
EnrichmentenrichmentDone, enrichmentError
InboxinboxLabelUpdated
Signal AgentsignalRegistered
DeliverabilitydeliverabilityAlertTriggered
Contact SourcingcontactSourcingDone, contactSourcingFailed