Two things it cannot say honestlythese need a decision, not code
There is no source for N. It isn't in the AI search result, it isn't in the CRM, and it can't be derived. Filling it means inventing a statistic — the exact failure §2.2 warns about, and a prospect can check it.
What we did: Cut the sentence. "It came back with two competitors, you're not in there" is checkable. "Roughly 400 people a week" collapses the moment someone asks how you know.
The proof library is empty. The database refuses to mark any client result citable without a verified, permissioned, evidenced number — and the Bal Dental "20 leads in 90 days" is a guarantee Uplift made, not a result it delivered.
What we did: Until real numbers arrive from La Rios, Mississauga Convention Centre, Quick Scrap Metal or Palacio, this question goes to a human. That is the correct failure, not a bug.
First contact
The single most common first message on this account: 65 of 90 sampled conversations opened with "Yes! Send me the link". Today a rep replies "what's your best email?" and mails it, which pushes someone who just raised their hand off the channel. Answer them here instead, and let the one question we need ride along with the thing they asked for rather than gating it.
{first_name}— their name from the CRM or WhatsApp profile (from their CRM record)
Technical detail
opening_hand_raiser · from spec §6.2Name where they came from so the message isn't mysterious, then ask the one thing the CRM never knows. Deliberately asks about the business and not the city: the business type is what the AI-search demo needs, and two questions in one message is how you get neither answered.
{first_name}— their name from the CRM or WhatsApp profile (from their CRM record){ad}— the ad they answered, named only when a rep note identifies it — otherwise the generic phrase (from their CRM record)
Technical detail
opening_new_lead · from spec §6.2This is the whole product in one line. Referencing a real prior conversation reads as attention, not automation. Only ever uses things they actually said.
{first_name}— their name (from their CRM record){rep_name}— the Uplift person who spoke to them (from their CRM record){when}— date of that conversation (from their CRM record){topic}— what they discussed — only from a rep note or a message they sent (something they told us in this conversation)
Technical detail
opening_known_contact · from spec §4.1The moment that decides whether they convert. Don't pitch — ask whether it worked, because that's the only thing that matters now.
{first_name}— their name (from their CRM record){when}— today / tomorrow / in 3 days, from the trial end date (from their CRM record)
Technical detail
opening_trial_ending · from spec §4.1They already have the product. The useful question is whether it's working, not whether they want to buy one.
{first_name}— their name (from their CRM record)
Technical detail
opening_trial_active · from spec §4.1They've seen the product, so don't explain it. Find out what stopped them.
{first_name}— their name (from their CRM record)
Technical detail
opening_trial_expired · from spec §4.1Don't sell to someone who already agreed to a call. Naming the actual day and time is the difference between a message that proves someone looked and one that proves nobody did — this used to say "a call booked with us" because appointments were never fetched.
{first_name}— their name (from their CRM record){rep_name}— whoever the appointment is assigned to (from their CRM record){when}— the real start time: "tomorrow at 2pm" (a real opening on a closer's calendar)
Technical detail
opening_demo_booked · from spec §4.1Same as above, for the appointments that carry no assigned rep. Still names the time, because that's the part that proves attention — inventing a rep's name to fill the gap would not.
{first_name}— their name (from their CRM record){when}— the real start time: "tomorrow at 2pm" (a real opening on a closer's calendar)
Technical detail
opening_demo_booked_unassigned · from spec §4.1Re-book without making it awkward. People miss calls; it usually isn't a signal.
{first_name}— their name (from their CRM record)
Technical detail
opening_demo_missed · from spec §4.1Showing them the AI search
The strongest single move available. Turns an abstract pitch into a checkable fact about their own business. Every name here comes from a real search run seconds earlier.
{ai_name}— which AI we actually asked — Gemini or ChatGPT (from the live AI search){vertical}— their line of work, as they described it (something they told us in this conversation){city}— their city, as they told us (something they told us in this conversation){competitor_1}— first business the AI named (from the live AI search){competitor_2}— second business the AI named (from the live AI search)
Technical detail
hook_absent · from spec §6.3Say so honestly and sell the improvement. Manufacturing a problem they can check against their own bank account is how you lose credibility.
{ai_name}— which AI we asked (from the live AI search){vertical}— their line of work (something they told us in this conversation){city}— their city (something they told us in this conversation){position}— where they ranked — second, third (from the live AI search){competitor_1}— who ranked above them (from the live AI search)
Technical detail
hook_present · from spec §6.3Finding out if they're a fit
§3.3. Lead with how they get business now — it's an open, real question rather than a pitch setup, and the AI-search point lands far better straight after they've told you their current source. Also §4's test for a live business: anyone who can describe this has something real to market.
{customers}— THEIR word — patients for a clinic, clients for a firm, students for a school. §5: never force "leads" on someone who wouldn't use it. (something they told us in this conversation)
Technical detail
qual_lead_source · from spec Setter §3.3§3.4. Where the real diagnosis happens. Their answer is what gets named back to them when the call is offered — §3.8 forbids a generic "let's hop on a call".
Technical detail
qual_goal · from spec Setter §3.4§3.6. Asked directly, before booking. Don't assume whoever answered the ad can say yes for the business — booking a slot with no real authority on it just burns the closer's time.
Technical detail
qual_authority · from spec Setter §3.6§3.7. The real filter, now that price screens nobody at $99. Genuine near-term intent goes to a booking; clearly-just-curious does not, however politely they answered everything else.
Technical detail
qual_timeline · from spec Setter §3.7Offering the $99 plan
Only sent once they've confirmed a fit, and only when their problem is being found — search, local discovery, content for search, AI-search visibility. If they say yes, send the payment link immediately — do not add steps. Social posting is NOT in this plan. This message used to promise it, and because the body has no placeholders it is offerable on every turn, so the model could suggest it at any dead end and the claim went out at $99. Anyone who wants their social posted is a close_149.
Technical detail
close_99 · from spec §6.5 / Playbook §7The same close for someone who also named a social problem — dead pages, no time to post, or content that never goes out consistently. Never offered just because it is the larger number: the playbook is explicit that the $149 plan is recommended on stated pain, not by default.
Technical detail
close_149 · from spec Playbook §7§3.4 and §4. "Say what you actually think, even if it costs the booking — it's what makes the ones that DO book show up." Booking someone with no business, no authority or no timeline burns a closer's half hour and teaches the prospect our calls waste time.
Technical detail
decline_not_a_fit · from spec Setter §4Booking a call with a person
§3.8. The outcome for everyone who qualifies. Names their specific problem back to them — a generic "let's hop on a call" is what produces no-shows. Two real times from a real calendar, never a scheduling link. It used to read "30 mins with Kaushal Parekh — Thursday or Friday?", which tells them the length and the name and nothing about why they would turn up. §3.8 asks for the reason: what the half hour actually gives them.
{problem}— the thing we diagnosed — usually what the AI search found (from the live AI search){closer_name}— which closer — Kaushal, Rohit or Rithik (a setting){slot_1}— a real free slot on their calendar (a real opening on a closer's calendar){slot_2}— a second real slot, ideally another day (a real opening on a closer's calendar)
Technical detail
book_the_call · from spec Setter §3.8§3.10. A confirmation, not a gate. They already saw the price on the ad before they applied, so this is a courtesy that prevents an awkward surprise on the call — not a qualifier. The price is a placeholder because there are two plans now. It used to say $99 outright, which is a surprise on the call for anyone who was quoted $149.
{price}— the plan this conversation is about — $99 USD, or $149 USD when they named a social problem. Defaults to $99. (a setting)
Technical detail
confirm_price · from spec Setter §3.10 / Playbook §9§3.11. Confirm, say what is coming and where the call happens, stop talking. It used to promise "the invite" and nothing more, which leaves someone unsure whether to expect a phone call, an address or a link. Naming Google Meet costs four words and removes the question.
{slot}— the time they actually picked (something they told us in this conversation)
Technical detail
book_confirmed · from spec Setter §3.11§3.10. At this price hesitation is a stronger red flag than a budget objection would be at a higher one — it usually means low intent or no real authority. Stay warm, don't push, and leave the door open.
Technical detail
price_wobble · from spec Setter §3.10Handling pushback
A real prospect sent "Hey is this working ?" and got a list of client results, because "working" matched the proof-library trigger. He was asking whether his messages were arriving. A person answers that in four words and carries on.
Technical detail
still_here · from spec §6.1Answer the question they asked, then ask ours. This had no handler at all — a real prospect asked "What offers do you have and how can you help?" and got "which city are you in?" back, because the script carried on regardless. Says what the product does in one line, claims nothing specific, and earns the business type it needs next.
Technical detail
answer_what_we_do · from spec §6.1Reframe against the number they gave us earlier. Only works if they actually stated a customer value — otherwise ask first.
{customer_value}— what THEY said a customer is worth — never a guess (something they told us in this conversation)
Technical detail
obj_too_expensive · from spec §6.7Distinguish, don't dismiss. Their existing work is an asset, not a competitor.
Technical detail
obj_already_do_seo · from spec §6.7Usually a soft no. Convert it into a question rather than sending a PDF into a void — but say what the thing is first. Asking "which part would you like?" before telling them anything is a stall, and it read like one to a real prospect.
Technical detail
obj_send_info · from spec §6.7Find the actual hesitation. It's rarely the thing they said.
Technical detail
obj_think_about_it · from spec §6.7Nurture, don't push. A third attempt is what gets the number blocked.
Technical detail
obj_not_right_now · from spec §6.7Being straight with them
Selling to an existing customer is the most damaging mistake available here. Hand straight to a person.
{first_name}— their name (from their CRM record)
Technical detail
opening_customer · from spec §8The honest half of answering questions. A real prospect asked "is this USD or CAD?" and was ignored entirely, because there was nothing to answer from and the script carried on. Anything outside the approved facts gets this and a person — never a plausible-sounding guess, which is the one failure that would make everything else untrustworthy.
Technical detail
checking_on_that · from spec §9Tell the truth and keep moving. Deflecting is worse than disclosing — it reads as dishonest, and it is.
Technical detail
are_you_a_bot · from spec §6.1 / §6.7Needs a named client with a real, verified number. Until the proof library has one, the agent must hand this to a human rather than improvise.
{client_name}— a named client we have permission to cite (a verified client result){client_vertical}— their line of work (a verified client result){client_city}— their city (a verified client result){real_metric}— an actual measured result (a verified client result){real_timeframe}— over what period (a verified client result)
Technical detail
does_this_work · from spec §6.7 / §2.3Silence for ten minutes is cheaper than a commitment we have to honour. Never guess on price, contracts or guarantees.
Technical detail
escalate_to_human · from spec §8Their area is taken
Honest and genuinely urgent. Must not qualify them or book a call — offer the waitlist and say why.
{vertical}— their line of work (something they told us in this conversation){city}— their city (something they told us in this conversation)
Technical detail
territory_taken · from spec §5.1 / §3Following up later
Delivers something useful even if they never buy. Needs an earlier result to compare against.
{ai_name}— which AI we asked (from the live AI search){vertical}— their line of work (something they told us in this conversation){city}— their city (something they told us in this conversation){competitor}— a business that newly appeared (from the live AI search){previous_month}— when we last checked (from the live AI search)
Technical detail
nurture_rerun · from spec §7.3Walking away
Converts more often than any pitch in the sequence. Restraint reads as confidence — and continuing past this is how you earn reports.
Technical detail
backing_off · from spec §7.3