# Cold email automation that acts on every reply

> Cold email automation on a canvas: 13 triggers, 23 actions, HubSpot, Pipedrive, AI steps, form webhooks and test runs. Every plan.

Canonical: https://ballast.to/automations
Last updated: 2026-11-09

Automations · Every plan

When a lead replies, clicks, fills in a form or finishes a sequence, Ballast tells the team, opens the deal in your CRM, sorts the reply with AI, or moves the lead to another campaign. Built on a canvas, tested before it runs, no Zapier in the middle.

[Read the guide](https://ballast.to/docs/automations)

When

Inbound webhook

Your Typeform posts a new signup

Lead

Create or update lead

{{data.email}} into Founders Q4

AI

AI step

Sort: Hot, Curious, Not a fit

If

ai.intent is Hot

Yes and No paths

Tell someone

Post to Slack

Hot signup: {{lead.company}}

Lead

Add to a list

Nurture

History

1. Waiting for an event

Three automations as the builder draws them, each with a run playing through. Names are sample data.

Ballast is cold email software with every feature on every plan. Connect unlimited mailboxes, send sequences at a pace your domains survive, and handle replies in one inbox, priced by the emails you send.

How it works

## A trigger, then the steps it runs

1. 01
   ### Pick what starts it
   13 triggers: a reply or its label, a click, a sent email, a finished sequence, a bounce, an unsubscribe, a spam complaint, a won or new lead, a paused campaign, a mailbox in trouble, or a form posting to the automation's own URL.
2. 02
   ### Add what it does
   Press + under a card for an action, a wait of up to 90 days, or an If / else that splits into Yes and No. The canvas lays itself out. A card that still needs something gets an amber dot.
3. 03
   ### Test it, switch it on, watch the history
   Test runs the flow once on sample data (or a real lead you name) and shows the path on the canvas, without sending or changing anything. Switched on, it runs for every matching event from then on, and History shows each run step by step.

Recipes

## Start from one that already works

Each recipe opens as a flow you can change. These are the ones in the builder today.

- When: Reply labeled
  ### Interested reply: tell the team, stop the rest
  When a reply is labeled positive, post it to Slack and end the lead's other sequences.
- When: Sequence finished
  ### No reply: try another campaign
  Three days after the last email, a lead who never replied starts a second sequence.
- When: Link clicked
  ### Clicked but quiet: nudge the team
  Two days after a click, if the lead still hasn't replied, a teammate gets a note to follow up.
- When: Lead won
  ### Won: move to Customers
  A won lead goes into a customers list and out of every sequence.
- When: Marked as spam
  ### Spam complaint: pause and look
  A spam complaint pauses the campaign and tells the team, before it hurts the domain.
- When: Reply received
  ### Urgent reply: Slack right away
  A reply AI marks urgent goes to Slack within the minute. Needs AI labels on.

Triggers

## 13 events that start a run

Each run belongs to the lead and campaign of its event. Two labels on one reply are two runs.

| Trigger | Runs when |
| --- | --- |
| Reply received | A person answered a campaign email. Out-of-office and automatic replies don't count. |
| Reply labeled | A reply got a label, from AI, a rule, a teammate or the API. |
| Link clicked | A lead clicked a link in a campaign email. Needs click tracking on the campaign. |
| Sequence finished | A lead got the last email of a campaign's sequence. |
| Email bounced | An email to a lead bounced hard. |
| Lead unsubscribed | A lead unsubscribed by link, one-click header or reply. |
| Marked as spam | A lead's email provider reported a campaign email as spam (Yahoo, Outlook and others; Gmail doesn't). |
| Lead won | A lead was marked won, by a teammate, the API or an automation. |
| Campaign paused | A campaign stopped sending: a breaker, its end date, a label or a teammate paused it. |
| Inbound webhook | Another tool posts JSON to this automation's own URL: a Typeform or Tally form, Zapier, Make, n8n or your own code. Each field becomes {{data.name}}. |
| Lead created | A lead was added by a teammate, the API, an automation or a Clay push. File imports and lead source pulls stay quiet. |
| Email sent | A campaign email went out. Narrow it to some steps, like the second email. |
| Mailbox needs attention | A mailbox stopped sending: its login failed, a breaker quarantined it, it's cooling off or its inbox can't be read. |

Actions

## 23 things it can do

Text takes variables with a fallback, like `{{lead.first_name|there}}`. Adding a lead to a campaign runs the same checks as adding it by hand.

### Tell someone

- Notify the team
  A notification in the bell for every member, emailed by their digest settings.
- Post to Slack
  A message in the channel connected under Integrations.
- Send to a webhook
  A signed POST to one of the workspace's webhook endpoints, retried like any delivery.
- Post to Discord
  A message in the Discord channel connected under Integrations.

### Lead

- Add a label to the lead
  Runs the label's own triggers too.
- Remove a label from the lead
  Takes the label off the lead, in every campaign.
- Label the reply
  Sets the reply's label in the Unibox, like choosing it by hand.
- Add to a list
  Adds the lead to a list.
- Remove from a list
  Takes the lead out of a list.
- Mark as won
  Sets the lead won, counted in the won rate.
- Suppress
  Adds the address (or its whole domain) to the suppression list. No campaign emails it again.
- Add a note
  An internal note on the lead, never emailed.
- Set a custom field
  Writes a value into one of the lead's custom fields.
- Create or update lead
  Makes a lead from the event's fields, or fills in the one with that email, then can add it to a list, a label and a campaign. Later steps act on it.

### Campaigns

- Add to a campaign
  Starts another sequence, with the same checks as Add leads: suppressed, bounced, unsubscribed and invalid leads are skipped.
- Stop the sequence
  Ends the lead's queued emails in this campaign or in every campaign. The address stays usable.
- Pause the campaign
  Pauses the campaign the event came from.

### CRM

- HubSpot: create or update the contact
  Finds the contact by email or creates it, fills the fields HubSpot has empty and can add a note.
- HubSpot: create a deal
  Creates a deal in the pipeline and stage you pick, on the lead's contact (created if missing).
- Pipedrive: create or update the person
  Finds the person by email or creates them with their organization, and can add a note.
- Pipedrive: create a deal
  Creates a deal in the stage you pick, on the lead's person (created if missing).
- Send a row to Clay
  Posts the lead, the reply and the campaign as one row to a Clay table's webhook.

### AI

- AI step
  Writes text, sorts into a category or pulls out fields. Later steps use the result as {{ai.name}}.

Waits and conditions

## Wait, then look again

A wait holds the run for minutes, hours or up to 90 days. An If / else after it reads the lead as it is then, with up to 10 rules, all or any of them.

### What a condition can check

- The reply's label
- The reply's text
- The reply is urgent
- Campaign
- Lead status
- Lead has replied
- Lead has the label
- Lead is in the list
- Lead field
- Lead's email provider
- Random split
- AI step's result
- Ask AI
- Event field

Up to 60 steps per automation and 8 conditions inside each other. Numbers compare with at least and at most. Random split sends the share you pick down Yes and the rest down No, for testing one path against another.

When it's the wrong tool

## What automations don't do

- Follow-ups inside a sequence. Steps, waits between emails and stopping on reply are the campaign's job. See [sequences](https://ballast.to/sequences).
- Look back. An automation you switch on today acts on today's events. Leads who replied last week need a list and Add leads.
- Sync your CRM. HubSpot and Pipedrive steps write a contact, a deal or a note when a step runs. Nothing syncs back, and a field your team filled in [is never overwritten](https://ballast.to/docs/automations#crm).

## Questions

### How much does it cost?

Automations are on every plan, from $19 a month, with no per-run price and no task count. Up to 100 automations per workspace.

### Do I still need Zapier or Make?

Not for what happens inside Ballast, nor for HubSpot, Pipedrive, Slack, Discord and Clay: those have their own steps. To reach a tool Ballast doesn't connect to, use Send to a webhook and point it at Zapier, Make or your own endpoint. Those requests are signed and retried like every Ballast webhook.

### Can an automation email a lead?

Only by adding the lead to a campaign. Then the campaign's own schedule, pacing, ramp-up and breakers decide when it goes out, and suppressed, bounced or unsubscribed leads are skipped with the reason.

### What stops two automations from looping?

An action can start other automations, for example adding a label that another automation waits for. That chain stops after 3 levels: an event caused that deep starts nothing more.

### What does a wait check after it ends?

The lead as it is then. A condition after a two-day wait sees a reply, a label or a status that arrived during those two days, which is how "clicked but never replied" works.

### Can a form or an ad create leads?

Yes. Pick the Inbound webhook trigger and the automation gets its own URL. Point a Typeform or Tally webhook at it, or route Facebook, LinkedIn and TikTok lead forms through Zapier, Make or n8n, then add Create or update lead with the campaign it should start. Sending the same person again updates them instead of making a duplicate.

### How do I check a flow before it runs for real?

Press Test in the builder. It saves the flow and runs it once on sample data (a made-up lead, or the last form post) and marks each step it reaches on the canvas: what it would post, who it would add, which way each If / else goes. Name a real lead to see their path instead. Nothing is sent or changed; AI steps run for real so you see their answer.

### What happens when a step fails?

Without an error path the run stops and History says why. Turn on "If this step fails" on an action to give it an On error path, like notifying the team when HubSpot is down; the run goes there instead of stopping. Slack, Discord, CRMs and Clay are tried again three times first when the failure looks temporary.

### What do the AI steps do?

An AI step writes a short text, sorts the reply into one of your categories or pulls fields out of it, and later steps use the result as {{ai.name}}. Ask AI is a yes or no question inside an If / else. They run on your own OpenAI or Gemini key when one is connected, else on ours, up to 1,000 a day per workspace. A reply is treated as data: text in it that tries to give the AI orders is ignored.

### Who can build them?

Owners and admins build and switch them on. Every member can see them and their history. Runs and their step log are kept for 90 days.

### Can my AI build them?

Yes. create\_automation, update\_automation, list\_automation\_runs and the rest are in the API and the MCP server, so Claude, ChatGPT or Cursor can build a flow and check why a run stopped. Deleting one asks first.

[Every plan includes automations: see pricing](https://ballast.to/pricing)
