Guides
A step-by-step guide to building multi-step lead qualification flows in Thoughtly's Agent Builder — using Speak nodes, Variables, Outcomes, mid-call Actions, and post-call Automations to route high-intent leads and nurture the rest.
Last updated
A single yes-or-no question rarely separates a ready buyer from a tire-kicker. In high-consideration industries like insurance, mortgage, and education enrollment, qualification takes multiple turns: confirming intent, checking eligibility, gauging urgency, and collecting enough detail so the human rep starts the conversation warm. Thoughtly's Agent Builder gives you a visual, node-based canvas to design these multi-step flows without writing code — then lets your AI voiceAI voiceAn artificially generated, natural-sounding voice produced by a TTS model. Thoughtly supports a library of AI voices and brand-specific cloning. agent run them at scale, 24/7.
This guide walks you through building a multi-step lead qualification workflowWorkflowAn automated, multi-step process — usually triggered by an event (form fill, new lead) and orchestrating one or more voice / SMS / email actions. in Thoughtly from scratch: mapping your criteria, wiring Speak nodes and Outcomes, extracting Variables, triggering mid-call Actions, routing qualified leads to your team, and measuring lift. Every step uses real product mechanics from Thoughtly's current documentation.
Thoughtly agents are built on four node types: Start, Speak, Transfer, and End. A multi-step qualification flow chains Speak nodes together so the agent collects information across several conversational turns, evaluates it through Outcomes and Variables, and routes the caller to the right destination.
The key execution order inside each Speak node is:
The agent speaks (Message or Prompt) → the caller responds → Variables extract structured data from the response → Outcomes evaluate and route to the next node.
Because Variables extract before Outcomes evaluate, your branching logic always sees the freshest data. This lets you build qualification flows where each step feeds the next decision — not unlike a skilled rep who adjusts their questions based on what the prospect just said.
Before opening the Agent Builder, write down the qualification signals that matter for your funnel. For high-consideration consumer industries, these typically include:
For example, an insurance agency qualifying inbound leads might need to determine: the type of coverage requested, whether the caller currently has a policy, their ZIP code, and how soon they need coverage to start. A mortgage lender might ask about the property type, estimated purchase price, and whether the borrower has been pre-approved elsewhere.
Decide which signals are required (the agent must collect them before routing) and which are nice-to-have (the agent attempts to collect them but can proceed without). This distinction directly shapes how you configure Outcomes and loop-back logic in the next steps.
Create a new agent in Thoughtly and open the Agent Builder. Your Start node is the first thing the caller hears, and its content is spoken verbatim — no AI improvisation.
Use the Start node for:
Keep it short. Long openers increase hang-up rates before the agent reaches the first question. A strong pattern:
Hi, thanks for reaching out to [Company Name]. This call may be recorded for quality. I'm here to help connect you with the right specialist — let me ask a couple of quick questions to make sure I point you in the right direction.Each qualification question gets its own Speak nodes. This keeps your flow modular: you can reorder steps, add loops, or insert new questions without untangling a monolithic prompt.
Decide between the two Speak node modes for each step:
Use Message mode when the question or statement needs to be delivered exactly as written. Pair it with the Verbatim speech setting for compliance-critical copy. Good for: consent confirmations, specific disclaimers, or short direct questions where wording matters.
Use Prompt mode when the agent needs to adapt its response based on context — for example, acknowledging what the caller just said before asking the next question. Write the prompt as a mini playbook: goal, constraints, must-say points, tone. Good for: dynamic qualification questions, objection handling, summarizing what the caller shared.
A practical insurance qualification flow might use five Speak nodes:
| Node | Mode | Purpose |
|---|---|---|
| Step 1: Coverage type | Prompt | Ask what type of insurance they need; adapt if they mention specifics |
| Step 2: Current coverage | Prompt | Ask if they have existing coverage and with whom |
| Step 3: ZIP code | Message | Ask for their ZIP code to confirm service area |
| Step 4: Urgency | Prompt | Ask when they need coverage to start; acknowledge their timeline |
| Step 5: Summary and routing | Prompt | Summarize what the caller shared and explain next steps |
Avoid cramming multiple qualification questions into a single node. Splitting them lets you attach separate Variables and Outcomes to each step, giving you precise control over branching.
Variables capture information from the caller's response and make it available for branching, actions, and post-call workflows. Add them from the right panel of each Speak node.
For each qualification step, define a VariableVariableA named value the voice agent stores during a conversation — caller name, intent, qualifying answers — and uses to drive routing and post-call actions. with:
Here are concrete Variable definitions for the insurance qualification example:
Goal: Extract the type of insurance the caller is asking about.
Valid categories: auto, home, renters, life, health, business, umbrella, other.
Normalize to lowercase.
If the caller mentions multiple types, choose the one they emphasize most.
If unclear, return empty.
Do not invent values.Goal: Determine whether the caller currently has active insurance coverage of the type they are asking about.
Return true if they clearly state they have current coverage.
Return false if they say they do not have coverage, or if this is a new policy inquiry.
If ambiguous or not mentioned, return empty.Goal: Extract the caller's ZIP code.
Return the 5-digit US ZIP code only, no extensions.
If the caller gives a city/state instead of a ZIP, return empty.
Do not invent values.Goal: Determine how soon the caller needs coverage.
Normalize to one of: immediate, within_30_days, exploring, unknown.
"Immediate" = needs coverage this week or has a deadline.
"within_30_days" = buying within the next month.
"exploring" = just looking, no firm timeline.
If not stated, return "unknown".
Do not invent values.The extraction instructions are the most important part. Vague instructions like "Get the caller's info" produce unreliable results. Be explicit about normalization, edge cases, and what to return when the data is missing.
Outcomes decide where the conversation goes after each Speak node. A node can use either prompt-based or rule-based Outcomes — not both. Pick the mode that fits the decision being made at that step.
Use prompt-based Outcomes when the branching depends on the caller's intent or sentiment — things that are hard to reduce to an exact value. For example, after the initial coverage-type question, you might use:
Write Outcome labels that are concrete and distinct. Avoid vague labels like "Positive" or "Negative" — prefer "Wants auto insurance quote" over "Interested."
Use rule-based Outcomes after you have extracted a Variable and need deterministic routing. After the ZIP code step, for example:
Rule-based Outcomes evaluate from top to bottom, and the first match wins. Always add an Else/Default Outcome at the bottom to catch unexpected inputs. Missing a default path is the single most common cause of agents getting stuck mid-call.
For fields you must collect before proceeding (like ZIP code), use a self-loop pattern: if the Variable is empty after extraction, route the Outcome back to the same Speak node. Add a loop counter or a maximum retry limit — two re-asks is usually enough before offering to transfer to a human.
Actions let your agent do real work during the call: look up a contact in your CRMCRMThe system of record for leads, contacts, deals, and activity. Thoughtly reads from and writes to your CRM continuously., check appointment availability, write a record, or send a webhook. Actions live inside Speak nodes and execute after the agent speaks and the caller responds.
Two common mid-call Action patterns for qualification flows:
After collecting the caller's phone number or email (which may already be available as a system variable for inbound calls), trigger a CRM lookup Action. Map the lookup result to Variables like crm_contact_found (Boolean) and existing_customer (Boolean). Use rule-based Outcomes to branch: existing customers might skip basic qualification steps; new contacts proceed through the full flow.
If your qualified path ends with booking an appointment, add a scheduling Action (Calendly, Cal.com, Acuity, or GoHighLevel) after the final qualification Speak node. Map the result to a booking_status Variable and use rule-based Outcomes to confirm the booking or offer alternative times if the slot is unavailable.
Important: when Actions run inside a Speak node, the caller does not speak again before Outcomes evaluate. Use rule-based Outcomes that check Action result Variables — prompt-based Outcomes cannot see internal values unless you surface them in spoken conversation.
Your qualification flow should end with clear routing. Use a Transfer node for qualified leads and End nodes for everyone else.
For leads that pass all your criteria, use a Phone Router Transfer to connect them to the right rep or team. Add a pre-transfer message that sets expectations: "Great — based on what you've shared, I'm connecting you with a licensed agent who can walk you through your options. One moment." Enable Early Summaries on the Transfer node so the receiving rep gets immediate context. See the warm transfer guide for detailed setup.
For leads that don't meet your criteria or aren't ready yet, close the call gracefully with an End node that thanks them and sets a follow-up expectation. Use post-call Automations (next step) to enroll them in a nurture sequence — an SMS drip, an email series, or a scheduled callback.
Create a separate End node for callers who fall outside your service area or clearly don't fit. A short, courteous message preserves goodwill: "Unfortunately, we don't serve that area right now, but I'd recommend checking with [alternative]. Thanks for calling."
Thoughtly's Automations handle everything that happens after the call ends. Create a new Automation with the On Call Completed trigger scoped to your qualification agent.
Common post-call steps for qualification flows:
Use Conditions steps in your Automation to branch on the Variables your agent captured. For example, if coverage_urgency equals "immediate" and the transfer succeeded, update the CRM stage to "hot lead." If it equals "exploring," tag for drip nurture instead.
Use Test Agent (text chat) first to validate every branch cheaply. Run through at least these scenarios:
After logic checks pass, use Call Me to place a real call. Listen for:
Track these metrics to know whether your multi-step qualification workflow is performing:
| Metric | What it tells you | Target range |
|---|---|---|
| Qualification rate | Percentage of calls that result in a qualified lead disposition | 20–40% for inbound consumer leads |
| Average qualification time | Seconds from call start to qualified/not-qualified outcome | 90–180 seconds for 4–5 question flows |
| Transfer success rate | Percentage of qualified transfers that connect to a live rep | Above 80% |
| Variable fill rate | Percentage of calls where all required Variables are captured | Above 85% |
| Loop-back rate | Percentage of calls where the agent re-asks a question | Below 15% (high rates suggest unclear questions) |
| Post-call CRM write-back rate | Percentage of calls where the Automation successfully updates the CRM | Above 95% |
| Conversion-to-appointment rate | Percentage of qualified leads that book during or after the call | Depends on vertical; insurance inbound: 25–45% |
Review these weekly. If your qualification rate is low, your criteria may be too strict or your agent's questions may confuse callers. If transfer success is low, check your routing numbers and rep availability. If Variable fill rate drops, tighten your extraction instructions or simplify the question.
No. Each Speak node uses one mode or the other. If you need open-ended intent classification at the start of a step and then deterministic routing on a captured Variable, split them into two consecutive Speak nodes — the first uses prompt-based Outcomes to classify intent, and the second uses rule-based Outcomes to check the extracted Variable.
There is no hard cap on the number of nodes in a flow. Practically, most qualification agents use 4–8 Speak nodes. More than 10 conversational turns risks caller fatigue, so keep the flow tight and only ask questions that change your routing decision.
Yes. A Variable defined in one Speak node is available in every subsequent node's Outcomes, Actions, and prompts. If a later node redefines the same Variable, it overwrites the previous value — useful for confirmation loops where the caller corrects earlier input.
Design for it. Use an Outcome that catches refusal or non-answer ("Caller declined to answer" in prompt-based mode, or a check for an empty Variable in rule-based mode) and route to either the next question, a graceful wrap-up, or a Transfer to a human. Never let a refusal create a dead endDead endA conversation node with no valid next step. Avoid by designing for unexpected inputs and graceful fallback..
Criteria live in your Variables (extraction instructions) and Outcomes (routing rules). To change what qualifies a lead, update the relevant Variable's extraction instructions or adjust the rule thresholds in your Outcomes. No need to tear down the node structure — the flow stays the same, and only the decision logic changes.