Data: fields, tags, form
1.1 · Contact custom fields
Settings → Custom Fields → Add Field (object: Contact). Create all 13. Field keys must match exactly; GHL derives the key from the name, so name them exactly as written.
elite_plan_type— Type: Single Options (dropdown). Options, exactly:PIF·2-Pay (in-house)·3-Pay (in-house)·External Financing (via Whop)elite_price_paid— Type: Monetaryelite_contract_value— Type: Monetaryelite_closer— Type: Single Options. Options:Jasmine(add more later)financing_provider— Type: Single Line textwhop_order_id— Type: Single Line textlaunchpad_grad— Type: Single Options. Options:Yes·Nograd_credit_applied— Type: Monetaryelite_first_payment_date— Type: Dateelite_sale_notes— Type: Multi Line textapp_readiness_score— Type: Number. Populated by the application form's readiness question (1-10)app_needs_financing— Type: Single Options. Options:Yes·Noloss_reason— Type: Single Options. Options:price·timing·spouse-partner·no-show dead·ghosted unsigned·DQ not-a-fit·other
1.2 · Tags
Settings → Tags → create every tag below now, exactly as written including the [AI Elite] prefix and spaces. Workflows match by exact string; never free-type a variant later.
- Journey:
[AI Elite] Pending Application·[AI Elite] Completed Application·[AI Elite] Lead: SQL·[AI Elite] Lead: NQL·[AI Elite] Booked Call·[AI Elite] Booked Call: No Show·[AI Elite] Completed Call·[AI Elite] Completed Call: Deciding·[AI Elite] Completed Call: DSQ·[AI Elite] Closed: Paid·[AI Elite] Closed: Contract Signed·[AI Elite] Onboarding: Complete·[AI Elite] Nurture: Not Now·[AI Elite] Lost: Refunded - Machine:
[AI Elite] Ops: Sale Form In·[AI Elite] Ops: Whop Paid·[AI Elite] Ops: Intake Done·[AI Elite] Closed: Contract Pending·[AI Elite] Onboarding: Booking Needed·[AI Elite] Onboarding: Call Booked·[AI Elite] Ops: Dunning Active·[AI Elite] Ops: At Risk·[AI Elite] Ops: Confirmed Attending - Plan:
[AI Elite] Plan: PIF·[AI Elite] Plan: 2-Pay·[AI Elite] Plan: 3-Pay·[AI Elite] Plan: Financed - Flags:
[AI Elite] Launchpad Grad·[AI Elite] Milestone: First Win·[AI Elite] Ops: Skool Joined
1.3 · New Sale form
Sites → Forms → open the existing New Sale form (keep its URL). Add/verify these elements, each mapped to its custom field via the form builder's custom-field elements.
- Required: First Name, Last Name, Email, Phone
- Required, mapped:
elite_plan_type·elite_price_paid·elite_contract_value·elite_closer·launchpad_grad·grad_credit_applied·elite_sale_notes - Required: a checkbox element labeled "Kickoff call booked on the Elite Onboarding calendar?" (Yes/No, not mapped; it exists to make Jasmine look)
- Optional, mapped:
financing_provider·whop_order_id
1.4 · Application form mapping DO THIS FIRST
Sites → Forms → open each application form in use (Elite form, AI app building form, Masterclass). Lead grading reads these two answers, so an unmapped form silently grades every lead NQL.
- Map the readiness question ("how ready are you", 1-10) to
app_readiness_score. - Map the financing question to
app_needs_financing(Yes = they said they need a plan or financing). - Submit one test entry per form and confirm both values land on the contact record before building S00.
Pipeline & prerequisites
2.1 · Pipeline stages
Opportunities → Pipelines → edit AI Architect Elite Pipeline. Rename/create so the stages read exactly, in order:
- 1
New Application - 2
Call Booked: SQL - 3
Call Booked: NQL - 4
No Show - 5
Call Held · Deciding - 6
Paid · Contract Out - 7
Signed · Onboarding - 8
Active · 30-Day Ramp - 9
Not Now · Nurture - 10
Lost / DQ
Existing "Closed PIF" and "Closed Payment Plan" stages collapse into 5-7; move any live opportunities before deleting them. In every workflow's Create/Update Opportunity action below, enable "Allow Opportunity to Move to Any Previous Stage" where offered (a rebooked no-show moves back to its Call Booked stage). Do not build the Setter Pipeline yet; that is Phase 2.
2.2 · Elite Onboarding calendar
- Calendars → create a Personal Booking calendar named exactly
Elite Onboarding, team member: Rone. Availability per Rone; slot length 45-60 min; minimum scheduling notice ~12h; booking window 2 weeks. - Calendar-level notifications ON: booking confirmation plus 24h and 1h reminders (email + SMS). These cover kickoff reminders so no workflow has to.
- Confirm Jasmine's user can book onto this calendar from the Calendars view (she books the kickoff live on the sales call when time allows).
2.3 · Elite Client Agreement template
- Payments → Documents & Contracts → Templates → New Template, named exactly
Elite Client Agreement. - Paste the agreement text (supplied separately). Using the merge-field picker, insert: contact first/last name,
elite_contract_value,elite_price_paid,elite_plan_type. Plan-terms wording stays placeholder until amounts are final. - Add the signature element for the client role. Test-render once to confirm every merge field resolves.
- Never send this template to a contact who already has a live document from it. Re-share the existing document's link to remind (this rule is load-bearing; a duplicate freezes the post-signature automation).
Workflows
Automation → Workflows → create a workflow folder named AI Elite and build everything inside it. The workflow name in GHL is the ID, a colon, then the title, exactly as each card header reads: HT00: New Sale Intake, HT01: Contract Send + Chase, and so on. Publish each one only after its Section 5 test passes. Every Add Task action: set the assignee named and a due time. All email and SMS copy is supplied separately. Build every send step with placeholder content now and drop the final copy in when it arrives; the structure is what matters here.
- Add Contact Tag:
[AI Elite] Completed Application - If/Else, one branch, name it NQL. Condition group, joined with OR:
app_needs_financingisYesORapp_readiness_scoreis less than8. The None/else branch is your SQL path. - NQL branch → Add Contact Tag
[AI Elite] Lead: NQL. Else branch → Add Contact Tag[AI Elite] Lead: SQL. - Both branches then: Create/Update Opportunity → pipeline = AI Architect Elite Pipeline, stage =
New Application, status = Open, source = the form name. - End. S02 picks them up if they book; unbooked applicants are worked by hand until Phase 2 adds S01.
A blank readiness answer evaluates false on "less than 8" in some GHL versions. Test it: if a blank scores SQL, add a third condition to the NQL branch, app_readiness_score is empty.
- If/Else — branch A condition: contact has tag
[AI Elite] Ops: Intake Done→ End. All remaining steps go on the None/else branch. - Add Contact Tag:
[AI Elite] Ops: Sale Form In - Add Contact Tag:
[AI Elite] Closed: Paid - Update Contact Field:
elite_first_payment_date= today (use the current-date custom value; if your GHL version cannot set "today" here, skip and rely on the form submission timestamp) - Slack message to
#elite-pipeline(see Section 4): "🔔 New Elite sale: {{contact.name}} · {{contact.elite_price_paid}} · {{contact.elite_plan_type}} · closer {{contact.elite_closer}}" - Create/Update Opportunity: pipeline = AI Architect Elite Pipeline, stage =
Paid · Contract Out, status = Open, opportunity value =elite_contract_value - If/Else on
launchpad_grad: Yes branch → Add Contact Tag[AI Elite] Launchpad Grad. Both branches continue to the next step. - If/Else on
elite_plan_type, four branches. In EACH branch add the matching Plan tag, then add[AI Elite] Ops: Intake Done, then End: PIF →[AI Elite] Plan: PIF· 2-Pay (in-house) →[AI Elite] Plan: 2-Pay· 3-Pay (in-house) →[AI Elite] Plan: 3-Pay· External Financing (via Whop) →[AI Elite] Plan: Financed. On the None branch: Slack "plan type missing on {{contact.name}}" + Add Task → Jasmine, due 1 hour (no Intake Done tag until fixed, which correctly holds the contract).
[AI Elite] Ops: Intake Done- Add Contact Tag:
[AI Elite] Closed: Contract Pending - Action: Send Documents & Contracts → template =
Elite Client Agreement, sender = Rone's user, mode = Send Directly, channels = Email + SMS - Send SMS: agreement-just-landed text ("takes 2 minutes, a laptop works best")
- Wait 3 hours → Send Email: nudge #1
- Wait 21 hours → Send SMS + Send Email: nudge #2, and Add Task → Jasmine: "Call {{contact.name}}, contract unsigned 24h", due 4 hours
- Wait 24 hours → Slack: "⚠️ 48h unsigned: {{contact.name}}" + Add Task → Rone: "Personal SMS/video nudge", due 12 hours
- Wait 24 hours → Send Email: final nudge + Slack: "🚨 {{contact.name}} going into kickoff unsigned (Rone pre-call check applies)"
- Wait 4 days → Add Task → Rone + program owner: "Day 7 unsigned. If no kickoff was held either, decide per ghost policy. Never auto-refund." + Slack ping
- Last step — Goal Event: type = Document/Contract Status, template =
Elite Client Agreement, status = Completed, behavior = Wait until the goal is met. The moment the signature lands, the contact skips every remaining chase step and lands here.
Reminders re-share the SAME document link. This workflow must never contain a second Send Documents & Contracts action.
Elite Client Agreement- If/Else: contact has tag
[AI Elite] Closed: Contract Signed→ End (status changes fire this trigger more than once; this stops double-sends). Continue on else. - Remove Contact Tag:
[AI Elite] Closed: Contract Pending· Add Contact Tag:[AI Elite] Closed: Contract Signed - Create/Update Opportunity: stage =
Signed · Onboarding, status = Won - Slack: "✍️ {{contact.name}} signed · {{contact.elite_price_paid}} · {{contact.elite_plan_type}}"
- Send Email: welcome email (contains the Inner Circle Skool invite link, next-24-hours plan, roadmap, bonus reveal, billing-descriptor line)
- Send SMS: welcome text from Rone's number, Skool invite link repeated
- Send Email: intake form link (goals, background, tools)
- Add Task → Rone: "Record 60-90s personal welcome video for {{contact.name}}", due 24 hours
- If/Else: contact has tag
[AI Elite] Onboarding: Call Booked? YES branch: Wait 24 hours → Add Task → Jasmine: "SOP-3: verify {{contact.name}} joined Skool", due 4 hours → End. NO branch: Add Contact Tag[AI Elite] Onboarding: Booking Needed→ Wait 24 hours → same SOP-3 task → End.
Verify after the test sale: the signed PDF appears on the contact record automatically (native behavior, but confirm it).
Elite Onboarding, status = Confirmed/Booked. Do NOT add a Modified By filter (Jasmine's staff bookings must count; the "Customer Booked Appointment" trigger would silently miss them).- Add Contact Tag:
[AI Elite] Onboarding: Call Booked - Remove Contact Tag:
[AI Elite] Onboarding: Booking Needed
[AI Elite] Onboarding: Booking Needed- If/Else: contact has tag
[AI Elite] Onboarding: Call Booked→ End. Continue on else. - Send Email: Elite Onboarding calendar link ("lock your kickoff, we hold your build slot")
- Wait 24 hours → Send SMS: calendar link nudge
- Wait 24 hours → Add Task → Jasmine: "Call {{contact.name}} and book the kickoff by phone", due 4 hours
- Last step — Goal Event: type = Appointment, calendar =
Elite Onboarding, status = booked/confirmed, behavior = Wait until the goal is met.
- Add Contact Tag:
[AI Elite] Booked Call - If/Else on lead grade: has tag
[AI Elite] Lead: NQL→ Create/Update Opportunity stage =Call Booked: NQL. Else → stage =Call Booked: SQL. Both branches continue. - Send Email: confirmation (calendar file, what to have ready, Rone expectation video link)
- Send SMS: "Reply C to confirm your spot" (replies route to Jasmine)
- Wait → Event/Appointment Time, 48 hours before → Send Email: reminder
- Wait → 24 hours before → Send Email + Send SMS
- Wait → 4 hours before → Send SMS
- Wait → 1 hour before → Send SMS with the Zoom link
- Wait #1: Add Action → Wait. Wait Type = Event/Appointment Time. Reference = Appointment Start Time. Before/After = Before. Duration = 20 hours. This lands the contact in the afternoon or evening of the day before the call.
- Wait #2: Add a second Wait immediately after. Restrict it to a time window of 09:00 – 09:30. Depending on your GHL version this is a Wait Type called "Time Window", or a setting inside the Wait step labelled "wait for a specific time of day" / "only continue during these hours".
- Send SMS: morning-of confirmation naming the appointment time, asking for a YES reply. Merge fields available:
{{contact.first_name}},{{appointment.start_time}}.
Leave the existing 30-minutes-before reminder exactly as it is. This workflow is additive.
This breaks for calls booked before roughly 9:30am, where the SMS would land after the call has happened. If the sales calendar never opens before 10am, ignore it. If it does, add an If/Else as the first step: appointment time before 10am → send the SMS 2 hours before instead of running the two waits.
If your account has no time-window option on the Wait step, stop and flag it rather than improvising: the fallback is a single Event/Appointment Time wait tuned per booking slot, and it needs to be specified properly.
- Add Contact Tag:
[AI Elite] Ops: Confirmed Attending - Notify the closer: internal SMS to Jasmine, or a Slack message to
#elite-pipeline.
This is what makes asking for a reply worth anything: anyone still untagged an hour before their call is the no-show risk list to work. Do not ship the S02b SMS without this.
- Add Contact Tag:
[AI Elite] Booked Call: No Show - Create/Update Opportunity: stage =
No Show - Send SMS (immediately): "We held your spot, grab a new time" + rebook link
- Add Task → Jasmine: "Call no-show {{contact.name}}", due 1 hour
- Send Email: same-day recovery email
- Wait 1 day → Send SMS · Wait 2 days → Send Email · Wait 4 days → Send Email (final)
- Create/Update Opportunity: stage =
Not Now · Nurture+ Add Contact Tag[AI Elite] Nurture: Not Now - Last step — Goal Event: type = Appointment, calendar = sales calendar, status = booked/confirmed, behavior = Wait until the goal is met (a rebooked call ends the recovery instantly; S02 takes over and re-files the opportunity into the Call Booked stage matching its lead grade).
3.8 · The two P1 alarm workflows
- If/Else: opportunity stage =
Paid · Contract Out→ Slack: "🕳️ 48h in Paid · Contract Out unsigned: {{contact.name}}". Else End.
- If/Else: opportunity stage =
Signed · Onboarding→ Slack: "🕳️ Signed 3 days, no kickoff held: {{contact.name}}" + Add Task → Jasmine, due 4 hours. Else End.
Build no other alarms in Phase 1.
Slack
- Create one Slack channel:
#elite-pipeline. Wins and alarms both land here. - Settings → Integrations → connect the Slack workspace, authorize the channel. Use the native Slack premium action in every workflow step above (pennies at this volume). If premium actions are unavailable on this account, use a Slack incoming webhook + the workflow Webhook action instead; same messages.
- Members: Rone, Jasmine, program owner.
P1 test checklist
Run with a dedicated test contact before the first real buyer. Every box checks or Phase 1 is not done.
- End-to-end test sale: Whop payment → New Sale form → contract → signature → welcome email/SMS → Skool link present → kickoff booked. Every Slack ping fires.
- Merge-field render check on the contract for each of the four plan types.
- Sign on desktop AND attempt on mobile; confirm the Completed status fires both ways.
- Duplicate-template test: confirm nothing in any workflow can send a second document from
Elite Client Agreementto one contact. - Unsigned chase: leave the test contact unsigned; confirm the +3h / +24h / +48h / +72h ladder, the "going into kickoff unsigned" Slack, and the day-7 decision task.
- Signature mid-chase: sign at hour ~30 and confirm the contact jumps to HT01's goal and no later chase messages send.
- Staff-booked appointments fire S02 and HT03b (book as Jasmine from the Calendars view, not the widget).
- No-book pathway: signed sale with no kickoff booked → HT02 adds
[AI Elite] Onboarding: Booking Needed, HT03 sends the self-book link, the +48h book-by-phone task fires, and self-booking ends HT03 via its goal. - Lead grading, NQL: submit a test application with financing = Yes (or readiness below 8). Confirm
[AI Elite] Lead: NQLlands, then book a call and confirm the opportunity sits inCall Booked: NQL. - Lead grading, SQL: repeat with readiness 9 and financing = No. Confirm
Lead: SQLandCall Booked: SQL. - Blank-answer default: submit an application with the readiness question left empty. It must grade NQL, not SQL.
- Morning-of SMS: book a test appointment for tomorrow afternoon on a number you control. Confirm the SMS arrives at 9am AND the existing 30-minute reminder still fires.
- Reply handler: reply YES to that SMS. Confirm
[AI Elite] Ops: Confirmed Attendingis applied and the closer is notified. - No-show marking fires S03 within 15 minutes; rebooking ends S03 and starts S02.
- Signed PDF lands on the contact record and the buyer receives their emailed copy.
- HT02 double-fire test: manually re-trigger the Completed status if possible and confirm the idempotency check blocks a second welcome.
- Alarms: age a test opportunity in stages 5 and 6; confirm AL-5 and AL-6 fire and nothing else does.
Companions: Elite Build Overview (phases, indexes) and Elite Implementation Spec (full logic, risk register R1-R10, SOPs). If anything here seems to conflict with the Spec, the Spec wins; flag it before building.