St. Pierre Sales System — As-Built Status + Launch SOW updated 2026-07-14

Objective

Turn every real lead into one owned next action, then carry signed-and-paid clients into onboarding and campaign launch.

Why it matters

The lead system is deployed. The sales spine, scripted follow-up, close-to-cash handoff, and Collins delivery job are now connected.

Akash does next

Work the nine new-lead actions, run booked calls, and keep spend approval. The system handles scripted follow-up and records.

Status

10 real contacts · 10 open actions · 1 booked · scripted SMS live · 7-day clean-run proof started · 0 signed-and-paid sales

Lead records
10 real · normalized ✅
Next actions
10 open · one per lead ✅
Scripted SMS
Live · quiet-hours safe ✅
Close to cash
Signed + paid gate live ✅
Revenue proof
0 won · $0 cash · pending
July 14 live update — actions 1–5 complete; first-sale proof running live
★ Next move: Akash works the nine new-lead actions and the booked call. Do not call the sales system proven until one real client signs, pays, and reaches Collins’s onboarding handoff.
Executive summary — what got completed Jul 12–13 no action

The reversible fixes were executed, verified, and ledgered. Spend, nurture activation, contact enrollment, and human-facing tests remain off.

1 · Q17 pixel dedup — fixed, deployed, and proven in Meta
  • Why dedup never showed (3 stacked causes): (a) the Messenger/instant-form lead path never wrote the shared event ID, so the server sent a fallback ID (sp_funnel_events:33-style) browsers could never match; (b) no conversion ever fired through both browser and server at once; (c) the API endpoint used for read-back can't display dedup — that indicator is Events-Manager-UI-only.
  • Bonus bug found & fixed: browser fired Schedule with a different UUID than the server (inviteeUuid vs calendlyEventUuid) — those would never have deduped. Both sides now share one ID.
  • Guardrail: if the relay ever falls back to a dedup-blind ID again it warns loudly and logs a brain signal — can't silently recur.
  • Proof: 32/32 lead-ingest + 25/25 booking-funnel tests pass; production version 6de4d1fa-477b-4941-9bb9-a32aeca2da1b is live; Meta Test Events marked server Schedule schedule:009b18f0-c746-440f-81a0-72e7c09b515c Deduplicated beside the matching browser event.
  • Pixel audit settled: browser code, server relay, landing pages, and all paused ads already agree on pixel 959350118926295 ("EyeFly Concrete" is just a stale name). No change needed. Minor flag: retired services.eyeflydigital.com still fires this pixel — cleanup, not a blocker.
2 · Message-matched landing page — LIVE at sp-offer-lp.pages.dev
  • sp-offer-lp.pages.dev — dynamic headline via ?h=<hook-key>, same VSL, same embedded Typeform on every variant, pixeled (PageView + ViewContent) on pixel 959.
  • 13 headlines: a default control + 12 message-matched variants — guarantee, stop-buying-leads, add-sales-rep, run-your-facebook, low-budget-system, lock-out-competitors, looking-for-five, if-you-own, foundation, waterproofing, crawl-space, concrete-leveling. Keys mirror the ad hook IDs, so ad → headline match is automatic; bad key falls back to control.
  • Attribution carries through: variant key flows into Typeform hidden fields + the pixel event — every booked call traces to its hook. Lead/Schedule stay server-side (matches the Q17 dedup scheme, no double-count).
  • Copy discipline: locked v1.8 offer only — every promise ends on "or you don't pay"; no $1/deposit framing. ★ Current default: the hero omits proof numbers ($14M+ closed, 10k+ inspections, 150+ markets) to match the homepage's conservative posture.
  • Verified live: 200s on page/Typeform/VSL/pixel script; 3 variant params + fallback checked in a real browser. No DNS pointed, no traffic sent.
3 · Paid ads — mismatch found and corrected; seven remain paused
  • Earlier diagnosis: the original seven disapprovals shared risky revenue targeting, guarantee phrasing, and stale $1 framing. The current approved claims register does support “10+ qualified inspections in the first 7 days”; that number is not the mismatch.
  • Live audit found: the seven paused r2 ads still used “Start for $1,” 5–10 language, $14M+ proof, and stpierre.ai destinations. That contradicted canonical v1.8 and the new page.
  • Executed fix: each ad now uses a new v1.8 creative and its matching sp-offer-lp.pages.dev/?h=… destination. Read-back proved every ad is still PAUSED, contains no $1 language, and carries the canonical offer. Review is processing; no budget or delivery setting changed.
  • Sweep bonus: 26 more disapproved ads found in the older "Fresh 9" campaign (Jul 8). That copy is clean — likely video/thumbnail/LP trigger or false positive → manual appeal in Ads Manager recommended (SOW Phase 4), not a rewrite. Note: its "$1 start" copy predates the locked offer anyway.
4 · Nurture rails — staged to the last safe step, zero sends
  • Email: 7-day value sequence drafted in Instantly ("SP Nurture — Daily Value"), unsubscribe header on, zero senders/leads attached (physically cannot send), and the mailing address left as a visible blocker. The planned sender a.stpierre@stpierreai.com stays unattached until the Aug 1 warmup health check.
  • SMS: GHL Draft/off workflow 313ce3bf… now has only the exact stage-long-term-nurture tag entry point; the unsafe broad pipeline trigger was removed. The builder detached the four SMS actions and three waits, so the rail is explicitly incomplete and cannot be published. Rebuild + DND/stop-on-response validation + Akash-only 5477 test are captured as the next task.
  • Copy audit: the draft matches approved claims C27–C36: $0 down, 10+ qualified inspections in the first 7 days, week-to-week, and pay after results. Its $10M+ proof line is the approved claims-register figure. Full package: _scratch/deliverables/2026-07-12/nurture-rails-staged.html.
Automated message inventory — what can send, what is stale, and what is off needs cleanup

Bottom line: the current funnel has five customer texts. The bigger risk is a separate, old Facebook “concrete” workflow that is still published and does not match the current St. Pierre Digital offer. This was a read-only audit: no messages were sent and no live settings were changed.

Live current funnel — five prospect SMS scripted automation

1 · Immediately after Typeform application

Hey {{first_name}}, Alex here - got your application.

Pick a time for the launch call here:

{{personal_booking_link}}

Your custom demo unlocks after the booking is confirmed.

Reply STOP to unsubscribe.

2 · Immediately after Calendly booking

You're booked for {{appointment_time}}.

I already built your preview — what your Facebook ad + booking bot would look like in your market. Have a look before our call: {{personal_preview_link}}

On the call we'll review it together. It's $0 down, the first 7 days are result-gated, then week-to-week only if you continue.

Reply STOP to unsubscribe.

3 · 24 hours before the call — skipped when the booking is too close.

FYI - your launch call is {{appointment_time}}.

Reply YES so I know you're still good.

Reply STOP to unsubscribe.

4 · One hour before the call

Your launch call is in 1 hour.

Have the page/market ready if you want me to look at anything specific.

Reply STOP to unsubscribe.

5 · Fifteen minutes before the call

15 min heads up.

Launch call link should be in the calendar invite.

Reply STOP to unsubscribe.

Safety: consent, STOP/DND, missing-phone, duplicate-send, and quiet-hours checks apply. Three booking reminders are currently queued only for Akash’s test phone ending 5477.

Live internal phone alerts — sent only to Akash’s 5477 test/owner number reference only

New lead

SP new lead: {{name}} / {{company}}
Fit: {{fit_status}} | Phone: *{{last4}} | {{source}}
Svc: {{services}} | Area: {{service_area}}
Deck: {{link}}

New booking

SP booked: {{name}} / {{company}}
Time: {{appointment_time}}
Phone: *{{last4}} | {{source}}
Deck: {{link}}
Stale but published — Facebook “concrete” comment → Messenger → SMS needs cleanup

Trigger: a Facebook comment containing “concrete” on page 415921554946498. This old workflow calls the business “St. Pierre Concrete Contractors” and promises a free concrete quote. It must first be checked against the required EyeFly wind-down; then unpublish it if unused, or quarantine and rewrite it if still needed.

One random public comment reply

Awesome, check your DM!
Just DM'd you! Let me know if you got it!
I just DM'd you!
Check your DMs!

Initial Messenger message

Hi {{contact.first_name}}! Are you interested in getting a free quote on your flatwork concrete project?

Tap "Get Quote" below to get started now:

Messenger — ask for phone number

Great! What is the best phone number to text it to? Please include area code!

Messenger follow-up 1

Hey {{contact.first_name}} - You still there?

Reply here with your phone number (including area code)!

Messenger follow-up 2

Hey {{contact.first_name}} - Following up on this!

Just message me your number below to get a free, fast quote on your concrete project :)

Messenger — phone received

Awesome, I'm about to text you! Text me back to confirm that I got the right number :)

Message me here if you have any issues!

SMS introduction

Hey {{contact.first_name}}, this is Akash from St. Pierre Concrete Contractors!

SMS opt-in check

Thanks for messaging us on facebook for a free, fast concrete quote!

Please reply YES to confirm this is the correct number :)

SMS follow-up 1

There?

SMS follow-up 2

Hey {{contact.first_name}}! This is Akash from St. Pierre Concrete Contractors again. Are you getting these messages?

Just reply YES to confirm your number to get a free, fast concrete quote!

SMS after a reply

Awesome! Thank you for confirming that, I'll give you a call in just a moment to chat about your concrete project!
Just text or call this number with any other questions!

Messenger after phone confirmation

Thanks for confirming your phone number! I'll give you a call in just a moment to chat about your concrete project!

SMS follow-up 3

Following up on this! Are you still interested in a free, fast quote on your concrete project?

SMS follow-up 4

Hey {{contact.first_name}} - I haven't heard back from you! If you're still looking for a concrete quote, please give me a quick call!

Internal hot-lead SMS to Akash’s 5477 number

You have a new Hot Lead. Call ASAP:

Name: {{contact.name}}
Number: {{contact.phone_raw}}
Published internal Slack actions — still present even though Slack is off remove actions

Email reply workflow → #ghl-replies

New Email Reply:

Message: {{message.body}}
Time: {{right_now.date}} @ {{right_now.time_ampm}}
Name: {{contact.name}}
Phone: {{contact.phone}}
Email: {{contact.email}}
Website: {{contact.website}}

Qualification confirmation workflow → #2-call-confirmed

Your appointment with {{contact.name}} has been confirmed for {{appointment.start_time}}.

Latest Message: {{message.body}}

Cleanup is captured as exact tasks: remove only these Slack actions, preserve the useful workflow steps, and verify the remaining paths. No Slack message was sent during this audit.

Legacy $1 recovery texts — still in code, but the normal entry path is disabled reference only

The current offer does not use these. Checkout and next-steps deck entry are switched off, and the old follow-up records are suppressed, cancelled, failed, or held for manual action. Old Stripe events can still reference this code, so it should be retired after confirming no wind-down dependency.

Application/deck bumps

Quick bump, {{first_name}} - I built your next-steps page from the application.

It shows the $1 build and what happens before the launch call:

{{deck_link}}

Reply STOP to unsubscribe.
Your page is here if the tab got lost:

{{deck_link}}

If the capacity or service line is wrong, reply with the correction.

Reply STOP to unsubscribe.
Last bump on this app.

If you still want me to build the preview before the launch call, start here:

{{deck_link}}

Reply STOP to unsubscribe.

Abandoned checkout

Looks like checkout got interrupted.

The $1 just starts the preview and reserves your market. No weekly billing starts today.

Finish here:

{{checkout_link}}

Reply STOP to unsubscribe.
Quick reminder - the $1 start is still open here:

{{checkout_link}}

I use it to block spam before building the preview. No weekly billing starts unless you approve launch.

Reply STOP to unsubscribe.

Paid but not booked

Got the dollar.

I'm starting the system preview now. Book the launch call here so I can walk you through it:

{{booking_link}}

Reply STOP to unsubscribe.
Your $1 start is in.

Only thing left is the launch call.

Book here:

{{booking_link}}

Reply STOP to unsubscribe.
Don't leave this half-done.

The preview is the useful part, but I need the launch call booked so I can walk you through it.

Book here:

{{booking_link}}

Reply STOP to unsubscribe.
Last bump on scheduling.

Book here when you want to see the system preview:

{{booking_link}}

Reply STOP to unsubscribe.
Draft/off — cannot currently send no action now
  • Instantly: seven nurture emails are drafted, but the campaign has no sender and no leads attached. Exact copy: nurture rails package.
  • GHL weekly nurture: draft/off and incomplete. Its four planned SMS are in the same nurture package; they are not live.
  • Sylvie chat agent: delivery mode is off. Its old roofing prompt sends nothing.
  • Workflow count: 119 total — 16 published and 103 draft. The other published workflows use tags, notes, webhooks, DND, or workflow removal and contain no customer message steps.
★ Recommended cleanup order: remove the two Slack actions first; then confirm the old Facebook page’s wind-down role and unpublish the stale concrete workflow if it is no longer required.
The sales system — as-built flowchart reference only

Auto automated · You manual/your SLA · Loop retargeting re-entry · $ revenue moment

Stage 1 · Cold traffic — Instagram, $100–200/day Paused — Meta review in progress

Testing matrix Auto

Permutations across creatives × above-fold captions × offers × pain-point callouts × ICPs. Built: Free-Build CBO $95 campaign + Hook Packs (7 r2 rebuilt) + Winners scale shell — all paused. Message-match rule: ad hook = ?h= param = landing headline.

click
Stage 2 · Landing page LIVE

sp-offer-lp.pages.dev Auto

  • Dynamic headline — 12 variants + control via ?h=, mirrors the ad hook
  • Same VSL + same embedded Typeform on every variant
  • Every visitor pixeled on 959 (PageView + ViewContent w/ variant key)
typeform submit / bounce
Stage 3 · Typeform — three outcomes Funnel verified 17/18 → 18/18 after deploy
A · Books right away

Calendly booked

Application → Calendly → CRM contact/opportunity → confirmation SMS, idempotent dedup. Scripted pre-booking SMS runs automated (approved lane, quiet-hours guarded).

B · Info, no booking

Manual qualify call You

Call to qualify + book. Also enters the nurture rail.

C · Bounces

Pixeled, no submit Loop

Drops into retargeting pool via pixel 959.

branch c + non-bookers
Stage 4 · Retargeting + nurture Shell exists — rebuild is SOW Phase 2

Retargeting campaign Loop Auto

Contextual callouts; case-study-driven BOF, static pain-point TOF. Destinations: Typeform LP (primary) · Instant Form · DM · direct-call. Status: old BOF shell paused, predates v1.8 — rebuild scoped in Phase 2.

↩ re-enters at Stage 3 — Typeform
Nurture rail — captured, not closed
Daily email7-email sequence DRAFT — address needed; sender recheck Aug 1
Weekly SMSGHL shell DRAFT/off — exact trigger saved; 4 messages still need rebuilding
calendly booking
Stage 5 · Booked call — speed-to-lead SLA

Call immediately You

The moment they book, you call — full sales mode, setter-grade SLA. Pre/post-booking flows automated around the call.

sales call
Closed

Deal closed $

Month 1 = deposit — the figure-it-out month. Onboarding fires automatically.

Not yet

Back to nurture Loop

Email + SMS + retargeting keep working them.

automated onboarding
Stage 6 · Post-close call cadence
Day 0
Sales call → close
Deposit collected, launch call booked next-day
Day 1
Launch call
Preview exact campaign, launch same day
Day 3
Check-in
Early signal review
Day 14
Review
Mid-month optimization
Day 30
Review
Results → convert to full retainer

Offer promise: $0 down, 10+ qualified inspections in the first 7 days, and pay only after results (canonical v1.8, locked 2026-07-12).

SOW — close the remaining gaps to full launch needs you
Phase 0 · Nurture safety gate
  • Q17 and offer alignment are complete. Acceptance: Instantly has the real mailing address; its sender passes the Aug 1 health check before attachment; GHL has the four-message path, DND and stop-on-response verified, and is tested only to Akash’s 5477 phone.
Phase 1 · Clear review, then launch
  • Wait for Meta to finish reviewing the seven v1.8-matched ads, then run a fresh policy + destination read-back.
  • Only then unpause approved ads at the confirmed budget. Spend still requires Akash’s exact “launch” confirmation.
  • 2-hour post-launch check: pixel firing from LP, spend delivering, zero disapprovals resurfacing, first leads land in CRM with attribution.
  • Acceptance: ads ACTIVE, LP traffic visible on pixel 959, first Typeform submit traces hook → headline → CRM.
★ Recommended: launch at the smallest confirmed budget only after the matched set passes review.
Phase 2 · Retargeting rebuild — day 1–2 after launch, ~half day, me
  • Audiences off pixel 959: LP visitors, VSL viewers, Typeform openers/non-submitters, submitters/non-bookers (exclude booked/closed).
  • Rebuild BOF campaign on v1.8: case-study/value creatives at bottom, static pain-point images up top; destinations Typeform LP + Instant Form + DM + direct-call.
  • Wire Instant Form leads into the same CRM ingest path (it now writes shared event IDs post-fix).
  • Acceptance: retargeting live at ~20% of budget, audiences populating, created paused → you flip on.
Phase 3 · Tracking & daily triage — day 2–3, ~half day, me
  • Hook-level report: spend / CPL / booked-call rate per ?h= variant (ad → LP → Typeform → Calendly, powered by the attribution params + pixel events).
  • Kill/scale rules per the media-buying standard; daily snapshot into the brain + a persistent dashboard.
  • Acceptance: one URL you check each morning; every dollar attributable to a hook.
Phase 4 · Cleanup (non-blocking) — this week, ~2 hrs, me + one manual appeal from you
  • Appeal the 26 "Fresh 9" disapprovals in Ads Manager (copy is clean — likely video/LP trigger or false positive; also stale "$1 start" framing → decide rebuild vs abandon). You for the appeal clicks.
  • Stop retired services.eyeflydigital.com from firing pixel 959 (cross-property contamination).
  • Sweep remaining stale runbook/status lines; graduate this doc + nurture package into 01-Projects/StPierre-GTM/.
★ Recommended: abandon the Fresh 9 campaign rather than appeal 26 ads — its "$1 start" copy predates the locked offer; the r2 hook-pack set supersedes it.
Evidence, ledger & file paths reference only
ItemWhere
Activity Ledger rows1703 (Instantly draft) · 1704 (CF Pages project) · 1707 (worker + relay source fix) · 1732–1738 (7 r2 ads) · 1752 (production deploy) · 1755/1757/1759 (Meta test + dedup proof) · 1764 (7 v1.8 creative swaps) · 1766 (safe GHL draft)
Q17 fix + runbook01-Projects/St_Pierre_Digital/Funnel-and-Offer/stripe-dollar-start/worker.js · 01-Projects/StPierre-GTM/ads-autopilot/tracking/sp_capi_relay.py · tracking/RUNBOOK-capi.md (Q17 proof recorded)
Landing page source01-Projects/StPierre-GTM/message-matched-lp/index.html · registered in .codex/references/url-directory.json + persistent-dashboards.md
Nurture package_scratch/deliverables/2026-07-12/nurture-rails-staged.html (7 emails + 4 SMS + GHL build spec)
Message automation audit119 GHL workflows checked: 16 published, 103 draft · all 16 published workflow trees inspected · current funnel worker and follow-up queue checked · Sylvie delivery mode confirmed off
Paid ad IDs120248027363140390 · …467920390 · …478720390 · …482200390 · …485410390 · …489980390 · …495800390 — v1.8 creatives attached; all paused at 2026-07-13 read-back
Test evidence32/32 lead-ingest + 25/25 booking-funnel checks pass · worker health check 200 · Meta shows Schedule “Deduplicated / Server” with the same browser event ID · LP verified live on 3 variants + fallback
RollbacksWorker: npx wrangler rollback929c0bba · LP: delete Pages project sp-offer-lp · ads: restore the seven prior creative IDs from ledger row 1764 · Instantly: keep draft inactive/remove attachments · GHL: keep Draft/off and remove the remaining tag trigger

Nothing was unpaused, no budgets changed, no contacts were enrolled, and zero human-facing messages were sent. The message inventory was a read-only audit. The Q17 deploy, Meta dedup proof, seven paused v1.8 creative swaps, and safe GHL draft were ledgered on 2026-07-13. Email activation, nurture SMS activation, and paid spend remain off.