Turn a landing page into booked, qualified, paid-for consultations that end in a proposal nobody has to chase.
Bring your stack to a call and we will scope it against how your business actually runs.
Book a callMost professional services firms sell the same way: someone fills in a contact form, an assistant emails back asking for a good time, three messages later a call lands on the calendar, and half the time the person does not show. The ones who do show are a lottery. Some are ready to hire. Some wanted free advice. Some are a competitor doing research. The partner who takes the call cannot tell the difference until twenty minutes in, which means the firm is spending its most expensive hour on its least qualified traffic.
The money leaks in four places, and each one is measurable. First, in the booking gap: every hour between form fill and confirmed slot, intent decays, and a lead who waits a day for a reply has usually already spoken to someone else. Second, in no-shows: a free consultation with no commitment attached is an appointment nobody owes you, and unprepared or absent attendees eat the slot either way. Third, in preparation: a consultation where the adviser is reading the brief for the first time in the room is a consultation that produces a vague next step instead of a scope. Fourth, and largest, in the follow-through: the proposal gets drafted, sent, and then sits. Nobody owns the chase, so the deal does not die cleanly, it just goes quiet, and the firm never learns why.
Underneath all of that is a reporting problem. Without a stage-by-stage record of what happened to each inquiry, the firm cannot say whether its problem is traffic, qualification, show rate, or closing. It buys more traffic because traffic is the only lever it can see. This build replaces all of that with one funnel that qualifies before it books, takes a commitment at the point of booking, briefs the adviser before they walk in, and drives the proposal to a decision on a schedule.
Name it Consultation Request. Fields, in order:
consult_problem_statement: long text, from the formconsult_timeline: dropdownconsult_budget_band: dropdownconsult_decision_role: dropdownconsult_fit_score: number, 0 to 100, written by the scoring workflowconsult_type: dropdown: Paid consultation / Deposit-held / Complimentary screeningconsult_payment_status: dropdown: Unpaid / Deposit paid / Paid in full / Refunded / Credited to engagementconsult_booked_at and consult_slot_start: date/timeconsult_intake_complete: yes/no, set when the pre-call brief is submittedconsult_adviser: text or user referenceconsult_outcome: dropdown: Proposal to send / Not a fit / Needs second meeting / Referred out / No showproposal_sent_at, proposal_value, proposal_decision_duelost_reason: dropdown: Price / Timing / Went internal / Chose competitor / No response / Not qualifiedlost_reasonconsult_budget_band is in the top two bands.consult_payment_status written on payment success and on refund.consult-requested, consult-booked, consult-paid, consult-held, consult-noshow, prep-received, proposal-out, nurture-longcycle, not-a-fit, plus one source tag per channel (src-organic, src-referral, src-paid, src-event).
BO covers the gap between form fill and booked slot, and the gap between a quiet proposal and a human chase.
lost_reason reporting restricted to partner-level users.consult-requested and src-referral. The scoring workflow runs: timeline, budget band, decision role and problem-statement length produce consult_fit_score of 78. Threshold is 60, so she clears it.consult_payment_status becomes Paid in full, stage moves to Booked: Confirmed, tags consult-booked and consult-paid applied.consult_intake_complete set to yes, stage moves to Prep Received, tag prep-received. The adviser gets an internal notification with the brief rendered inline and the uploads attached.consult_outcome = Proposal to send, proposal_value entered, proposal_decision_due set to the Friday after the review. Stage moves to Proposal Drafting, tag consult-held.proposal_sent_at stamped, tag proposal-out.The alternative branches run the same shape. A score below threshold goes to Qualifying and gets a human or BO conversation instead of a calendar. A no-show gets one same-day recovery attempt and a one-click rebook. A proposal with no decision by proposal_decision_due plus seven days gets a close-the-loop email and moves to Lost or Nurture depending on the reply.
Trigger: Consultation Request form submitted.
Actions, in order:
consult-requested and the source tag.consult_fit_score. Suggested weights: timeline Immediately 30, Within 30 days 25, This quarter 12, Just exploring 0. Budget top band 30, middle 22, lowest 10, Not sure yet 8. Decision role I decide 25, with one other 18, I recommend 8. Problem statement over 120 characters 15, otherwise 0.nurture-longcycle, send the educational sequence, do not offer a calendar. Copy: "Thanks for reaching out. From what you have described, you are early in this, which is a fine place to be. I am sending you the two things we send clients at this stage. When the timing firms up, reply to this email and we will get you in front of an adviser."Stop conditions: contact already has an open opportunity in Booked: Confirmed or later; contact tagged not-a-fit in the last 90 days.
Trigger: opportunity enters Booking Pending.
nurture-longcycle, send the stand-down email: "I will stop chasing. You have enough in your inbox. The booking link stays live: {{calendar_link}}. Use it whenever."Stop conditions: appointment booked (any calendar); stage changes to anything other than Booking Pending; consult_payment_status becomes Deposit paid or Paid in full; opt-out received; contact replies to any message (pauses the sequence and notifies the coordinator).
Trigger: opportunity enters Qualifying with score 35 to 59.
Stop conditions: human replies in the thread; stage advances; opt-out; any escalation trigger.
Trigger: appointment booked on Consultation: 60 min or Consultation: 90 min.
consult_booked_at and consult_slot_start; set consult_adviser; apply consult-booked.consult_payment_status, apply consult-paid, move to Booked: Confirmed, send receipt plus confirmation.Stop conditions: appointment canceled; refund issued (write consult_payment_status = Refunded, move to Lost with lost_reason prompted).
Trigger: opportunity enters Booked: Confirmed.
consult_intake_complete is not yes. SMS: "{{first_name}}, quick prep form for Thursday so {{adviser_first_name}} comes in ready: {{intake_link}}. Reply STOP to opt out."consult_intake_complete is not yes. Email from the adviser's address: "I am blocking an hour to prepare for our call. If you can fill this in before then, I will come in with options rather than questions: {{intake_link}}."consult_intake_complete = yes, apply prep-received, move to Prep Received, notify the adviser with the answers inline and uploads attached, and create an adviser task due 24 hours before the slot: "Read brief and draft three options."Stop conditions: appointment canceled or rescheduled (reschedule restarts the reminder chain against the new slot but does not re-send the brief if already complete); opportunity moves to Lost.
Trigger: appointment status set to no-show, or slot end time passes with status still confirmed and no outcome recorded (check 15 minutes after slot end).
consult-noshow, set consult_outcome = No show, keep the opportunity in Booked: Confirmed for now.lost_reason = No response.Stop conditions: any new appointment booked; contact replies; opt-out.
Trigger: consult_outcome written, or stage set to Consultation Held.
proposal_sent_at, apply proposal-out, move to Proposal Sent.proposal_decision_due. Condition: still Proposal Sent. Email: "We had {{decision_due_date}} down as your decision date. Where has it landed?"proposal_decision_due. Condition: still Proposal Sent. Close-the-loop email: "I am going to assume this is not moving for now and stop filling your inbox. If I have that wrong, one line back and I will reopen it. Either way, tell me what tipped it. It genuinely changes how we write the next one." Then move to Nurture and prompt an owner to record lost_reason.not-a-fit, move to Lost with the reason set, and suppress all marketing sequences.Stop conditions throughout: stage reaches Verbal Yes, Won: Engaged or Lost; opt-out; contact asks to be left alone (apply a do-not-contact tag and halt every sequence).
Trigger: stage set to Verbal Yes.
consult_payment_status is Paid in full or Deposit paid, add the credit line and flag for adviser confirmation before send.proposal_value.Trigger: schedule, Monday 7am.
lost_reason counts.proposal_decision_due.lost_reason or to Nurture with a date.consult_fit_score band. If high scorers are not booking, the problem is the calendar or the fee, not the traffic.consult_type. Compare paid against complimentary directly.lost_reason distribution. This is the field that tells you whether to change price, qualification, or positioning. Review it monthly, not weekly.consult_fit_score band. Re-weight the scoring step quarterly against this, not against intuition.lost_reason picklist. Keep it short, six options maximum, or the data is unusable.consult_payment_status.consult_problem_statement out of any message that could be forwarded, and agree a retention period for the uploads of inquiries that never convert.Scope, fees and the model that fits your firm are set on a call. Book one and we will map it against your actual adviser capacity.
Every build on this page is something we configure, test and hand over with the SOPs your team needs to run it.
Book a call