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

# Steps

> What each step does.

> [!NOTE]
>
> \*\*Pro plan.\*\***Send email**, **Send WhatsApp** and the integration steps (**Webhook / HTTP**, **Wait for webhook**, **Call & wait**, **Poll until** and ready-made services like Sendspark, Slack or Clay) are part of Pro and Agency (and the free trial). Services you connect with your own account and pay to that provider directly can be used during the free trial. Add-ons billed by Kerux (email inboxes and WhatsApp numbers) are not included in the free trial. LinkedIn, timing, logic, data, team and AI steps are on every plan. On Starter, a campaign that already has one of these steps keeps running it; adding or changing one shows **This is part of Pro** with an **Upgrade to Pro** button. See [Plans and billing](/help/account/billing.md).

Click any **+** on the canvas to open **Add a step**. Its **Steps** tab has the LinkedIn, email, WhatsApp, SMS (coming soon), timing and other steps, **Conditions** has the ways to branch, and **Automations** has the integration steps and ready-made services like Sendspark.

## LinkedIn

| Step | What it does |
| - | - |
| **Visit profile** | Views the contact's profile. |
| **Follow** | Follows the contact. |
| **Like latest post** | Likes their most recent post. If there's none, the contact goes out through "no recent post". |
| **Connect** | Sends an invitation (with an optional note, up to 300 characters) and waits for the answer: **accepted** or **not accepted**. |
| **Message** | Sends a message. Only to connections: otherwise the contact goes out through "not a connection yet". It can carry a voice note (see below). |
| **InMail** | Sends an InMail to someone who isn't a connection. Needs a Premium, Sales Navigator or Recruiter account (see [InMail credits and Open Profile](/help/campaigns/inmail.md)). |
| **Withdraw invite** | Withdraws a pending invitation. |

### Voice note in a Message step

Open a **Message** step and click **Record a voice note**. Record it once (up to a minute), listen to it, then click **Use this voice note** (or **Record again**, or **Remove**). It goes with the step's message to every contact as a LinkedIn voice note. With no text, only the voice note goes. Recording works in Chrome, Safari and Edge.

Or pick **In my voice** to send each contact a voice note in your own cloned voice that says their name and details. See [Voice notes in your own voice](/help/campaigns/voice-notes-in-your-voice.md).

## Email, WhatsApp and SMS

| Step | What it does |
| - | - |
| **Send email** | Sends an email from one of your connected inboxes (see [Connect an email inbox](/help/getting-started/connect-email.md)): plain text, rich text with pictures and GIFs, or HTML, with a preview (see [Write and send emails](/help/campaigns/send-email.md)), or one of your [email templates](/help/campaigns/email-templates.md). Contacts without an email address go out through "no email address" (or carry on when nothing is connected there). A follow-up email can go in the same thread. A reply by email stops the campaign, like a LinkedIn reply. |
| **Send WhatsApp** | Sends a WhatsApp message from your own connected number to the contact's phone. You connect the number by scanning a QR code with your phone, like WhatsApp Web (each number is an add-on, US\$7 a month; see [Connect WhatsApp](/help/getting-started/connect-whatsapp.md)). A campaign with this step can't be launched until a number is connected. For following up a few contacts in conversation, never cold mass messages (WhatsApp bans numbers for that). Only to contacts with a recorded WhatsApp consent. Up to 100 a day per number (fewer in its first weeks), 2 to 10 minutes apart at random. A contact without a phone with its country code waits in Needs attention. A reply on WhatsApp stops the campaign, like a LinkedIn reply. |
| **Send SMS** | **Coming soon**: shown in **Add a step** as **Coming soon** and can't be added yet; nothing is charged for it. A contact who reaches a **Send SMS** step already in a campaign waits there with **Waiting for text messages to open in Kerux (coming soon): nothing is sent or charged, it goes on by itself**. Once it opens, it sends a text message from your own Twilio number to the contact's phone (see [Twilio (text messages)](/help/integrations/twilio-sms.md)). Twilio bills these texts to your Twilio account. Only for people who agreed to get texts. Up to the number's daily limit (100 by default), a short gap between texts, inside the campaign's hours. A contact without a phone with its country code waits in Needs attention. A text back stops the campaign, like a LinkedIn reply; a phone that texted STOP is never texted again. |

## Timing

| Step | What it does |
| - | - |
| **Wait** | Waits a number of minutes, hours or days. Set it in the next step's panel, under **Wait before this step** (**Add a wait before this step**, or **Remove the wait**). |
| **Wait until** | Waits for something to happen (for example, the invitation is accepted) up to a time limit, then goes out through **it happened** or **timed out**. |

## Logic

| Step | What it does |
| - | - |
| **Condition** | Two ways: yes or no (for example, "is connected", or **Has an Open Profile**, so an InMail to them is free). |
| **If they read it** | After a LinkedIn message: waits the time you set (2 days by default), then goes out through **Seen** (LinkedIn said they saw the message and they didn't reply) or **Not seen (they may have read receipts off)**. You choose which message it checks (the last one before it by default). A reply during the wait ends the contact's path, like any reply (or follows **Replied**, if you add it). Example: "If they read it and didn't reply in 2 days, send a follow-up". In a sequence (day timeline), set **Days to wait** (1 to 30) and **If not seen**: **Stop here** or **Go on with the next steps anyway**; the next steps count their days from the end of the wait. While a contact waits here its status is **Waiting to see whether they read the message**; **Check now** on the contact's journey decides at once with what LinkedIn has said so far. A read receipt that arrives after the wait doesn't change the result, and a contact who got no message (for example, not connected yet) goes **Not seen** right away. It needs a Message or InMail step in the campaign to check. In **Add a step** it's under **Steps > Timing** and **Conditions > Contact actions** (**Read your LinkedIn message**). |
| **If they react** | After a message: waits the time you set (2 days by default), then goes out through **Reacted** (they reacted to one of the campaign's LinkedIn messages, a thumbs up or a heart for example, in that time or before) or **No reaction**. A reaction is never a reply. A reply during the wait ends the contact's path, like any reply (or follows **Replied**, if you add it). Example: "If they react within 2 days, send my booking link". While a contact waits here its status is **Waiting to see whether they react to the message**. In **Add a step** it's under **Steps > Timing** and **Conditions > Contact actions** (**Reacted to your LinkedIn message**). It can also wait for **The email opened** (**Opened** / **Not opened (some mail apps hide opens)**, a click counts too) or **A link in the email clicked** (**Clicked** / **No click**): pick it under **Wait for**, or add **Opened your email** (2 days) / **Clicked a link in your email** (3 days) from **Conditions > Contact actions**. The card then reads "If they open the email" or "If they click a link", and a waiting contact shows **Waiting to see whether they open the email** or **Waiting to see whether they click a link in the email**. These need the campaign's **Track email opens and clicks** on (the default). Automations only (not in day sequences). See [Reactions on LinkedIn messages](/help/inbox/reactions.md) and [Email opens and clicks](/help/campaigns/email-opens-and-clicks.md). |
| **Switch** | Several ways, one per case. |
| **A/B split** | Splits contacts between variants by percentage. Results show on the campaign overview. |
| **Go to step** | Jumps back to an earlier step, a limited number of times. |
| **Move to campaign** | Moves the contact into another campaign. |

## Data

| Step | What it does |
| - | - |
| **Update contact** | Changes fields and adds or removes tags. On the canvas its card shows what it changes, for example `+ low-intent` or `title = CEO`. |
| **Set variable** | Saves a value to use in later steps. |

## Integrations

| Step | What it does |
| - | - |
| **Webhook / HTTP** | Calls another app's API. |
| **Wait for webhook** | Waits until another app sends this contact's data, then continues with it. |
| **Call & wait** | Calls an app and waits for its answer in one step. |
| **Poll until** | Asks an app again and again until the answer is ready. |

See [Webhook steps](/help/integrations/webhook-steps.md) for the integration steps.

Ready-made services (for example Sendspark, Slack or Clay) are listed in the same **Automations** tab. On the canvas their card shows the service and what it does, for example **Slack** / **Slack message**. Clicking one adds it at once and opens its own panel, where you set it up: the **Account** to use (already chosen when you have only one; with none, a button like **Connect Slack** right there), the service's own fields (like **Send to** and **Message** for Slack) and the variable buttons. Changes are saved as you go; until a required field is filled the card says **Not finished** and the campaign can't be turned on. Only steps that call an address you give (a Clay table's webhook URL, a webhook or API address) ask for it first, in a small window. The technical request is under **Advanced**. See [Sendspark videos](/help/integrations/sendspark.md) and [Slack](/help/integrations/slack.md).

> [!NOTE]
>
> There is no End step: when a result has nothing after it, the contact finishes the campaign there.


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