Automations A visual builder for every Warmbly event

When this happens,
do that.

A reply lands, a meeting books, a mailbox slips. Wire each moment to your playbook on a canvas: branch on intent, post to Slack, open the deal, update the CRM, fire a signed webhook. Then dry-run it before it ever touches production.

Live demo

Watch a run, end to end.

This is the builder as it ships. A positive reply comes in, the IF chip routes it, and the yes path posts to Slack, opens the deal and updates HubSpot while the test panel checks off every node. The no path waits its turn. Press Test in the window to fire it again.

app.warmbly.com/automations/reply-to-revenue
Reply to revenue Active
History Tidy up Saved
Add action Add condition
drag a node's dot to connect · IF block: right dot = yes, bottom dot = no
yes no
Prospect replies Trigger
When
campaign.reply_received
if intent is positive · ≥ 80%
S Send a Slack message
Then
#sales · reply from {{.contact_email}}
Create a deal
Then
Discovery · $4,800
H Update HubSpot contact
Then
lifecycle stage · opportunity
Add a tag
Then
nurture
Send a webhook
Then
hooks.yourapp.com/replies
Triggers

Nine moments it can fire.

Every automation starts from one event. Replies arrive already classified, meetings arrive matched to the contact, and a campaign step can launch an automation for each contact that reaches it.

Prospect replies
campaign.reply_received

The classifier labels intent and confidence before the trigger fires, so you can branch on both.

Meeting booked
meeting.booked

Calendly and Cal.com invitees, matched back to the contact that booked.

Meeting rescheduled
meeting.rescheduled

Same payload, new time, so downstream reminders stay honest.

Meeting canceled
meeting.canceled

Catch the cancellation and put the contact back to work.

Email bounces
campaign.email_bounced

Hard or soft, with the provider and reason attached to the event.

Contact unsubscribes
campaign.unsubscribed

Suppression already happened. This is your cue to sync it everywhere else.

Warmup health changes
warmup.health_changed

A mailbox moves bands: healthy, watch, quarantined. React before placement slips.

Spam complaint
deliverability.complaint

The signal worth reacting to fastest. Page the channel, pause the risk.

Launched by a campaign step
campaign.action

A sequence action node can fire any automation, per contact, mid-flow.

Actions

Do it in Warmbly. Do it everywhere else.

Seven actions ship built in and need no connection at all. The rest reach your stack through the integrations you have already connected, with message templates rendered per event.

  • Built-in actions run inside Warmbly: tags, tasks, deals, suppression.
  • Stack actions reuse the connection: pick it from a dropdown, done.
Built in · no connection needed
Add a tag
Remove a tag
Create a task
Create a deal
Move the deal stage
Unsubscribe the contact
Run another automation
Across your stack
S
Slack · Send a channel message, templated per event.
D
Discord · Same message action, pointed at a Discord channel.
H
HubSpot · Create or update the contact as events land.
Sf
Salesforce · Upsert the contact into your org.
P
Pipedrive · Create or update the person record.
C
Close · Upsert the lead, ready for the calling queue.
{}
Webhook · HMAC-signed POST to any URL you run.
Branching

One chip, two paths, full graph.

A condition reads one field off the event and routes it: yes out the right dot, no out the bottom. Chain conditions for AND logic, point both paths anywhere, and converge them back when the playbooks rejoin.

  • Fields follow the trigger: intent and confidence on replies, source on meetings, provider and reason on bounces.
  • A random split routes a weighted share of events down a different path.
Condition
on campaign.reply_received
Field
intent
Operator
equals
Value
positive
Fields by trigger intent · replies confidence · replies subject · replies source · meetings event_name · meetings provider · deliverability reason · deliverability new_state · warmup health contact_email · everything
Field type
Operators
string equals · not equals · contains · exists
number greater or equal · less or equal · equals
enum equals · not equals · exists
random chance, a weighted split for testing playbooks
Templating

Messages written from the event.

Slack messages, Discord messages and webhook payloads are Go templates, the same syntax as the rest of Warmbly. Pull any field the trigger carries and the message reads like a teammate wrote it.

Reply event fields
{{.contact_email}}{{.intent}}{{.confidence}}{{.subject}}{{.snippet}}{{.campaign_id}}
slack message · template
:fire: {{.contact_email}} replied to {{.subject}}
intent {{.intent}} at {{.confidence}}% · “{{.snippet}}
Lands in #sales as
S
Warmbly app 2:14 pm

🔥 [email protected] replied to Re: Quick question
intent positive at 92% · “Thursday works for me”

Rendered with the event that fired the run. A blank field never breaks the message, it just renders empty.

Test runs & history

Know what it did, every time.

Test fires a dry run against a sample event: every node reports what it would do, every condition reports yes or no, and nothing leaves Warmbly. Once live, every real run lands in history with per-node results, so a broken step is a read, not an investigation.

  • Per-node verdicts, with the provider response kept on failures.
  • Branch decisions are recorded too: you can see which path a contact took.
Run history · Reply to revenue
Run passed 2 min ago · 5 steps · 1.9 s
Trigger · Prospect replies [email protected]
intent is positive · ≥ 80% yes · 92%
Slack message · #sales 212 ms
Deal created · Discovery $4,800
HubSpot contact updated 2 fields
Run passed 1 h ago · took the no path · 2 steps no · 41%
Run failed yesterday · step 3 of 5 failed
Slack message · #sales 404 · channel_not_found
Plumbing

Built to not wake you up.

Signed deliveries

Every webhook a run sends carries an HMAC SHA-256 signature header. Verify it in four lines and drop anything that does not match.

Throttled, fail-open

Dispatch is rate-limited per organization and event with generous plan-based limits. If the limiter itself has a bad day, events still flow.

Safe to compose

Automations can run automations, and campaign steps can launch them per contact. Anything referenced by a live campaign step cannot be deleted out from under it.

No keys to paste

Automation tools connect in one click. OAuth where the provider has a per-user identity, a minted webhook URL for the rest.

Automations FAQ

Five questions about how runs behave.

Nine triggers: a classified reply, a booked, rescheduled or canceled meeting, a bounce, an unsubscribe, a warmup health change, a spam complaint, and a campaign step that launches the automation per contact mid-sequence.

For the common paths, no: Slack, Discord, HubSpot, Salesforce, Pipedrive, Close and the built-in CRM actions are direct. Zapier, Make and n8n still connect with a scoped key when you want them, and the signed webhook action reaches anything else.

Each run records a per-node result. A failed step keeps the response it got, the run shows up in history with exactly which node broke and why, and the verdicts of the other nodes stay readable. Test runs exist so most failures never reach production.

Yes. The run-another-automation action composes playbooks, and a campaign sequence step can launch an automation for each contact that reaches it. Self-reference is blocked in the picker, and an automation referenced by a campaign step cannot be deleted.

No. Test is a dry run against a sample event for your trigger. Every node reports what it would do, conditions report yes or no, and nothing leaves Warmbly until the automation is switched on.

Wire your first trigger in two minutes.

Pick the reply trigger, point it at Slack, press Test. Then flip it on.