Back to app

AutoFlow

AutoFlow is a SolidifyAI skill ($19/month) that automatically sends SMS and email sequences triggered by what's happening in your business — a job closing, a referral coming in, a new contact being added. Set it up once and it runs in the background.

Enable it from the Billing page under Skills.

Getting started

Go to AutoFlow in the sidebar. You can start from a ready-made Playbook or build a custom sequence from scratch with New sequence.

Playbooks

Playbooks are pre-built sequences you can install in one click and customize afterward. They're grouped by category:

  • Post-Job — runs automatically after a job is completed or paid, turning happy customers into referrers
  • Referrer Growth — welcomes and nurtures the referrers sending you leads

Once installed, a playbook behaves exactly like a sequence you built yourself — you can edit its steps, pause it, or delete it.

Triggers

Every sequence starts with a trigger — the event that enrolls a contact:

  • Job Completed — fires when a job is marked completed
  • Job Paid — fires when a job is marked paid
  • Referral Submitted — fires when a new referral comes in (requires the ReferHook skill)
  • Contact Created — fires when a new contact is added
  • Manual Enrollment — enroll specific contacts yourself from the sequence page, no automatic trigger

Steps

Build out what happens after enrollment by chaining steps together:

  • SMS — send a text message
  • Email — send an email
  • Wait — pause for a set amount of time before the next step
  • AI SMS — give the AI a goal and it drafts and sends the message itself (SMS by default, or switch the channel to email in its settings), written in context of the contact and what triggered the sequence
  • Branch — split the sequence based on a fixed condition (e.g. did they reply?)
  • AI Branch — ask the AI a yes/no question about the contact and route the sequence on its answer — like a Branch, but AI-decided instead of a fixed condition
  • Loop — repeat a set of steps
  • End — marks the sequence complete for that contact

SMS and email steps use your OS SMS/email bundle; the AI SMS and AI Branch steps also use your AI token balance.

Each message step also has optional controls in its settings panel:

  • Priority — when several messages are due for the same contact at once, the higher-priority one goes first.
  • Intent key — tag messages that make the same ask (e.g. review_request); AutoFlow sends only one of them, even across different sequences.
  • Skippable — mark a non-urgent nudge as droppable, so it's skipped rather than delivered late once it's been held too long.
  • Priority message — mark a time-sensitive message (like an appointment reminder) to always send, skipping the spacing checks.

Personalizing messages

Drop a merge code like {{contact.name}} into any SMS or email body and AutoFlow swaps in the real value for each contact when the message sends. In the message editor, tap a code chip under the body to insert it at your cursor. If a contact has no value for a code, it's replaced with nothing — so keep the surrounding sentence readable either way (a typo'd code like {{contact.frist_name}} simply vanishes rather than erroring).

CodeReplaced with
{{contact.name}}The contact's name
{{contact.phone}}The contact's phone number
{{contact.email}}The contact's email address
{{contact.type}}Customer, lead, referrer, friends & family, etc.
{{contact.has_login}}“yes” when the contact has a SolidifyDigital account, otherwise blank
{{contact.engagement_score}}Numeric engagement score
{{contact.engagement_grade}}Engagement grade (hot / warm / cold) when grading is enabled
{{contact.last_engaged_at}}When the contact last engaged
{{org.name}}Your business name
{{org.owner_name}}The business owner's name
{{org.referral_link}}Your ReferHook referral link
{{job.title}}The linked job's title
{{job.status}}The linked job's status
{{enrollment.last_reply}}The contact's most recent inbound reply

The name, phone, email, type, business name, referral link, and job codes are offered as one-click chips in the editor — the rest (engagement, last reply) are mainly used for rule and branch conditions but still work in a message body.

How AutoFlow protects your customers

AutoFlow doesn't just fire messages on a schedule — it looks out for your customers so automation never feels like spam. Behind the scenes, for every person:

1EnrollThey enter asequence2Space outNever textedtoo often3Skip repeatsNever the sameask twice4PauseProblem? Pause+ flag you5ResumeResumes whenit's handled
  • Spacing — a contact is never texted too often, even when they're in several sequences at once. Extra messages wait their turn instead of arriving back-to-back.
  • No repeats — if two sequences would make the same ask (say, both request a review), only one goes out. Exact duplicates are always caught; turn on Smarter de-duplication to also catch differently-worded ones.
  • Quiet hours — texts never send overnight (9pm–7am).
  • Pause on a problem — if a customer replies with an issue, a billing question, or asks for a person, AutoFlow pauses their sequence and creates a task so you can step in. It won't keep marketing to someone who's frustrated.
  • Resume — once you've handled it (or after an optional auto-resume window you set), their sequence picks up right where it left off — no stale backlog dumped on them.

You can watch all of this happen per customer in the Log, which also shows weekly totals — sent, held, dropped, and paused — at the top. Smarter de-duplication and auto-resume are controlled from the Engagement Grades section on the AutoFlow dashboard.

Engagement grading

Every contact who receives sequence messages earns an engagement score, which rolls up into a letter grade:

  • A — Champions (35+ points)
  • B — Active (15–34 points)
  • C — Passive (1–14 points)

Points are earned from: message delivered (+1), email opened (+3), link clicked (+5), replied (+5), replied YES (+10), referred someone (+20).

Grades show up next to each contact and roll up into an Engagement Grades summary on the AutoFlow dashboard. Owners and admins can turn grading on/off or change how it's calculated from that same section.

Log

Every message AutoFlow sends — SMS or email, whether from a playbook or a custom sequence — is recorded in the Log, alongside what was held, skipped, or paused and why. It reads as a timeline per contact, so you can see exactly what each customer experienced and when.

Settings

Owners and admins manage these from the Engagement Grades section on the AutoFlow dashboard:

  • Adaptive routing — when on, sequences automatically lean in (message more often) while a contact is actively engaging and back off when they go quiet, instead of a fixed cadence. Pick a mode — Relational (slower, warmer) or Direct (faster, more promotional) — to tune how aggressive it is.
  • Smarter de-duplication — off by default. When on, AI also catches differently-worded duplicate messages across a contact's sequences (exact duplicates are always caught for free). It only runs when a contact has competing messages, and uses a small amount of AI credit.
  • Auto-resume paused contacts — off by default. Choose a window (3–30 days) after which a paused contact's sequence resumes on its own, if no one has resumed them or closed the follow-up task first.

Managing sequences

Each sequence can be paused or reactivated at any time without losing its steps or history. Contacts already enrolled in a sequence keep running through it even if you pause new enrollments.

Preview before you activate. Open a sequence and use the Simulate tab to see the exact timeline a customer would experience under different scenarios (never replies, replies yes, goes quiet) before it goes live.

Individual contacts. From a sequence's Enrollments tab you can pause, resume, or remove a single contact without affecting anyone else. AutoFlow also pauses a contact automatically when they report a problem — you'll get a task, and you resume them once it's handled.

Rules

Sequences handle the messages a contact walks through. Rules handle everything around them — standing “when this happens, do that” automations. Open any sequence and go to its Rules tab.

You don't fill out a form — you describe the rule in plain English and AI turns it into a real one for you to review before saving. For example:

  • “When a job is completed, enroll the customer into Referrer Onboarding.”
  • “When a job is paid over $5,000, email me to thank them personally.”
  • “When someone becomes a referrer, remove them from this sequence.”
  • “When a contact replies, if they sound frustrated, make me a task to call them.”

Not sure where to start? Hit Suggest rules and AI proposes a few that fit this sequence — click Add on any you like.

What a rule is made of

Every rule is when something happens → (optionally) if a condition is true → do an action.

  • When (the event) — a job is completed, paid, or cancelled; a new contact is added; a contact becomes a referrer; a referral is submitted; a contact finishes this sequence; or a contact replies to a text.
  • If (optional conditions) — narrow it down by real data: contact type, engagement grade, momentum, or the job's dollar amount. You can also use an AI judgment for things a field can't capture — like “if their message sounds frustrated” or “if they seem ready to buy” — where AI reads the contact's message to decide. Conditions combine (“if it's a customer and they sound unhappy”).
  • Do (the action) — enroll them into another sequence, remove them from a sequence, make you a task, or email you.

If you describe something that isn't supported (say, “send them a gift card”), AI tells you it can't rather than guessing.

Editing & watching your rules

Your rules show as a plain-English list. Edit re-opens the description so you can reword it; Remove deletes it. Below the list, Recent rule activity shows exactly what each rule did and to whom — so “why did this contact get moved?” always has an answer.

Data conditions (type, amount, grade) are free. An AI judgment condition uses a small amount of your AI token balance each time it runs — and only when a rule is actually waiting on that event. If you're ever out of tokens, the judgment simply doesn't fire rather than guessing.

Advanced

Everything above is all most people need. If you want to understand the mechanics, here's what's happening under the hood.

Adaptive routing & momentum

Adaptive sequences read two signals about each contact:

  • Tier (A/B/C) — cumulative engagement over time: how engaged they've been overall.
  • Momentum (hot / warm / cold) — how recently they've engaged: whether they're engaging right now.

On each cycle the sequence routes the contact into one of three lanes: escalate (hot — sooner, more direct), steady (the default), or back off (gone quiet — slower, softer check-ins). A contact moves between lanes on its own as their momentum changes. The mode — Relational or Direct — sets how quickly momentum shifts and how often each lane messages. Any sequence can override the org mode when you activate it, and a custom Branch step can test Momentum directly with your own “hot within / cold after” day thresholds.

AI Branch — AI-decided routing

A regular Branch tests one fixed condition (did they reply? what type are they?). An AI Branch instead asks the AI a plain-English yes/no question about the contact and routes to your Yes or No path based on its answer — useful when the decision isn't a single field, e.g. “Has this contact gone quiet but engaged strongly in the past?”

What it can and can't do:

  • Read-only. The AI sees a small snapshot of the contact — their type, engagement grade & score, how long since they last engaged, recent activity, and their current job — and nothing else. It never writes data, sends a message, or moves money; it only picks which path the sequence takes.
  • Token-metered. Each decision uses a small amount of your AI token balance, like any other AI step.
  • Fail-safe. If you're out of tokens or the AI is briefly unavailable, the step waits and retries on the next run rather than guessing — it never mis-routes a contact.

Write the question so “yes” and “no” are both clear. In the Simulate tab, an AI Branch always previews the “yes” path (the real decision is made live, per contact).

How AutoFlow reads replies

When a customer replies to a sequence text, AutoFlow reads the intent, not just keywords:

  • STOP / unsubscribe (or a plain-English “please stop texting me”) — the contact is opted out immediately and removed from all sequences.
  • A problem, a billing question, or “talk to a human” — their sequence pauses, a task is created for you, and they get a quick acknowledgment.
  • A question or a scheduling change — pauses for a person and flags you, instead of a robot answering.
  • A simple “thanks” or “yes” — no interruption; the sequence carries on.

The exact STOP keyword always works instantly, independent of the AI, for compliance.

Message spacing & suppression

Before any sequence message goes out, AutoFlow runs it through a set of checks so a customer is never over-messaged or sent something redundant. Each message that's due is evaluated in this order, and ends up sent, held (delayed and retried later), or dropped (not sent at all):

  1. Already asked? → dropped. If the same intent key already reached this contact — this run, or within the last 3 days — the message is dropped as a duplicate. With Smarter de-duplication on, AI also catches differently-worded versions of the same ask.
  2. Quiet hours? → held. SMS never sends between 9pm and 7am; the message waits until morning. No exceptions — even priority messages wait. (Email is unaffected.)
  3. Texted too recently? → held. If this person already got a message on this channel within their spacing window (below), the message is held and retried later — unless it's marked a priority message, which always sends.
  4. Held too long? → dropped. A held message marked skippable is dropped once it's waited past its limit, rather than arriving stale. Messages that aren't skippable keep waiting until they can send.
  5. Otherwise → sent. When several messages are due for the same contact at once, the highest-priority one sends and the rest fall back to the spacing check.

The spacing window depends on how engaged the contact is — more-engaged people can hear from you a little more often:

EngagementSMSEmail
A — Champion12 hours6 hours
B — Active24 hours12 hours
C — Passive48 hours24 hours
Ungraded72 hours48 hours

Spacing is measured per person across everything — all of your sequences at once, and even a message another business on the platform sent them — so a customer enrolled in several sequences never gets a burst. The weekly summary at the top of the Log tallies held (delayed) versus dropped (a duplicate or a stale skippable message), and each contact's timeline shows exactly what happened and why.