St. Pierre · Dan $100K · Jul 28, 2026
Lead Tracking Playbook
Everything learned on Jul 28 about how leads flow from Facebook ads to Dan's calendar — reconciled against the real iMessage thread — plus the decisions already made and the exact execution list. A fresh session can run this page top to bottom with zero prior context.
EXECUTED — Jul 28 evening. All 10 agent checklist items are done (details + proof inline in section 5). Every build is ledgered with a rollback path. What still needs Akash is in section 6 — it grew by three quick items (a click-path to finish the Layer-1 re-point, deleting the dead *3 workflow, and the photo-ask approval). One extra find: an afternoon test-cleanup had deleted Akash's delivery contact, silently breaking all lead SMS — recreated, repointed, and re-proven the same evening.
1Mission + where we are
The 30-day focus: Dan (Level King, DFW concrete leveling) makes an extra $100K ≈ 60 jobs ≈ 25 qualified leads transferred per week. Everything else is parked.
FB ad → Messenger→
bot qualifies→
lead lands in brain→
SMS packet to Akash (~5 s)→
Akash pastes to Dan (iMessage)→
Dan calls in <30 s
- WORKING Delivery: rebuilt + proven end-to-end Jul 28 (instant-send, ~5 s).
- WORKING Conversion signal to Meta for Dan's campaign: 27 live "Lead" events since Jul 21.
- WORKING Bookkeeping (since Jul 28 evening): every real conversation logs to the brain with its ad fingerprint, every hand-off is QC-gated and logged; one unified transfer log ties convo → QC → transfer → delivery (see the tracking SOW).
- HALF-CLOSED The last hop to Dan is still manual, but outcomes no longer live only in the thread — a read-only morning ingest reconciles the Dan thread into the brain daily (D4, live).
2Dan lead scoreboard — reconciled from the real thread
Read directly from the Akash↔Dan iMessage thread (148 messages, Jul 20–28). This corrected several stale "next actions" that the morning list still carried.
| Lead | Sent | Real status (from thread) |
|---|---|---|
| Cindy Shaw Romaguera (Mansfield) | Jul 22 | OUT OF AREA — pre-targeting-fix; not worth chasing |
| Richard Woods (Haltom City) | Jul 22 | PROPOSAL SENT ~$850 small job; Dan met him Jul 23 |
| Anas Khwaja (Irving) | Jul 24 | MEETING TUE JUL 28 — today |
| Ann Zwiacher (Colleyville) | Jul 25 | ENGAGED — filled Dan's form + sent photos Jul 27 |
| Joseph Anwah (Southlake) | Jul 25 | NO OUTCOME LOGGED — Dan said "on it"; needs a nudge |
| Nathan Green (Flower Mound) | Jul 26 | IN DAN'S CRM — waiting on photos |
| Scott Edwards (Plano) | Jul 27 | DECLINED BY DAN (pool-equipment liability) — Akash owes him a let-down via FB |
| Cindie Stewart (Roanoke) | Jul 27 | DECLINED BY DAN (not a fit) — Akash owes her a let-down via FB |
| Spencer Johnson + Sam Etoum | Jul 28 09:48 | SENT (the morning list wrongly said unsent). Sam → ENGAGED per Dan 13:54 ("crack in the wall… typically Foundation. I’ll call him") — foundation referral to Austin Allen likely |
Bonus intel from the thread: Dan's real target areas since Jul 22 = Frisco, The Colony, Little Elm, Flower Mound, Southlake. Dan works 7 days/week and calls back in ~30 seconds. He requires photos before any site visit → the bot's intake must collect a photo. Company name is "Level King" (never "Level King Pro" — that's just the domain). Austin Allen = foundation-repair contractor Dan referred to us = warm B2B prospect.
3The tracking machine — atlas vs live
Full audit lives in the Facebook Lead Tracking SOW. The one-screen version:
| Piece | Status | One line |
|---|---|---|
| Layer 1 — count every real conversation + ad fingerprint | LIVE | Closest to atlas spec, but logs to the retired EyeFly Google Sheet |
| Layer 2 — extract + QC + log every hand-off | NEVER FIRED | No trigger wired (same gap was visible in the atlas recording itself) |
| Layer 3 — manual transfer form | SCAFFOLD | Trigger form may not exist |
Dan's CAPI dataset 3727287274206232 | HEALTHY | Universal n8n sender, every 5 min, 27 live events since Jul 21 |
SP web pixel 959350118926295 | MIGRATED JUL 28 | Was Pipeboard-dependent (dead) — rewired to the vault system-user token, test-fired clean, ledgered + reversible |
| GHL's built-in CAPI step in the qualified workflow | UNKNOWN | If on, Dan's leads double-count to Meta — 2-click check (Akash) |
| New market pages (TX/ATX/HTX/SATX…) | NO DATASETS | Each needs a messaging dataset minted in Events Manager (UI-only) before its ads can optimize |
4Decisions made (co-CEO, Jul 28) — do not re-litigate
- D1 — Tracking rows live in the brain database with dashboards on top. No Google Sheets mirror unless Akash later says "sheets too".
- D2 — Layer 2 is rebuilt inside the proven n8n transfer rail (extract → QC gate → needs-review vs transferred → log + notify). The dead "*3 Auto Transfer Tracking" GHL workflow gets deleted once the rail carries its semantics — it has never fired; there is no history to lose.
- D3 — One log, two doors: the manual transfer form feeds the same rail and the same log as auto transfers.
- D4 — Daily Dan-thread ingest: YES. A read-only morning step reads the Akash↔Dan iMessage thread, updates lead outcomes in the brain, and flags anything owed. Never sends anything.
- D5 — Pipeboard retired from the SP relay: DONE Jul 28 (vault system-user token, proven with a test fire, change-ledgered, reversible).
- D6 — Every new market page gets a messaging dataset as part of the page-factory checklist — added as an Akash click-step (UI-only in Events Manager), then routed through the universal sender.
- D7 — Photo required at intake: the bot asks for a photo before transfer (Dan's hard requirement). Ships as a config change through the normal approval gate since it touches live bot behavior.
5Execution checklist — agent work, in order Claude
- 1. Verify the migrated SP CAPI relay's first scheduled run succeeded (n8n executions for
rHCGWJnWv3oSGv3w); mark the ledger row verified.
DONE First post-migration hourly run succeeded 18:00 UTC (execution 19553, 2s, clean) after erroring hourly on the dead token; ledger row 91914 marked verified. - 2. Layer 1 readback: pull "*1. Qualified Convo Tracking" live config, diff field-by-field against the atlas attribution list, add missing fields via API, re-point the log row from the EyeFly sheet to the brain (D1). Prove with one synthetic first message.
DONE All 9 atlas attribution fields already exist as live custom fields (nothing to add). New brain tablesp_qualified_convo_tracking+ n8n receiver live; synthetic first message proved the row lands with full fingerprint. GHL-side swap of the Sheets action = 2-min Akash click-path (section 6). - 3. Build Layer 2 in the rail (D2): complete extraction to the atlas field list, add the "client-facing?" QC gate + placeholder/AI-leak checks, needs-review branch, transfer log row. Prove with one dirty + one clean synthetic lead.
DONE QC gate ("client-facing?" + placeholder/AI-leak checks) now runs on every lead in the bridge; QC fail → needs-review + transfer refused; drain only sends QC-checked qualified leads (10-min backstop keeps speed-to-lead). Proven: dirty synthetic blocked, clean synthetic SMS-delivered 17:45 UTC. One log two doors:v_sp_transfer_tracking. - 4. Build the D4 daily Dan-thread ingest (read-only, morning chain), backfilled from today's reconciliation.
DONE Live: reads the Dan thread read-only each morning (06:45 chain step 2.95), classifies outcomes, updates the brain, flags owed items. Backfilled all 10 leads; first run already caught Sam Etoum → ENGAGED + Dan’s CRM-entry suggestion. - 5. Ad-URL fingerprint sweep (read-only) across live ads; deliver the fix list as an approval pack.
DONE Swept both ad accounts: zero live ads anywhere; all 11 staged relight ads are Messenger-type (ad ID passes natively, no URL to tag). Verdict: no fixes needed; LP-bound ads get the URL-tag rule at relight. Pack in _scratch/deliverables/2026-07-28. - 6. Media mirror for Joseph, Scott, Spencer (durable lead-media pages); nudge list for Joseph's stale outcome into the next Dan packet.
DONE All three pages live (Joseph’s newly mirrored, 1 photo): sp-lead-media.stpierre.workers.dev/{joseph-anwah, scott-edwards, spencer-johnson}. Joseph nudge saved as a P1 task due Jul 29 + flagged in the outcomes table. - 7. Draft the two FB let-down replies (Cindie, Scott) for Akash to send — drafts only, no sends.
DONE Both drafts ready in _scratch/deliverables/2026-07-28/fb-letdown-drafts.md — nothing sent. - 8. Prepare the photo-ask intake change (D7) as an approval pack.
DONE Approval pack staged (soft-ask default ★, hard-gate alternative): _scratch/deliverables/2026-07-28/photo-ask-intake-approval-pack.html. Deploy is one reversible API call after your go. - 9. Fix the 5 open audit items from the morning close-out: Nathan G. duplicate, re-create Cindy S. + Richard W. deleted contacts (+ root cause), scrub debug text from packet notes, fix dead follow-up nudges.
DONE Nathan G. duplicate stub quarantined · Cindy S. + Richard W. GHL contacts recreated (deletions were unledgered — now tagged do-not-delete) · Spencer + Sam junk ZIP/notes scrubbed · Anas’s stale contact link fixed. Follow-up nudges: root-caused — no follow-up workflow exists at all; the 6-step cadence build is on your GHL click list. BONUS: found + fixed the deleted delivery contact that had silently broken all lead SMS since 15:20. - 10. End-to-end proof + screenshot pack (SOW Phase 5), then close the SOW.
DONE One synthetic lead ran the whole chain: conversation counted with ad fingerprint → qualified → extracted + QC pass → transfer logged → SMS delivered 17:57 UTC, all visible in one v_sp_transfer_tracking row. SOW closed.
Standing guardrails: no live-ad edits without an approval pack · nothing sends to Dan or any lead automatically — drafts and packets only · GHL workflow-builder work is Akash-only (hand him numbered click-paths) · every external write gets a change-ledger row with a rollback path.
6Akash-only list ~15 min total
- Send the two FB let-downs (Cindie Stewart, Scott Edwards) — drafts will be ready per item 7 above. You told Dan you'd handle both.
- Phase 0 clicks: open "Qualified Tag → Lead Submitted Event" → click the Meta Conversion API step → disable if on. Confirm Jordan is the selected agent in the sleep-bot steps of *3 and *5.
- Mint messaging datasets for TX + ATX (then each new page): Events Manager → Messaging → select page → create. ~1 min each, UI-only.
- Text Dan (one message): the DripJobs/Zapier key re-ask is already in the thread from this morning — bundle the booking-link ask if he hasn't replied.
- Nudge Joseph Anwah's status next time you talk to Dan (only lead with no outcome). His job photo: durable media page.
- NEW — finish the Layer-1 re-point (~2 min): open "*1. Qualified Convo Tracking" → on the qualified branch click "#1 Update Qualified Convo_Raw Tracking" (the Google Sheets step) → add a Custom Webhook action right after it: method POST, URL
https://eyefly.app.n8n.cloud/webhook/sp-layer1-convo-b38cb8fcdbb342c5, custom data:first_message={{message.body}}·utm_source={{contact.attributionSource.utmSource}}·utm_campaign={{contact.attributionSource.utmCampaign}}·utm_medium={{contact.attributionSource.utmMedium}}·utm_content={{contact.attributionSource.utmContent}}·fbclid={{contact.attributionSource.fbclid}}·ad_url={{contact.attributionSource.url}}·ad_id={{contact.lastAttributionSource.adId}}→ Save + Publish. Keep the Sheets step until the first real row lands in the brain, then delete it. - NEW — delete "*3 Auto Transfer Tracking" (the rail now carries its semantics; it has never fired, nothing to lose). Automation list → *3 → delete. API can't delete workflows.
- NEW — approve the photo-ask (D7): read the approval pack (item 8) and reply "approve photo ask" — deploy is one reversible call.
7Learnings + gotchas (today's, worth keeping)
- The transfer database only knows "queued → sent to Akash." Real outcomes (declined, proposal sent, meeting booked) live in the iMessage thread — which is why the morning action list carried stale items. D4 closes this permanently.
- The atlas itself shipped the double-sender. The qualified workflow fired both the n8n relay and GHL's built-in CAPI action. The built-in action is the one that silently broke in April (blank Messenger ID → cost per qualified conversation ~$58 → ~$428). One sender only, forever.
- Messaging datasets ≠ web pixels. Messenger leads never hit a web page; only page-linked messaging datasets see them, and they only accept LeadSubmitted/Purchase. Dataset creation is UI-only (API permission-blocked).
- The EyeFly fleet relay has been silent since Jun 22 (4,025 lifetime events). If any EyeFly client campaign still spends, Meta is optimizing blind for it — worth one check against active spend, not yet asserted.
- Wrangler deploys need
--branch=mainor the custom/prod URL never updates (hit again today). - Atlas ≠ gospel: the recording captured a machine with its own bugs (Layer 2's missing trigger, EyeFly-branded sheets). Rebuild the semantics, not the artifacts.
8Links + IDs
| Thing | Where |
|---|---|
| Tracking audit + rebuild SOW (full detail, 9 sections) | stpierre-fb-lead-tracking-sow-docs.pages.dev |
| GHL location (St. Pierre Consulting) | 6c4MSgjdfngrPhwWD2cb |
| Level King page / messaging dataset | 1308868515634109 / 3727287274206232 |
| SP web pixel | 959350118926295 |
| n8n: universal Meta Lead sender (5-min) | gp1NILFWhEfkUGx3 · ledger sp_capi_fired_events |
| n8n: SP CAPI relay (hourly, vault token as of Jul 28) | rHCGWJnWv3oSGv3w · rollback = change_ledger before-image |
| n8n: transfer rail (drain / bridge / poller / watchdog / needs-review) | 6ET0nCwUKY35WBwR · jTTms4dkSsa60TfI · lB6TcayZVpR4yuey · UPyCozsmQozGVK55 · stJHgoYAbvZFU1zI |
| Atlas extraction (17 workflow docs) | Build-Plans/ghl-atlas-text-extraction/ |
| Full-account workflow map (Jul 25, re-verified Jul 28) | Build-Plans/ghl-automation-map-2026-07-25.html |
| Dan thread reconciliation | brain signals row, domain "lead-transfer", Jul 28 |