> ## Documentation Index
> Fetch the complete documentation index at: /help/llms.txt
> Use this file to discover all available pages before exploring further.

# Start a campaign from what happens in Kerux

> Kerux events: a contact is added, tagged or changes, a date like a birthday, a schedule, a smart segment, a link click, an ICP fit or engagement score change, a pipeline stage change, a contact that became hot or replied, a note or task, the do-not-contact list, a LinkedIn message read or reacted to, an email opened or clicked, a meeting booked, cancelled or about to start, a WhatsApp reply (SMS replies are coming soon) or a LinkedIn account that needs attention.

> [!NOTE]
>
> **Plans.** Kerux events are on every plan. The meeting, email and WhatsApp events only happen when you have a calendar or booking tool, an email inbox or a WhatsApp number connected, and connecting those is part of Pro and Agency. The SMS reply event is coming soon. See [Plans and billing](/help/account/billing.md).

A **Kerux event** starts a campaign on its own when something happens to a contact inside Kerux. It works the same whether the change comes from a person, an import, the [public API](/help/developers/api.md), a form, a signal or another campaign.

| Kerux event | People enter when... | You choose |
| - | - | - |
| **Contact added** | a contact is added to Kerux | Any source, or only some: added by hand, import, API, trigger URL, form, signal, LinkedIn event |
| **Tag added** | a contact gets a tag | The tag |
| **Tag removed** | a tag is taken off a contact | The tag |
| **Field changed** | one of the contact's fields changes | The field, and optionally the value it changes to (upper or lower case doesn't matter) |
| **Date reminder** | it's some days before, on or after a date in the contact's details (like a birthday) | The date field, how many days, before / on the day / after, every year or only that date, the time and time zone |
| **Schedule** | it's the day and time you set | Every day or some days of the week, the time and time zone, and who enters: a list, or the contacts with a tag |
| **Matches a segment** | a contact is in a [smart segment](/help/leads/segments.md): everyone in it when you add the trigger, then people who match later (checked every 10 minutes) | The segment. Each person enters once, even if they leave the segment and match it again |
| **Trigger link clicked** | a contact clicks the campaign's link | A name for the link and where it goes |
| **ICP fit score changed** | the contact's [ideal customer](/help/leads/signals.md) fit score changes (not the engagement score) | Any change, or only when it reaches a number |
| **Pipeline stage changed** | a contact moves to another stage of your [pipeline](/help/leads/pipeline.md): by hand, through the API, or by itself when it replies or books a meeting | Any move, or only **From stage** and / or **To stage** (also **Not on the board**). The campaign's steps get `{{trigger.from_stage}}` and `{{trigger.to_stage}}` |
| **Contact became hot** | a contact's [engagement score](/help/leads/routing-and-engagement.md) (replies, opens, clicks, meetings, forms...) reaches your hot threshold (once per contact, until it cools down) | Nothing: the threshold is in **Settings > Lead routing**. The campaign's steps get `{{trigger.engagement_score}}` |
| **LinkedIn message read** | a contact sees one of your LinkedIn messages (once per message) | **Any campaign or conversation** (also messages sent from the inbox or the API), or only the messages of one other campaign |
| **Meeting booked** | a contact books a meeting in your connected calendar or booking tool (sure, or confirmed by you in **My tasks**) | Nothing. Its steps can use `{{meeting.start}}`, `{{meeting.title}}` and `{{meeting.link}}`. See [Meetings booked by contacts](/help/campaigns/meetings.md) |
| **Meeting cancelled** | a contact's booked meeting is cancelled | Nothing |
| **Meeting starts soon** | a contact's booked meeting starts in the time you pick (once per meeting time; a cancelled meeting never gets it, a moved one gets a new reminder) | 15 minutes to 3 days before, and whether meetings booked after that time get one right away. See [Remind the contact before the meeting](/help/campaigns/meetings.md#remind-the-contact-before-the-meeting) |
| **Call recorded** | a call with a contact has its transcript: Google Meet, Zoom, another tool, an upload or a pasted transcript (once per call, before the summary) | Any source, or only some (Google Meet, Zoom, Another tool, Added in Kerux), and only calls longer than N minutes. The campaign's steps get `{{call.title}}`, `{{call.transcript_url}}` and the other `{{call.*}}`, and can use the call steps. See [Automations driven by calls](/help/campaigns/call-automations.md) |
| **Call summary ready** | the AI summary of a recorded Google Meet or Zoom call with a contact is ready (once per call) | Any call, or only some interest levels (high, medium, low, unclear). The campaign's steps get `{{trigger.call_summary}}`, `{{trigger.call_interest}}`, `{{trigger.call_next_steps}}` and `{{trigger.follow_up_date}}`. See [Call transcripts and summaries](/help/campaigns/call-transcripts.md) |
| **Email opened** | a contact opens one of your campaign emails (once per email; a click counts as an open). Some mail apps hide opens and others open emails on their own; the ones flagged as automatic are left out | Nothing. Only emails of campaigns with **Track email opens and clicks** on (the default). See [Email opens and clicks](/help/campaigns/email-opens-and-clicks.md) |
| **Email link clicked** | a contact clicks a link in one of your campaign emails (once per link) | Any link, or **Only links containing** some text (for example `calendly.com` or `/pricing`). The campaign's steps get the link as `{{trigger.clicked_link}}` |
| **Reacted to a LinkedIn message** | a contact reacts (a thumbs up, a heart...) to one of your LinkedIn messages (once per message and reaction) | **Any** reaction, or one emoji. The campaign's steps get the emoji as `{{trigger.reaction}}`. A reaction is never a reply. See [Reactions on LinkedIn messages](/help/inbox/reactions.md) |
| **WhatsApp reply received** | a contact writes to one of your connected WhatsApp numbers from the phone in their details (once per message) | Nothing: people who aren't contacts never start it. Needs a connected WhatsApp number (your own, connected with a QR code). See [Connect WhatsApp](/help/getting-started/connect-whatsapp.md) |
| **SMS reply received** | a contact texts one of your Twilio numbers from the phone in their details (once per text) | Nothing: people who aren't contacts, and STOP texts, never start it. Coming soon: in the **Add a trigger** panel it is marked **Coming soon** and can't be added yet. See [Twilio (text messages)](/help/integrations/twilio-sms.md) |
| **Contact replied** | a contact replies on LinkedIn, by email, by text (SMS) or on WhatsApp (once per reply). A STOP text or an unsubscribe reply never starts it | Any channel, or only some. The campaign's steps get `{{trigger.reply_channel}}` and `{{trigger.reply_text}}` |
| **Engagement score changed** | a contact's [engagement score](/help/leads/routing-and-engagement.md) goes up (a reply, an open, a click, a meeting...) | Every rise, or **Only when it reaches** a number. The campaign's steps get `{{trigger.engagement_score}}`. Not **Contact became hot** (once, at your threshold) |
| **Note added** | a note is added to a contact, by a teammate, the API or a campaign's **Add note** step | Any note, or **Only notes containing** some words. The campaign's steps get `{{trigger.note}}` |
| **Task added** | a task about a contact is created, by a teammate, the API, a campaign's **Create task** step or a call summary | Nothing. The campaign's steps get `{{trigger.task_title}}` and `{{trigger.task_due}}` |
| **Task completed** | a task about a contact is marked done (in **My tasks**, on the contact page or through the API) | Nothing |
| **Task due** | one of a contact's open tasks is due soon, or is overdue and still open (once per task and due time; a new due time gets a new one) | **Before it is due** (when it is due, or 1 to 72 hours before) or **When it is overdue** (right away, or 1 to 72 hours later) |
| **Do not contact changed** | a contact goes on the [do-not-contact list](/help/campaigns/sending-rules-and-consent.md) (an unsubscribe link, an unsubscribe reply, a STOP text, a WhatsApp opt-out or **Do not contact** on the contact) or comes off it (a START text, or a teammate removes the entry) | **Goes on the list** or **Comes off the list**, and any channel or only some: **Every channel (do not contact)**, **Email**, **SMS**, **WhatsApp**. A contact on the list for every channel can't enter any campaign, so use this one to tell your team or update your CRM |
| **LinkedIn account needs attention** | one of your LinkedIn accounts is locked (LinkedIn asked to verify it), restricted, signed out, removed or not answering | Any problem, or only some. The run is for the account itself; `{{trigger.account_name}}`, `{{trigger.account_problem}}` and `{{trigger.account_fix}}` say what happened. Turn on re-entry so every problem starts a run. See [LinkedIn asked to verify your account](/help/account-safety/account-health.md) |

LinkedIn only says a message was seen when the person shares read receipts (see [Seen, Delivered and Not seen yet](/help/inbox/read-receipts.md)), so this trigger never fires for people who turned them off. It only starts people who are already contacts in Kerux.

## Add a Kerux event

**1. Open the campaign**

Click **Campaigns** and open the campaign.

**2. Click + Add on the Trigger half**

On the start box of the **Builder**, click **+ Add** on the **Trigger** half. The **Add a trigger** panel opens on the right. Or open the **Triggers** tab, click **+ Add** and pick **Kerux event**.

**3. Find the event and fill it in**

Search for it (for example `tag` or `task`) or find it in its group, and click it. Its settings show right away: fill them in and click **Add trigger**. It shows on the start box and under **Kerux events** in the **Triggers** tab, with when it was last used.

> [!NOTE]
>
> Any member who can edit campaigns can add Kerux events. A campaign can have up to 10. A campaign that isn't launched yet keeps the people under **Waiting for launch** until you turn it on.

## Dates and birthdays

**Birthday reminder** (in **Schedule and dates**) is a **Date reminder** ready for birthdays: every year, on the day, at 9:00, on the custom field whose name looks like a birthday. Change any of it before you click **Add trigger**.

Add a custom field with dates first (**Contacts > Custom fields**), for example **Birthday**, written as `1990-03-14` or, without the year, `03-14`. Dates like `14/03/1990` work when they can only be read one way. Kerux checks every day at the time you chose, in the time zone you chose, also on the days the clocks change. Someone born on 29 February is reminded on 28 February in other years.

## Schedules

A schedule runs at the day and time you set, in its time zone, and puts the list (or the contacts with the tag) in the campaign, up to 5,000 contacts per run. Nobody enters twice, unless you turn on **Allow re-entry** in the campaign's [Settings](/help/campaigns/campaign-settings.md): then people who finished enter again on the next run, once the minimum gap has passed. A run missed by more than 12 hours (for example during maintenance) is skipped, never sent late.

## Trigger links

A trigger link is a tracked link that sends whoever clicks it into the campaign, then to the page you chose.

1. Add a **Trigger link clicked** event with a name, for example `webinar`, and the page it goes to.
2. In any message (of any campaign), write `{{links.webinar}}`. Each contact gets their own link.
3. When a contact clicks it, they land on your page and enter the campaign.

The name `booking` is taken: `{{links.booking}}` is always your [booking page](/help/campaigns/booking-page.md). A trigger link named `booking` from before keeps working as `{{links.booking_trigger}}`, and the campaign's **Triggers** tab says so.

Link previews (LinkedIn, Slack, WhatsApp...) and other robots don't count as clicks. The link only ever goes to the page you chose, and nobody can change it to enroll someone else.

A trigger link belongs to one contact, so it has no QR code. To bring in people who scan a code at an event, print a form's QR code instead (see [QR code for a form](/help/developers/trigger-urls-and-forms.md#qr-code-for-a-form)).

## Loops are stopped for you

A change made by a campaign's own steps never sends people back into the same campaign. When campaigns pass people to each other (campaign A tags a contact, which starts B, which changes something that starts A...), Kerux stops the chain after 3 hops. The contact's journey shows **Not sent back in (loop guard)** when that happens.

## With the API

Everything here is also in the [public API](/help/developers/api.md): `GET` / `POST /v1/workflows/{id}/event-triggers` (`message_read` takes an optional `workflow_id`; `whatsapp_reply` and `sms_reply` take nothing, and `sms_reply` answers `403 SMS_COMING_SOON` while text messages are coming soon; `account_attention` takes an optional `problems` list: locked, restricted, signin, removed, down; `stage_changed` takes optional `from_stage` and `to_stage` stage ids, `none` for off the board; `engagement_hot` takes nothing; `engagement_changed` takes an optional `min_score`; `reply_received` takes optional `channels` (`linkedin`, `email`, `sms`, `whatsapp`); `note_added` takes an optional `contains`; `task_added` and `task_completed` take nothing; `task_due` takes `timing` (`before` or `overdue`) and `hours` (0 to 168, default 1); `do_not_contact` takes `direction` (`added` or `removed`) and optional `channels` (`all`, `email`, `sms`, `whatsapp`); `segment` takes a `segment_id`; `meeting_soon` takes `hours`, 0.25 to 72, default 24, and `late_bookings`, `skip` or `send`) and `DELETE /v1/event-triggers/{id}`. Changes made through the API (adding a contact, tags, fields, notes, tasks, the do-not-contact list) start these campaigns too.

## Common problems

> [accordion] The contact didn't enter
>
> Check that the campaign is on, and open the contact page: the timeline says **Kerux trigger** for each event, and whether they entered. They don't enter when they're already in the campaign, or went through it before and re-entry is off (or the gap hasn't passed).

> [accordion] A Kerux event stopped bringing people in
>
> A Kerux event works on behalf of the teammate who added it. If that person left the workspace or can now only view it, the event stops. Remove it in the **Triggers** tab and add it again yourself.

> [accordion] Date reminder: I can't pick a field
>
> Date reminders read custom fields. Add one in **Contacts > Custom fields** and fill it in for your contacts (import, API or by hand).

> [accordion] Someone clicked my link but didn't enter
>
> The link must come from `{{links.<name>}}` in a message, so it knows who the contact is. The plain link (without a contact) only takes people to your page.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.