Sales pipeline
How a lead moves from form fill to client, who touches it at each step, and which numbers we judge ourselves on. Draft from Alex's brief, 21 Sep 2026. Supersedes the process part of lead-follow-up.md once approved; that page keeps the "first message, same day" rules, which still hold.
GHL is the system of record. Cel works in GHL: inbox, dialling, calendar. Jun Kai works in the portal, which writes to GHL. Automations run in GHL. Nothing here is recorded in two places by hand.
Three things we track on every lead
They are separate because they answer separate questions.
1. Qualification: is this a real prospect? One of three values.
| Value | Meaning |
|---|---|
| Lead | came in, not yet confirmed |
| Qualified lead | confirmed their details and interest, by reply or by call |
| Disqualified lead | ruled out: no reply after the sequence, wrong fit, junk, or Cel or Jun Kai says so |
2. Stage: where are they in the sale? Only moves forward, except to Lost.
| Value | Set when |
|---|---|
| New | lead created |
| Booked | an appointment exists on the calendar |
| Showed | they attended |
| No show | they did not attend and were not rebooked |
| Closed | signed or paid |
| Lost | decided against us, or went quiet after showing |
3. Cohort: do they count in our numbers?
| Value | Who |
|---|---|
| Current | every lead that comes in from the day this SOP starts |
| Legacy | the 1,022 leads loaded on 21 Sep 2026, and anything older |
| Renewed | a legacy lead that replies to a reactivation or gets booked again; treated as a new lead from that day |
Legacy leads stay on the list and can be worked, but they are excluded from every rate. There is not enough history on them to judge appointment setting or closing fairly. A renewed lead gets a fresh Renewed On date and from then on is measured exactly like a current one.
The flow for a new lead
- Lead lands in GHL from the form. Qualification = Lead, Stage = New, Cohort = Current.
- Confirmation sequence, automatic, starts within minutes. A short message asks them to confirm their details and that they want to talk. Two reminders over 48 hours. No selling in these messages.
- They confirm. Qualification = Qualified lead. The next message offers the booking link. If they book, Stage = Booked. If they confirm but do not book within 24 hours, Cel calls to set it.
- They do not confirm. After the sequence ends, Cel calls. Reached and interested: Qualified lead, and she books. Reached and not a fit, or wrong number, or junk: Disqualified lead. Not reached after her attempts: Disqualified lead with the reason "no contact", so it can be reactivated later.
- The appointment. Cel confirms it the day before. Attended: Stage = Showed. Missed: rebook once, then No show.
- The sale. Jun Kai runs the call and sets Closed or Lost in the portal, with deal size, and a note saying why. A lead that showed and went quiet is Lost after 14 days without contact, with the reason "went quiet".
Later, once Cel is used to the flow, she calls every lead including the ones that booked themselves. The point of that call is to disqualify early, so Jun Kai's calendar holds only qualified leads. When that starts, step 3 changes to: confirmed and booked still gets a call before the appointment.
Legacy leads
Two ways a legacy lead gets worked, and both end in the same place.
- Reactivation sequence. A message that asks whether they are still looking. A reply that says yes makes them Renewed, Qualification = Qualified lead, and they go into step 3 above. A reply that says no, or an unsubscribe, makes them Disqualified lead. No reply: nothing changes and they stay Legacy.
- Cel outbound. Same outcomes as a reactivation reply, set by her after the call.
Every reactivation excludes: low-quality, disqualified, became-client, rating-1, Closed, and anyone with an appointment in the last 90 days.
Who sets what
| Cel, in GHL | Jun Kai, in portal | Automation | |
|---|---|---|---|
| Qualification | after a call | if he learns something on the sales call | on confirm reply, on sequence end |
| Stage | Booked, Showed, No show | Closed, Lost | Booked when a booking lands |
| Cohort | never | never | Renewed on reactivation reply |
| Rating, low-quality | yes | ||
| Notes | GHL notes | portal notes, which land in GHL |
Rule: one owner per field per moment. If two people would set the same field, the one in the table wins and the other adds a note instead.
The numbers
All computed on Current and Renewed only, by the month the lead came in (or was renewed).
| Rate | Formula |
|---|---|
| Qualification rate | Qualified / all leads |
| Booking rate | Booked / Qualified |
| Show rate | Showed / Booked |
| Close rate | Closed / Showed |
| Cost per qualified lead | ad spend / Qualified, per month |
Legacy shows as a separate line with counts only, never rates. Any closed deal from a legacy lead is real revenue and is counted as such in finance, but it is not a close-rate event.
What has to exist in GHL for this to run
- Fields: Qualification (Lead / Qualified lead / Disqualified lead), Stage, Cohort, Renewed On, Disqualify reason. Text for now, matching the existing eleven; typed later once values settle.
- Tags mirroring Qualification and Stage (
q-lead,q-qualified,q-disqualified,stage-*,cohort-*), because workflows filter on tags most easily and the portal keeps tag and field in step. - Workflows: Confirmation sequence (new leads), Booking offer (on confirm), Reactivation (legacy, manual start), Portal mirror (already specified), and one small workflow that sets Stage = Booked when an appointment is created and Showed / No show from appointment status.
- No GHL pipeline and no opportunities. Alex, 21 Sep: GHL's pipeline view does not work well and opportunities are hard to manage next to contacts. Stage is a custom field, and the pipeline picture is drawn in the portal.
What changes in the portal
- The eleven current fields stay. Lead Status is retired in favour of Qualification + Stage once the mapping below is applied; the portal will show all three and hide Lead Status when it is empty.
- Views become: Qualified and unbooked, Booked, Showed and open, Closed, Lost, Disqualified, Legacy to reactivate. Rate tiles switch to the formulas above, Current and Renewed only, default this month against last month.
Mapping the existing 1,022 (all Cohort = Legacy):
| Old Lead Status | Qualification | Stage |
|---|---|---|
| Not called, No pickup, No record, Legacy | Lead | New |
| Not pursued | Disqualified lead | New |
| Follow up | Qualified lead | Showed if Showed Up = Yes, else Booked if Appointment Set = Yes, else New |
| Closed | Qualified lead | Closed |
| Lost | Qualified lead | Lost |
| any, with low-quality or disqualified tag | Disqualified lead | as above |
Open for Alex to decide
- Reminder timing in the confirmation sequence: two reminders over 48 hours is a placeholder.
- Whether "Disqualified lead" after no contact should instead be a fourth value, "Unreachable", so the disqualification rate stays honest.
- When Cel starts calling booked leads too.
- The start date of Cohort = Current. Everything before it is Legacy.
Decided 21 Sep: no GHL pipeline or opportunities; Stage is a field; visualisation is the portal's job.