Triggers vs actions
A trigger is "something happened" — a lead replied, an LOI got opened, a contact entered a list, a call hit voicemail, a 24-hour timer expired. The trigger is what fires the automation.
An action is "do this" — send a text, send an email, place a call, create a task, move the lead to another list, update a field. Every automation is one trigger followed by one or more actions, with optional branches and waits in between.
Building your first automation
Open /app/automation → New automation. Pick a trigger: Call disposition = No answer. Pick an action: Send SMS with copy like "Hey [first_name], couldn't catch you on the call — what's the best time to chat about [property_address]?".
Add a Wait of 1 hour between the trigger and the SMS so you're not texting the second they don't pick up. Hit Save, give it a name like "No-answer text follow-up", and toggle Active. From now on every no-answer disposition fires that text 1 hour later.
Personalization tokens that actually fill
Tokens like [first_name], [property_address], [city], [offer_amount], [my_first_name] are dropped into copy with the [ ] syntax. We resolve them at send time from the contact + property record tied to the trigger.
Two rules:
- A token only resolves if the trigger carries that context. A Daily 9am tick trigger has no contact attached, so
[first_name]will render as[first_name]literal — the dry-run log flags this in red. - If the field is missing on the record (e.g. you have a phone but no first name), we fall back to a configured default (e.g. "there"). Set defaults from Settings → Automation → Token fallbacks so cold leads don't get "Hey [first_name]".
Branching
Drop an if/else node between any two steps to fork on a condition: lead replied, lead is on the DNC list, lead's property is under contract, day of week, time of day. Each branch gets its own action chain.
The most common pattern: "Did they reply? Yes → stop the automation. No → keep nurturing." Drop a Reply-received check after each outbound; on Yes route to End, on No continue to the next wait + outbound. Stops you texting someone who's already mid-conversation with you.
Wait steps and timing
Three flavors: fixed wait (e.g. 2 hours), business-hours-only wait (skips nights, weekends, your configured holidays), absolute wait (until 9am tomorrow, until Monday).
"Wait until 9am tomorrow" beats "wait 14 hours" because it normalizes to the recipient's morning regardless of when the trigger fired. Texts sent at 6am get ignored; the same text at 9:15am gets answered. Set your dialer business hours once and the waits respect them everywhere.
Common recipes
Three ready-to-clone flows in the Templates drawer:
- Post-LOI nurture — LOI sent → wait 2 days → SMS check-in → if no reply, wait 3 days → email → if no reply, wait 5 days → mark cold
- Expired listing cadence — added to "Expireds" list → day 1 mailer + SMS → day 3 call task → day 7 RVM → day 14 step down to monthly
- RVM blast follow-up — RVM dropped → wait 4 hours → if any inbound activity, route to live-call task; if silence, queue next-week retry
Clone any of them from the templates drawer, rename, tweak the copy to your voice, then activate.
Testing and turning it on
Every new automation defaults to Dry-run — the trigger fires and the steps run, but no actual texts/emails/calls go out. The Activity log shows what would have happened, with the rendered message text and the recipient. Read 10-20 dry-run entries before flipping to live.
Flip Active to live when you trust the log. The kill switch in the top-right of the automation page disables the flow without deleting it — useful when something looks off mid-day and you want it stopped now, then debugged later.
Automation stats — what to act on
Each automation has a stats panel: triggers fired, actions sent, replies received, opt-outs, errors. The two numbers to watch:
- Reply rate — your SMS sequence at <2% reply is broken copy or wrong list; 4-8% is normal; 12%+ is exceptional
- Opt-out rate — anything >1% means your copy is too aggressive, your list is wrong, or both. Pause and rework before you damage the sender reputation
Stats refresh every 5 minutes. The Cohort comparison view (Pro+) compares two automations on the same metric — useful when you're A/B-ing copy or wait times.
What can go wrong
- Infinite loops — a trigger fires an action that re-fires the same trigger (e.g. "lead replied → send SMS → counts as outbound → triggers reply-watch again"). The builder warns at save time when it can detect this; the runtime guard caps any single contact at 50 automation actions per 24h regardless.
- Unintended reach — attaching a campaign to the wrong list and texting 800 wrong people. Always check the Audience preview count before activating; the count must match what you'd expect by 1-2 contacts at most.
- Stale templates — copy that references "[property_address]" but the trigger doesn't carry property context renders as literal
[property_address]in the text. The dry-run log catches every unresolved variable in red. - DNC drift — a contact on DNC gets re-added to a list via bulk import; the automation tries to text them and fails silently. The activity log shows the suppression reason; investigate any spike in suppressions before assuming "low engagement."