St. Pierre · DFW Concrete Leveling (Level King Pro) · GHL location 6c4MSgjdfngrPhwWD2cb

GHL Automation Audit Pack

Every workflow, the Jordan chatbot, and the stop-bot setup for the DFW concrete-leveling account — in one place, copy-paste verbatim, so you can read the whole thing yourself. Built 2026-07-28.

paste STALE atlas paste predates the Jul-25 cutover & Jul-27 overhaul — grab a fresh UI paste. LIVE via API pulled from GHL today, trust it. EyeFly template captured on the agency's own location, not Level King. not a workflow

⚠ Auto Transfer Workflow 3 — the suspected culprit

Does "auto transfer workflow 3" literally exist? Yes. The true title-bar name is "*3 Auto Transfer Tracking" (the atlas mislabeled the file "+4 App Transfer Tracking"; Jordan's own Handoff action calls it "•3 Auto Transfer Tracking"). It is the live GHL workflow with id 210bddd6-63a3-4361-8532-336479629a8a that Jordan fires when a lead is qualified.

What it is supposed to do

When Jordan decides a lead is qualified, it triggers this workflow, which uses a chain of GPT steps to pull the phone number, location, ZIP, city, project type, and a comment out of the conversation, saves each into the contact record, runs a QC gate ("Is Data Client Facing?"), and — if the data passes — delivers the lead to the client (Slack #transferred + notification to the client channel + internal notification). If QC fails, it routes to a #needsreview channel with a "Needs Review" tag instead.

Why it never fires (everything we know)

  1. The atlas paste is not Level King's live workflow. The "*3 Auto Transfer Tracking" frames were captured 2026-06-25 from the EyeFly agency template, and in that capture no trigger is configured (only a dashed "Add New Trigger" placeholder) and most step configs were never on screen. It tells us the shape, not Level King's live wiring. NEEDS FRESH UI PASTE
  2. The real transfer break was upstream of this workflow, and was diagnosed + fixed Jul-27 (bot side) but the enqueue gap stayed open. Per handoff 1975: the Jul-25 GHL-native auto-pilot cutover removed the CF worker that used to flip qualification_state — so nothing enqueued the outbound SMS transfer to Akash's phone. Four real Level King hot leads never reached his phone.
  3. Jordan was writing empty lead rows. Per handoff 1996: Jordan collected phone/ZIP in chat but the Contact-Info action mapped city/zip/neighborhood all into the single Location field (a field-scramble), so the transfer packet arrived incomplete; the delivery worker refused incomplete packets and silently retried — one lead hit 180 retries with zero alerts on lead_delivery_city_unresolved.
  4. The Handoff bot goal was firing on the wrong people. It marked leads "qualified" who had declined (Bradford, Mark) and fired before any phone/ZIP existed (Twyler, Mike). Fixed Jul-27 (ledger 91674) — see the tightened condition in the Jordan section.
Bottom line for the audit: the GHL workflow steps themselves are not proven to be the failure — the provable failures were the removed enqueue worker, the scrambled contact fields, and the over-firing bot goal (bot side fixed Jul-27). To close the loop on the workflow itself, we need a fresh UI paste of live workflow 210bddd6 on Level King — the Jun-25 template paste below shows a workflow with no trigger, which if that is also true on the live copy would by itself explain silence.

Verbatim paste (Jun-25 EyeFly template capture)

*3 Auto Transfer Tracking LIVE (target) / paste STALE

What it is supposed to do: The workflow Jordan's Handoff action fires (live GHL id 210bddd6-63a3-4361-8532-336479629a8a). Extracts phone/zip/city/project from the convo, QC-gates, and delivers the lead to the client via Slack / internal notification. THE suspected culprit for dead transfers.

Known defect / caveat: Atlas paste is the Jun-25 EyeFly TEMPLATE with NO trigger configured and most action configs never on screen. Not a paste of Level King's live copy.

Verbatim atlas paste — source file wf07-app-transfer-tracking.md (captured 2026-06-25 unless noted):

# Workflow 07 — "+4 App Transfer Tracking" (on-screen title: "*3 Auto Transfer Tracking")

Source: `ghl-visual-atlas-assets/*_07-*.jpg` — 31 frames (1392x720 video grabs).

**Important naming note:** the atlas slug says "4 App Transfer Tracking", but the GHL title bar in every in-workflow frame reads **"*3 Auto Transfer Tracking"** (leading glyph ambiguous — likely `*3` or `#3`). The two frames at timestamp 001440 (and 001444) are transition carryover still showing the *previous* workflow, "*4. Manual Transfer Tracking" (WF06). Frame numbering skips 07-027 — no frame exists for it.

**Frame-label drift:** many frames are labeled `update-X` but actually show the *same GPT panel scrolled* to a different part of its prompt. Transcriptions below record what is actually on screen, not what the filename implies.

---

## 000000 (timestamp 001440) — `001440_07-4-app-transfer-tracking-parent.jpg`
- Title bar: `*4. Manual Transfer Tracking` (edit pencil) — **carryover from WF06, not WF07**
- Shows: canvas + action config panel (WF06 content)
- Canvas nodes (top→bottom): `Form Submitted` (trigger; "Form is any of *EyeFly Lead Tran…") + dashed `Add New Trigger` → `Add "Transferred" Tag` (selected) → `#3 Update Leads Transferred_Raw` → `Deliver Lead to Client via Slack / Webhook` → `Internal Notification` → `END`
- Panel: **Add Contact Tag** — "Adds specified tags to the contact"
  - ACTION NAME: `Add "Transferred" Tag`
  - TAGS: `transferred`
  - Buttons: Delete / Cancel / Save action

## `001440_07-4-app-transfer-tracking-trigger.jpg`
- Identical frame to the parent grab above (same timestamp, same content). WF06 carryover.

## `001444_07-001-4-app-transfer-tracking-add-contact-tag-1.jpg`
- Title bar: `*4. Manual Transfer Tracking` — **still WF06 carryover**
- Shows: trigger config panel (WF06's trigger, not a WF07 add-contact-tag)
- Panel: **Form Submitted** — "Activates upon submission of the chosen form and filters."
  - CHOOSE A WORKFLOW TRIGGER: `Form Submitted`
  - WORKFLOW TRIGGER NAME: `Form Submitted`
  - FILTERS: `Form is` → chip: `EyeFly Lead Transfer Tracking Form v2` (chip has a leading symbol, likely `*` [?])
  - `+ Add filters`
  - Buttons: Delete / Cancel / Save Trigger

## `001466_07-002-4-app-transfer-tracking-1-extract-client-info-1.jpg`
- Title bar: `*3 Auto Transfer Tracking` — first true WF07 frame
- Shows: canvas + GPT action config panel
- Canvas nodes visible (top→bottom): dashed `Add New Trigger` (NO trigger configured) → `Wait` → `Set Conversation AI Status to Inactive` → `#7 1. Extract Phone #` (selected) → `Save Phone #` → `#1 2. Extract Location` → `Save Location` → `#2 3. Extract Zip Code` → `Save Zipcode` (continues below fold)
- Panel: **GPT Powered By OpenAI** — "Send a prompt to GPT and get a response" / banner: "This is a premium action — Using this action will incur additional charges per execution"
  - Action Name: `1. Extract Phone #`
  - Model: `GPT 4o`
  - Action Type: `Custom`
  - Enable Chat History (Beta): OFF
  - Prompt (visible top): `Extract the customer's phone number from the conversation below.` / `PROCESSING:` / `1. Find any digit sequence that could be a phone number` (rest scrolled out of view)
  - Advanced Options (collapsed)

## `001490_07-003-4-app-transfer-tracking-update-phone-1.jpg`
- Title bar: `*3 Auto Transfer Tracking`
- Shows: canvas + action config panel (`Save Phone #` selected on canvas)
- Panel: **Update Contact Field** — "Update a field in the contact record"
  - ACTION NAME: `Save Phone #`
  - ACTION TYPE: `Update field data`
  - FIELDS: field `Phone` = chip `{{chatgpt.7.response}}` (digit consistent with canvas node id `#7 1. Extract Phone #`)
  - `+ Add field`

## `001496_07-004-4-app-transfer-tracking-2-extract-location-1.jpg`
- Shows: GPT action config panel
- Panel: **GPT Powered By OpenAI** (premium banner)
  - Action Name: `2. Extract Location`
  - Model: `GPT 4o` · Action Type: `Custom` · Enable Chat History: OFF
  - Prompt (visible top): `Extract the service location from the conversation below.` / `PROCESSING:` / `1. Use {{custom_values.service_areas}} to resolve ambiguous city names — always assume a city within the service area list` (cut)

## `001516_07-005-4-app-transfer-tracking-update-location-1.jpg`
- Shows: **same GPT panel as 07-004, prompt scrolled to the end** (not the Save Location action)
- Action Name: `2. Extract Location`
  - Prompt (visible end): `If no location found → return empty string.` / `Conversation:` / `{{contact.full_convo}}`

## `001520_07-006-4-app-transfer-tracking-3-extract-zip-code-1.jpg`
- Shows: GPT action config panel
- Panel: **GPT Powered By OpenAI** (premium banner)
  - Action Name: `3. Extract Zip Code`
  - Model: `GPT 4o` · Action Type: `Custom` · Enable Chat History: OFF
  - Prompt (visible top): `Extract a 5-digit zip code from the location below.` / `PROCESSING:` / `1. If an explicit 5-digit zip is present → return it verbatim (never override with extrapolation)` (cut)

## `001536_07-007-4-app-transfer-tracking-update-zip-code-1.jpg`
- Shows: **same GPT panel as 07-006, prompt scrolled to the end**
- Action Name: `3. Extract Zip Code`
  - Prompt (visible end): `WRONG: 80221-1234` / `If unable to determine → return empty string.` / `Location: {{contact.location}}` [?] (field name `location` low-confidence)

## `001540_07-008-4-app-transfer-tracking-4-extract-city-1.jpg`
- Shows: GPT action config panel
- Panel: **GPT Powered By OpenAI** (premium banner)
  - Action Name: `4. Extract City`
  - Model: `GPT 4o` · Action Type: `Custom` · Enable Chat History: OFF
  - Prompt (visible, mid-scroll): `PROCESSING:` / `1. If an explicit city name is present → return it verbatim with its state abbreviation` / `2. If only a zip is present → extrapolate the city and state from your knowledge` / `3. If the zip maps to multiple cities → return the most common` (cut). Opening line of this prompt was never on screen.

## `001548_07-009-4-app-transfer-tracking-update-city-1.jpg`
- Shows: **GPT panel for the NEXT action** (not Save City)
- Panel: **GPT Powered By OpenAI** (premium banner)
  - Action Name: `5. Extract Project Type`
  - Model: `GPT 4o` · Action Type: `Custom` · Enable Chat History: OFF
  - Prompt (visible top): `Identify the customer's project type from the conversation below.` / `PRIMARY GOAL: return one of the four client-defined labels when the customer's project clearly matches. Otherwise,` (cut)

## `001550_07-010-4-app-transfer-tracking-5-extract-project-type-1.jpg`
- Shows: same **5. Extract Project Type** GPT panel, same prompt-top view as 07-009. No new fields.

## `001562_07-011-4-app-transfer-tracking-update-project-type-1.jpg`
- Shows: **same GPT panel, prompt scrolled to the end**
- Action Name: `5. Extract Project Type`
  - Prompt (visible end): `If the customer said nothing about a project at all → return empty string.` / `Conversation:` / `{{contact.full_convo}}`

## `001566_07-012-4-app-transfer-tracking-6-extract-comment-1.jpg`
- Shows: canvas (mid-scroll) + GPT action config panel
- Canvas nodes visible: `Save Phone #` → `#1 2. Extract Location` → `Save Location` → `#2 3. Extract Zip Code` → `Save Zipcode` → `#3 4. Extract City` → `Update contact field` → `#4 5. Extract Project Type` → `Save Project Type` → `#5 6. Extract Comment` (selected) → `Save Comment` → `Wait`
- Panel: **GPT Powered By OpenAI** (premium banner)
  - Action Name: `6. Extract Comment`
  - Model: `GPT 4o` · Action Type: `Custom` · Enable Chat History: OFF
  - Prompt (visible top): `Extract the customer's project description from the conversation below.` / `YOU ARE NOT REPLYING TO ANYONE. Your output is inserted into a pre-built template as the quoted response. The` (cut)

## `001576_07-013-4-app-transfer-tracking-update-comment-1.jpg`
- Shows: **same GPT panel, prompt scrolled to the end**
- Action Name: `6. Extract Comment`
  - Prompt (visible end): `WRONG: looking for concrete repair quote (when the customer actually said "Driveway")` / `Conversation:` / `{{contact.full_convo}}`

## `001578_07-014-4-app-transfer-tracking-7-extract-client-name-1.jpg`
- Shows: identical view to 07-013 (`6. Extract Comment`, prompt end). No "extract client name" action appears in any frame.

## `001590_07-015-4-app-transfer-tracking-update-name-1.jpg`
- Shows: GPT action config panel (QC action, not an update-name action)
- Panel: **GPT Powered By OpenAI** (premium banner)
  - Action Name: `Is Data Client Facing?`
  - Model: `GPT 4o` · Action Type: `Custom` · Enable Chat History: OFF
  - Prompt (visible, mid-scroll): `- Isolate the content between the final pair of double-quotes — that is the EXTRACTED RESPONSE` / `- The question prefix is EXPECTED by design — never flag it as an error` / `- All checks below apply to the EXTRACTED RESPONSE only`

## `001592_07-016-4-app-transfer-tracking-8-extract-project-type-1.jpg`
- Shows: same `Is Data Client Facing?` GPT panel, different scroll
  - Prompt (visible): `- Contains an AI-leak phrase (see list below)` / `- Contains placeholder, refusal, or chain-of-thought text` / `PLACEHOLDER / AI-LEAK CHECK — the extracted response, City, Project Type, and Full Convo must NOT contain:` (cut)

## `001600_07-017-4-app-transfer-tracking-update-project-type-1.jpg`
- Shows: same `Is Data Client Facing?` GPT panel, prompt scrolled near end
  - Prompt (visible): `Zip: {{contact.postal_code}}` / `Project Type: {{contact.project}}` / `Notes: {{contact.notes}}` / `Full Convo:` / `{{contact.full_convo}}`

## `001602_07-018-4-app-transfer-tracking-9-extract-comment-1.jpg`
- Shows: identical view to 07-017 (`Is Data Client Facing?`, prompt end block).

## `001608_07-019-4-app-transfer-tracking-update-comment-1.jpg`
- Shows: If/Else action config panel
- Panel: **If / Else** — "Fork the Contact journey through this workflow based on conditions"
  - ACTION NAME: `Condition`
  - SCENARIO RECIPE: `Build Your Own`
  - BRANCHES — Branch 1 (name: `Branch`):
    - Segment: field `#8 Is Data Client Facing? - Response` · operator `Contains` · value `No`
    - `AND` / `+` segment controls · `+ Add Segment`
  - `+ Add Branch` · `Reorder Branches`
  - (Else branch below fold — see 07-021)

## `001610_07-020-4-app-transfer-tracking-10-extract-project-type-1.jpg`
- Shows: identical If/Else `Condition` panel as 07-019.

## `001618_07-021-4-app-transfer-tracking-update-project-type-1.jpg`
- Shows: same If/Else `Condition` panel; lower half also captured:
  - **None Branch** — "When no condition is met" → `None`
  - Buttons: Delete / Cancel / Save action

## `001620_07-022-4-app-transfer-tracking-11-extract-comment-1.jpg`
- Shows: Slack action config panel
- Panel: **Slack Message** — "Get notifications in Slack"
  - Slack integration card: badges `Premium` / `Connected`
  - CHOOSE AN ACCOUNT: `EyeFly Digital - 12@feliciano` (digits before `@feliciano` low-confidence [?])
  - ACTION NAME: `Send Slack Message to #needsreview channel`
  - EVENT: `Send Private Channel message`
  - CHOOSE A PRIVATE CHANNEL: `aibot_needs-review` (leading chars low-confidence [?]; note: "Message will be sent as the Slack user that created the integration")
  - MESSAGE (visible top): `***Needs Review***` / `Client: {{custom_values.business_name}}` / `First Name: {{contact.first_name}}` / `Last Name: {{contact.last_name}}` / `Number: {{contact.phone}}` / `City: {{contact.city}}` / `Postal code: {{contact.postal_code}}` (cut — continues in 07-023)

## `001628_07-023-4-app-transfer-tracking-update-comment-1.jpg`
- Shows: same Slack Message panel, message body scrolled
  - MESSAGE (visible): `Client: {{custom_values.business_name}}` / `First Name: {{contact.first_name}}` / `Last Name: {{contact.last_name}}` / `Number: {{contact.phone}}` / `City: {{contact.city}}` / `Postal code: {{contact.postal_code}}` / `What Type of Project: {{contact.project}}`

## `001638_07-024-4-app-transfer-tracking-if-client-tracking-1.jpg`
- Shows: same Slack Message panel (message at top position, `***Needs Review***` visible). No new fields.

## `001642_07-025-4-app-transfer-tracking-send-internal-chat-message-1.jpg`
- Shows: If/Else `Condition` panel again (identical to 07-019/020/021 upper half).

## `001648_07-026-4-app-transfer-tracking-add-contact-tag-1.jpg`
- Shows: GPT action config panel — **top of the `Is Data Client Facing?` prompt**
- Panel: **GPT Powered By OpenAI** (premium banner)
  - Action Name: `Is Data Client Facing?`
  - Model: `GPT 4o` · Action Type: `Custom` · Enable Chat History: OFF
  - Prompt (visible top): `You are a quality control assistant. Verify the lead below is complete, qualified, and ready to transfer to the client.` / `RESPOND on the first line: YES or NO only.` / `If NO, state which single condition failed on the second line` (cut)

## `001654_07-028-4-app-transfer-tracking-create-update-opportunity-1.jpg`
- Shows: canvas (bottom half) + `Is Data Client Facing?` GPT panel (AI-leak list scroll)
- Canvas nodes visible (top→bottom): `#4 5. Extract Project Type` → `Save Project Type` → `#5 6. Extract Comment` → `Save Comment` → `Wait` → `#8 Is Data Client Facing?` (selected) → `Condition` → split:
  - Left branch card: `Branch` — `If "#8 Is Data Client Facing?" - Resp…` → `Send Slack Message to #needsreview channel` → `Add "Needs Review" Tag` → `END`
  - Right branch card: `None` — `When none of the conditions are met` → `Send Slack Message to #transferred channel` → `Send notification to client channel` → `Internal Notification` → one more node below (cut off at frame edge — per filename likely a Create/Update Opportunity action [?], label [unreadable])
- Prompt (visible): `PLACEHOLDER / AI-LEAK CHECK — the extracted response, City, Project Type, and Full Convo must NOT contain:` / `- "I'm sorry", "please provide", "no zip", "no city", "no info", "not provided", "sorry but", "I apologize", "cannot extract", "no` (next line partially cut: `phone" [?], "no number" [?], "no location" [?], "no conversation" [?], "no…` [unreadable])

## `001656_07-028-4-app-transfer-tracking-create-update-opportunity-2.jpg`
- Shows: same canvas + same GPT panel, prompt scrolled to lead-data block
  - Prompt (visible): `Phone: {{contact.phone}}` / `City: {{contact.city}}` / `Zip: {{contact.postal_code}}` / `Project Type: {{contact.project}}` / `Notes: {{contact.notes}}`

## `001658_07-028-4-app-transfer-tracking-create-update-opportunity-3.jpg`
- Shows: same canvas + same GPT panel, prompt at very end
  - Prompt (visible): `Zip: {{contact.postal_code}}` / `Project Type: {{contact.project}}` / `Notes: {{contact.notes}}` / `Full Convo:` / `{{contact.full_convo}}`

---

## Consolidated action list — rebuild spec

Workflow: **"*3 Auto Transfer Tracking"** (atlas slug "+4 App Transfer Tracking"). Status toggle in frames: Draft/Publish switch set to **Publish** position, top-right shows `Saved`.

**Trigger: NONE configured.** Canvas shows only a dashed `Add New Trigger` placeholder (backing: 001466, 001490). Contacts presumably enter via another workflow. (The Form Submitted / "EyeFly Lead Transfer Tracking Form v2" trigger seen at 001444 belongs to WF06 "Manual Transfer Tracking".)

| # | Action | Config captured | Backing frames |
|---|--------|-----------------|----------------|
| 1 | **Wait** | config panel never shown | 001466 (canvas) |
| 2 | **Set Conversation AI Status to Inactive** | config panel never shown | 001466 (canvas) |
| 3 | **GPT (OpenAI)** — `1. Extract Phone #` (canvas id `#7`) | GPT 4o · Custom · chat history OFF. Prompt top: "Extract the customer's phone number from the conversation below. PROCESSING: 1. Find any digit sequence that could be a phone number …" (middle/end not captured) | 001466 |
| 4 | **Update Contact Field** — `Save Phone #` | Update field data · `Phone` = `{{chatgpt.7.response}}` | 001490 |
| 5 | **GPT (OpenAI)** — `2. Extract Location` (canvas id `#1`) | GPT 4o · Custom · OFF. Prompt top: "Extract the service location from the conversation below. PROCESSING: 1. Use {{custom_values.service_areas}} to resolve ambiguous city names — always assume a city within the service area list …" · End: "If no location found → return empty string. Conversation: {{contact.full_convo}}" | 001496, 001516 |
| 6 | **Update Contact Field** — `Save Location` | config panel never shown (canvas only) | 001466, 001566 (canvas) |
| 7 | **GPT (OpenAI)** — `3. Extract Zip Code` (canvas id `#2`) | GPT 4o · Custom · OFF. Prompt top: "Extract a 5-digit zip code from the location below. PROCESSING: 1. If an explicit 5-digit zip is present → return it verbatim (never override with extrapolation)" · End: "WRONG: 80221-1234 / If unable to determine → return empty string. / Location: {{contact.location}} [?]" | 001520, 001536 |
| 8 | **Update Contact Field** — `Save Zipcode` | config panel never shown | 001466, 001566 (canvas) |
| 9 | **GPT (OpenAI)** — `4. Extract City` (canvas id `#3`) | GPT 4o · Custom · OFF. Prompt mid: "PROCESSING: 1. If an explicit city name is present → return it verbatim with its state abbreviation 2. If only a zip is present → extrapolate the city and state from your knowledge 3. If the zip maps to multiple cities → return the most common …" (opening + end not captured) | 001540 |
| 10 | **Update Contact Field** — canvas label `Update contact field` (saves City) | config panel never shown | 001566 (canvas) |
| 11 | **GPT (OpenAI)** — `5. Extract Project Type` (canvas id `#4`) | GPT 4o · Custom · OFF. Prompt top: "Identify the customer's project type from the conversation below. PRIMARY GOAL: return one of the four client-defined labels when the customer's project clearly matches. Otherwise, …" · End: "If the customer said nothing about a project at all → return empty string. Conversation: {{contact.full_convo}}" (the four labels themselves never on screen) | 001548, 001550, 001562 |
| 12 | **Update Contact Field** — `Save Project Type` | config panel never shown | 001566, 001654 (canvas) |
| 13 | **GPT (OpenAI)** — `6. Extract Comment` (canvas id `#5`) | GPT 4o · Custom · OFF. Prompt top: "Extract the customer's project description from the conversation below. YOU ARE NOT REPLYING TO ANYONE. Your output is inserted into a pre-built template as the quoted response. The …" · End: "WRONG: looking for concrete repair quote (when the customer actually said \"Driveway\") / Conversation: {{contact.full_convo}}" | 001566, 001576, 001578 |
| 14 | **Update Contact Field** — `Save Comment` | config panel never shown | 001566, 001654 (canvas) |
| 15 | **Wait** (second) | config panel never shown | 001654 (canvas) |
| 16 | **GPT (OpenAI)** — `Is Data Client Facing?` (canvas id `#8`) | GPT 4o · Custom · OFF. QC gate. Prompt (assembled from 5 scroll positions): "You are a quality control assistant. Verify the lead below is complete, qualified, and ready to transfer to the client. RESPOND on the first line: YES or NO only. If NO, state which single condition failed on the second line …" / quote-isolation rules ("Isolate the content between the final pair of double-quotes — that is the EXTRACTED RESPONSE; The question prefix is EXPECTED by design — never flag it as an error; All checks below apply to the EXTRACTED RESPONSE only") / fail conditions incl. "Contains an AI-leak phrase (see list below); Contains placeholder, refusal, or chain-of-thought text" / "PLACEHOLDER / AI-LEAK CHECK — the extracted response, City, Project Type, and Full Convo must NOT contain: 'I'm sorry', 'please provide', 'no zip', 'no city', 'no info', 'not provided', 'sorry but', 'I apologize', 'cannot extract', …[partially unreadable]" / lead-data block: "Phone: {{contact.phone}} / City: {{contact.city}} / Zip: {{contact.postal_code}} / Project Type: {{contact.project}} / Notes: {{contact.notes}} / Full Convo: {{contact.full_convo}}" | 001648, 001590, 001592, 001654, 001656, 001600, 001602, 001658 |
| 17 | **If / Else** — `Condition` | Build Your Own. Branch 1 (`Branch`): `#8 Is Data Client Facing? - Response` **Contains** `No`. None Branch: when no condition met | 001608, 001610, 001618, 001642 |
| 17a | Branch "No" path → **Slack Message** — `Send Slack Message to #needsreview channel` | Account: `EyeFly Digital - 12@feliciano` [?] · Event: `Send Private Channel message` · Private channel: `aibot_needs-review` [?] · Message: `***Needs Review***` + `Client: {{custom_values.business_name}}` / `First Name: {{contact.first_name}}` / `Last Name: {{contact.last_name}}` / `Number: {{contact.phone}}` / `City: {{contact.city}}` / `Postal code: {{contact.postal_code}}` / `What Type of Project: {{contact.project}}` | 001620, 001628, 001638 |
| 17b | Branch "No" path → **Add Contact Tag** — `Add "Needs Review" Tag` | tag value panel never shown (canvas label only) | 001654 (canvas) |
| 17c | Branch "No" path → **END** | — | 001654 (canvas) |
| 17d | None path (QC = YES) → **Slack Message** — `Send Slack Message to #transferred channel` | config panel never shown | 001654 (canvas) |
| 17e | None path → **Send notification to client channel** | config panel never shown | 001654 (canvas) |
| 17f | None path → **Internal Notification** | config panel never shown | 001654 (canvas) |
| 17g | None path → one further node, cut off at bottom of frame | [unreadable] — per atlas filename likely Create/Update Opportunity [?] | 001654-001658 (canvas edge) |

### Rebuild gaps (config never on screen)
- Both `Wait` steps, `Set Conversation AI Status to Inactive`, all Update Contact Field actions except `Save Phone #`, `Add "Needs Review" Tag` value, `Send Slack Message to #transferred channel`, `Send notification to client channel`, `Internal Notification`, and the final cut-off node.
- GPT prompt middles for actions 1 and 4; the four client-defined project-type labels; full AI-leak phrase list.
- No trigger is configured on this workflow in these frames.

Jordan — the chatbot (LIVE, pulled from GHL API 2026-07-28)

Agent enTwkrd8xSvA0PtVKPlx · business Level King. Everything in this section is a live read, not the stale atlas.

Modeauto-pilot (bot answers live)
Channels["FB"] only
Is primary agentTrue
Sleep on manual / workflow replyTrue / True (human takeover pauses the bot)
Auto-pilot max messages10
Sleep after1 hours
Knowledge base["M5n06XAHCoJOGgGdvjjL"] (near-empty by design; FAQs live in instructions)
Actions on the bot9 (5 stop-bot, 2 trigger-workflow, 1 contact-info, 1 auto-follow-up)

Personality (verbatim)

You're Jordan, page admin for {{custom_values.business_name}}, a {{custom_values.niche}} company. You are not a contractor. Your job: get the lead's contact info and pass it to the estimator.

Style: 2 sentences max, then 1 question. Casual texting. No emojis or exclamation points except "Yes!" (past work), "Nope!" (contractor question), and the identity answer.

Identity answer (CONFIRMED — Option A, Akash 2026-07-23): I'm a real person! my name is Jordan and I'm the page admin for Level King

Preferred words: got it, yep, nope, no worries, tbh, honestly.
When unsure, redirect to the estimator. Never make up business details (pricing, subcontracting, financing, years in business).
If the lead sends an attachment: "thanks for sending that over — I can't view attachments but I'll pass it to our estimator."
If the lead gives scheduling preferences ("call after 4", "text first", "don't call until Tuesday"): "got it, I'll note that for our estimator."

Goal / conversation flow (verbatim)

Goal: qualify the lead, then hand off. Ask only for what's missing.

1. GREET + PROJECT TYPE — if the lead hasn't said what they need, ask (open-ended, use their first name when you know it):
   "Hey {first name}, what kind of concrete repair project can we help you with?"
   Do NOT list multiple-choice options (driveway/sidewalk/patio/etc.) in the greeting — keep it open-ended. (Option lists are reserved for ad-driven flows only, per Akash 2026-07-23.)

1b. AD-DRIVEN LEADS (very common) — leads from our Meta ads arrive mid-conversation. The ad already: (a) asked the project-type menu — a button tap or one-word reply like "Pool Deck" IS their project answer, never re-ask it; (b) may have already asked for their phone number and zip code in an automatic page reply, and may send an automatic "just following up" nudge — those page messages are not from you, but never repeat a question any page message already asked. Read the whole thread first, skip the greeting if messages already exist, acknowledge what they gave, and ask ONLY for the missing piece ("thanks! and what's the zip for the project?").

2. EXCLUDED WORK — if the project is new concrete, foundation structural repair, asphalt, or resurfacing, politely decline:
   "we don't handle that one, but thanks for reaching out!"

3. PHONE + ZIP — ask for both in one message if both are missing:
   "got it! what's the best phone number, and what's the project zip code?"
   If only phone missing: "what's the best number for our estimator to reach you?"
   If only zip missing: "what's the 5-digit zip for the project?"

4. SERVICE-AREA CHECK — confirm the zip/city is in the service area (see the area rule section).
   In area: continue to handoff.
   Out of area: "looks like that's outside the area we cover. sorry about that!"

5. HANDOFF — only when ALL are true: phone = 10 digits (or email if they refuse a phone), zip = 5 digits, service area verified. Never hand off with an unvalidated phone or zip.
   "awesome, thanks! our estimator from {{custom_values.business_name}} will reach out soon to set up your free estimate. lmk if you have any other questions in the meantime!"

After handoff, the conversation is complete. Do not re-qualify or collect more info.
Follow-up questions after handoff: "our estimator will be able to answer that when they reach out. anything else in the meantime?"
If confused about the company name: "yep, this page is owned and operated by {{custom_values.business_name}}. same team."

Instructions — business facts, service-area rule, 21 FAQs (verbatim)

Business: {{custom_values.business_name}}
Phone: {{custom_values.business_phone}}
Website: {{custom_values.website_url}}

SERVICE AREA RULE (for the area check in step 4):
Anchor ZIP: {{custom_values.service_zip}}
Cities we cover: {{custom_values.service_areas}}
Rule: qualify any project within about 40 miles of the anchor ZIP, using the city list to resolve ambiguous city names. There is no hard ZIP allowlist, so do not invent one. If the city/zip is clearly in or near the covered cities, treat it as in-area; if it's clearly far outside, treat it as out-of-area.

FAQs — common questions and how to answer them:
1. Q: What happens after I send my info?
   A: Once you send your info, I'll pass it to our estimator at {{custom_values.business_name}}. They'll reach out directly to talk about your concrete project and set up an estimate.
2. Q: Are you a real person or a bot?
   A: I'm a real person! my name is Jordan and I'm the page admin for Level King
3. Q: Do you fix [service we offer]?
   A: we can help! send me your zip code so I can confirm we service your area. (once area confirmed: "we can help! what's the best phone number for our estimator to reach you?")
4. Q: Are you going to sell my number?
   A: this page is owned by {{custom_values.business_name}}. we're not going to do anything with your number other than contact you about your project
5. Q: How much does it cost? (first time asked)
   A: honestly it depends on your property and project. can you send me your zip rq just so I can make sure we service your area? (once area confirmed: "...if you send me your best phone number I can have our estimator reach out for a fast estimate asap")
6. Q: I prefer texts / I hate calls
   A: no problem, I'll note that you prefer a text first. what's the best number for our estimator to reach you?
7. Q: Can I call you? / What's your number?
   A: you can reach us at {{custom_values.business_phone}}, or if you send me your number I can have someone call you
8. Q: When can you come? / What days or times?
   A: not sure, is there a day or time that works best for you?
9. Q: Technical / how-to / DIY question
   A: tbh I'm not sure, I'm just the page admin. my job is to grab your info and pass it to our estimator. send me your zip code so I can confirm we service your area (once area confirmed: "...what's the best number to reach you at?")
10. Q: Do you have links to past work?
   A: Yes! you can see examples on our website: {{custom_values.website_url}}
11. Q: I'm an existing customer
   A: got it — what's the best number so I can have the team follow up?
12. Q: Are you the contractor?
   A: Nope! my name is Jordan, I'm just the page admin. my job is to grab your info and pass it to our estimator. what's the best number to reach you at?
13. Q: Won't give phone number
   A: no worries — I can have them contact you by email instead. what's the best email?
14. Q: Where do you service? / What areas?
   A: we service Denton and all surrounding areas. send me your zip code so I can confirm we service your area (once area confirmed: "...what's the best phone number for our estimator to reach you?")
15. Q: Do you service [specific city]?
   A: yep, we service [city] and the surrounding areas. just send me your phone number and I'll get you set up with a fast estimate (if not serviceable: "looks like that area is outside the area we cover. sorry about that!")
16. Q: What's your website?
   A: here's our website: {{custom_values.website_url}}
17. Q: I'm a renter
   A: the property owner would need to request the estimate. have them message us and we'll get them set up
18. Q: How much does it cost? (asked again)
   A: send me your zip first so I can confirm we service your area (once area confirmed, no phone yet: "Our estimator will definitely be able to answer that for you. Send your number and he'll reach out to chat about your project")
19. Q: Are estimates free?
   A: yes, all estimates are free! just need your zip so I can confirm we service your area (once area confirmed: "...just send me your best number and I'll have our estimator reach out asap")
20. Q: What company is this?
   A: this page is owned by {{custom_values.business_name}}! here's our website: {{custom_values.website_url}}. what are you looking to get done?
21. Q: Invalid number given
   A: hey that number didn't look right — can you resend the best number to reach you?

Handoff trigger — the qualified/transfer gate (post Jul-27, verbatim)

Fires GHL workflow 210bddd6-63a3-4361-8532-336479629a8a ("*3 Auto Transfer Tracking"). Action id L2povD0CSY5VPZAUFngz. Tightened Jul-27 (ledger 91674) so it requires a concrete service AND (phone OR zip/city) actually typed AND no decline signal.
Trigger ONLY when ALL of the following are true based on what the lead has actually typed in THIS conversation: (1) the lead has named a concrete service need we offer (foundation repair, waterproofing, concrete leveling, or crawl space); AND (2) the lead has provided at least ONE contact detail in the chat - a phone number OR a ZIP code or city name; AND (3) the lead has NOT declined or disqualified themselves. Do NOT trigger if the lead says anything like: no, not interested, just looking, just browsing, my project changed, project changed, we don't have a project, no repair project, already handled it, changed my mind, nvm, or no thanks. If the lead has named a service but has NOT yet given a phone number or ZIP/city, do NOT trigger - keep helping them and let the follow-up cadence collect the missing contact info. When in doubt, do NOT trigger.

AI DQ trigger (verbatim)

Fires GHL workflow 105d0996-afc6-4194-b662-5640a0dfdef2 ("*5 AI DQ"). Action id LbPL30U8TKFgrd6c0Hfk.
The lead's city/zip is confirmed outside our service area, OR the project type is confirmed outside what we offer, OR the lead is confirmed not qualified.

Stop-bot rules — 5 scenarios (verbatim, live)

ScenarioTrigger conditionExample phrasesFinal messageTags / reactivate
Goodbye Detection OFF
1ZsaDoUTneAMl9DkRISU
When the contact says goodbye or similar phrases Bye · Goodbye · Thank you! have a nice day Thank you for your time, Have a nice day. stop bot
reactivate: 24 hours
Already Handled ON
6PoxPoIDrRqk1NJGZgyE
Customer has already solved the problem, hired someone else, or is a renter / not the decision maker already fixed · we hired someone · landlord handles it · i'm the tenant got it, thanks — we'll leave it there! stop bot
reactivate: 24 hours
Wrong Contact Type ON
ux10bUpEUfDX0rCJPplw
Customer is seeking employment, is a competitor or industry person, or is angry / abusive looking for work · are you hiring · scam · i'm a contractor sorry about that! stop bot
reactivate: 24 hours
Opt-Out ON
Xw0NcJzYOx39lWa163Yp
Customer requests messaging to stop or be removed from contact stop · unsubscribe · remove me · take me off your list sorry about that! we won't message you again unless you reach out stop bot
reactivate: no
Not Interested ON
40FKdyyJ4tvDXoR9Q35s
Customer contacted by accident, is not interested, is just browsing or just looking, says no, says their project changed or was cancelled, or says they don't have a project or repair need. not interested · just browsing · just looking · accidentally clicked · no thanks · no · my project changed · project changed · we don't have a project · we don't have a repair project · no repair project · changed my mind sorry about that! stop bot, not-interested
reactivate: 24 hours

Note: only Goodbye Detection is OFF; the other four are ON. The Jul-27 overhaul (ledger 91675) broadened Not Interested to catch "project changed / no project / just looking / no" and added the not-interested tag — that was leaking declines into the Handoff before.

Contact-Info action (verbatim, live)

Action id Kbed8A6ehErlEA2SecKr. Narrowed Jul-27 (ledger 91699) to write CITY ONLY into the Location custom field 51xfRUZELcqueWYJAnqQ — before, it wrote city/zip/neighborhood all into one field (the scramble that produced empty transfer packets). ZIP has its own field HNsM3wlNbvCbx0dvBc15.
{
 "contactFieldId": "51xfRUZELcqueWYJAnqQ",
 "description": "The city name the lead states (e.g. Plano, Frisco, Southlake). Capture the CITY ONLY. Do NOT put a ZIP code, street address, neighborhood, project type, or any sentence in this field. If the lead has not clearly stated a city, return an empty string - never a placeholder, never an apology sentence.",
 "contactUpdateExamples": [
  "Plano, TX",
  "Frisco",
  "Southlake"
 ]
}

Auto Follow-up cadence (verbatim, live)

StepDelayModeMessage
#15 minutesCustom messagestill there?
#215 minutesLet AI send
#31 hoursCustom messagelmk if you have any questions!
#41 daysCustom messageshould i close this out or did you still want help?

All automations found — status at a glance

True title-bar names (the atlas filenames are wrong — the title bar inside each paste is the truth). 17 atlas files → the objects below.

Automation (true name)What it is supposed to doStatus
*3 Auto Transfer TrackingThe workflow Jordan's Handoff action fires (live GHL id 210bddd6-63a3-4361-8532-336479629a8a). Extracts phone/zip/city/project from the convo, QC-gates, and delivers the lead to the client via Slack / internal notification. THE suspected culprit for dead transfers.LIVE (target) / paste STALE
*4 Manual Transfer TrackingForm-Submitted transfer path (EyeFly Lead Transfer Tracking Form v2): tag 'transferred', update a Google Sheet, deliver lead via Slack/Webhook + internal email.UNKNOWN / paste STALE
*5 AI DQThe disqualification workflow Jordan's 'AI DQ' action fires (live GHL id 105d0996-afc6-4194-b662-5640a0dfdef2). Deactivates the bot + adds an 'ai dq' tag.LIVE (target) / paste STALE
•EyeFly Sales Pipeline Stage TriggersFan-out router: 14 triggers (pipeline-stage-changed + tag-added) route a contact into the matching branch and stamp the tag + move the opportunity stage.Published — EyeFly own location
CS | Booked Call V3 (Jan 2026)Booked-call nurture: creates the opportunity, Slack + SMS notify Akash, logs to Google Sheets, then a long email/SMS reminder cadence up to the call.Draft — EyeFly own location
2. Standard: UnsubscribeUnsubscribe / DND handler: link-click, DND, dnd-tag, or STOP reply -> set contact DND on the right channel, remove from workflows.Draft
*1 Qualified Convo TrackingFirst inbound FB message -> tag 'fb lead', GPT-filter accidental clicks, and if a qualified inquiry: log to a sheet, save first-message + attribution to custom fields, add 'qualified' tag.Draft / paste STALE
Qualified Tag → Lead Submitted EventOn 'qualified' tag: fire the CAPI relay webhook (n8n capi-relay) + Meta Conversion API funnel event + create/update opportunity.Published / paste STALE
#4 Manual Transfer Tracking / #2 Full Convo LoggingTwo different workflows captured under one atlas label: (a) the manual-transfer form path, (b) 'Full Convo Logging' which stamps replies and saves the running full conversation.Publish toggle ON / paste STALE
#1 Qualified Convo TrackingThe published variant of Qualified Convo Tracking: fb-lead tag, GPT accidental-click filter, qualified-inquiry gate, sheet log, save first message + 6 attribution custom fields, add 'qualified' tag.Publish toggle ON / paste STALE
Bot Action: Auto Follow-upNot a workflow. The Conversation-AI bot's re-engagement cadence when a contact goes quiet.LIVE — superseded by live API
Bot Action: Stop BotNot a workflow. The Conversation-AI bot's 5 stop-bot scenarios (goodbye / already-handled / wrong-contact / opt-out / not-interested).LIVE — superseded by live API
Bot Knowledge Base / FAQsNot a workflow. The bot's FAQ/knowledge content.LIVE — superseded by live API
Funnel Strategy Document (Lead Gen)A browser-rendered 5-stage funnel strategy doc (Lead Gen / Nurture / Conversion / Retention / Ascension), captured by mistake under a workflow slug.NOT A WORKFLOW
Funnel Strategy Document (Nurture)Same strategy doc, Nurture row. No GHL content.NOT A WORKFLOW
Funnel Strategy Document (Conversion)Same strategy doc, Conversion row. No GHL content.NOT A WORKFLOW
Funnel Strategy Document (Retention)Same strategy doc, Retention row. No GHL content.NOT A WORKFLOW
Funnel Strategy Document (Ascension)Same strategy doc, Ascension row. No GHL content.NOT A WORKFLOW

Full verbatim corpus — every automation (collapsible)

Auto Transfer Workflow 3 is in the alert box above. Everything else, verbatim, below.

*4 Manual Transfer Tracking UNKNOWN / paste STALE

What it is supposed to do: Form-Submitted transfer path (EyeFly Lead Transfer Tracking Form v2): tag 'transferred', update a Google Sheet, deliver lead via Slack/Webhook + internal email.

Known defect / caveat: Template capture; frames are mixed with '*5 AI DQ'. Not confirmed to exist on Level King.

Verbatim atlas paste — source file wf06-manual-transfer-and-ai-dq.md (captured 2026-06-25 unless noted):

# Workflow 06 — "Manual Transfer Tracking" (atlas label) — MIXED FRAMES

> **Confirmed mix:** the atlas's 06 frames cover **two different GHL workflows**:
> - `001356_06-002-...-send-message-1.jpg` → title bar reads **`*5. AI DQ`** (belongs to the AI DQ workflow, NOT Manual Transfer Tracking)
> - `001400_06-004-...-add-transfer-tag-1.jpg` → title bar reads **`*4. Manual Transfer Tracking`** (punctuation after "4" is period-or-colon at this resolution [?])
>
> **Duplicate-frame note:** `000960_06-...-parent.jpg` and `000960_06-...-trigger.jpg` are byte-identical to each other AND to the two `000960_05-*` files (same MD5). It is the Automation list page mid-load — no workflow content, attributable to neither workflow.

## Frame: 000960_06-manual-transfer-tracking-parent.jpg (= 000960_06-...-trigger.jpg, identical file)
- **Title bar:** "Automation" page header
- **Shows:** Automation area, Workflows tab, list loading (spinner); tabs Workflows (active) · Overview (NEW) · Campaign · Triggers · Global Workflow Settings
- No canvas, trigger, or action content. Belongs to neither workflow.

## Frame: 001356_06-002-manual-transfer-tracking-send-message-1.jpg — ACTUALLY `*5. AI DQ`
- **Title bar:** `*5. AI DQ` — Builder tab active; Test Workflow · Draft/Publish toggle · Saved (greyed)
- **Shows:** canvas + action config panel (Deactivate Bot selected)
- **Canvas nodes in order:**
  1. (dashed placeholder: **Add New Trigger** — no trigger configured/visible in this frame)
  2. **Deactivate Bot** (selected)
  3. **Add Tag**
  4. **END**
- **Config panel — Update conversation AI bot and status** ("Updates the Conversation AI bot and status for the contact"):
  - ACTION NAME: `Deactivate Bot`
  - CHANGE ASSIGNED CONVERSATION AI BOT *: `Keep Same`
  - UPDATE BOT'S STATUS TO *: `Inactive`
  - REACTIVATE BOT AFTER: checkbox "Reactivate bot after" — **unchecked**
  - Footer buttons: Delete · Cancel · Save action
- The Add Tag node's config (expected tag `ai dq` per atlas context) is **not shown** in any frame — tag name not confirmable from these images.

## Frame: 001400_06-004-manual-transfer-tracking-add-transfer-tag-1.jpg — `*4. Manual Transfer Tracking`
- **Title bar:** `*4. Manual Transfer Tracking` [punctuation after 4: `.` or `:`, unclear]
- **Shows:** canvas + action config panel (Internal Notification selected)
- **Canvas nodes in order:**
  1. Trigger: **Form Submitted** — filter line: `Form is is any of "*EyeFly Lead Tran…` [truncated on node; "is is" as rendered [?]] (Stats link on node)
  2. (dashed placeholder: **Add New Trigger**)
  3. **Add "Transferred" Tag**
  4. **#3 Update Leads Transferred_Raw** [?] (spreadsheet-style icon — Google Sheets action [?])
  5. **Deliver Lead to Client via Slack / Webhook**
  6. **Internal Notification** (selected)
  7. **END**
- **Config panel — Internal Notification** ("Send a notification to someone other than the contact"); tabs Edit Action (active) · Statistics:
  - ACTION NAME: `Internal Notification`
  - TYPE OF NOTIFICATION: `Email`
  - From Name: (empty; placeholder "From Name") — helper: "If 'From Name' and 'From Email' fields are empty then Email will be sent using Default Values" [?]
  - From Email: (empty; placeholder "From Email")
  - To User Type: `Custom Email`
  - To Custom Email: `admin@lowcountryscapes.com`
  - Buttons: Cc · Bcc (neither expanded)
  - Subject *: `You Have A New Lead | EyeFly Digital`
  - Templates: `Select Template` (none chosen)
  - Message (rich-text editor; Verdana · 16px · Paragraph · 1.5; "Write with AI" button present):
    ```
    Name: {{contact.name}}
    Number: {{contact.phone}}
    City: {{contact.city}}
    Postal code: {{contact.postal_code}}
    What Type of Project: {{contact.project}}
    Notes: {{contact.notes}}
    ```
    - Counter under editor: `170 characters | 16 words`
  - Button: Add attachments
  - Test Emails * field (empty) · Send Test Mail button
  - Footer buttons: Delete · Cancel · Save action

## Consolidated action list — `*4. Manual Transfer Tracking`
**Trigger:** Form Submitted — Form is any of `*EyeFly Lead Tran…` [form name truncated on node; full name not visible]

1. **Add "Transferred" Tag** (config panel not shown; exact tag value not confirmable)
2. **#3 Update Leads Transferred_Raw** [?] (spreadsheet/Google Sheets-style action; config not shown)
3. **Deliver Lead to Client via Slack / Webhook** (config not shown)
4. **Internal Notification** — Email · To Custom Email `admin@lowcountryscapes.com` · From Name/Email default · Subject `You Have A New Lead | EyeFly Digital` · body = 6-line merge-field block (Name `{{contact.name}}` · Number `{{contact.phone}}` · City `{{contact.city}}` · Postal code `{{contact.postal_code}}` · What Type of Project `{{contact.project}}` · Notes `{{contact.notes}}`)
5. END

## Consolidated action list — `*5. AI DQ`
**Trigger:** none visible in captured frame (only "Add New Trigger" placeholder shown)

1. **Update conversation AI bot and status** — name `Deactivate Bot` · bot: Keep Same · status → Inactive · Reactivate bot after: unchecked
2. **Add Tag** — tag value not visible in any captured frame (atlas context says `ai dq`; unconfirmed on screen)
3. END
*5 AI DQ LIVE (target) / paste STALE

What it is supposed to do: The disqualification workflow Jordan's 'AI DQ' action fires (live GHL id 105d0996-afc6-4194-b662-5640a0dfdef2). Deactivates the bot + adds an 'ai dq' tag.

Known defect / caveat: Only the Deactivate-Bot action was captured; the tag value and trigger were never on screen.

Verbatim atlas paste — source file wf06-manual-transfer-and-ai-dq.md (captured 2026-06-25 unless noted):

# Workflow 06 — "Manual Transfer Tracking" (atlas label) — MIXED FRAMES

> **Confirmed mix:** the atlas's 06 frames cover **two different GHL workflows**:
> - `001356_06-002-...-send-message-1.jpg` → title bar reads **`*5. AI DQ`** (belongs to the AI DQ workflow, NOT Manual Transfer Tracking)
> - `001400_06-004-...-add-transfer-tag-1.jpg` → title bar reads **`*4. Manual Transfer Tracking`** (punctuation after "4" is period-or-colon at this resolution [?])
>
> **Duplicate-frame note:** `000960_06-...-parent.jpg` and `000960_06-...-trigger.jpg` are byte-identical to each other AND to the two `000960_05-*` files (same MD5). It is the Automation list page mid-load — no workflow content, attributable to neither workflow.

## Frame: 000960_06-manual-transfer-tracking-parent.jpg (= 000960_06-...-trigger.jpg, identical file)
- **Title bar:** "Automation" page header
- **Shows:** Automation area, Workflows tab, list loading (spinner); tabs Workflows (active) · Overview (NEW) · Campaign · Triggers · Global Workflow Settings
- No canvas, trigger, or action content. Belongs to neither workflow.

## Frame: 001356_06-002-manual-transfer-tracking-send-message-1.jpg — ACTUALLY `*5. AI DQ`
- **Title bar:** `*5. AI DQ` — Builder tab active; Test Workflow · Draft/Publish toggle · Saved (greyed)
- **Shows:** canvas + action config panel (Deactivate Bot selected)
- **Canvas nodes in order:**
  1. (dashed placeholder: **Add New Trigger** — no trigger configured/visible in this frame)
  2. **Deactivate Bot** (selected)
  3. **Add Tag**
  4. **END**
- **Config panel — Update conversation AI bot and status** ("Updates the Conversation AI bot and status for the contact"):
  - ACTION NAME: `Deactivate Bot`
  - CHANGE ASSIGNED CONVERSATION AI BOT *: `Keep Same`
  - UPDATE BOT'S STATUS TO *: `Inactive`
  - REACTIVATE BOT AFTER: checkbox "Reactivate bot after" — **unchecked**
  - Footer buttons: Delete · Cancel · Save action
- The Add Tag node's config (expected tag `ai dq` per atlas context) is **not shown** in any frame — tag name not confirmable from these images.

## Frame: 001400_06-004-manual-transfer-tracking-add-transfer-tag-1.jpg — `*4. Manual Transfer Tracking`
- **Title bar:** `*4. Manual Transfer Tracking` [punctuation after 4: `.` or `:`, unclear]
- **Shows:** canvas + action config panel (Internal Notification selected)
- **Canvas nodes in order:**
  1. Trigger: **Form Submitted** — filter line: `Form is is any of "*EyeFly Lead Tran…` [truncated on node; "is is" as rendered [?]] (Stats link on node)
  2. (dashed placeholder: **Add New Trigger**)
  3. **Add "Transferred" Tag**
  4. **#3 Update Leads Transferred_Raw** [?] (spreadsheet-style icon — Google Sheets action [?])
  5. **Deliver Lead to Client via Slack / Webhook**
  6. **Internal Notification** (selected)
  7. **END**
- **Config panel — Internal Notification** ("Send a notification to someone other than the contact"); tabs Edit Action (active) · Statistics:
  - ACTION NAME: `Internal Notification`
  - TYPE OF NOTIFICATION: `Email`
  - From Name: (empty; placeholder "From Name") — helper: "If 'From Name' and 'From Email' fields are empty then Email will be sent using Default Values" [?]
  - From Email: (empty; placeholder "From Email")
  - To User Type: `Custom Email`
  - To Custom Email: `admin@lowcountryscapes.com`
  - Buttons: Cc · Bcc (neither expanded)
  - Subject *: `You Have A New Lead | EyeFly Digital`
  - Templates: `Select Template` (none chosen)
  - Message (rich-text editor; Verdana · 16px · Paragraph · 1.5; "Write with AI" button present):
    ```
    Name: {{contact.name}}
    Number: {{contact.phone}}
    City: {{contact.city}}
    Postal code: {{contact.postal_code}}
    What Type of Project: {{contact.project}}
    Notes: {{contact.notes}}
    ```
    - Counter under editor: `170 characters | 16 words`
  - Button: Add attachments
  - Test Emails * field (empty) · Send Test Mail button
  - Footer buttons: Delete · Cancel · Save action

## Consolidated action list — `*4. Manual Transfer Tracking`
**Trigger:** Form Submitted — Form is any of `*EyeFly Lead Tran…` [form name truncated on node; full name not visible]

1. **Add "Transferred" Tag** (config panel not shown; exact tag value not confirmable)
2. **#3 Update Leads Transferred_Raw** [?] (spreadsheet/Google Sheets-style action; config not shown)
3. **Deliver Lead to Client via Slack / Webhook** (config not shown)
4. **Internal Notification** — Email · To Custom Email `admin@lowcountryscapes.com` · From Name/Email default · Subject `You Have A New Lead | EyeFly Digital` · body = 6-line merge-field block (Name `{{contact.name}}` · Number `{{contact.phone}}` · City `{{contact.city}}` · Postal code `{{contact.postal_code}}` · What Type of Project `{{contact.project}}` · Notes `{{contact.notes}}`)
5. END

## Consolidated action list — `*5. AI DQ`
**Trigger:** none visible in captured frame (only "Add New Trigger" placeholder shown)

1. **Update conversation AI bot and status** — name `Deactivate Bot` · bot: Keep Same · status → Inactive · Reactivate bot after: unchecked
2. **Add Tag** — tag value not visible in any captured frame (atlas context says `ai dq`; unconfirmed on screen)
3. END
•EyeFly Sales Pipeline Stage Triggers Published — EyeFly own location

What it is supposed to do: Fan-out router: 14 triggers (pipeline-stage-changed + tag-added) route a contact into the matching branch and stamp the tag + move the opportunity stage.

Known defect / caveat: Captured on EyeFly's OWN location 9sEack4dmHU906o6LsB4, NOT Level King. This is the agency template, not a Level King automation.

Verbatim atlas paste — source file wf01-qualify-sales-pipeline-trigger.md (captured 2026-06-25 unless noted):

# Workflow 01 — Qualify Sales Pipeline Trigger

**Actual workflow name in GHL: "•EyeFly Sales Pipeline Stage Triggers"** (folder: "(*SP) Active Automations", status: Published). Location shown in URL: `9sEack4dmHU906o6LsB4`.

Transcription notes:

- Frames are 1392x720 video grabs; small text was read from cropped + upscaled regions. Low-confidence readings marked [?], illegible marked [unreadable].
- **Filename suffixes are unreliable.** Several filenames say "unqualified", "unconfirmed", "300" but the panels on screen show Powerdialer / Responded / Qualified etc. Panel content below is what was actually on screen — trust it over the filename.
- Pipeline used throughout: **"EyeFly Pre-Call Ops"**. Full stage list (verified from the pipeline board in frames 025/026): Lead In · Powerdialer (No Shows, Unresponsive) · Text / Responded · Qualified · Confirmed · Live-Confirmed · No Show · Long Term Nurture · DND (Unqualified, Spam, etc.)

## 000000_01-qualify-sales-pipeline-trigger-parent.jpg — other

GHL dashboard landing page ("Summer of AI" promo). No workflow content.

## 000000_01-qualify-sales-pipeline-trigger-trigger.jpg — other

Identical to the parent frame — GHL "Summer of AI" landing page. No workflow content.

## 000186_01-001-...-condition-1.jpg — workflow canvas + If/Else condition config panel

Workflow header: "•EyeFly Sales Pipeline Stage Triggers" — tabs: Builder / Settings / Enrollment History / Execution Logs — Test Workflow — Draft/Publish toggle (on).

### Canvas — trigger row (13 boxes visible in this frame; frame 002 reveals one more at far left, total 14)

Left to right in this frame:

1. Contact Tag — "Tag Added: DND" — filter: Tag Added includes `dnd`
2. Pipeline Stage Changed — "Moved to DND" — In pipeline is "EyeFly Pre-Call Ops"; Pipeline stage is "DND (Unqualified... [truncated on card]"
3. Pipeline Stage Changed — "Moved to Live-Confirmed" — In pipeline is "EyeFly Pre-Call Ops"; Pipeline stage is "Live-Confirmed"
4. Pipeline Stage Changed — "Moved to Powerdialer" — In pipeline is "EyeFly Pre-Call Ops"; Pipeline stage is "Powerdialer (No S... [truncated on card]"
5. Pipeline Stage Changed — "Moved to No Show" — In pipeline is "EyeFly Pre-Call Ops"; Pipeline stage is "No Show"
6. Contact Tag — "Tag Added: No Show" — filter: Tag Added includes `no show`
7. Pipeline Stage Changed — "Moved to Text/Responded" — In pipeline is "EyeFly Pre-Call Ops"; Pipeline stage is "Text / Responded"
8. Pipeline Stage Changed — "Moved to Long Term Nurture" — In pipeline is "EyeFly Pre-Call Ops"; Pipeline stage is "Long Term Nurture"
9. Contact Tag — "Tag Added: Confirmed" — filter: Tag Added includes `confirmed`
10. Pipeline Stage Changed — "Moved to Qualified" — In pipeline is "EyeFly Pre-Call Ops"; Pipeline stage is "Qualified"
11. Pipeline Stage Changed — "Moved to Confirmed" — In pipeline is "EyeFly Pre-Call Ops"; Pipeline stage is "Confirmed"
12. Contact Tag — "Tag Added: Qualified" — filter: Tag Added includes `qualified`
13. Contact Tag — "Tag Added: Powe... [truncated]" — filter: Tag Added includes `powe...` [truncated; presumably `powerdialer`, full value not readable in any frame]

### Canvas — flow below triggers

- Condition (If/Else node) →
- Branch row (left to right): 8 Branch nodes + None:
  - Branch — If "Workflow Trigger" is "Moved to Po..." — tooltip visible: **If "Workflow Trigger" is "Moved to Powerdialer" or If "Workflow Trigger" is "Tag Added: Powerdialer"**
  - Branch — If "Workflow Trigger" is "Moved to Te..." [truncated]
  - Branch — If "Workflow Trigger" is "Moved to Qu..." [truncated]
  - Branch — If "Workflow Trigger" is "Moved to Co..." [truncated]
  - Branch — If "Workflow Trigger" is "Moved to Li..." [truncated]
  - Branch — If "Workflow Trigger" is "Moved to No..." [truncated]
  - Branch — If "Workflow Trigger" is "Moved to Lo..." [truncated]
  - Branch — If "Workflow Trigger" is "Moved to DN..." [truncated]
  - None — "When none of the conditions are met" → END
- Action row 1 (per branch): Add Tag: Powerdialer · Add Tag: Text/Responded · Add Tag: Qualified · Add Tag: Confirmed · Add Tag: Live-Confirmed · Add Tag: No Show · Add Tag: Nurture · Add Tag: DND
- Action row 2 (per branch): Move to Powerdialer Stage · Move to Responded Stage · Move to Qualified Stage · Move to Confirmed Stage · Move to Live-Confirmed Stage · Move to No Show Stage · Move to Nurture Stage · Move to DND Stage
- Each branch ends in END.

### Right panel — If / Else config (verbatim)

- Action: **If / Else** — "Find the Contact journey through this workflow based on conditions[?]"
- ACTION NAME: `Condition`
- SCENARIO RECIPE: `Build Your Own`
- BRANCHES:
  - Branch 1 (expanded, name field: "Branch"):
    - Segment 1: `Workflow Trigger` | `Is` | `Moved to Powerdialer`
    - OR
    - Segment 2: `Workflow Trigger` | `Is` | `Tag Added: Powerdialer`
    - OR [+] · + Add Segment
  - 7 more collapsed branches (each name field shows "Branch")
  - + Add Branch · Reorder Branches
- Buttons: Delete · Cancel · Save action

## 000404_01-002-...-add-tag-inbound-unqualified-1.jpg — canvas + Add Contact Tag config panel

(Filename says "unqualified"; panel is the Powerdialer tag.)

Canvas trigger row scrolled slightly left vs frame 001 — reveals an additional trigger at far left:

- Contact Tag — "Tag Added: Text/Responded" — filter: Tag Added includes `text/responded` [leftmost card partially cut off]

Right panel (verbatim):

- Action: **Add Contact Tag** — "Adds specified tags to the contact"
- ACTION NAME: `Add Tag: Powerdialer`
- TAGS: `powerdialer`
- Buttons: Delete[?] · Cancel · Save action

## 000408_01-003-...-move-to-unqualified-stage-1.jpg — Create Opportunity config panel

- Action: **Create Opportunity** — "Creates or updates an Opportunity within the Pipeline that you select"
- Yellow "Action Deprecation Notice" box: "The Create/Update Action will soon be deprecated. Existing workflows will be unaffected; however, the new Create Opportunity and Update Opportunity actions will be the actions to use moving forward."
- ACTION NAME: `Move to PowerDialer Stage`
- IN PIPELINE: `EyeFly Pre-Call Ops`
- IN PIPELINE STAGE: `Powerdialer (No Shows, Unresponsive)`
- OPPORTUNITY NAME: (empty)
- OPPORTUNITY SOURCE: (empty) — helper text: "If the source is empty ... the source will remain unchanged in case of update or it will be the contact's source in case of create" [partially unreadable]
- OPPORTUNITY VALUE: (empty)
- STATUS: `Select Status` (not set)
- + Add Field[?] link
- Toggle: ALLOW OPPORTUNITY TO MOVE TO ANY PREVIOUS STAGE IN PIPELINE — **off**
- Toggle: ALLOW DUPLICATE OPPORTUNITIES — **off**
- Buttons: Delete · Cancel · Save action

## 000414_01-004-...-add-tag-inbound-unconfirmed-1.jpg — Create Opportunity config panel (duplicate)

Same panel as frame 003 (Move to PowerDialer Stage / EyeFly Pre-Call Ops / Powerdialer (No Shows, Unresponsive)). Lag frame — no new information.

## 000418_01-005-...-move-to-unconfirmed-stage-1.jpg — Create Opportunity config panel

Same layout and deprecation notice as frame 003. Fields:

- ACTION NAME: `Move to Responded Stage`
- IN PIPELINE: `EyeFly Pre-Call Ops`
- IN PIPELINE STAGE: `Text / Responded`
- Opportunity Name/Source/Value: (empty) · STATUS: `Select Status`
- Toggles: both **off**

## 000422_01-006-...-add-tag-inbound-300-1.jpg — Create Opportunity config panel (duplicate)

Same panel as frame 005 (Move to Responded Stage). Lag frame — no new information.

## 000426_01-007-...-move-to-300-stage-1.jpg — Create Opportunity config panel

Same layout as frame 003. Fields:

- ACTION NAME: `Move to Qualified Stage`
- IN PIPELINE: `EyeFly Pre-Call Ops`
- IN PIPELINE STAGE: `Qualified`
- Opportunity Name/Source/Value: (empty) · STATUS: `Select Status`
- Toggles: not individually re-verified in this frame (panel bottom identical in layout; both off wherever readable)

## 000430_01-008-...-add-tag-inbound-unqualified-1.jpg — Add Contact Tag config panel

- Action: **Add Contact Tag** — "Adds specified tags to the contact"
- ACTION NAME: `Add Tag: Confirmed`
- TAGS: `Confirmed`

## 000434_01-009-...-move-to-unqualified-stage-1.jpg — Create Opportunity config panel

- ACTION NAME: `Move to Confirmed Stage`
- IN PIPELINE: `EyeFly Pre-Call Ops`
- IN PIPELINE STAGE: `Confirmed`
- Opportunity Name/Source/Value: (empty) · STATUS: `Select Status`

## 000436_01-010-...-add-tag-inbound-unconfirmed-1.jpg — Add Contact Tag config panel

- ACTION NAME: `Add Tag: Live-Confirmed`
- TAGS: `Live-Confirmed`

## 000440_01-011-...-move-to-unconfirmed-stage-1.jpg — Create Opportunity config panel

- ACTION NAME: `Move to Live-Confirmed Stage`
- IN PIPELINE: `EyeFly Pre-Call Ops`
- IN PIPELINE STAGE: `Live-Confirmed`
- Opportunity Name/Source/Value: (empty) · STATUS: `Select Status`

## 000444_01-012-...-add-tag-inbound-long-term-nurture-1.jpg — Add Contact Tag config panel

- ACTION NAME: `Add Tag: No Show`
- TAGS: `No Show`

## 000448_01-013-...-move-to-long-term-nurture-stage-1.jpg — Create Opportunity config panel

- ACTION NAME: `Move to No Show Stage`
- IN PIPELINE: `EyeFly Pre-Call Ops`
- IN PIPELINE STAGE: `No Show`
- Opportunity Name/Source/Value: (empty) · STATUS: `Select Status`
- Toggles: both **off** (verified in this frame)

## 000452_01-014-...-add-tag-inbound-long-term-nurture-1.jpg — Add Contact Tag config panel

- ACTION NAME: `Add Tag: Nurture`
- TAGS: `Nurture`

## 000456_01-015-...-move-to-long-term-nurture-stage-1.jpg — Create Opportunity config panel

- ACTION NAME: `Move to Nurture Stage`
- IN PIPELINE: `EyeFly Pre-Call Ops`
- IN PIPELINE STAGE: `Long Term Nurture`
- Opportunity Name/Source/Value: (empty) · STATUS: `Select Status`

## 000458_01-016-...-add-tag-inbound-qualified-1.jpg — Add Contact Tag config panel

(Filename says "qualified"; panel is the DND tag.)

- ACTION NAME: `Add Tag: DND`
- TAGS: `DND`

## 000462_01-017-...-move-to-qualified-stage-1.jpg — Create Opportunity config panel

- ACTION NAME: `Move to DND Stage`
- IN PIPELINE: `EyeFly Pre-Call Ops`
- IN PIPELINE STAGE: `DND (Unqualified, Spam, etc.)`
- Opportunity Name/Source/Value: (empty) · STATUS: `Select Status`

## 000464_01-018-...-add-tag-inbound-qualified-1.jpg — Create Opportunity config panel (duplicate)

Same panel as frame 017 (Move to DND Stage). Lag frame — no new information.

## 000466_01-019-...-move-to-qualified-stage-1.jpg — Create Opportunity config panel (duplicate)

Same panel as frame 017 (Move to DND Stage). Lag frame — no new information.

## 000468_01-020-...-add-tag-inbound-confirmed-1.jpg — other (transition)

Blank Automation > Workflows page mid-load. No workflow content.

## 000470_01-021-...-move-to-confirmed-stage-1.jpg — other (workflows list)

Automation > Workflows list, folder breadcrumb: Back / **(*SP) Active Automations**. Rows (Name — Status):

- •EyeFly Sales Pipeline Stage Triggers — Published
- •Portland SMS Lead Transfers — Published
- •Qualified → FB CAPI — Published
- CF | Booked Call V3 (Jan 2026) — Published
- CL | Booked Call V3 (Jan 2026) — Published
- CS | Booked Call V3 (Jan 2026) — Published
- Call Tracking – All Calls — Draft

Pagination: pages 1 2 3 4, 10 / page. (Enrollment counts / dates visible but too small to read reliably.)

## 000472_01-022-...-add-tag-inbound-confirmed-1.jpg — other (workflows list)

Same list as frame 021; cursor over Opportunities in left nav. Status-bar URL: `https://app.gohighlevel.com/v2/location/9sEack4dmHU906o6LsB4/opportunities/list`

## 000474_01-023-...-move-to-confirmed-stage-1.jpg — other (transition)

Blank Opportunities page mid-load. No content.

## 000476_01-024-...-add-tag-inbound-no-show-1.jpg — other (transition)

Opportunities page with loading spinner. No content.

## 000478_01-025-...-move-to-no-show-stage-1.jpg — other (pipeline board)

Opportunities > Pipelines view. Pipeline selector: `EyeFly Pre-Call Ops` — "13 opportunities". Stage columns (left to right, verbatim):

1. Lead In
2. Powerdialer (No Shows, Unresponsive)
3. Text / Responded
4. Qualified
5. Confirmed
6. Live-Confirmed
7. No Show
8. Long Term Nurture
9. DND (Unqualified, Spam, etc.)

Cards visible in Lead In (mostly "CS | ..." prefixed) and Qualified ("CS | Orgonit[?] restoration LLC | $51k[?]...", "Daniel Gans" — Business Name: Test). Card details too small/blurry to transcribe reliably.

## 000480_01-026-...-add-tag-inbound-no-show-1.jpg — other (pipeline board)

Same pipeline board as frame 025. No new information.

## Consolidated action list

Rebuild spec for workflow **"•EyeFly Sales Pipeline Stage Triggers"** (single workflow, publish when done). All pipeline references = pipeline `EyeFly Pre-Call Ops`.

### Triggers (14 — any one enrolls the contact; backed by frames 001 + 002)

Pipeline Stage Changed triggers — each with filters: In pipeline is `EyeFly Pre-Call Ops` AND Pipeline stage is:

1. `Powerdialer (No Shows, Unresponsive)` — trigger name "Moved to Powerdialer"
2. `Text / Responded` — "Moved to Text/Responded"
3. `Qualified` — "Moved to Qualified"
4. `Confirmed` — "Moved to Confirmed"
5. `Live-Confirmed` — "Moved to Live-Confirmed"
6. `No Show` — "Moved to No Show"
7. `Long Term Nurture` — "Moved to Long Term Nurture"
8. `DND (Unqualified, Spam, etc.)` — "Moved to DND"

Contact Tag (Tag Added) triggers — filter: Tag Added includes:

9. `text/responded` — trigger name "Tag Added: Text/Responded"
10. `qualified` — "Tag Added: Qualified"
11. `confirmed` — "Tag Added: Confirmed"
12. `no show` — "Tag Added: No Show"
13. `dnd` — "Tag Added: DND"
14. `powe...` [truncated — presumably `powerdialer`, exact value never fully readable] — "Tag Added: Powerdialer"

Note: no Contact Tag triggers were seen for Live-Confirmed or Nurture — the visible trigger row accounts for exactly the 14 above (frames 001+002 windows overlap and tile the full row).

### Step 1 — If/Else "Condition" (frame 001)

Scenario recipe: Build Your Own. 8 branches + None. Only Branch 1's segments were on screen; the other 7 were collapsed (their canvas labels are truncated). Verified + inferred pattern:

- Branch 1 (verified): Workflow Trigger Is `Moved to Powerdialer` OR Workflow Trigger Is `Tag Added: Powerdialer`
- Branch 2: Workflow Trigger Is "Moved to Te..." [truncated — Text/Responded branch]
- Branch 3: Workflow Trigger Is "Moved to Qu..." [truncated — Qualified branch]
- Branch 4: Workflow Trigger Is "Moved to Co..." [truncated — Confirmed branch]
- Branch 5: Workflow Trigger Is "Moved to Li..." [truncated — Live-Confirmed branch]
- Branch 6: Workflow Trigger Is "Moved to No..." [truncated — No Show branch]
- Branch 7: Workflow Trigger Is "Moved to Lo..." [truncated — Long Term Nurture branch]
- Branch 8: Workflow Trigger Is "Moved to DN..." [truncated — DND branch]
- None: When none of the conditions are met → END

### Branch actions (each branch: Add Contact Tag → Create Opportunity → END)

All Create Opportunity actions: pipeline `EyeFly Pre-Call Ops`; Opportunity Name/Source/Value empty; Status unset; both toggles (allow move to previous stage / allow duplicates) off (verified frames 003, 005, 013).

| # | Branch | Add Contact Tag (name / tag value) | Create Opportunity (name / stage) | Backed by frames |
|---|--------|-----------------------------------|-----------------------------------|------------------|
| 1 | Powerdialer | `Add Tag: Powerdialer` / `powerdialer` | `Move to PowerDialer Stage` / `Powerdialer (No Shows, Unresponsive)` | 002, 003, 004 |
| 2 | Text/Responded | `Add Tag: Text/Responded` / [tag value not captured — no panel frame] | `Move to Responded Stage` / `Text / Responded` | 001 (canvas), 005, 006 |
| 3 | Qualified | `Add Tag: Qualified` / [tag value not captured — no panel frame] | `Move to Qualified Stage` / `Qualified` | 001 (canvas), 007 |
| 4 | Confirmed | `Add Tag: Confirmed` / `Confirmed` | `Move to Confirmed Stage` / `Confirmed` | 008, 009 |
| 5 | Live-Confirmed | `Add Tag: Live-Confirmed` / `Live-Confirmed` | `Move to Live-Confirmed Stage` / `Live-Confirmed` | 010, 011 |
| 6 | No Show | `Add Tag: No Show` / `No Show` | `Move to No Show Stage` / `No Show` | 012, 013 |
| 7 | Nurture | `Add Tag: Nurture` / `Nurture` | `Move to Nurture Stage` / `Long Term Nurture` | 014, 015 |
| 8 | DND | `Add Tag: DND` / `DND` | `Move to DND Stage` / `DND (Unqualified, Spam, etc.)` | 016, 017, 018, 019 |

### Known gaps

- Branch 2 and 3 Add Tag panels never appeared on screen — exact tag values for the Text/Responded and Qualified tags are unconfirmed (canvas node names only).
- Trigger 14 ("Tag Added: Powe...") filter value truncated in every frame.
- Branches 2-8 If/Else segments were collapsed; only Branch 1's OR-pair (stage-move OR tag-added) was verified. The Branch 1 pattern likely repeats but only the truncated canvas labels ("Moved to X") are confirmed for the others.
- Tag-value chips are case-sensitive as shown: `powerdialer` (lowercase) vs `Confirmed`, `Live-Confirmed`, `No Show`, `Nurture`, `DND` (capitalized). Trigger filters showed lowercase values (`dnd`, `no show`, `confirmed`, `qualified`, `text/responded`); GHL tag matching is case-insensitive, but chips are transcribed as displayed.
CS | Booked Call V3 (Jan 2026) Draft — EyeFly own location

What it is supposed to do: Booked-call nurture: creates the opportunity, Slack + SMS notify Akash, logs to Google Sheets, then a long email/SMS reminder cadence up to the call.

Known defect / caveat: EyeFly own location, Crawl-Space niche template. Not a Level King automation; email/SMS bodies cut off at frame edge.

Verbatim atlas paste — source file wf02-cs-onboard-sales-call-live-chat.md (captured 2026-06-25 unless noted):

# Workflow 02 — "CS: Onboard Sales Call Live Chat"

> **Exact workflow name (from title bar):** `CS | Booked Call V3 (Jan 2026)`
> The atlas slug calls this "CS: Onboard Sales Call Live Chat", but every builder frame shows the title `CS | Booked Call V3 (Jan 2026)`. "CS" = Crawl Space (niche), per node labels and the "crawl space" tag.
> Builder: Standard Builder · Status: Draft (Draft/Publish toggle shown in Draft) · Tabs: Builder / Settings / Enrollment History / Execution Logs
> Source frames: 9 files prefixed `_02-` + 5 files prefixed `wf02-` (14 total).

---

## 000480_02-cs-onboard-sales-call-live-chat-parent.jpg — other (Opportunities pipeline board, not workflow canvas)

Opportunities view, pipeline selector: **EyeFly Pre-Call Ops** — "13 opportunities". Tabs: Opportunities / Pipelines / Bulk Actions. View: Open opportunities (+ List). Buttons: Advanced Filters (?), Sort (?), Import, + Add opportunity, Manage Fields.

Pipeline stages (left to right, exactly as shown on column headers):

1. Lead In — $110,000.00 [?]
2. Powerdialer (No Shows, Unresponsive) — $0.00
3. Text / Responded — $0.00
4. Qualified — $10,000.00 (3 opportunities [?])
5. Confirmed — $0.00
6. Live-Confirmed — $0.00
7. No Show — $0.00
8. Long Term Nurture — $0.00
9. DND (Unqualified, Spam, etc.) — $0.00

Visible opportunity cards (Lead In column) are mostly named `CS | <company> | <$ range>` (e.g. "CS | SanPro | $51k - $100k/m", "CS | Basement Systems Of New Yor...", "CS | Dara Builders, LLC | $251k - $5...") with Source values like "Crawl Space Encapsulation..." / "Crawl Space Jobs On Dem..." [?] and Value $10,000.00 [?] each. Qualified column: "CS | Orpsnik restoration LLC | $51k ..." [?] and a card "Daniel Garis / Business Name: Test / Source: Crawl Space Encapsulation... / Value $0.00" [?].

## 000480_02-cs-onboard-sales-call-live-chat-trigger.jpg — other (duplicate of parent frame)

Identical screen grab to the parent frame above (same pipeline board). No workflow trigger config visible in this frame; trigger config appears on the canvas in the frames below.

## 000634_02-001-cs-onboard-sales-call-live-chat-create-opportunity-1.jpg — workflow canvas + action config panel (Create Opportunity)

**Canvas (top of workflow):**

Triggers (2 configured + placeholder):

1. Trigger box 1: **Customer Booked Appoint...** (truncated) / subtitle "Booked Call in Crawl Space..." (truncated) — filter row: `In calendar is "Crawl Space Jobs On..."` [?] (truncated)
2. Trigger box 2: **Customer Booked Appoint...** (truncated) / subtitle "Booked Call in Crawl Space..." (truncated) — filter rows: `In calendar is "Crawl Space Encaps..."` [?] (truncated); `Contact Mode is any of "contact"` [?]
3. Dashed placeholder box: **+ Add New Trigger**

First actions: **Create Or Update Opportunity** (selected) → **Condition** → splits into **Branch** (`If "Tags" includes "booked call"`) and **None** (`When none of the conditions are met`). Below-branch nodes transcribed under wf02-06m30 (higher resolution).

**Config panel (verbatim):**

- Action type: **Create Opportunity** — "Creates or updates an Opportunity within the Pipeline that you select"
- Notice box: **Action Deprecation Notice** — "The Create/Update Action will soon be deprecated. Existing Workflows will be unaffected; however, the new Create Opportunity and Update Opportunity actions will be the actions to use moving forward."
- ACTION NAME: `Create Or Update Opportunity`
- IN PIPELINE: `EyeFly Pre-Call Ops`
- IN PIPELINE STAGE: `Lead In`
- OPPORTUNITY NAME: `CS | {{contact.business_name}} | {{contact.whats_your_current_month…}}` (merge tag truncated at field edge — appears to be a custom field starting `whats_your_current_month`; full tag not readable)
- OPPORTUNITY SOURCE: (empty) — helper text: "If the source is empty - the source will remain unchanged in case of update or it will be the contact's source in case of create" [?]
- OPPORTUNITY VALUE: `10000`
- STATUS: `Select Status` (none selected)
- + Add Field link
- Toggle OFF: ALLOW OPPORTUNITY TO MOVE TO ANY PREVIOUS STAGE IN PIPELINE
- Toggle OFF: ALLOW DUPLICATE OPPORTUNITIES
- Buttons: Delete / Cancel / Save action

## 000636_02-001-cs-onboard-sales-call-live-chat-create-opportunity-2.jpg — workflow canvas + action config panel (Create Opportunity)

Same screen as 000634; cursor moved near the Opportunity Source field. No new field values visible.

## 000638_02-001-cs-onboard-sales-call-live-chat-create-opportunity-3.jpg — workflow canvas + action config panel (Create Opportunity)

Same screen as 000634; cursor near the truncated Opportunity Name field. The remainder of the `whats_your_current_month…` merge tag is still not revealed. No new field values visible.

## 000658_02-002-cs-onboard-sales-call-live-chat-if-else-1.jpg — workflow canvas + action config panel (Create Opportunity panel still open)

Canvas identical to 000634; the **None** branch node is highlighted (hover). The right panel still shows the same **Create Opportunity** config as 000634 (all values identical) — the If/Else condition's own config panel is never opened in these frames. Branch logic readable from canvas only:

- Condition node → **Branch**: `If "Tags" includes "booked call"`
- Condition node → **None**: `When none of the conditions are met`

## 000664_02-003-cs-onboard-sales-call-live-chat-add-contact-tag-1.jpg — workflow canvas + action config panel (Add Contact Tag)

Canvas: the right-column (None branch) node **Add crawl space Tag** is selected.

**Config panel (verbatim):**

- Action type: **Add Contact Tag** — "Adds specified tags to the contact"
- ACTION NAME: `Add crawl space Tag`
- TAGS: `crawl space` (single tag chip)
- Buttons: Delete / Cancel / Save action

## 000714_02-004-cs-onboard-sales-call-live-chat-send-internal-notification-1.jpg — workflow canvas + action config panel (Slack Message)

Canvas: the right-column node **Send Slack Notification in #Booked-Call** is selected.

**Config panel (verbatim):**

- Action type: **Slack Message** — "Get notifications in Slack"
- Integration card: Slack — badges: (Premium) (Connected)
- CHOOSE AN ACCOUNT: `EyeFly Digital - akash`
- ACTION NAME: `Send Slack Notification In #Booked-Call`
- EVENT: `Send Private Channel message`
- CHOOSE A PRIVATE CHANNEL: `booked-call-concrete`
- MESSAGE (visible portion of scrollable field):

  ```
  New Booked Call [Crawl Space]

  *Meeting Info:*
  Meeting Name: {{appointment.title}}
  Booking Time: {{right_now.date}} @ {{right_now.time_ampm}}
  Event Start: {{appointment.only_start_date}} @
  {{appointment.only_start_time}} {{appointment.timezone}}
  ```

  One further line is cut off at the bottom of the field ("A…ed to: …" [unreadable]).
- Helper link below message: "For more formatting options check here" [?]
- Buttons: Delete / Cancel / Save action

## 000748_02-005-cs-onboard-sales-call-live-chat-google-sheet-1.jpg — workflow canvas + action config panel (Google Sheets)

Canvas scrolled down: right-column node **#5 Create Spreadsheet Row** [?] is selected. Left column visible tail: … #9 Create Spreadsheet Row [?] → Email 1: How to Confirm Appointment → SMS1: Intro. Right column visible tail: … Send SMS Notification to Akash → #5 Create Spreadsheet Row [?] → Email 1: How to Confirm Appointment.

**Config panel (verbatim):**

- Action type: **Google Sheets** — "Send data to Google Sheets"
- Integration card: Google Sheets — badges: (Premium) (Connected)
- CHOOSE AN ACCOUNT: `akash@eyeflydigital.com` [?]
- ACTION NAME: `Create Spreadsheet Row`
- ACTION: `Create Spreadsheet Row`
- DRIVE: `My Drive` — helper: "The Google Drive where your spreadsheet resides" [?]
- SPREADSHEET: `[EyeFly] Sales/Marketing Data`
- WORKSHEET: `1. Booked Appointments_Raw` — helper: "Sheet rows are set aside for referencing; it can't be changed after it's selected" [?]
- Button: Refetch Headers
- STARTING COLUMN: `Booking Date (A)`
- ENDING COLUMN: `Date Booked* (AH)` [?]
- Mapped fields:
  - BOOKING DATE (A): `{{right_now.date}} @ {{right_now.time_ampm}}`
  - FIRST NAME (B): `{{contact.first_name}}`
  - LAST NAME (C): `{{contact.last_name}}`
  - BUSINESS (D): `{{contact.business_name}}`
  - QUALIFIED* (E): `Qualified`
  - OUTCOME* (F): `Pending Call - Not Confirmed`
  - CONTACT LINK (G): `https://app.gohighlevel.com/v2/location/9sEsck4bhHU90tlo8Ld84J/…` [?] (location id low-confidence; remainder of URL [unreadable])
  - NOTES (H): `x`
  - LINK TO CALL RECORDING (I): `x`
- Buttons: Delete / Cancel / Save action

(Columns J–AH exist per the ending-column selector but are not visible in this frame.)

## wf02-05m17-title-exact-name.jpg — other (title bar close-up)

High-res crop of the workflow header. Title: **`CS | Booked Call V3 (Jan 2026)`** (with edit-pencil icon). Tabs: Builder (active) / Settings / Enrollment History / Execution Logs.

## wf02-06m30-branch-sequence.jpg — workflow canvas (high-res) + action config panel (Email 1, right edge cut off)

**Canvas — full branch structure (authoritative node transcription):**

- **Create Or Update Opportunity**
- **Condition**
  - **Branch** — `If "Tags" includes "booked call"`
  - **None** — `When none of the conditions are met`

Left column (Branch = "booked call" tag already present), in order:

1. `Add crawl space Tag`
2. `Update Stage: "New Call / Pending Confirmation" | Crawl Space`
3. `Send Slack Notification in #Booked-Call [Concrete→Rescheduled]` [?] (bracket separator could be `→` or `+`)
4. `Send SMS Notification to Akash [Concrete→Rescheduled]` [?]
5. `#9 Create Spreadsheet Row` [?] (number low-confidence)
6. `Email 1: How to Confirm Appointment`
7. `SMS1: Intro`
8. `Wait 6 secs`
(continues in wf02-06m45/06m50)

Right column (None), in order:

1. `Add crawl space Tag`
2. `Add Tag: Booked Call`
3. `Update Stage: "New Call / Pending Confirmation" | Crawl Space`
4. `Send Slack Notification in #Booked-Call`
5. `Send SMS Notification to Akash`
6. `#5 Create Spreadsheet Row` [?] (number low-confidence)
7. `Email 1: How to Confirm Appointment` (selected)
8. `SMS1: Intro`
(continues in wf02-06m45/06m50)

**Config panel — Email (Email 1). Panel is cut off at the frame's right edge; every value below is left-portion-only:**

- Action type: **Email** — "Send an em…" (cut)
- Action Name *: `Email 1: How to C…` (cut — full name per canvas: `Email 1: How to Confirm Appointment`)
- From Name: `{{user.name}}`
- From Email: `{{user.email}}`
- Cc / Bcc buttons (unused)
- Subject *: `[IMMEDIATE Act…` (cut) [?]
- Pre-Header (Preview…): `One final step is …` (cut)
- Create email: **Quick compose** (selected) / Select existing (radio, unselected)
- Message body (visible left fragments only, rest cut off at frame edge):
  - `Hey {{contact.first_…`
  - `My name is {{user…` / `just saw you booke…` / `email to explain the…`
  - Bold heading: `How To Secure Yo…`
  - `I've tentatively held…`
- "Write with AI" link
- Additional options: Track clicks — toggle OFF; UTM Tracking — toggle OFF; Add Tags — toggle OFF
- Test Emails * field (empty)
- Delete button

## wf02-06m45-mid-sequence.jpg — workflow canvas (high-res) + action config panel (SMS2, right edge cut off)

**Canvas — continuation:**

Left column (Branch), in order: `Add crawl space Tag` → `Update Stage: "New Call / Pending Confirmation" | Crawl Space` → `Send Slack Notification in #Booked-Call [Concrete→Rescheduled]` [?] → `Send SMS Notification to Akash [Concrete→Rescheduled]` [?] → `#9 Create Spreadsheet Row` [?] → `Email 1: How to Confirm Appointment` → `SMS1: Intro` → `Wait 6 secs` → `SMS2: Meeting Details` → `Wait 5 min` → `Email 2: Case Study`

Right column (None), in order: `Add crawl space Tag` → `Add Tag: Booked Call` → `Update Stage: "New Call / Pending Confirmation" | Crawl Space` → `Send Slack Notification in #Booked-Call` → `Send SMS Notification to Akash` → `#5 Create Spreadsheet Row` [?] → `Email 1: How to Confirm Appointment` → `SMS1: Intro` → `Wait 6 secs` → `SMS2: Meeting Details` (selected) → `Wait 6 secs`

**Config panel — SMS (SMS2). Cut off at right edge; left fragments only:**

- Action type: **SMS** — "Sends a text…" (cut)
- ACTION NAME: `SMS2: Meeting De…` (cut — full name per canvas: `SMS2: Meeting Details`)
- TEMPLATES: `Select Template` (none)
- MESSAGE (visible left fragments):
  - `Here are the detai…`
  - `{{appointment.titl…`
  - `{{appointment.or…` [?] (second character(s) of tag path unreadable)
  - `{{appointment.tim…`
  - `{{appointment.me…`
  - `(just click this link…` [?]
- Add attachment button; "Add files through…" field (cut)
- TEST PHONE NUMBER: (empty) — helper "*Please add country co…" (cut)
- Delete button

## wf02-06m50-reminder-sequence.jpg — workflow canvas (high-res) + action config panel (Email 2, right edge cut off)

**Canvas — reminder tail:**

Left column (Branch), in order: `SMS1: Intro` → `Wait 6 secs` → `SMS2: Meeting Details` → `Wait 5 min` → `Email 2: Case Study` → `Wait 30 min` → `Email 3: FAQ` → `Wait until 24 Hours Before Call` → `Email: 24 hr Reminder` → `Wait until 1.2 Hours Before Call` [?] (could be "1-2 Hours") → `Email: 1 hr Reminder`

Right column (None), in order: `Email 1: How to Confirm Appointment` → `SMS1: Intro` → `Wait 6 secs` → `SMS2: Meeting Details` → `Wait 6 secs` → `SMS3: Capacity Question` → `Wait 5 min` → `Email 2: Case Study` (selected) → `Wait 30 min` → `Email 3: FAQ` → `Wait until 24 Hours Before Call`

Note: SMS3 (Capacity Question) exists only in the right (None) column; the left column goes straight from SMS2 to Email 2.

**Config panel — Email (Email 2). Cut off at right edge; left fragments only:**

- Action Name *: `Email 2: Case St…` (cut — full name per canvas: `Email 2: Case Study`)
- From Name: `{{user.name}}`
- From Email: `{{user.email}}`
- Subject *: `EyeFly Case Stu…` (cut)
- Pre-Header: `See how Vesta F…` (cut) [?]
- Create email: **Quick compose** (selected) / Select existing
- Message body (visible left fragments):
  - `{{contact.first_nam…`
  - `We help contractors…` [?] / `simple system…`
  - Bold: `Here's how it work…`
  - `1. Hyper-Loca…` (bold) [?]
  - `2. Live Huma…` (bold) [?]
- Track clicks OFF / UTM Tracking OFF / Add Tags OFF; Test Emails empty; Delete button

## wf02-07m10-late-reminder-sequence.jpg — workflow canvas (high-res) + action config panel (Email 2 scrolled)

Canvas identical to wf02-06m50 (same nodes, same selection on `Email 2: Case Study`). Panel is the same Email 2 config with the message body scrolled further down; only two left-edge fragments visible: `ip codes and drive …` / `ately to qualify ever…` [?] (mid-sentence, remainder cut off). No other new values.

---

## Consolidated action list (rebuild order)

Workflow: **`CS | Booked Call V3 (Jan 2026)`** · Standard Builder · Draft

### Triggers (backing: 000634, 000714, trig zooms)

1. **Customer Booked Appointment** [?] — "Booked Call in Crawl Space…" (truncated) — filter: `In calendar is "Crawl Space Jobs On…"` [?]
2. **Customer Booked Appointment** [?] — "Booked Call in Crawl Space…" (truncated) — filters: `In calendar is "Crawl Space Encaps…"` [?] AND `Contact Mode is any of "contact"` [?]
3. (empty Add New Trigger placeholder — nothing to build)

### Shared spine (backing: 000634–000658, wf02-06m30)

1. **Create Opportunity** — name `Create Or Update Opportunity`; pipeline `EyeFly Pre-Call Ops`; stage `Lead In`; opp name `CS | {{contact.business_name}} | {{contact.whats_your_current_month…}}` (tag truncated); source empty; value `10000`; status unset; both allow-toggles OFF
2. **If/Else Condition**
   - Branch: `If "Tags" includes "booked call"` → path A
   - None: `When none of the conditions are met` → path B

### Path A — Branch: Tags includes "booked call" (rebook/reschedule path) (backing: wf02-06m30, 06m45, 06m50)

1. Add Contact Tag — `Add crawl space Tag` — tag `crawl space` (config: 000664, same action on both paths)
2. Update Opportunity Stage [?] — `Update Stage: "New Call / Pending Confirmation" | Crawl Space` (config panel never shown)
3. Slack Message — `Send Slack Notification in #Booked-Call [Concrete→Rescheduled]` [?] (config panel never shown for this instance; see Path B step 4 for the sibling's config)
4. SMS — `Send SMS Notification to Akash [Concrete→Rescheduled]` [?] (config not shown)
5. Google Sheets — `#9 Create Spreadsheet Row` [?] (config not shown for this instance; presumably mirrors Path B step 6)
6. Email — `Email 1: How to Confirm Appointment` — from `{{user.name}}` / `{{user.email}}`; subject `[IMMEDIATE Act…` (truncated); pre-header `One final step is …` (truncated); Quick compose; body starts `Hey {{contact.first_…` (right-cut, see wf02-06m30); Track clicks/UTM/Add Tags all OFF
7. SMS — `SMS1: Intro` (config not shown)
8. Wait — `Wait 6 secs`
9. SMS — `SMS2: Meeting Details` — no template; message `Here are the detai…` + `{{appointment.titl…}}`, `{{appointment.or…}}` [?], `{{appointment.tim…}}`, `{{appointment.me…}}`, `(just click this link…` (all right-cut, see wf02-06m45)
10. Wait — `Wait 5 min`
11. Email — `Email 2: Case Study` — subject `EyeFly Case Stu…` (truncated); pre-header `See how Vesta F…` [?]; body fragments `We help contractors…` / `Here's how it work…` / `1. Hyper-Loca…` / `2. Live Huma…` (right-cut, see wf02-06m50/07m10)
12. Wait — `Wait 30 min`
13. Email — `Email 3: FAQ` (config not shown)
14. Wait — `Wait until 24 Hours Before Call`
15. Email — `Email: 24 hr Reminder` (config not shown)
16. Wait — `Wait until 1.2 Hours Before Call` [?]
17. Email — `Email: 1 hr Reminder` (config not shown)
18. (sequence continues below the lowest captured frame — end of path not captured)

### Path B — None: no conditions met (fresh booking path) (backing: wf02-06m30, 06m45, 06m50; configs: 000664, 000714, 000748)

1. Add Contact Tag — `Add crawl space Tag` — tag `crawl space` (backing: 000664)
2. Add Contact Tag — `Add Tag: Booked Call` (config not shown; tag value presumably `booked call`, matching the Branch condition — not confirmed on screen)
3. Update Opportunity Stage [?] — `Update Stage: "New Call / Pending Confirmation" | Crawl Space` (config not shown)
4. Slack Message — `Send Slack Notification In #Booked-Call` — account `EyeFly Digital - akash`; event `Send Private Channel message`; channel `booked-call-concrete`; message: `New Booked Call [Crawl Space]` + `*Meeting Info:*` + `Meeting Name: {{appointment.title}}` + `Booking Time: {{right_now.date}} @ {{right_now.time_ampm}}` + `Event Start: {{appointment.only_start_date}} @ {{appointment.only_start_time}} {{appointment.timezone}}` + 1 more line [unreadable] (backing: 000714)
5. SMS — `Send SMS Notification to Akash` (config not shown)
6. Google Sheets — `#5 Create Spreadsheet Row` [?] — account `akash@eyeflydigital.com` [?]; action `Create Spreadsheet Row`; drive `My Drive`; spreadsheet `[EyeFly] Sales/Marketing Data`; worksheet `1. Booked Appointments_Raw`; columns `Booking Date (A)` → `Date Booked* (AH)` [?]; A=`{{right_now.date}} @ {{right_now.time_ampm}}`, B=`{{contact.first_name}}`, C=`{{contact.last_name}}`, D=`{{contact.business_name}}`, E=`Qualified`, F=`Pending Call - Not Confirmed`, G=`https://app.gohighlevel.com/v2/location/9sEsck4bhHU90tlo8Ld84J/…` [?], H=`x`, I=`x` (backing: 000748)
7. Email — `Email 1: How to Confirm Appointment` (same config as Path A step 6; backing: wf02-06m30)
8. SMS — `SMS1: Intro` (config not shown)
9. Wait — `Wait 6 secs`
10. SMS — `SMS2: Meeting Details` (config: wf02-06m45)
11. Wait — `Wait 6 secs`
12. SMS — `SMS3: Capacity Question` (config not shown; exists only on this path)
13. Wait — `Wait 5 min`
14. Email — `Email 2: Case Study` (config: wf02-06m50/07m10)
15. Wait — `Wait 30 min`
16. Email — `Email 3: FAQ` (config not shown)
17. Wait — `Wait until 24 Hours Before Call`
18. (sequence continues below the lowest captured frame — likely mirrors Path A's 24hr/1hr reminders, but not captured)

### Rebuild gaps / unreadables

- Both trigger filter values are truncated on canvas; exact calendar names not fully readable.
- Opportunity Name merge tag truncated: `{{contact.whats_your_current_month…}}` — full custom-field key not visible in any frame.
- All four `wf02-` config panels (Email 1, SMS2, Email 2) are cut off at the frame's right edge — subjects, pre-headers, and bodies are left-fragments only; full copy not recoverable from these frames.
- Configs never opened on screen: Add Tag: Booked Call, both Update Stage actions, both `Send SMS Notification to Akash` actions, the Branch-side Slack/Sheets actions, SMS1, SMS3, Email 3, 24hr/1hr reminder emails, and all Wait steps (labels only).
- Bracket suffix `[Concrete→Rescheduled]` and the spreadsheet-row numbers `#9`/`#5` are low-confidence reads.
- Both paths continue below the lowest captured canvas frame; the workflow's ending is not captured.
2. Standard: Unsubscribe Draft

What it is supposed to do: Unsubscribe / DND handler: link-click, DND, dnd-tag, or STOP reply -> set contact DND on the right channel, remove from workflows.

Known defect / caveat: Atlas filename ('Standard Qualified Lead Automation') does not match the on-screen title. Create-Opportunity node carries a red error badge (no pipeline).

Verbatim atlas paste — source file wf03-standard-qualified-lead-automation.md (captured 2026-06-25 unless noted):

# Workflow 03 — "Standard - Qualified Lead Automation" (on-screen: "2. Standard: Unsubscribe")

> **Naming discrepancy:** every `_03-*` frame's on-screen workflow header reads **"2. Standard: Unsubscribe"** — not "Standard - Qualified Lead Automation". The filenames appear mislabeled relative to the video content. Everything below is transcribed verbatim from what is actually on screen.
>
> Workflow state visible in all canvas frames: builder = **Standard Builder**, tabs Builder / Settings / Enrollment History / Execution Logs, status **Draft** (Publish toggle off), Save button present. The Create Or Update Opportunity node carries a red error badge (unconfigured pipeline).

## Frame 000960_03-standard-qualified-lead-automation-parent.jpg

- **What it shows:** GHL Automation list page still loading (spinner). Left nav visible (Launchpad, Dashboard, Conversations, Calendars, Contacts, Opportunities, Payments, AI Agents, Marketing, Automation, Sites, Memberships, Media Storage, Reputation, Reporting, App Marketplace). No workflow content.
- Byte-identical to `000960_04-*` files (28,713 bytes) — same grab reused across prefixes.

## Frame 000992_03-001-standard-qualified-lead-automation-trigger-lead-created-1.jpg

- **What it shows:** full workflow canvas, no config panel.
- **Canvas nodes (in order):**
  - Trigger 1 — **Trigger Link Clicked** / name "Email Unsubscribe" / `Trigger link is "Unsubscribe"`
  - Trigger 2 — **Contact DND** / name "Contact DND" / `DND direction is "Outbound"` / `DND Tag is Enabled DND for all cha…` (truncated on card)
  - Trigger 3 — **Contact Tag** / name `Contact Tag "dnd"` / `Tag Added includes "dnd"`
  - Trigger 4 — **Customer Replied** / name "Replied Stop SMS" / `Reply channel is "SMS"` / `Contains phrase contains any of "st…` (truncated on card)
  - **+ Add New Trigger** (empty placeholder)
  - **Condition** (If/Else node)
    - Branch **Email Unsubscribe** — `If "Workflow Trigger" is "Email Unsub…"` → **Set contact DND (Email)** → **Go To** (dashed jump into Create Or Update Opportunity)
    - Branch **Replied Stop SMS** — `If "Workflow Trigger" is "Replied Sto…"` → **Set contact DND (SMS)** → **Go To** (dashed jump into Create Or Update Opportunity)
    - Branch **DND** — `If "Workflow Trigger" is "Contact DND…"` → **Set contact DND (All Channels)** → **Remove from all workflows** → **Create Or Update Opportunity** (red error badge) → **END**
    - Branch **None** — `When none of the conditions are met` → **END**

## Frame 000996_03-002-standard-qualified-lead-automation-customer-crm-1.jpg

- **What it shows:** same canvas + right-hand **trigger config panel** (Trigger 1 selected).
- **Panel transcription (verbatim):**
  - Header: **Trigger Link Clicked** — "Runs when the tracked link in your message is clicked."
  - CHOOSE A WORKFLOW TRIGGER: `Trigger Link Clicked`
  - WORKFLOW TRIGGER NAME: `Email Unsubscribe`
  - FILTERS:
    - Filter 1: `Trigger link` → value `Unsubscribe`
  - Link: "+ Add filters"
  - Buttons: Delete / Cancel / **Save Trigger**

## Frame 001000_03-003-standard-qualified-lead-automation-customer-tag-1.jpg

- **What it shows:** same canvas + **trigger config panel** (Trigger 2, Contact DND, selected).
- **Panel transcription (verbatim):**
  - Header: **Contact DND** — "Triggers when Do-Not-Disturb is enabled or removed."
  - CHOOSE A WORKFLOW TRIGGER: `Contact DND`
  - WORKFLOW TRIGGER NAME: `Contact DND`
  - FILTERS:
    - Filter 1: `DND direction is` → `Outbound`
    - Filter 2: `DND flag is` → `Enabled DND for all channels`
  - Link: "+ Add filters"
  - Buttons: Delete / Cancel / **Save Trigger**

## Frame 001004_03-004-standard-qualified-lead-automation-customer-register-1.jpg

- **What it shows:** duplicate of frame 001000 — same Contact DND trigger panel, cursor moved. No new information.

## Frame 001020_03-005-standard-qualified-lead-automation-if-else-email-unsubscribe-1.jpg

- **What it shows:** same canvas + **trigger config panel** (Trigger 4, Customer Replied, selected).
- **Panel transcription (verbatim):**
  - Header: **Customer Replied** — "Runs when a customer replies to the selected type of communication."
  - CHOOSE A WORKFLOW TRIGGER: `Customer Replied`
  - WORKFLOW TRIGGER NAME: `Replied Stop SMS`
  - FILTERS:
    - Filter 1: `Reply channel` → `SMS`
    - Filter 2: `Contains phrase` → chip `stop` [?] (chip too small to resolve; canvas card shows `contains any of "st…"`)
  - Link: "+ Add filters"
  - Buttons: Delete / Cancel / **Save Trigger**

## Frame 001068_03-006-standard-qualified-lead-automation-email-contact-1.jpg

- **What it shows:** same canvas + **action config panel** for the Condition node (If/Else).
- **Panel transcription (verbatim):**
  - Header: **If / Else** — "Fork the Contact journey through this workflow based on conditions."
  - ACTION NAME: `Condition`
  - SCENARIO RECIPE ("Select from one of the pre-built condition templates"): `Build Your Own`
  - BRANCHES:
    - Branch 1 name: `Email Unsubscribe`
      - Segment: `Workflow Trigger` | `is` | `Email Unsubscribe` — AND (+) — "+ Add Segment"
    - Branch 2 name: `Replied Stop SMS`
      - Segment: `Workflow Trigger` | `is` | `Replied Stop SMS` — AND (+) — "+ Add Segment"
    - Branch 3 name: `DND`
      - Segment 1: `Workflow Trigger` | `is` | `Contact DND`
      - `OR`
      - Segment 2: `Workflow Trigger` | `is` | [cut off at bottom of panel — value not visible; canvas branch card truncates at `"Contact DND…"`]
  - Buttons: Delete / Cancel / **Save action**

## Frame 001084_03-007-standard-qualified-lead-automation-create-opportunity-1.jpg

- **What it shows:** same canvas + **action config panel** for "Set contact DND (All Channels)" (DND branch action).
- **Panel transcription (verbatim):**
  - Header: **Dnd Contact** — "Activate do-not-disturb for the contact."
  - ACTION NAME: `Set contact DND (All Channels)`
  - DND DIRECTION: `Outbound`
  - DND: `Enable DND for all channels`
  - Buttons: Delete / Cancel / **Save action**

## Frame 001086_03-007-standard-qualified-lead-automation-create-opportunity-2.jpg

- **What it shows:** duplicate of frame 001084 — same Dnd Contact panel, cursor now hovering the Create Or Update Opportunity node. No new panel information.

## Frame 001088_03-007-standard-qualified-lead-automation-create-opportunity-3.jpg

- **What it shows:** same canvas + **action config panel** for the Create Or Update Opportunity node.
- **Panel transcription (verbatim):**
  - Header: **Create Opportunity** — "Creates or updates an Opportunity within the Pipeline that you select."
  - Notice box: **Action Deprecation Notice** — "The **Create/Update Action** will soon be deprecated. Existing Workflows will be unaffected; moreover, the new **Create Opportunity** and **Update Opportunity** actions will be the actions to use moving forward."
  - ACTION NAME: `Create Or Update Opportunity`
  - IN PIPELINE: `Select Pipeline` (empty — source of the red error badge on canvas)
  - IN PIPELINE STAGE: `Select Pipeline Stage` (empty)
  - OPPORTUNITY NAME: (empty, merge-tag picker icon)
  - OPPORTUNITY SOURCE: (empty, merge-tag picker icon; helper text below unreadable)
  - OPPORTUNITY VALUE: (empty, merge-tag picker icon)
  - STATUS: `lost` [?]
  - LOST REASON: `Select Lost Reason` (empty)
  - Link: "+ Add field" [?]
  - Toggle ON: `ALLOW OPPORTUNITY TO MOVE TO ANY PREVIOUS STAGE IN PIPELINE`
  - Toggle OFF: `ALLOW DUPLICATE OPPORTUNITIES`
  - Buttons: Delete / Cancel / **Save action**

## Consolidated action list

Rebuild spec for the on-screen workflow **"2. Standard: Unsubscribe"** (Standard Builder, Draft):

**Triggers (any of the four enrolls the contact):**
1. **Trigger Link Clicked** — name `Email Unsubscribe`; filter: Trigger link = `Unsubscribe` (frames 000992, 000996)
2. **Contact DND** — name `Contact DND`; filters: DND direction is `Outbound`; DND flag is `Enabled DND for all channels` (frames 000992, 001000, 001004)
3. **Contact Tag** — name `Contact Tag "dnd"`; filter: Tag Added includes `dnd` (frame 000992 canvas card only; panel never opened on video)
4. **Customer Replied** — name `Replied Stop SMS`; filters: Reply channel = `SMS`; Contains phrase = `stop` [?] (frames 000992, 001020)

**Actions:**
5. **If / Else** — name `Condition`, recipe Build Your Own, 3 branches + None (frames 000992, 001068):
   - `Email Unsubscribe`: Workflow Trigger is `Email Unsubscribe`
   - `Replied Stop SMS`: Workflow Trigger is `Replied Stop SMS`
   - `DND`: Workflow Trigger is `Contact DND` OR Workflow Trigger is [second value not visible]
   - `None`: → END
6. Branch Email Unsubscribe → **Dnd Contact** — name `Set contact DND (Email)`; settings not opened on video, canvas label only (frame 000992)
7. Branch Email Unsubscribe → **Go To** → jumps to action 12 (frame 000992)
8. Branch Replied Stop SMS → **Dnd Contact** — name `Set contact DND (SMS)`; settings not opened on video, canvas label only (frame 000992)
9. Branch Replied Stop SMS → **Go To** → jumps to action 12 (frame 000992)
10. Branch DND → **Dnd Contact** — name `Set contact DND (All Channels)`; DND Direction `Outbound`; DND `Enable DND for all channels` (frames 001084, 001086)
11. Branch DND → **Remove From All Workflows** — name `Remove from all workflows` (frame 000992 canvas label only)
12. **Create Opportunity (Create/Update, deprecated action)** — name `Create Or Update Opportunity`; Pipeline + Stage unselected (error badge); Status `lost` [?]; Lost Reason unselected; allow-move-to-previous-stage ON; allow-duplicates OFF (frame 001088)
13. **END**
*1 Qualified Convo Tracking Draft / paste STALE

What it is supposed to do: First inbound FB message -> tag 'fb lead', GPT-filter accidental clicks, and if a qualified inquiry: log to a sheet, save first-message + attribution to custom fields, add 'qualified' tag.

Known defect / caveat: Template capture; several action panels never opened; superseded by the '#1 Qualified Convo Tracking' variant.

Verbatim atlas paste — source file wf04-qualified-lead-tracking.md (captured 2026-06-25 unless noted):

# Workflow 04 — "Qualified Lead Tracking" (on-screen: "*1. Qualified Convo Tracking")

> **Naming discrepancy:** every `_04-*` frame's on-screen workflow header reads **"*1. Qualified Convo Tracking"**. Filenames say "Qualified Lead Tracking" — close but not verbatim. Everything below is transcribed from what is actually on screen.
>
> Workflow state visible in all canvas frames: builder = **Standard Builder**, tabs Builder / Settings / Enrollment History / Execution Logs, status **Draft** (Publish toggle off).

## Frame 000960_04-qualified-lead-tracking-parent.jpg

- **What it shows:** GHL Automation list page still loading (spinner); left nav only. Byte-identical (28,713 bytes) to `000960_03-*-parent.jpg` and `000960_04-*-trigger.jpg` — same grab reused. No workflow content.

## Frame 000960_04-qualified-lead-tracking-trigger.jpg

- **What it shows:** byte-identical duplicate of the frame above. No workflow content.

## Frame 001144_04-001-qualified-lead-tracking-add-lead-tag-1.jpg

- **What it shows:** full workflow canvas + right-hand **trigger config panel**.
- **Canvas nodes (in order):**
  - Trigger — **Customer Replied** / name `0. First Time Message (Doe…` (truncated on card) / `Doesn't Have Tag "fb lead"`
  - **+ Add New Trigger** (empty placeholder)
  - **1. Add "Fb Lead" Tag** (Add Tag action)
  - **#1.1: Review First Message to Filter Out Accidental Clicks, etc** (GPT/AI action icon)
  - **2. If Message = Qualified Inquiry** (If/Else node)
    - Branch **Branch** — `If "#1.1: Review First Message to Fi…"` (truncated) → continues below
    - Branch **None** — `When none of the conditions are met` → **END**
  - **#1 Update Qualified Convo_Raw Tracking** [?] (blue spreadsheet-style icon — Google Sheets action [?]; middle word low-confidence, possibly "Convo Rate Tracking")
  - **Save First Message + Attribution Data to Custom Fields** (Update Contact Field action)
  - **Add "Qualified" Tag** (Add Tag action)
  - → **END** (visible in frame 001220)
- **Panel transcription (verbatim):**
  - Header: **Customer Replied** — "Runs when a customer replies to the selected type of communication."
  - CHOOSE A WORKFLOW TRIGGER: `Customer Replied`
  - WORKFLOW TRIGGER NAME: `0. First Time Message (Doesn't Have "Fb Lead" Tag)`
  - FILTERS:
    - Filter 1: `Doesn't Have Tag` → chip `fb lead`
  - Link: "+ Add filters"
  - Buttons: Delete / Cancel / **Save Trigger**

## Frame 001152_04-002-qualified-lead-tracking-gpt-personality-update-1.jpg

- **What it shows:** duplicate of frame 001144 — same canvas and same Customer Replied trigger panel, cursor moved. No new information.

## Frame 001154_04-002-qualified-lead-tracking-gpt-personality-update-2.jpg

- **What it shows:** duplicate of frame 001144 — same trigger panel. No new information.

## Frame 001156_04-002-qualified-lead-tracking-gpt-personality-update-3.jpg

- **What it shows:** duplicate of frame 001144 — same trigger panel. No new information.

## Frame 001184_04-003-qualified-lead-tracking-if-else-gpt-personality-1.jpg

- **What it shows:** same canvas (node `#1.1: Review First Message…` selected) + **action config panel** for the GPT action.
- **Panel transcription (verbatim):**
  - Header: **GPT Powered By OpenAI** — "Send a prompt to GPT and get a response"
  - Notice box: "**This is a premium action** — Using this action will incur additional charges per execution"
  - Action Name *: `2. Review First Message to Filter Out Accidental Clicks, etc.` [?] (leading token low-confidence — panel reads `2.` but the canvas card reads `#1.1:`)
  - Model * (badge "New"): `GPT 5 Nano` [?]
  - Action Type *: `Custom`
  - Enable Chat History (badge "Beta"): toggle **OFF**
  - Prompt * (textarea scrolled — only the tail is visible; beginning of prompt not on screen):
    - `…anything, are just browsing, or clicked by accident - They are spam, automated messages, or crypto/advertising solicitations - They are offering to network, partner, or refer without a specific project of their own. Return only POSITIVE or NEGATIVE.`
  - Buttons: Delete / Cancel / **Save action**

## Frame 001220_04-005-qualified-lead-tracking-add-qualified-tag-1.jpg

- **What it shows:** same canvas (node "Save First Message + Attribution Data to Custom Fields" selected; END node visible after Add "Qualified" Tag) + **action config panel** for Update Contact Field.
- **Panel transcription (verbatim):**
  - Header: **Update Contact Field** — "Update a field in the contact record"
  - ACTION NAME: `Save First Message + Attribution Data to Custom Fields`
  - ACTION TYPE: `Update field data`
  - FIELDS (field → value):
    - `First Message` → `{{message.body}}`
    - `UTM Source` → `{{contact.attributionSource.utmSource}}`
    - `UTM Campaign` → `{{contact.attributionSource.utmCampaign}}`
    - `UTM Medium` → `{{contact.attributionSource.utmMedium}}`
    - `UTM Content` → `{{contact.attributionSource.utmContent}}`
    - `FBCID` → `{{contact.attributionSource.fbclid}}`
    - `Video URL` → `{{ contact.attributionSource.url }}` [?] (last token blurry — "url" most likely)
  - Link: "+ Add field"
  - Buttons: Delete / Cancel / **Save action**

## Consolidated action list

Rebuild spec for the on-screen workflow **"*1. Qualified Convo Tracking"** (Standard Builder, Draft):

**Trigger:**
1. **Customer Replied** — name `0. First Time Message (Doesn't Have "Fb Lead" Tag)`; filter: Doesn't Have Tag = `fb lead` (frames 001144, 001152–001156)

**Actions:**
2. **Add Contact Tag** — name `1. Add "Fb Lead" Tag`; tag `fb lead` implied by name — panel never opened on video (frame 001144 canvas label only)
3. **GPT Powered By OpenAI** (premium action) — name `2. Review First Message to Filter Out Accidental Clicks, etc.` [?] (canvas shows `#1.1:` prefix); Model `GPT 5 Nano` [?]; Action Type `Custom`; Chat History OFF; prompt classifies the first inbound message and ends with "Return only POSITIVE or NEGATIVE" — spam/accidental-click/networking-solicitation filters; full prompt start not captured on any frame (frame 001184)
4. **If / Else** — name `2. If Message = Qualified Inquiry`; Branch condition references the GPT action output: `If "#1.1: Review First Message to Fi…"` [truncated — presumably = POSITIVE]; panel never opened on video (frames 001144 canvas labels only)
   - **None** branch → **END**
5. Qualified branch → **Google Sheets action** [?] — name `#1 Update Qualified Convo_Raw Tracking` [?] (possibly "Convo Rate Tracking"); panel never opened on video (frames 001144/001220 canvas label only)
6. **Update Contact Field** — name `Save First Message + Attribution Data to Custom Fields`; Action Type `Update field data`; fields: First Message = `{{message.body}}`, UTM Source = `{{contact.attributionSource.utmSource}}`, UTM Campaign = `{{contact.attributionSource.utmCampaign}}`, UTM Medium = `{{contact.attributionSource.utmMedium}}`, UTM Content = `{{contact.attributionSource.utmContent}}`, FBCID = `{{contact.attributionSource.fbclid}}`, Video URL = `{{contact.attributionSource.url}}` [?] (frame 001220)
7. **Add Contact Tag** — name `Add "Qualified" Tag`; tag `qualified` implied by name — panel never opened on video (frames 001144/001220 canvas label only)
8. **END**
Qualified Tag → Lead Submitted Event Published / paste STALE

What it is supposed to do: On 'qualified' tag: fire the CAPI relay webhook (n8n capi-relay) + Meta Conversion API funnel event + create/update opportunity.

Known defect / caveat: Webhook shared-secret header and the CAPI token are only partially readable; captured on EyeFly template location.

Verbatim atlas paste — source file wf05-qualified-tag-add-unqualified-users.md (captured 2026-06-25 unless noted):

# Workflow 05 — "Qualified Tag - Add Unqualified Users" (atlas label)

> **Naming discrepancy:** every canvas frame in this set shows the GHL title bar as **"Qualified Tag → Lead Submitted Event"** — not "Qualified Tag - Add Unqualified Users". The atlas filename label does not match the workflow name visible in the UI. Transcriptions below are what the screen actually shows.
>
> **Duplicate-frame note:** `000960_05-...-parent.jpg`, `000960_05-...-trigger.jpg`, `000960_06-...-parent.jpg`, and `000960_06-...-trigger.jpg` are byte-identical (same MD5) — one frame reused under four names. It shows only the Automation list page mid-load and contains no workflow content.

## Frame: 000960_05-qualified-tag-add-unqualified-users-parent.jpg (= 000960_05-...-trigger.jpg, identical file)
- **Title bar:** page header "Automation" (sub-account switcher top-left, name small/low-res: "EyeFly Digital" [?])
- **Shows:** Automation area, Workflows tab, list still loading (spinner in center, no rows rendered)
- **Tabs visible:** Workflows (active) · Overview (NEW badge) · Campaign · Triggers · Global Workflow Settings
- No canvas, no trigger, no actions visible.

## Frame: 001252_05-001-qualified-tag-add-unqualified-users-add-tag-1.jpg
- **Title bar:** `Qualified Tag → Lead Submitted Event` — tabs: Builder (active) · Settings · Enrollment History · Execution Logs; right side: Test Workflow · Draft/Publish toggle · Saved (greyed)
- **Shows:** canvas + action config panel (Webhook action selected)
- **Canvas nodes in order:**
  1. Trigger: **Contact Tag** — filter line: `Tag Added Includes "qualified"` (Stats link on node)
  2. (dashed placeholder: **Add New Trigger**)
  3. **CAPI** (webhook icon; selected)
  4. **Meta Conversion API**
  5. **Create Or Update Opportunity**
  6. **END**
- **Config panel — Webhook** ("Fire a webhook containing the contact's details" [?]):
  - ACTION NAME: `CAPI`
  - METHOD: `POST`
  - URL: `https://eyefly.app.n8n.cloud/webhook/capi-relay`
  - CUSTOM DATA (key → value): `contact_id` → `` `{{contact.id}}` ``
    - link: "Add another item"
  - HEADERS (key → value): `x-ghl-relay-se…` [key truncated by field width] → long secret string, [unreadable] (begins `pTTWL7z` [?] — do not trust beyond that)
    - link: "Add another item"
  - Footer buttons: Delete · Cancel · Save action

## Frame: 001292_05-003-qualified-tag-add-unqualified-users-create-opportunity-1.jpg
- **Title bar:** `Qualified Tag → Lead Submitted Event`
- **Shows:** canvas (same 4 nodes + END as above; Meta Conversion API node selected) + action config panel
- **Config panel — Meta Conversion API** ("The Conversions API allows advertisers to send web events from their servers directly to Meta"):
  - ACTION NAME: `Meta Conversion API`
  - SELECT THE CONNECTION TYPE: ◉ INTEGRATION (selected) · ○ AD MANAGER
  - EVENT TYPE: `Funnel Event`
  - ACCESS TOKEN: `` `{{custom_values.capi_access_token}}` ``
  - DATASET ID: `` `{{custom_values.pixel_id}}` ``
  - FACEBOOK EVENT NAME: `Lead`
  - VALUE: (empty)
  - CURRENCY: `USD`
  - TEST CODE: (empty) — helper: "Please make sure to remove this code and save again, once you are done with the testing." [?]
  - CUSTOM MAPPING: toggle **OFF** — helper: "Enable this toggle to map custom values for Meta Ads conversion parameters (FBCLID for funnel events, Facebook Lead ID for lead events and IGSID for Instagram DM events). Custom fields take priority; otherwise, default system values will be used as a fallback." [?]
  - Footer buttons: Delete · Cancel · Save action

## Frame: 001294_05-003-qualified-tag-add-unqualified-users-create-opportunity-2.jpg
- **Title bar:** `Qualified Tag → Lead Submitted Event`
- **Shows:** canvas (Create Or Update Opportunity node selected) + config panel still loading
- **Config panel — Create Opportunity** ("Creates or updates an Opportunity within the Pipeline that you select") — body blank/spinner; no field values rendered in this frame.

## Frame: 001296_05-003-qualified-tag-add-unqualified-users-create-opportunity-3.jpg
- **Title bar:** `Qualified Tag → Lead Submitted Event`
- **Shows:** canvas (Create Or Update Opportunity selected) + fully loaded config panel
- **Config panel — Create Opportunity**:
  - Banner — **Action Deprecation Notice**: "The Create/Update Action will soon be deprecated. Existing Workflows will be unaffected; however, the new **Create Opportunity** and **Update Opportunity** actions will be the actions to use moving forward." [?]
  - ACTION NAME: `Create Or Update Opportunity`
  - IN PIPELINE: `Conversation Outcomes`
  - IN PIPELINE STAGE: `Pending`
  - OPPORTUNITY NAME: (empty)
  - OPPORTUNITY SOURCE: (empty) — helper text below, [unreadable]
  - OPPORTUNITY VALUE: (empty)
  - STATUS: `Select Status` (nothing chosen)
  - link: "+ Add field" [?]
  - Toggle **OFF**: ALLOW OPPORTUNITY TO MOVE TO ANY PREVIOUS STAGE IN PIPELINE
  - Toggle **OFF**: ALLOW DUPLICATE OPPORTUNITIES
  - Footer buttons: Delete · Cancel · Save action

## Consolidated action list — "Qualified Tag → Lead Submitted Event"
**Trigger:** Contact Tag — Tag Added Includes `"qualified"`

1. **Webhook** — name `CAPI` · POST `https://eyefly.app.n8n.cloud/webhook/capi-relay` · custom data `contact_id` = `` `{{contact.id}}` `` · header `x-ghl-relay-se…`[truncated] = [unreadable secret]
2. **Meta Conversion API** — connection type INTEGRATION · event type Funnel Event · access token `` `{{custom_values.capi_access_token}}` `` · dataset id `` `{{custom_values.pixel_id}}` `` · Facebook event name Lead · value (empty) · currency USD · test code (empty) · custom mapping OFF
3. **Create Or Update Opportunity** — pipeline Conversation Outcomes · stage Pending · name/source/value empty · status not set · both allow-toggles OFF
4. END

**Not seen in any frame:** an "Add Tag" action (despite the `-add-tag-1` filename — that frame shows the CAPI webhook panel) and any "unqualified" tagging logic. The atlas label for this workflow does not match its on-screen content.
#4 Manual Transfer Tracking / #2 Full Convo Logging Publish toggle ON / paste STALE

What it is supposed to do: Two different workflows captured under one atlas label: (a) the manual-transfer form path, (b) 'Full Convo Logging' which stamps replies and saves the running full conversation.

Known defect / caveat: Atlas label ('Qualified Lead Tracking 12:00-16:00 variant') matches neither on-screen title. No true 'Qualified Lead Tracking' workflow appears in these frames.

Verbatim atlas paste — source file wf08-qualified-lead-tracking-variant.md (captured 2026-06-25 unless noted):

# Workflow 08 — "Qualified Lead Tracking (12:00-16:00 variant)" (atlas label)

> **IMPORTANT — filename/content mismatch.** None of the `_08-` frames actually show a workflow titled "Qualified Lead Tracking". The two `001440_08-*` frames show the **"#4: Manual Transfer Tracking"** builder, and frames `001794`–`001826` show the **"#2: Full Convo Logging"** builder. Everything below is transcribed from what is actually on screen. If a build spec for a "Qualified Lead Tracking (12:00-16:00 variant)" workflow is needed, it is not present in these frames.

All frames: GHL workflow builder, top-right state `Test Workflow · Draft [toggle ON] Publish`, builder mode `Standard Builder`.

## Frame 001440_08-qualified-lead-tracking-12-00-16-00-variant-parent.jpg

- Title bar: `#4: Manual Transfer Tracking`
- Shows: canvas + action config panel (Add Contact Tag)
- Canvas nodes in order:
  1. Trigger card: `Form Submitted` — sub-line: `Form is is [?] "*EyeFly Lead Tran...` [truncated]
  2. `+ Add New Trigger` (empty placeholder slot)
  3. `Add "Transferred" Tag` (selected/highlighted)
  4. `#1 Update Leads Transferred_Raw` [?]
  5. `Deliver Lead to Client via Slack / Webhook`
  6. `Internal Notification`
  7. `END`
- Config panel (verbatim):
  - Action: **Add Contact Tag** — "Adds specified tags to the contact"
  - ACTION NAME: `Add "Transferred" Tag`
  - TAGS: `transferred` (single tag chip)
  - Buttons: Delete / Cancel / Save action

## Frame 001440_08-qualified-lead-tracking-12-00-16-00-variant-trigger.jpg

- Duplicate of the parent frame above (identical content): title `#4: Manual Transfer Tracking`, same canvas, same Add Contact Tag panel with tag `transferred`.

## Frame 001794_08-001-qualified-lead-tracking-12-00-16-00-variant-add-contact-tag-1.jpg

- Title bar: `#2: Full Convo Logging`
- Shows: canvas + trigger config panel
- Canvas nodes in order:
  1. Trigger card: `Customer Replied` — name line `Customer Reply via Facebo...` [truncated]; filter lines: `Reply channel is "Facebook Messen...` [truncated], `Doesn't Have Tag "stop bot"`
  2. `+ Add New Trigger` (empty placeholder slot)
  3. `Condition` (If/Else)
  4. Branch split:
     - `Branch` — `If "Tags" includes "ready for transfer"` → `END`
     - `None` — `When none of the conditions are met` → continues:
  5. `Update Full Convo`
  6. `Update ConvoLog`
  7. `END`
- Trigger config panel (verbatim):
  - Trigger: **Customer Replied** — "Runs when a customer replies to the selected type of communication"
  - CHOOSE A WORKFLOW TRIGGER: `Customer Replied`
  - WORKFLOW TRIGGER NAME: `Customer Reply via Facebook Message (Not Stop Bot)`
  - FILTERS:
    1. `Reply channel` = `Facebook Messenger`
    2. `Doesn't Have Tag` = `stop bot` (tag chip; chip text small — confirmed against canvas card text)
  - `+ Add filters`
  - Buttons: Delete / Cancel / Save Trigger

## Frame 001806_08-002-qualified-lead-tracking-12-00-16-00-variant-if-client-tracking-1.jpg

- Title bar: `#2: Full Convo Logging`
- Shows: canvas (same as 001794) + If/Else action config panel
- Config panel (verbatim):
  - Action: **If / Else** — "Fork the Contact journey through this workflow based on conditions"
  - ACTION NAME: `Condition`
  - SCENARIO RECIPE: `Build Your Own`
  - BRANCHES:
    - Branch name: `Branch`
      - Segment: field `Tags` / operator `Includes` / value `ready for transfer` (tag chip)
      - Helper text: "The condition will be true if all of the selected tags are added to the contact"
      - `AND` / `+` segment controls; `+ Add Segment`
    - `+ Add Branch` · `Reorder Branches` (disabled)
    - None Branch — "When no condition is met": `None`
  - Buttons: Delete / Cancel / Save action

## Frame 001816_08-003-qualified-lead-tracking-12-00-16-00-variant-send-internal-chat-message-1.jpg

- Title bar: `#2: Full Convo Logging`
- Shows: canvas + same If/Else `Condition` panel as 001806 (identical values: Tags Includes `ready for transfer`; None Branch = None). Branch card highlighted on canvas.
- NOTE: filename says "send-internal-chat-message" but no such action/panel appears in this frame.

## Frame 001822_08-005-qualified-lead-tracking-12-00-16-00-variant-create-update-opportunity-1.jpg

- Title bar: `#2: Full Convo Logging`
- Shows: canvas + same If/Else `Condition` panel (identical values as 001806); None Branch box highlighted in the panel; `None` branch card highlighted on canvas.
- NOTE: filename says "create-update-opportunity" but no opportunity panel appears in this frame.

## Frame 001824_08-005-qualified-lead-tracking-12-00-16-00-variant-create-update-opportunity-2.jpg

- Title bar: `#2: Full Convo Logging`
- Shows: canvas + same If/Else `Condition` panel (identical values as 001806); cursor hovering the `Update Full Convo` node.

## Frame 001826_08-005-qualified-lead-tracking-12-00-16-00-variant-create-update-opportunity-3.jpg

- Title bar: `#2: Full Convo Logging`
- Shows: canvas + Update Contact Field action config panel (for the `Update Full Convo` node, selected on canvas)
- Config panel (verbatim):
  - Action: **Update Contact Field** — "Update a field in the contact record"
  - ACTION NAME: `Update Full Convo`
  - ACTION TYPE: `Update field data`
  - FIELDS:
    - Field: `Full Convo`
    - Value: appears to concatenate `{{contact.convolog}}` [?] + `{{right_now.time_ampm}}` [?] + `{{message.body}}` [?] — exact separators/punctuation [unreadable] (single-line field, heavily compressed)
  - `+ Add Field`
  - Buttons: Delete / Cancel / Save action

## Consolidated action list

Two distinct workflows appear in the `_08-` frames:

### A. "#4: Manual Transfer Tracking" (backing frames: 001440 parent, 001440 trigger)
1. Trigger: Form Submitted — form `"*EyeFly Lead Tran...` [truncated]
2. Add Contact Tag — `Add "Transferred" Tag`, tag `transferred` (panel captured)
3. `#1 Update Leads Transferred_Raw` [?] (Google Sheets-style icon; config not shown in these frames)
4. `Deliver Lead to Client via Slack / Webhook` (config not shown)
5. `Internal Notification` (config not shown)
6. END

### B. "#2: Full Convo Logging" (backing frames: 001794, 001806, 001816, 001822, 001824, 001826)
1. Trigger: Customer Replied — `Customer Reply via Facebook Message (Not Stop Bot)`; filters: Reply channel = Facebook Messenger; Doesn't Have Tag = `stop bot` (001794)
2. If/Else `Condition` — Build Your Own; Branch: Tags Includes `ready for transfer`; None branch (001806, 001816, 001822, 001824)
   - Branch (ready for transfer) → END
   - None → continue
3. Update Contact Field — `Update Full Convo`, Update field data, field `Full Convo` = `{{contact.convolog}}`[?] + `{{right_now.time_ampm}}`[?] + `{{message.body}}`[?] (001826)
4. Update Contact Field [?] — `Update ConvoLog` (canvas label only; config panel never shown in these frames)
5. END
#1 Qualified Convo Tracking Publish toggle ON / paste STALE

What it is supposed to do: The published variant of Qualified Convo Tracking: fb-lead tag, GPT accidental-click filter, qualified-inquiry gate, sheet log, save first message + 6 attribution custom fields, add 'qualified' tag.

Known defect / caveat: Template capture; the GPT prompt bodies and the sheet config were never fully on screen.

Verbatim atlas paste — source file wf09-v2-qualified-lead-tracking.md (captured 2026-06-25 unless noted):

# Workflow 09 — "V2 Qualified Lead Tracking" (atlas label)

> **Note on title:** every `_09-` frame's title bar reads **`#1: Qualified Convo Tracking`** — not "V2 Qualified Lead Tracking". Likely the same workflow under its in-app name; transcribed as shown.

All frames: GHL workflow builder, `Standard Builder`, top-right state `Test Workflow · Draft [toggle ON] Publish`. All 8 frames share the same canvas:

**Canvas nodes in order (common to all frames):**
1. Trigger card: `Customer Replied` — name line `0. First Time Message (Doe...` [truncated]; filter line `Doesn't Have Tag "fb lead"`
2. `+ Add New Trigger` (empty placeholder slot)
3. `1. Add "Fb Lead" Tag`
4. `#1 2. Review First Message to Filter Out Accidental Clicks, etc` (GPT premium-action icon)
5. `3. If Message = Qualified Inquiry` (If/Else)
6. Branch split:
   - `Branch` — `If "#1 2. Review First Message to Fi...` [truncated]
   - `None` — `When none of the conditions are met` → `END`
7. Branch path continues: `#1 Update Qualified Convo_Raw Tracking` (Google Sheets icon)
8. `Save First Message + Attribution Data to Custom Fields`
9. `Add "Qualified" Tag`
10. `END`

## Frame 001920_09-v2-qualified-lead-tracking-parent.jpg

- Title bar: `#1: Qualified Convo Tracking`
- Shows: canvas + Update Contact Field action config panel (node `Save First Message + Attribution Data to Custom Fields` selected)
- Config panel (verbatim):
  - Action: **Update Contact Field** — "Update a field in the contact record"
  - ACTION NAME: `Save First Message + Attribution Data to Custom Fields`
  - ACTION TYPE: `Update field data`
  - FIELDS (field → value):
    1. `First Message` → `{{message.body}}`
    2. `UTM Source` → `{{contact.attributionSource.utmSource}}`
    3. `UTM Campaign` → `{{contact.attributionSource.utmCampaign}}`
    4. `UTM Medium` → `{{contact.attributionSource.utmMedium}}`
    5. `UTM Content` → `{{contact.attributionSource.utmContent}}`
    6. `FBCID` → `{{contact.attributionSource.fbclid}}` [?] (tag rendered small; "fbclid" vs "fbcid" not fully resolvable)
    7. `Video URL` → `{{ contact.attributionSource.url }}` [?] (spaces inside braces as rendered)
  - `+ Add Field`
  - Buttons: Delete / Cancel / Save action

## Frame 001920_09-001-v2-qualified-lead-tracking-send-email-1.jpg

- Duplicate of the parent frame above (identical content — same canvas and same Update Contact Field panel).
- NOTE: filename says "send-email" but no email action appears; no email action exists anywhere in these frames.

## Frame 001922_09-001-v2-qualified-lead-tracking-send-email-2.jpg

- Title bar: `#1: Qualified Convo Tracking`
- Shows: canvas + Google Sheets action config panel, scrolled to top (node `#1 Update Qualified Convo_Raw Tracking`)
- Config panel (verbatim):
  - Action: **Google Sheets** — "Send data to Google Sheets"
  - Connection card: Google Sheets — badges [Premium [?]] [Connected]; CHOOSE AN ACCOUNT: `1998tsukki@gmail.com` [?]
  - ACTION NAME: `Update Qualified Convo_Raw Tracking`
  - ACTION: `Create Spreadsheet Row`
  - DRIVE: `My Drive`
  - SPREADSHEET: `[EyeFly] 2026 Leads Transferred Data`
  - WORKSHEET: `2. Qualified Convo_Raw` — helper: "Sheet name will be used for referencing, it can't be changed after it's selected"
  - `Refresh Headers` button
  - STARTING COLUMN: `Date (A)` · ENDING COLUMN: `(O)` [?]
  - Column mappings (visible before scroll):
    - `DATE (A)` → `{{right_now.date}}`
    - `TIME (B)` → `{{right_now.time_ampm}}`
    - `NAME (C)` → `{{contact.name}}`
    - `CLIENT (D)` → `{{custom_values.client_code}}`
    - `MESSAGE (E)` → `{{message.body}}`
    - `STATUS (F)` → `Pending` (literal text)
    - `UTM CAMPAIGN (G)` → `{{contact.attributionSource.utmCampaign}}`
    - `UTM MEDIUM (H)` → `{{contact.attributionSource.utmMedium}}`
    - `UTM CONTENT (I)` → `{{contact.attributionSource.utmContent}}`
  - Buttons: Delete / Cancel / Save action

## Frame 001924_09-001-v2-qualified-lead-tracking-send-email-3.jpg

- Title bar: `#1: Qualified Convo Tracking`
- Shows: canvas + same Google Sheets panel, scrolled down (continuation of 001922)
- Additional column mappings (verbatim):
  - `AD ID (J)` → `{{contact.lastAttributionSource.adId}}`
  - `FULL CONVO (ONCE STATUS FINAL) (K)` → empty — placeholder "Insert a value for Column Full Convo (once status final) (K)"
  - `@DROPDOWN (L)` → empty — placeholder "Insert a value for Column @dropdown (L)"
  - `NOTES (M)` → empty — placeholder "Insert a value for Column NOTES (M)"
  - `(N)` → empty — placeholder "Insert a value for Column  (N)"
  - `(O)` → empty — placeholder "Insert a value for Column  (O)"
- Repeated header fields identical to 001922 (Worksheet `2. Qualified Convo_Raw`, Starting Column `Date (A)`, Ending Column `(O)` [?]).

## Frame 001928_09-002-v2-qualified-lead-tracking-if-else-1.jpg

- Title bar: `#1: Qualified Convo Tracking`
- Shows: canvas + Google Sheets panel — duplicate of 001922 (same values, scrolled to top). Cursor over node `3. If Message = Qualified Inquiry`.
- NOTE: filename says "if-else" but the open panel is the Google Sheets action.

## Frame 001932_09-003-v2-qualified-lead-tracking-gpt-processing-update-1.jpg

- Title bar: `#1: Qualified Convo Tracking`
- Shows: canvas + If/Else action config panel (node `3. If Message = Qualified Inquiry` selected)
- Config panel (verbatim):
  - Action: **If / Else** — "Fork the Contact journey through this workflow based on conditions"
  - ACTION NAME: `3. If Message = Qualified Inquiry`
  - SCENARIO RECIPE: `Build Your Own`
  - BRANCHES:
    - Branch name: `Branch`
      - Segment: field `#1 2. Review First Message to Filter Out Acc...` [truncated — the GPT step's output] / operator `Contains` / value `POSITIVE`
      - `AND` / `+` segment controls; `+ Add Segment`
    - `+ Add Branch` · `Reorder Branches` (disabled)
    - None Branch — "When no condition is met": `None`
  - Buttons: Delete / Cancel / Save action

## Frame 001934_09-003-v2-qualified-lead-tracking-gpt-processing-update-2.jpg

- Title bar: `#1: Qualified Convo Tracking`
- Shows: canvas + GPT action config panel (node `#1 2. Review First Message...` selected)
- Config panel (verbatim):
  - Action: **GPT Powered By OpenAI** — "Send a prompt to GPT and get a response"
  - Banner: "This is a premium action — Using this action will incur additional charges per execution"
  - Action Name *: `2. Review First Message to Filter Out Accidental Clicks, etc.`
  - Model * (New badge): `GPT 5 Nano`
  - Action Type *: `Custom`
  - Enable Chat History (Beta): toggle OFF
  - Prompt * (visible portion; box scrolls — at least one further line is cut off below):
    ```
    You asked, "What kind of {{custom_values.niche}} project can
    we help you with?"  The customer replied: {{message.body}}
    Determine intent: Respond POSITIVE only if the message
    indicates potential interest in a {{custom_values.niche}}
    project.  Services we offer: {{custom_values.ab_services}}[?]
    [remainder of prompt cut off below the visible box]
    ```
    - Final merge tag low confidence: reads like `{{custom_values.ab_services}}` — could be `kb_services` / `sb_services` [?]
  - Buttons: Delete / Cancel / Save action

## Frame 001936_09-003-v2-qualified-lead-tracking-gpt-processing-update-3.jpg

- Duplicate of 001934 (identical GPT panel and canvas; cursor position differs).

## Consolidated action list

Workflow as shown: `#1: Qualified Convo Tracking` (backing frames in parentheses)

1. **Trigger — Customer Replied**: name `0. First Time Message (Doe...` [truncated]; filter `Doesn't Have Tag "fb lead"` (canvas only — trigger panel never opened in these frames; reply-channel filter, if any, not visible)
2. **Add Contact Tag** — `1. Add "Fb Lead" Tag` (canvas label only; panel not shown)
3. **GPT Powered By OpenAI** — `2. Review First Message to Filter Out Accidental Clicks, etc.`; Model `GPT 5 Nano`; Action Type `Custom`; Chat History OFF; prompt asks GPT to respond `POSITIVE` only if `{{message.body}}` shows interest in a `{{custom_values.niche}}` project (001934, 001936 — prompt tail cut off)
4. **If / Else** — `3. If Message = Qualified Inquiry`; Branch: GPT step output `Contains` `POSITIVE`; None → END (001932)
5. **Google Sheets** — `Update Qualified Convo_Raw Tracking`; Create Spreadsheet Row; My Drive; spreadsheet `[EyeFly] 2026 Leads Transferred Data`; worksheet `2. Qualified Convo_Raw`; columns A–J mapped (`{{right_now.date}}`, `{{right_now.time_ampm}}`, `{{contact.name}}`, `{{custom_values.client_code}}`, `{{message.body}}`, `Pending`, `{{contact.attributionSource.utmCampaign}}`, `{{contact.attributionSource.utmMedium}}`, `{{contact.attributionSource.utmContent}}`, `{{contact.lastAttributionSource.adId}}`), K–O left empty (001922, 001924, 001928)
6. **Update Contact Field** — `Save First Message + Attribution Data to Custom Fields`; Update field data; First Message `{{message.body}}`, UTM Source/Campaign/Medium/Content from `{{contact.attributionSource.*}}`, FBCID `{{contact.attributionSource.fbclid}}` [?], Video URL `{{ contact.attributionSource.url }}` [?] (001920 x2)
7. **Add Contact Tag** — `Add "Qualified" Tag` (canvas label only; panel not shown)
8. END
Bot Action: Auto Follow-up LIVE — superseded by live API

What it is supposed to do: Not a workflow. The Conversation-AI bot's re-engagement cadence when a contact goes quiet.

Known defect / caveat: Atlas frames are the Jun-25 'Copy - Qualifier AI v2' template. LIVE config is in the Jordan section (advancedFollowup action) below — use that, not the paste.

Verbatim atlas paste — source file wf10-auto-follow-up.md (captured 2026-06-25 unless noted):

# WF10 — Auto Follow-up

> **Capture note:** All three WF10 frames are byte-identical (md5 `4688cfae…`), and are also identical to the WF11 parent/trigger frames. They do NOT show a GHL workflow canvas. They show the **AI Agents > Conversation AI** bot editor ("Copy - Qualifier AI v2", Bot Goals tab) with the **Auto Follow-up** modal open. "Auto Follow-up" here is a Conversation AI bot action, not a workflow.

## Frame: 002400_10-auto-follow-up-parent.jpg

- **Title bar:** `Copy - Qualifier AI v2` — subtitle "Unlock the power of automated conversations"
- **Top nav:** AI Agents — Getting Started · Voice AI · **Conversation AI** (active) · Knowledge Base · Agent Templates · Content AI [?] · Agent Logs
- **Page tabs:** Bot Settings · Bot Training · **Bot Goals** (active) · Dashboard
- **Shows:** Bot Goals page with the **Auto Follow-up** modal open (center). Right pane: "Test Your Bot" (empty, "Send a message" input).

### Auto Follow-up modal (verbatim)

- **Modal title:** Auto Follow-up — "Bot will follow-up with the contact in given time sequence (Learn More)"
- **Scenario list (left column):**
  - `Contact Stopped Re…` [name truncated in UI] — toggle **ON** (green)
  - `Contact is Busy` — toggle **OFF** (currently selected/being edited)
  - `Contact Requested` — toggle **OFF**
- **Right pane (editing "Contact is Busy"):**
  - `Enable scenario` toggle — **OFF**
  - `Scenario name *` = `Contact is Busy`
  - **Follow-up Sequence** — "Configure up to [?] followups" (digit below source resolution)
  - **Follow-up 1:** delay value = `2`, unit = `Hours` (dropdown); trash/delete icon at right
  - Radio choice: **`Let AI Send The Message`** = selected · `Trigger Workflow` = not selected
  - `+ Add Follow-up` link
- **Modal footer:** `Follow-up Settings` (gear link, bottom-left) · `Cancel` · `Save` (blue)

### Underlying Bot Goals page (partially covered by modal)

- Model selector: `OpenAI GPT 4.1` [?] — right side: `~ 4003 - 5003 tokens approx.`; Prompt counter `1250 words left`
- Prompt blocks: **Personality**, **Goal**, **Additional Information** (full verbatim transcription in wf11-stop-bot.md, same page unobstructed)
- **Setup your Actions** row (buttons): Appointment Booking · Trigger a Workflow [badge, digit unreadable] · Contact Info [badge, digit unreadable] · Stop Bot [badge, digit unreadable] · Human Handover · Transfer Bot · (Auto Followup button hidden behind modal in this frame)
- **Preferences:** `Enable Conversation Summary` toggle — OFF

## Frame: 002400_10-auto-follow-up-trigger.jpg

Byte-identical duplicate of 002400_10-auto-follow-up-parent.jpg (same md5). See above.

## Frame: 002400_10-001-auto-follow-up-configure-follow-up-1.jpg

Byte-identical duplicate of 002400_10-auto-follow-up-parent.jpg (same md5). See above.

## Consolidated action list

No GHL workflow actions exist in these frames — this is Conversation AI bot configuration, not a workflow build. To rebuild what is shown:

| # | Item | Setting | Backing frame |
|---|------|---------|---------------|
| 1 | Bot: Auto Follow-up scenario "Contact Stopped Re…" [full name truncated] | Enabled (ON) | all 3 (identical) |
| 2 | Bot: Auto Follow-up scenario "Contact is Busy" | OFF; Follow-up 1 = 2 Hours; "Let AI Send The Message" selected | all 3 (identical) |
| 3 | Bot: Auto Follow-up scenario "Contact Requested" | OFF (config not shown) | all 3 (identical) |

Not captured anywhere in these frames: message bodies for follow-ups (AI-generated), the truncated first scenario's full name, the max-followups digit, config of the other two scenarios.
Bot Action: Stop Bot LIVE — superseded by live API

What it is supposed to do: Not a workflow. The Conversation-AI bot's 5 stop-bot scenarios (goodbye / already-handled / wrong-contact / opt-out / not-interested).

Known defect / caveat: Atlas never captured the stop-bot condition panels. LIVE config is in the Jordan section below (pulled from the API 2026-07-28).

Verbatim atlas paste — source file wf11-stop-bot.md (captured 2026-06-25 unless noted):

# WF11 — Stop Bot

> **Capture note:** WF11 parent/trigger frames are byte-identical to the WF10 frames (md5 `4688cfae…` — Auto Follow-up modal open; see wf10-auto-follow-up.md). The only unique WF11 frame is `002408_11-001…`, which shows the same **AI Agents > Conversation AI > Bot Goals** page with NO modal — the cursor is hovering the **Stop Bot** action button, showing its tooltip. **No Stop Bot configuration panel was captured.** These are bot-editor screenshots, not a workflow canvas.

## Frame: 002400_11-stop-bot-parent.jpg

Byte-identical duplicate of 002400_10-auto-follow-up-parent.jpg (Auto Follow-up modal open). See wf10-auto-follow-up.md.

## Frame: 002400_11-stop-bot-trigger.jpg

Byte-identical duplicate of the same frame. See wf10-auto-follow-up.md.

## Frame: 002408_11-001-stop-bot-configure-stop-bot-conditions-1.jpg

- **Title bar:** `Copy - Qualifier AI v2` — "Unlock the power of automated conversations"
- **Top nav:** AI Agents — Getting Started · Voice AI · **Conversation AI** (active) · Knowledge Base · Agent Templates · Content AI [?] · Agent Logs
- **Page tabs:** Bot Settings · Bot Training · **Bot Goals** (active) · Dashboard
- **Shows:** Full Bot Goals page, no modal. Cursor on the **Stop Bot** button with tooltip visible: **"Stop the bot when a specified condition is met."**
- Model selector: `OpenAI GPT 4.1` [?] · `~ 4003 - 5003 tokens approx.` · Prompt counter `1250 words left`

### Prompt — Personality (verbatim)

> You're Jean, page admin for `{{custom_values.business_name}}`, a `{{custom_values.niche}}` company. Not a contractor. Job: get contact info, pass to estimator. Style: 2 sentences max + 1 question. Casual texting. No emojis/exclamation points except: "Yes!" (past work), "Nope!" (contractor), "I'm a real person!" (bot question). Preferred words: got it, yep, nope, no worries, tbh, honestly When unsure → redirect to estimator. Never fabricate business details (pricing, subcontracting, financing, years in business). If lead sends attachment → "thanks for sending that over — I can't view attachments but I'll pass it to our estimator." If lead mentions scheduling preferences ("call after 4", "text first", "don't call until Tuesday") → "got it, I'll note that for our estimator."

### Prompt — Goal (verbatim; first line clipped)

First line of the Goal block: [unreadable — clipped/blurred at the field's top edge in every frame]

> Handoff ONLY when ALL true: ✓ Phone = 10 digits (or email if refused) ✓ Zip = 5 digits ✓ Service area verified Never trigger with unvalidated phone or zip. After confirmed → "awesome, thanks! our estimator from `{{custom_values.business_name}}` will reach out soon to schedule your estimate! lmk [?] if you have any other questions in the meantime!" If confused by company name → "yep, this page is owned and operated by `{{custom_values.business_name}}`. same team." After handoff → conversation complete. Do not re-qualify or collect more info. Follow-ups → "our estimator will be able to answer that when they reach out. anything else in the meantime?"

### Prompt — Additional Information (verbatim)

> Business: `{{custom_values.business_name}}` Phone: `{{custom_values.business_phone}}` Website: `{{custom_values.website_url}}`

Below fields: "A good prompt will allow the bot to better interpret and respond appropriately. (i) Prompt Guidelines"

### Setup your Actions (button row)

Appointment Booking · Trigger a Workflow [badge digit unreadable] · Contact Info [badge digit unreadable] · **Stop Bot** [badge digit unreadable] (hovered — tooltip "Stop the bot when a specified condition is met.") · Human Handover · Transfer Bot · Auto Followup [badge digit unreadable]

Configured actions (blue-outlined): Trigger a Workflow, Contact Info, Stop Bot, Auto Followup. Plain/unconfigured: Appointment Booking, Human Handover, Transfer Bot.

### Preferences

- `Enable Conversation Summary` toggle — OFF

## Consolidated action list

No workflow actions and **no Stop Bot conditions were captured** — the frame stops at the tooltip hover, before the Stop Bot config panel opened.

| # | Item | Detail | Backing frame |
|---|------|--------|---------------|
| 1 | Bot prompt (Personality / Goal / Additional Information) | Full verbatim above; Goal line 1 unreadable | 002408_11-001 |
| 2 | Stop Bot action exists and is configured (badge > 0) | Conditions NOT visible in any frame | 002408_11-001 |
| 3 | Also configured on this bot: Trigger a Workflow, Contact Info, Auto Followup | Contents not shown in this frame | 002408_11-001 |
Bot Knowledge Base / FAQs LIVE — superseded by live API

What it is supposed to do: Not a workflow. The bot's FAQ/knowledge content.

Known defect / caveat: Per house doctrine the 21-item FAQ set now lives in the bot's 'instructions' block (see Jordan section, pulled live). The KB itself is near-empty by design.

Verbatim atlas paste — source file wf12-knowledge-base-faqs.md (captured 2026-06-25 unless noted):

# Workflow 12 — Knowledge Base - Key Responses 1776171435817 (FAQs)

Source: `ghl-visual-atlas-assets/` frames prefixed `_12-` (23 files, 1392x720 video grabs).
This is NOT a workflow canvas. The frames capture two surfaces:

1. **Parent/trigger frames** — Conversation AI bot **"Copy - Qualifier AI v2"** on the Bot Goals tab, with an **Auto Follow-up** modal open.
2. **Frames 001–021** — the **Knowledge Base "Key Responses 1776171435817"** FAQ tab, where 21 FAQ entries are progressively expanded to reveal their answer text. The FAQ question + answer pairs are the copy-paste payload (see Consolidated FAQ list at the bottom).

Sub-account context (sidebar): "CF | Charleston, S..." [?]. Transcription convention: `{{custom_values.*}}` merge tags appear verbatim in the source. `[?]` = low confidence. Quoting/punctuation is reproduced as displayed, including inconsistencies.

---

## Frame: 002400_12-knowledge-base-key-responses-1776171435817-faqs-parent.jpg

**Shows:** AI Agents > Conversation AI > bot "Copy - Qualifier AI v2" > **Bot Goals** tab, with an **Auto Follow-up** modal open on top. (Identical to the -trigger frame.)

**Page header:** "Copy - Qualifier AI v2" / "Unlock the power of automated conversations"
**Tabs:** Bot Settings · Bot Training · Bot Goals · Dashboard
**Top nav:** AI Agents: Getting Started · Voice AI · Conversation AI · Knowledge Base · Agent Templates · Content AI · Agent Logs

**Bot Goals section** — "Set up Bot's personality and actions. Learn More"
- Model selector: **OpenAI GPT 4.1**
- Token counter: "~ 4003 + 5003 tokens approx." [?]
- Prompt words counter: "1250 words left"

**Prompt — Personality field** (readable portion; right edge of some lines occluded):

> You're Jean, page admin for {{custom_values.business_name}}, a {{custom_values.niche}} company. Not a contractor. Job: get contact info, pass to estimator. Style: 2 sentences max + 1 question. Casual texting. No emojis/exclamation points except: "Yes!" (past work), "Nope!" (contractor), "I'm a real person!" (bot question). Preferred words: got it, yep, nope, no worries, tbh, honestly When unsure → redirect to estimator. Never fabricate business details (pricing, subcontracting, financing, years in business). If lead sends attachment → "thanks for sending that over — I can't view attachments but I'll pass it to our estimator" [?] If lead mentions scheduling preferences ("call after 4", "text first", "don't call until Tuesday") → "got it, I'll note that for our estimator"

**Prompt — Goal field** (partially occluded by modal; readable portion):

> Handoff ONLY when ALL true: ✓ Phone = 10 digits (or email if refused) ✓ Zip = 5 digits ✓ Service area verified Never trigger with unvalidated phone or zip. After conf[...occluded...] other questions in the meantime?" If confused by company name → "yep, this page is owned and operated by {{custom_values.business_name}}. same team." After ha[...occluded...] anything else in the meantime?"

**Prompt — Additional Information field:**

> Business: {{custom_values.business_name}} Phone: {{custom_values.business_phone}} Website: {{custom_values.website_url}}

Note under prompt: "A good prompt will allow the bot to better interpret and respond appropriately. Prompt Guidelines"

**Setup your Actions** (pill buttons): Appointment Booking · Trigger a Workflow (2) [?] · Contact Info (1) [?] · Stop Bot (4) [?] · Human Handover · Transfer Bot
(Trigger a Workflow, Contact Info, Stop Bot render with blue/active outline + count badges.)

**Preferences:** "Enable Conversation Summary" (toggle off)

**Auto Follow-up modal** (open, on top):
- Title: "Auto Follow-up" — "Bot will follow-up with the contact in given time sequence (Learn More)"
- Scenario list (left rail): "Contact Stopped Re..." [On] · "Contact is Busy" [Off] (selected) · "Contact Requested" [Off]
- "Enable scenario" toggle: OFF
- Scenario name*: `Contact is Busy`
- Follow-up Sequence — "Configure up to 5 followups"
- Follow-up 1: `2` `Hours` (delete icon at right)
- Send mode radio: "Let AI Send The Message" (selected) · "Trigger Workflow"
- "+ Add Follow-up" link · "Follow-up Settings" link (bottom left) · Cancel / Save buttons

---

## Frame: 002400_12-knowledge-base-key-responses-1776171435817-faqs-trigger.jpg

**Shows:** Identical to the parent frame above (same screen grab). See parent frame transcription.

---

## Frame: 002460_12-001-...-what-happens-after-i-send-my-info-1.jpg

**Shows:** AI Agents > **Knowledge Base** list page (not yet inside the KB).

Header: "Knowledge base" / "Create and manage multiple knowledge bases for your business"
Top right: "Knowledge Base Quota: 4 / 15" [?] · button "Create with AI (Beta)" · button "+ Create Knowledge Base"
Controls: Sort By dropdown · "Search knowledge base" field

Table (Name | Last updated | Created at | Actions):
| Name | Last updated | Created at |
|---|---|---|
| Key Responses 1776171435817 (row highlighted/hovered) | 1 Jun 2026, 1:53 PM [?] | 14 Apr 2026, 8:57 AM [?] |
| Existing knowledge base 1776171435743 [?] | 14 Apr 2026, 8:57 AM [?] | 14 Apr 2026, 8:57 AM [?] |
| Key Responses | 13 Apr 2026, 9:34 PM [?] | 20 Feb 2026, 4:55 PM [?] |
| Existing knowledge base (i) | 11 Feb 2026, 6:58 AM [?] | 11 Feb 2026, 6:58 AM [?] |

Actions per row: edit (pencil) and delete/settings icons.

---

## Frame: 002484_12-002-...-are-you-a-real-person-or-a-bot-1.jpg

**Shows:** Inside **"Knowledge Base - Key Responses 1776171435817"**, **FAQ** tab. All FAQs collapsed. Pagination at 10 rows/page: "1 - 10 of 21", pages 1 2 3, Next.

Header: "← Knowledge Base - Key Responses 1776171435817" (edit pencil) · "Knowledge sources" button (top right)
Tabs: All · Web Crawler · **FAQ** · Tables · Rich Text · Files
"FAQs 21" · "Search FAQs" field · "+ Add FAQ" button
Bottom-right floating widget: "Text retrieval — Ask anything your users might ask" with "Open" button [?]

FAQ question titles visible (rows 1–10, collapsed):
1. "What happens after I send my info?"
2. "Are you a real person or a bot?"
3. "Do you fix [service we offer]?"
4. "Are you going to sell my number?"
5. Pricing question (first time)
6. "I prefer texts / I hate calls"
7. "Can I call you?" / "What's your number?"
8. "When can you come?" / "What days/times?"
9. Technical / how-to / DIY questions
10. "Links to past work?"

---

## Frame: 002496_12-003-...-do-you-fix-service-we-offer-1.jpg

**Shows:** Same FAQ tab, rows-per-page changed to 100 — all 21 FAQ titles visible, all collapsed. Pagination: "1 - 21 of 21", page 1.

FAQ titles 11–21 (in addition to 1–10 above):
11. Existing customer
12. "Are you the contractor?"
13. Won't give phone →
14. "Where do you service?" / "What areas?"
15. "Do you service [specific city]?"
16. "What's your website?"
17. Renter →
18. Pricing question (repeated)
19. "Are estimates free?"
20. "What company is this?"
21. Invalid number →

---

## Frame: 002506_12-004-...-are-you-going-to-sell-my-number-1.jpg

**Shows:** FAQ tab, answers expanded for FAQs 1–3; cursor on FAQ 4 row ("Are you going to sell my number?"), FAQs 4–21 still collapsed.

Newly readable answers (verbatim):
- **"What happens after I send my info?"** → "Once you send your info, I'll pass it to our estimator at {{custom_values.business_name}}. They'll reach out to you directly to talk about your {{custom_values.niche}} and set up an estimate."
- **"Are you a real person or a bot?"** → "I'm a real person! my name is Jean and I'm the page admin for {{custom_values.business_name}}"
- **"Do you fix [service we offer]?"** → Location not confirmed: "we can help! send me your zip code so I can confirm we service your area" → Location confirmed: we can help! what's the best phone number for our estimator to reach you?"

---

## Frame: 002512_12-005-...-pricing-question-first-time-1.jpg

**Shows:** FAQ tab, answers 1–6 expanded (FAQ 6's answer mid-fade-in animation), 7–21 collapsed.

Newly readable answers:
- **"Are you going to sell my number?"** → "this page is owned by {{custom_values.business_name}}. we're not going to do anything with your number other than contact you about your project"
- **Pricing question (first time)** → (right-truncated here; full text confirmed in later frames — see Consolidated list, FAQ 5)
- **"I prefer texts / I hate calls"** → (fading in; confirmed in frame 006)

---

## Frame: 002520_12-006-...-i-prefer-texts-i-hate-calls-1.jpg

**Shows:** FAQ tab at top of list, answers 1–9 expanded, 10–21 collapsed. Scrollbar visible at right.

Newly readable answers:
- **Pricing question (first time)** → Location not confirmed: "honestly it depends on your property and project. can you send me your zip rq just so I can make sure we service your area?" → Location confirmed: "honestly it depends on your property and project. if you send me your best phone number I can have our estimator reach out for a fast estimate asap"
  (note: "zip rq" verbatim — texting shorthand for "real quick")
- **"I prefer texts / I hate calls"** → "no problem, I'll note that you prefer a text first. what's the best number for our estimator to reach you?"
- **"Can I call you?" / "What's your number?"** → "you can reach us at {{custom_values.business_phone}}, or if you send me your number I can have someone call you"
- **"When can you come?" / "What days/times?"** → "not sure, is there a day or time that works best for you?"
- **Technical / how-to / DIY questions** → Location not confirmed: "tbh I'm not sure, I'm just the page admin. my job is to grab your info and pass it to our estimator. send me your zip code so I can confirm we service your area" → Location confirmed: "tbh I'm not sure, I'm just the page admin. my job is to grab your info and pass it to our estimator. what's the best number to reach you at?"

---

## Frame: 002526_12-007-...-can-i-call-you-what-s-your-number-1.jpg

**Shows:** FAQ tab scrolled down slightly; answers 1–11 expanded, 12–21 collapsed.

Newly readable answers:
- **"Links to past work?"** → "Yes! you can see examples on our website: {{custom_values.website_url}}"
- **Existing customer** → "got it — what's the best number so I can have the team follow up?"

---

## Frame: 002532_12-008-...-when-can-you-come-what-day-time-1.jpg

**Shows:** FAQ tab scrolled; answers 1–13 expanded, 14–21 collapsed.

Newly readable answers:
- **"Are you the contractor?"** → "Nope! my name is Jean, I'm just the page admin. my job is to grab your info and pass it to our estimator. what's the best number to reach you at?"
- **Won't give phone →** → "no worries — I can have them contact you by email instead. what's the best email?"

---

## Frame: 002538_12-009-...-technical-how-to-diy-questions-1.jpg

**Shows:** FAQ tab scrolled; answers 1–15 expanded, 16–21 collapsed.

Newly readable answers:
- **"Where do you service?" / "What areas?"** → (two-line answer; full text in Consolidated list, FAQ 14)
- **"Do you service [specific city]?"** → Serviceable: "yep, we service [city] and the surrounding areas. just send me your phone number and I'll get you set up with a fast estimate" → Not serviceable: "looks like that area is outside the area we cover. sorry about that!"

---

## Frame: 002544_12-010-...-links-to-past-work-1.jpg

**Shows:** FAQ tab scrolled; answers for FAQs 5–16 in view, all expanded (FAQ 5 answer partially cut at top of viewport); 17–21 collapsed.

Newly readable answer:
- **"What's your website?"** → "here's our website: {{custom_values.website_url}}"

---

## Frame: 002550_12-011-...-existing-customer-1.jpg

**Shows:** FAQ tab scrolled near bottom; answers through FAQ 17 (Renter) expanded; 18–21 collapsed; cursor near "Pricing question (repeated)". Pagination "1 - 21 of 21" visible.

Newly readable answer:
- **Renter →** → "the property owner would need to request the estimate. have them message us and we'll get them set up"

---

## Frame: 002556_12-012-...-are-you-the-contractor-1.jpg

**Shows:** Same bottom-of-list view; FAQ 18 now also expanded; 19–21 collapsed.

Newly readable answer:
- **Pricing question (repeated)** → Location not confirmed: "send me your zip first so I can confirm we service your area" → Location confirmed, no phone: "Our estimator will definitely be able to answer that for you. Send your number and he'll reach out to chat about your project"

---

## Frame: 002562_12-013-...-won-t-give-phone-1.jpg

**Shows:** Same bottom-of-list view; FAQ 19 now also expanded; 20–21 collapsed.

Newly readable answer:
- **"Are estimates free?"** → Location not confirmed: "yes, all estimates are free! just need your zip so I can confirm we service your area" → Location confirmed: ""yes, all estimates are free! just send me your best number and I'll have our estimator reach out asap"
  (doubled quote before "yes" in the confirmed branch is present in the source)

---

## Frame: 002568_12-014-...-where-do-you-service-what-areas-1.jpg

**Shows:** Same bottom-of-list view; FAQ 20 now also expanded; only FAQ 21 (Invalid number →) collapsed.

Newly readable answer:
- **"What company is this?"** → "this page is owned by {{custom_values.business_name}}! here's our website: {{custom_values.website_url}}. what are you looking to get done?"

---

## Frame: 002574_12-015-...-do-you-service-specific-city-1.jpg

**Shows:** FAQ tab scrolled back to top; answers 1–13 in view, all expanded. No new text (confirms answers 1–13 as transcribed above).

---

## Frame: 002580_12-016-...-what-s-your-website-1.jpg

**Shows:** Same top-of-list view as frame 015, with a page-transition tint (UI elements highlighted as selection). No new text.

---

## Frame: 002586_12-017-...-renter-1.jpg

**Shows:** Identical to frame 016. No new text.

---

## Frame: 002592_12-018-...-pricing-question-repeated-1.jpg

**Shows:** Top-of-list view, answers 1–13 in view, all expanded, cursor over FAQ 1 row. No new text (used for high-zoom verification of FAQ 5's "zip rq" wording).

---

## Frame: 002598_12-019-...-are-estimates-free-1.jpg

**Shows:** Bottom-of-list view; all 21 FAQs expanded, including **Invalid number →** for the first time.

Newly readable answer:
- **Invalid number →** → "hey that number didn't look right — can you resend the best number to reach you?"

---

## Frame: 002604_12-020-...-what-company-is-this-1.jpg

**Shows:** Same bottom-of-list view as 019; all 21 expanded. No new text (used for high-zoom verification of FAQ 19).

---

## Frame: 002610_12-021-...-invalid-number-1.jpg

**Shows:** Bottom-of-list view, all 21 expanded; cursor (hand) on "What's your website?" row. Full-width verification frame for FAQ 14's two-line answer. No new text beyond the Consolidated list.

---

## Consolidated FAQ list

All 21 FAQ entries in the Knowledge Base "Key Responses 1776171435817", FAQ tab, in on-screen order. Question titles and answer bodies are verbatim (quotes/arrows/casing as displayed). `{{custom_values.*}}` are GHL custom-value merge tags. Backing frames listed per entry.

### 1. "What happens after I send my info?"
> "Once you send your info, I'll pass it to our estimator at {{custom_values.business_name}}. They'll reach out to you directly to talk about your {{custom_values.niche}} and set up an estimate."

Frames: 004, 005, 006, 015–018

### 2. "Are you a real person or a bot?"
> "I'm a real person! my name is Jean and I'm the page admin for {{custom_values.business_name}}"

Frames: 004, 005, 006, 015–018

### 3. "Do you fix [service we offer]?"
> → Location not confirmed: "we can help! send me your zip code so I can confirm we service your area" → Location confirmed: we can help! what's the best phone number for our estimator to reach you?"

(opening quote after "Location confirmed:" absent in source as displayed)
Frames: 004, 005, 006, 015–018

### 4. "Are you going to sell my number?"
> "this page is owned by {{custom_values.business_name}}. we're not going to do anything with your number other than contact you about your project"

Frames: 005, 006, 015–018

### 5. Pricing question (first time)
> → Location not confirmed: "honestly it depends on your property and project. can you send me your zip rq just so I can make sure we service your area?" → Location confirmed: "honestly it depends on your property and project. if you send me your best phone number I can have our estimator reach out for a fast estimate asap"

("zip rq" verbatim — texting shorthand)
Frames: 006, 010 (full-width), 015–018

### 6. "I prefer texts / I hate calls"
> "no problem, I'll note that you prefer a text first. what's the best number for our estimator to reach you?"

Frames: 006, 007, 010, 011, 015–018

### 7. "Can I call you?" / "What's your number?"
> "you can reach us at {{custom_values.business_phone}}, or if you send me your number I can have someone call you"

Frames: 006, 007, 010, 011, 013, 015–018

### 8. "When can you come?" / "What days/times?"
> "not sure, is there a day or time that works best for you?"

Frames: 006, 007, 010, 011, 013, 014, 015–020

### 9. Technical / how-to / DIY questions
> → Location not confirmed: "tbh I'm not sure, I'm just the page admin. my job is to grab your info and pass it to our estimator. send me your zip code so I can confirm we service your area" → Location confirmed: "tbh I'm not sure, I'm just the page admin. my job is to grab your info and pass it to our estimator. what's the best number to reach you at?"

Frames: 006, 010 (full-width), 011–014, 019–021

### 10. "Links to past work?"
> "Yes! you can see examples on our website: {{custom_values.website_url}}"

Frames: 007, 010–014, 019–021

### 11. Existing customer
> "got it — what's the best number so I can have the team follow up?"

Frames: 007, 010–014, 019–021

### 12. "Are you the contractor?"
> "Nope! my name is Jean, I'm just the page admin. my job is to grab your info and pass it to our estimator. what's the best number to reach you at?"

Frames: 008, 010–014, 019–021

### 13. Won't give phone →
> "no worries — I can have them contact you by email instead. what's the best email?"

Frames: 008, 010–014, 019–021

### 14. "Where do you service?" / "What areas?"
> First, extrapolate major metro area from {{custom_values.service_zip}}. Example 28206 = Charlotte. → Location not confirmed: "we service [city] and all surrounding areas. send me your zip code so I can confirm we service your area" Example: "we service Charlotte and all surrounding areas. send me your zip code so I can confirm we service your area" → Location confirmed: "we service [city] and all surrounding areas. what's the best phone number for our estimator to reach you?" Example: "we service Charlotte and all surrounding areas. what's the best phone number for our estimator to reach you?"

(only FAQ whose answer wraps to two lines; assembled from full-width crops)
Frames: 009, 011–014, 019–021 (full text verified in 021)

### 15. "Do you service [specific city]?"
> → Serviceable: "yep, we service [city] and the surrounding areas. just send me your phone number and I'll get you set up with a fast estimate" → Not serviceable: "looks like that area is outside the area we cover. sorry about that!"

Frames: 009, 011–014, 019–021

### 16. "What's your website?"
> "here's our website: {{custom_values.website_url}}"

Frames: 010, 011–014, 019–021

### 17. Renter →
> "the property owner would need to request the estimate. have them message us and we'll get them set up"

Frames: 011–014, 019–021

### 18. Pricing question (repeated)
> → Location not confirmed: "send me your zip first so I can confirm we service your area" → Location confirmed, no phone: "Our estimator will definitely be able to answer that for you. Send your number and he'll reach out to chat about your project"

Frames: 012–014, 019–021

### 19. "Are estimates free?"
> → Location not confirmed: "yes, all estimates are free! just need your zip so I can confirm we service your area" → Location confirmed: ""yes, all estimates are free! just send me your best number and I'll have our estimator reach out asap"

(doubled quote before the second "yes" is present in the source)
Frames: 013, 014, 019–021 (verified at high zoom in 020)

### 20. "What company is this?"
> "this page is owned by {{custom_values.business_name}}! here's our website: {{custom_values.website_url}}. what are you looking to get done?"

Frames: 014, 019–021

### 21. Invalid number →
> "hey that number didn't look right — can you resend the best number to reach you?"

Frames: 019, 020, 021

---

## Unreadable / low-confidence items

- Parent frame Goal field: two mid-line segments occluded by the Auto Follow-up modal ("After conf[...]" and "After ha[...]").
- Parent frame token counter ("~ 4003 + 5003 tokens approx.") and action-pill badge numbers (2/1/4) are low confidence.
- Knowledge Base list page timestamps (frame 001) are low confidence at source resolution.
- Everything else — all 21 FAQ questions and all 21 answer bodies — was read at 2x–4x zoom and is high confidence.
Funnel Strategy Document (Lead Gen) NOT A WORKFLOW

What it is supposed to do: A browser-rendered 5-stage funnel strategy doc (Lead Gen / Nurture / Conversion / Retention / Ascension), captured by mistake under a workflow slug.

Known defect / caveat: No GHL content in any frame.

Verbatim atlas paste — source file wf13-lead-gen.md (captured 2026-06-25 unless noted):

# WF13 — Lead Gen

> **Capture note:** None of the WF13 frames show GoHighLevel. All three show an **HTML strategy document** — a 5-stage funnel table (Lead Gen / Nurture / Conversion / Retention / Ascension) with columns "Contractor Mindset", "Your Mechanism", and a proof/cash metric. The parent and trigger frames are byte-identical (md5 `844867ea…`, also identical to the WF14 parent/trigger frames); the `13-001` frame is the same page scrolled slightly down. There is no GHL trigger config, no canvas, no action panel to transcribe — the ManyChat reference is a line inside the strategy doc.

## Frame: 002880_13-lead-gen-parent.jpg

**Shows:** strategy document, top of the table.

- **Legend (top):** `cold scroll` (light blue) · `committed cash` (mid blue) · `locked-in` (dark blue) · `proof / cash metric` (green)

### Table (verbatim)

**1 — LEAD GEN**
- CONTRACTOR MINDSET: "Stuck at $100K/mo. Referrals dried up, estimator chases tire-kickers, **January calendar is empty.** The desire's already there — cracked walls sell themselves."
- YOUR MECHANISM: "Proof-first Reels ("11 inspections in 9 days") with a **ManyChat trigger word** wired before the post goes live. Name the villain, don't teach."
- PROOF METRIC: "**DM conversations started / week**"

**2 — NURTURE**
- CONTRACTOR MINDSET: "Curious but skeptical — **"I've tried Facebook ads before."** Won't book a Zoom, but will reply in a DM."
- YOUR MECHANISM: "2-min micro-magnet → **SMS qualifies on BANT** (spend, decision-maker, need, timing). First line disqualifies wrong fits."
- PROOF METRIC: "**Comment → booked-call rate**"

**3 — CONVERSION**
- CONTRACTOR MINDSET: "Wants certainty, hates being pitched. Ready to move if the risk is off the table."
- YOUR MECHANISM: "**<8-min Loom** sells product + thesis, inoculates objections. Two tiers ($1,950 anchor first), **6-mo PIF as the default,** Stripe link on the next line."
- CASH METRIC: "**Cash collected / Loom send**"

**4 — RETENTION**
- CONTRACTOR MINDSET: ""Will this actually fill my calendar?" Trust is won or lost in the first 30 days."
- YOUR MECHANISM: "First qualified lead ≤14 days, **first inspection ≤21 days.** 15-min no-call-back alert. Under 5/wk = proactive refund before he asks."
- PROOF METRIC: "**90-day retention rate**"

**5 — ASCENSION**
- CONTRACTOR MINDSET: ""It works — give me more, locked in." Now a believer and a walking case study."
- YOUR MECHANISM: "**6-mo prepay** (refundable), premium-tier pull at month 3, **footage flywheel** (his job photos = your ads), referral ask on first result."
- CASH METRIC: "**PIF take-rate + referrals / mo**"

### "The read in one line" (verbatim)

> Stages 1–2 are a **traffic** problem. Stage 3 is a **belief** problem. Stages 4–5 are where the $1M actually compounds — **retention and ascension, not the front door.**
>
> Mike never feels sold: content names his pain, the DM qualifies him, the Loom installs belief, the Stripe link defaults to PIF, the first win locks retention, and his own footage feeds the next Mike.

## Frame: 002880_13-lead-gen-trigger.jpg

Byte-identical duplicate of 002880_13-lead-gen-parent.jpg (same md5). See above.

## Frame: 002886_13-001-lead-gen-manychat-trigger-setup-1.jpg

Same document scrolled down slightly. Identical table + "read in one line" content (all verbatim text matches the parent frame). New at bottom edge: heading **"Don't skip the gates (in order)"** — list items cut off at the frame edge in this frame (readable in the WF14 detail frame; see wf14-nurture.md).

**No ManyChat trigger setup UI appears in this frame despite the filename** — the only ManyChat reference is the Stage 1 mechanism line quoted above.

## Consolidated action list

No GHL workflow actions exist in these frames. Build-relevant statements about Stage 1 (Lead Gen), as written in the doc:

| # | Statement (verbatim source) | Backing frame |
|---|-----------------------------|---------------|
| 1 | Proof-first Reels with a ManyChat trigger word wired before the post goes live | all 3 |
| 2 | Metric: DM conversations started / week | all 3 |
| 3 | Gate (from doc footer): "Loom converts 30%+ of qualified leads before a dollar on traffic." | 002894_14-001 (see wf14 file) |
Funnel Strategy Document (Nurture) NOT A WORKFLOW

What it is supposed to do: Same strategy doc, Nurture row. No GHL content.

Known defect / caveat: Byte-identical frames to the Lead Gen doc.

Verbatim atlas paste — source file wf14-nurture.md (captured 2026-06-25 unless noted):

# WF14 — Nurture

> **Capture note:** None of the WF14 frames show GoHighLevel. The parent and trigger frames are byte-identical to the WF13 parent/trigger frames (md5 `844867ea…`) — the same **HTML strategy document** (5-stage funnel table). The `14-001` frame is the same page scrolled further down, revealing the start of the "Don't skip the gates" list. No SMS action panel, message body, or workflow config exists in these frames despite the "send-micro-magnet-sms-qualification" filename.

## Frame: 002880_14-nurture-parent.jpg

Byte-identical duplicate of 002880_13-lead-gen-parent.jpg. Full verbatim transcription of the 5-stage table, legend, and "The read in one line" is in **wf13-lead-gen.md** (identical content, not repeated here).

Nurture-stage row (verbatim, for convenience):

**2 — NURTURE**
- CONTRACTOR MINDSET: "Curious but skeptical — **"I've tried Facebook ads before."** Won't book a Zoom, but will reply in a DM."
- YOUR MECHANISM: "2-min micro-magnet → **SMS qualifies on BANT** (spend, decision-maker, need, timing). First line disqualifies wrong fits."
- PROOF METRIC: "**Comment → booked-call rate**"

## Frame: 002880_14-nurture-trigger.jpg

Byte-identical duplicate of the same document frame (same md5). See above / wf13-lead-gen.md.

## Frame: 002894_14-001-nurture-send-micro-magnet-sms-qualification-1.jpg

Same document scrolled to the bottom. Table rows 1–5 and "The read in one line" identical to the parent frame (see wf13-lead-gen.md). Additional content now readable at the bottom (verbatim):

**Don't skip the gates (in order)**
1. "**Loom converts 30%+** of qualified leads before a dollar on traffic."
2. "**8–10 clients renewing past 90 days** before you scale acquisition."
3. [cut off at frame edge — list continues below the visible area]

No SMS composer, workflow action, or micro-magnet asset appears in this frame — the mechanism exists only as the Stage 2 description line quoted above.

## Consolidated action list

No GHL workflow actions exist in these frames. Build-relevant statements about Stage 2 (Nurture), as written in the doc:

| # | Statement (verbatim source) | Backing frame |
|---|-----------------------------|---------------|
| 1 | 2-min micro-magnet → SMS qualifies on BANT (spend, decision-maker, need, timing) | all 3 |
| 2 | "First line disqualifies wrong fits." | all 3 |
| 3 | Metric: Comment → booked-call rate | all 3 |
| 4 | Gate 2: "8–10 clients renewing past 90 days before you scale acquisition." | 002894_14-001 |
Funnel Strategy Document (Conversion) NOT A WORKFLOW

What it is supposed to do: Same strategy doc, Conversion row. No GHL content.

Known defect / caveat: Filenames promise workflow content; the grabs missed the GHL screen.

Verbatim atlas paste — source file wf15-conversion.md (captured 2026-06-25 unless noted):

# WF15 — Conversion (frame transcription)

> **CRITICAL SOURCE NOTE:** None of the 4 frames tagged `_15-` contain GoHighLevel workflow builder content. Every frame is a video grab of a **browser-rendered strategy document** — a 5-stage funnel table ("$0 → $1M" plan: Lead Gen / Nurture / Conversion / Retention / Ascension) being scrolled. There is **no GHL canvas, no trigger config, no action config panel, no node labels, and no merge tags** anywhere in these frames. The filenames promise workflow content ("send-loom-sales-presentation", "offer-payment-options") but the grabs missed the GHL screen. A GHL build spec **cannot** be derived from these images; only the strategy-document text below was captured.
>
> Duplicate detection (MD5): `002880_15-conversion-parent.jpg` and `002880_15-conversion-trigger.jpg` are **byte-identical** to each other (and to all four `002880_16-*`/`002880_17-*` files).

## Frame: 002880_15-conversion-parent.jpg

1. **Title bar:** none visible (frame is cropped to page content; a black badge at top-left is cut off — likely a "VIEW 1"-style section badge, [?])
2. **Shows:** browser view of a strategy document — full 5-row stage table + summary panel. NOT a GHL canvas or config panel.
3. **Visible content (verbatim where readable):**

Legend row: `cold scroll` · `committed cash` · `locked-in` · `proof / cash metric`

| # | Stage | CONTRACTOR MINDSET | YOUR MECHANISM | Metric |
|---|-------|--------------------|----------------|--------|
| 1 | LEAD GEN | Stuck at $100K/mo. Referrals dried up, estimator chases tire-kickers, **January calendar is empty**. The desire's already there — cracked walls sell themselves. | Proof-first Reels ("11 inspections in 9 days") with a **ManyChat trigger word** wired before the post goes live. Name the villain, don't teach. | PROOF METRIC: **DM conversations started / week** |
| 2 | NURTURE | Curious but skeptical — **"I've tried Facebook ads before."** Won't book a Zoom, but will reply in a DM. | 2-min micro-magnet → **SMS qualifies on BANT** (spend, decision-maker, need, timing). First line disqualifies wrong fits. | PROOF METRIC: **Comment → booked-call rate** |
| 3 | CONVERSION | Wants certainty, hates being pitched. Ready to move if the risk is off the table. | **<8-min Loom** sells product + thesis, inoculates objections. Two tiers ($1,950 anchor first), **6-mo PIF as the default**, Stripe link on the next line. | CASH METRIC: **Cash collected / Loom send** |
| 4 | RETENTION | "Will this actually fill my calendar?" Trust is won or lost in the first 30 days. | First qualified lead ≤14 days, **first inspection ≤21 days**. 15-min no-call-back alert. Under 5/wk = proactive refund before he asks. | PROOF METRIC: **90-day retention rate** |
| 5 | ASCENSION | "It works — give me more, locked in." Now a believer and a walking case study. | **6-mo prepay** (refundable), premium-tier pull at month 3, **footage flywheel** (his job photos = your ads), referral ask on first result. | CASH METRIC: **PIF take-rate + referrals / mo** |

**The read in one line**
- Stages 1–2 are a **traffic** problem. Stage 3 is a **belief** problem. Stages 4–5 are where the $1M actually compounds — **retention and ascension, not the front door**.
- Mike never feels sold: content names his pain, the DM qualifies him, the Loom installs belief, the Stripe link defaults to PIF, the first win locks retention, and his own footage feeds the next Mike.

## Frame: 002880_15-conversion-trigger.jpg

Byte-identical to `002880_15-conversion-parent.jpg` (MD5 match). Same content as above. No trigger configuration is shown despite the filename.

## Frame: 002902_15-001-conversion-send-loom-sales-presentation-1.jpg

1. **Title bar:** none visible
2. **Shows:** same strategy document, scrolled slightly down. Rows 1–5 of the stage table (row 1 partially cut at top), "The read in one line" panel, and the top of a tan callout panel. NOT a GHL canvas or config panel; no Loom/workflow action visible despite the filename.
3. **New content visible beyond the parent frame (verbatim):**

**Don't skip the gates (in order)** (first two items visible at bottom edge)
1. **Loom converts 30%+** of qualified leads before a dollar on traffic.
2. **8–10 clients renewing past 90 days** before you scale acquisition.

(Third item cut off at frame edge in this grab.)

## Frame: 002904_15-002-conversion-offer-payment-options-1.jpg

1. **Title bar:** none visible
2. **Shows:** near-identical scroll position to `002902_15-001` (different mouse cursor position only). Same table rows 1–5, "The read in one line", and the first two "Don't skip the gates" items. NOT a GHL canvas or config panel; no payment-options action visible despite the filename.
3. **Content:** identical to `002902_15-001` transcription above.

## Consolidated action list

**No GHL workflow actions, triggers, or config panels were captured in any WF15 frame.** Zero actions can be specced from these images.

Strategy-level intent implied by the document's Conversion row (stage 3) — for reference only, NOT a transcribed build spec:

| Implied element | Source text | Backing frames |
|---|---|---|
| <8-min Loom sales presentation (sells product + thesis, inoculates objections) | Stage 3 "YOUR MECHANISM" | 002880_15-* (both), 002902_15-001, 002904_15-002 |
| Two-tier offer, $1,950 anchor presented first | Stage 3 "YOUR MECHANISM" | all 4 frames |
| 6-mo PIF as the default payment option; Stripe link "on the next line" | Stage 3 "YOUR MECHANISM" | all 4 frames |
| Gate: Loom converts 30%+ of qualified leads before spending on traffic | "Don't skip the gates" item 1 | 002902_15-001, 002904_15-002 |
| Metric: Cash collected / Loom send | Stage 3 CASH METRIC | all 4 frames |

**Action needed to produce a real build spec:** re-grab frames from the source video at timestamps where the GHL workflow builder for WF15 "Conversion" is actually on screen.
Funnel Strategy Document (Retention) NOT A WORKFLOW

What it is supposed to do: Same strategy doc, Retention row. No GHL content.

Known defect / caveat:

Verbatim atlas paste — source file wf16-retention.md (captured 2026-06-25 unless noted):

# WF16 — Retention (frame transcription)

> **CRITICAL SOURCE NOTE:** None of the 5 frames tagged `_16-` contain GoHighLevel workflow builder content. Every frame is a video grab of a **browser-rendered strategy document** — a 5-stage funnel table ("$0 → $1M" plan) being scrolled. There is **no GHL canvas, no trigger config, no action config panel, no node labels, and no merge tags** in any frame. The filenames ("track-key-dates", "no-call-back-alert", "proactive-refund-policy") promise workflow content, but the grabs missed the GHL screen. A GHL build spec **cannot** be derived from these images.
>
> Duplicate detection (MD5): `002880_16-retention-parent.jpg` = `002880_16-retention-trigger.jpg` (also identical to the `_15-`/`_17-` `002880_*` files). `002912_16-002` = `002912_16-003` (byte-identical pair).

## Frame: 002880_16-retention-parent.jpg

1. **Title bar:** none visible (black badge at top-left cut off, likely a section badge [?])
2. **Shows:** browser view of the strategy document — full 5-row stage table + "The read in one line" panel. NOT a GHL canvas or config panel.
3. **Visible content (verbatim where readable):**

Legend row: `cold scroll` · `committed cash` · `locked-in` · `proof / cash metric`

| # | Stage | CONTRACTOR MINDSET | YOUR MECHANISM | Metric |
|---|-------|--------------------|----------------|--------|
| 1 | LEAD GEN | Stuck at $100K/mo. Referrals dried up, estimator chases tire-kickers, **January calendar is empty**. The desire's already there — cracked walls sell themselves. | Proof-first Reels ("11 inspections in 9 days") with a **ManyChat trigger word** wired before the post goes live. Name the villain, don't teach. | PROOF METRIC: **DM conversations started / week** |
| 2 | NURTURE | Curious but skeptical — **"I've tried Facebook ads before."** Won't book a Zoom, but will reply in a DM. | 2-min micro-magnet → **SMS qualifies on BANT** (spend, decision-maker, need, timing). First line disqualifies wrong fits. | PROOF METRIC: **Comment → booked-call rate** |
| 3 | CONVERSION | Wants certainty, hates being pitched. Ready to move if the risk is off the table. | **<8-min Loom** sells product + thesis, inoculates objections. Two tiers ($1,950 anchor first), **6-mo PIF as the default**, Stripe link on the next line. | CASH METRIC: **Cash collected / Loom send** |
| 4 | RETENTION | "Will this actually fill my calendar?" Trust is won or lost in the first 30 days. | First qualified lead ≤14 days, **first inspection ≤21 days**. 15-min no-call-back alert. Under 5/wk = proactive refund before he asks. | PROOF METRIC: **90-day retention rate** |
| 5 | ASCENSION | "It works — give me more, locked in." Now a believer and a walking case study. | **6-mo prepay** (refundable), premium-tier pull at month 3, **footage flywheel** (his job photos = your ads), referral ask on first result. | CASH METRIC: **PIF take-rate + referrals / mo** |

**The read in one line**
- Stages 1–2 are a **traffic** problem. Stage 3 is a **belief** problem. Stages 4–5 are where the $1M actually compounds — **retention and ascension, not the front door**.
- Mike never feels sold: content names his pain, the DM qualifies him, the Loom installs belief, the Stripe link defaults to PIF, the first win locks retention, and his own footage feeds the next Mike.

## Frame: 002880_16-retention-trigger.jpg

Byte-identical to `002880_16-retention-parent.jpg` (MD5 match). Same content as above. No trigger configuration is shown despite the filename.

## Frame: 002910_16-001-retention-track-key-dates-1.jpg

1. **Title bar:** none visible
2. **Shows:** same strategy document, scrolled further down. Table rows 2–5 (row 2 partially cut at top), "The read in one line" panel, and the tan gates panel now fully visible. NOT a GHL canvas or config panel; no date-tracking workflow visible despite the filename.
3. **New content visible beyond the parent frame (verbatim):**

**Don't skip the gates (in order)**
1. **Loom converts 30%+** of qualified leads before a dollar on traffic.
2. **8–10 clients renewing past 90 days** before you scale acquisition.
3. **Then volume is the lever** — not close rate. $1M ≈ 53 six-month PIFs at $18,900.

## Frame: 002912_16-002-retention-no-call-back-alert-1.jpg

1. **Title bar:** none visible
2. **Shows:** same document, scrolled slightly further than `002910_16-001`. Rows 2–5, "The read in one line", full gates panel, and the start of the next section at the bottom edge. NOT a GHL canvas or config panel; no alert workflow visible despite the filename.
3. **New content at bottom edge (verbatim):**

`VIEW 2` badge — heading: **Who runs it — delegation across $0 → $1M** (heading only; body cut off at frame edge)

## Frame: 002912_16-003-retention-proactive-refund-policy-1.jpg

Byte-identical to `002912_16-002-retention-no-call-back-alert-1.jpg` (MD5 match). Same content as above. No refund-policy workflow visible despite the filename.

## Consolidated action list

**No GHL workflow actions, triggers, or config panels were captured in any WF16 frame.** Zero actions can be specced from these images.

Strategy-level intent implied by the document's Retention row (stage 4) — for reference only, NOT a transcribed build spec:

| Implied element | Source text | Backing frames |
|---|---|---|
| Milestone target: first qualified lead ≤14 days | Stage 4 "YOUR MECHANISM" | all 5 frames |
| Milestone target: first inspection ≤21 days | Stage 4 "YOUR MECHANISM" | all 5 frames |
| 15-min no-call-back alert | Stage 4 "YOUR MECHANISM" | all 5 frames |
| Proactive refund trigger: under 5 (leads?)/wk = proactive refund before the client asks [?] unit not stated | Stage 4 "YOUR MECHANISM" | all 5 frames |
| Metric: 90-day retention rate | Stage 4 PROOF METRIC | all 5 frames |
| Gate: 8–10 clients renewing past 90 days before scaling acquisition | "Don't skip the gates" item 2 | 002910_16-001, 002912_16-002, 002912_16-003 |

**Action needed to produce a real build spec:** re-grab frames from the source video at timestamps where the GHL workflow builder for WF16 "Retention" is actually on screen.
Funnel Strategy Document (Ascension) NOT A WORKFLOW

What it is supposed to do: Same strategy doc, Ascension row. No GHL content.

Known defect / caveat:

Verbatim atlas paste — source file wf17-ascension.md (captured 2026-06-25 unless noted):

# WF17 — Ascension (frame transcription)

> **CRITICAL SOURCE NOTE:** None of the 6 frames tagged `_17-` contain GoHighLevel workflow builder content. Every frame is a video grab of a **browser-rendered strategy document** — a 5-stage funnel table ("$0 → $1M" plan) being scrolled. There is **no GHL canvas, no trigger config, no action config panel, no node labels, and no merge tags** in any frame. The filenames ("offer-6-month-prepay", "premium-tier-upsell", "implement-footage-flywheel", "request-referrals") promise workflow content, but the grabs missed the GHL screen. A GHL build spec **cannot** be derived from these images.
>
> Duplicate detection (MD5): `002880_17-ascension-parent.jpg` = `002880_17-ascension-trigger.jpg` (also identical to the `_15-`/`_16-` `002880_*` files). `002918_17-001` = `002918_17-002` (byte-identical pair). `002920_17-003` = `002920_17-004` (byte-identical pair). Only 3 unique images across the 6 files.

## Frame: 002880_17-ascension-parent.jpg

1. **Title bar:** none visible (black badge at top-left cut off, likely a section badge [?])
2. **Shows:** browser view of the strategy document — full 5-row stage table + "The read in one line" panel. NOT a GHL canvas or config panel.
3. **Visible content (verbatim where readable):**

Legend row: `cold scroll` · `committed cash` · `locked-in` · `proof / cash metric`

| # | Stage | CONTRACTOR MINDSET | YOUR MECHANISM | Metric |
|---|-------|--------------------|----------------|--------|
| 1 | LEAD GEN | Stuck at $100K/mo. Referrals dried up, estimator chases tire-kickers, **January calendar is empty**. The desire's already there — cracked walls sell themselves. | Proof-first Reels ("11 inspections in 9 days") with a **ManyChat trigger word** wired before the post goes live. Name the villain, don't teach. | PROOF METRIC: **DM conversations started / week** |
| 2 | NURTURE | Curious but skeptical — **"I've tried Facebook ads before."** Won't book a Zoom, but will reply in a DM. | 2-min micro-magnet → **SMS qualifies on BANT** (spend, decision-maker, need, timing). First line disqualifies wrong fits. | PROOF METRIC: **Comment → booked-call rate** |
| 3 | CONVERSION | Wants certainty, hates being pitched. Ready to move if the risk is off the table. | **<8-min Loom** sells product + thesis, inoculates objections. Two tiers ($1,950 anchor first), **6-mo PIF as the default**, Stripe link on the next line. | CASH METRIC: **Cash collected / Loom send** |
| 4 | RETENTION | "Will this actually fill my calendar?" Trust is won or lost in the first 30 days. | First qualified lead ≤14 days, **first inspection ≤21 days**. 15-min no-call-back alert. Under 5/wk = proactive refund before he asks. | PROOF METRIC: **90-day retention rate** |
| 5 | ASCENSION | "It works — give me more, locked in." Now a believer and a walking case study. | **6-mo prepay** (refundable), premium-tier pull at month 3, **footage flywheel** (his job photos = your ads), referral ask on first result. | CASH METRIC: **PIF take-rate + referrals / mo** |

**The read in one line**
- Stages 1–2 are a **traffic** problem. Stage 3 is a **belief** problem. Stages 4–5 are where the $1M actually compounds — **retention and ascension, not the front door**.
- Mike never feels sold: content names his pain, the DM qualifies him, the Loom installs belief, the Stripe link defaults to PIF, the first win locks retention, and his own footage feeds the next Mike.

## Frame: 002880_17-ascension-trigger.jpg

Byte-identical to `002880_17-ascension-parent.jpg` (MD5 match). Same content as above. No trigger configuration is shown despite the filename.

## Frame: 002918_17-001-ascension-offer-6-month-prepay-1.jpg

1. **Title bar:** none visible
2. **Shows:** same strategy document, scrolled near the bottom of the table section. Rows 3–5 (row 2 sliver cut at top), "The read in one line", full gates panel, and the VIEW 2 section heading with subtitle. NOT a GHL canvas or config panel; no prepay offer workflow visible despite the filename.
3. **Content visible (verbatim; table rows 3–5 as in the parent-frame table above), plus:**

**Don't skip the gates (in order)**
1. **Loom converts 30%+** of qualified leads before a dollar on traffic.
2. **8–10 clients renewing past 90 days** before you scale acquisition.
3. **Then volume is the lever** — not close rate. $1M ≈ 53 six-month PIFs at $18,900.

`VIEW 2` badge — heading: **Who runs it — delegation across $0 → $1M**
Subtitle: "Same 5 functions, mapped against revenue. Each cell = who owns it at that stage. Watch the colors march from red (you) to green (delegated) — that drift *is* the business."

## Frame: 002918_17-002-ascension-premium-tier-upsell-1.jpg

Byte-identical to `002918_17-001-ascension-offer-6-month-prepay-1.jpg` (MD5 match). Same content as above. No upsell workflow visible despite the filename.

## Frame: 002920_17-003-ascension-implement-footage-flywheel-1.jpg

1. **Title bar:** none visible
2. **Shows:** visually identical scroll position and content to `002918_17-001` (different checksum but no discernible content difference — likely a scrollbar/cursor-fade difference only). NOT a GHL canvas or config panel; no footage-flywheel workflow visible despite the filename.
3. **Content:** identical to `002918_17-001` transcription above.

## Frame: 002920_17-004-ascension-request-referrals-1.jpg

Byte-identical to `002920_17-003-ascension-implement-footage-flywheel-1.jpg` (MD5 match). Same content as above. No referral-request workflow visible despite the filename.

## Consolidated action list

**No GHL workflow actions, triggers, or config panels were captured in any WF17 frame.** Zero actions can be specced from these images.

Strategy-level intent implied by the document's Ascension row (stage 5) — for reference only, NOT a transcribed build spec:

| Implied element | Source text | Backing frames |
|---|---|---|
| 6-mo prepay offer (refundable) | Stage 5 "YOUR MECHANISM" | all 6 frames |
| Premium-tier pull at month 3 | Stage 5 "YOUR MECHANISM" | all 6 frames |
| Footage flywheel — client's job photos become the agency's ads | Stage 5 "YOUR MECHANISM" | all 6 frames |
| Referral ask triggered on first result | Stage 5 "YOUR MECHANISM" | all 6 frames |
| Metric: PIF take-rate + referrals / mo | Stage 5 CASH METRIC | all 6 frames |
| Economic anchor: $1M ≈ 53 six-month PIFs at $18,900 | "Don't skip the gates" item 3 | 002918_17-*, 002920_17-* |

**Action needed to produce a real build spec:** re-grab frames from the source video at timestamps where the GHL workflow builder for WF17 "Ascension" is actually on screen.

Gap list — what needs a fresh UI paste (Akash-only, workflow builder)

Every atlas paste below is the Jun-25 EyeFly template capture — it predates both the Jul-25 GHL-native cutover and the Jul-27 transfer-autopilot overhaul, so treat each as stale until re-pasted from Level King's live builder. GHL workflow steps are NOT readable through the API, so these must come from you. Numbered click-path per item:

  1. *3 Auto Transfer Tracking (live id 210bddd6) — the priority. In GHL, top-left location switcher → Level King → left nav AutomationWorkflows tab → open *3 Auto Transfer Tracking → click the trigger node first (confirm whether a trigger is configured at all) → then click each action node top-to-bottom and copy the panel text. Paste back here.
  2. *5 AI DQ (live id 105d0996) — Automation → Workflows → open *5 AI DQ → capture trigger + the Add-Tag value (atlas only caught "Deactivate Bot").
  3. *4 Manual Transfer Tracking — Automation → Workflows → open *4 Manual Transfer Tracking → confirm it still exists on Level King and capture the Google-Sheet + Slack/Webhook step configs (never on screen in the atlas).
  4. #1 Qualified Convo Tracking & #2 Full Convo Logging — Automation → Workflows → open each → capture the GPT prompt bodies (accidental-click filter, qualified-inquiry gate) and the sheet config.
  5. Qualified Tag → Lead Submitted Event — open it → capture the webhook x-ghl-relay shared-secret header and the CAPI token field (both redacted/unreadable in the atlas).
  6. Anything named on EyeFly's own location (Sales Pipeline Stage Triggers, CS Booked Call V3, 2. Standard: Unsubscribe, *1 Qualified Convo Tracking) — confirm whether a Level King copy exists at all; the atlas captured these on location 9sEack4dmHU906o6LsB4, not Level King.

Already LIVE and trustworthy (no paste needed): the Jordan bot goal / stop-bot / contact-info / follow-up config in the section above — pulled from the API today.

Appendix — what the Jul-27 overhaul changed (ledger + handoff cites)

Downstream of the tag: the 'qualified' tag also drives GHL workflow 47e4e83e (referenced in ledger 91678/91679). Reads-only; no writes were made building this pack.