← Back to hub

Deploying the 12 landing pages

Single-source step-by-step. Each page in this folder is a self-contained, branded landing page with a multi-step wizard form and a built-in webhook submit handler. They're ready to go live the moment you (a) point them at a webhook URL and (b) host them on any static host.

§0 What's already wired up

Every page now ships with a window.lpSendLead(leadData) helper that runs on form submit. The helper:

The payload includes every form field plus lp_id, lp_brand, lp_campaign, ghl_tag, and all UTM/fbclid params captured from the URL.

Step 1 Get a GHL Inbound Webhook URL

In your GHL sub-account (UBI Equity Group, location JEJMusjVFadrt6NphRre):

  1. Automation → Workflows → + Create Workflow
  2. Choose Start from Scratch
  3. Add trigger: Inbound Webhook (Webhook trigger)
  4. GHL displays a webhook URL like https://services.leadconnectorhq.com/hooks/<location>/.... Copy it.
  5. Add Action: Create / Update Contact — map JSON fields to contact fields:
    • firstNamefirstName / first_name / first-name (your form sends these — check the LP-META in each file for exact field names)
    • lastNamelastName
    • emailemail
    • phonephone
    • Custom field Brandlp_brand
  6. Add Action: Add Tag → tag = {{inboundWebhookRequest.ghl_tag}} (this gives you lp:equity-prequal, lp:group-quote, etc. per page — feeds your existing Brand Router workflows)
  7. Add Action: Send Internal Notification (optional) — Slack/email yourself when a lead lands
  8. Save and Publish the workflow.
Result: one workflow that handles inbound webhook leads from all 12 pages, routing by the ghl_tag field.
Alternative: create 12 separate webhook URLs (one per page) if you want per-page workflow logic. The pages support per-page webhook URLs via the meta tag (see Step 2).

Step 2 Configure the webhook on each page

Three ways. Pick one.

Option B — Global JS variable (set in your hosting platform)

If your host supports env vars or build-time injection, set:

<script>window.GHL_WEBHOOK_URL = "https://services.leadconnectorhq.com/hooks/..."</script>

Inject this above the closing </head> via your platform (e.g., Cloudflare Pages Build/Env, Netlify build snippet).

Option C — Find and replace (sed/script, do all 12 at once)

WEBHOOK="https://services.leadconnectorhq.com/hooks/JEJMusjVFadrt6NphRre/YOUR-WEBHOOK-ID"
for f in /Users/rolandomoreno/software/socialmedia/landing-pages/*/*.html; do
  # Insert meta tag right after <head> (idempotent: skip if already present)
  grep -q 'name="ghl-webhook"' "$f" && continue
  sed -i '' "s|<head>|<head>\n  <meta name=\"ghl-webhook\" content=\"$WEBHOOK\">|" "$f"
done

(macOS uses sed -i ''; Linux uses sed -i.)

Step 3 Test locally

cd /Users/rolandomoreno/software/socialmedia/landing-pages
python3 -m http.server 8080
# then open http://localhost:8080 in a browser

Visit each page, fill the form, submit.

Step 4 Deploy

Pick a static host. None of these require a backend; all serve plain HTML.

Netlify

cd /Users/rolandomoreno/software/socialmedia/landing-pages
npx netlify deploy --dir=. --prod

Same subdomain attachment pattern.

GitHub Pages

Push this folder to a public/private repo, enable Pages from the repo's Settings. Custom domains via CNAME as documented.

Your own server / GHL Sites (one-step manual)

Each .html is self-contained. Copy individual files anywhere — no build step, no dependencies (Google Fonts are CDN-fetched at runtime).

Step 5 Add Meta Pixel + CAPI (per brand)

Each page already calls fbq('track', 'Lead', ...) on submit if the pixel base code is loaded. Add the pixel base code in the head (per strategy brief §3.2):

<!-- Meta Pixel base -->
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;
s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init', 'YOUR_PIXEL_ID');
fbq('track', 'PageView');
</script>
One pixel per brand domain. Enable CAPI per pixel in GHL's Settings → Integrations → Facebook (deduplicates server-side Lead events against client-side).

Ref Per-page reference

PageFileForm fields summaryUTM campaign defaultGHL tag
L1 Equity Pre-Qualubi-equity/prequal.htmlHome price → county → credit → income → realtor Y/N → name/email/phone + SMS consentequity-prequal-fllp:equity-prequal
L2 Equity FHA vs Convubi-equity/compare.htmlCredit → home price → down payment → location → income → contactequity-fha-vs-convlp:equity-compare
L3 Equity Refiubi-equity/refi.htmlRate → balance → home value → credit → cash-out goal → contactequity-refi-breakevenlp:equity-refi
L4 Group Quoteubi-group/quote.htmlCapital tier → property type → state → purpose → as-is → close date → name/company → contactgroup-bridge-quotelp:group-quote
L5 Group Value-Add MFubi-group/valueadd.htmlAs-is → units → market → reno budget → ARV → DSCR → contactgroup-valueadd-mflp:group-valueadd
L6 Group CRE Refiubi-group/refi.htmlBalance → payment → property type → value → NOI/DSCR → market → purpose → contactgroup-cre-refilp:group-refi
L7 Hipoteca ITINhipoteca-latina/itin.htmlSSN/ITIN → years → ingreso → precio → ciudad → contactohipoteca-itin-checklp:hipoteca-itin
L8 Hipoteca FHA calchipoteca-latina/calculadora.htmlIngreso → deudas → crédito → enganche → ciudad → contactohipoteca-fha-calclp:hipoteca-calc
L9 Hipoteca Créditohipoteca-latina/credito.htmlCrédito → tiempo → ingreso → deudas → cobranzas → contactohipoteca-credito-6molp:hipoteca-credito
L10 305 Run My Numbersnumbers-guy/runmynumbers.htmlPurchase price → type → rent → address → loan needed → IG/contact305-run-my-numberslp:305-runmynumbers
L11 305 Valuenumbers-guy/value.htmlUnits → address → rent → year built → reno → owe → owner-occupied → contact305-mf-valuationlp:305-value
L12 305 Mixed-Usenumbers-guy/mixeduse.htmlOccupy 51%? → biz type → price → years → revenue → credit → contact305-mixed-use-quallp:305-mixeduse

UTM Per-page URL pattern (DSCR-style)

Match the DSCR-style URL pattern from your prior campaigns:

https://prequal.ubiequitygroup.com/?utm_source=facebook&utm_medium=Instagram_Feed&utm_campaign=equity-prequal-fl&utm_content={{ad.id}}&utm_term={{adset.id}}&utm_id={{campaign.id}}

fbclid is auto-appended by Meta and auto-captured by the page's UTM helper.

QA Verification checklist (per page after deploy)

Click each item to mark it complete. State is local to this browser session.

§ What changed in this patch session

Each of the 12 HTML files now contains:

  1. <head> injectionwindow.lpSendLead(leadData) helper that POSTs to a configurable webhook URL.
  2. Submit handler swap — the previous console.log(...) debug-only handler is replaced with window.lpSendLead && window.lpSendLead(<data>).
Both edits are idempotent — re-running the patch doesn't double-inject. Original page styling, copy, form fields, multi-step wizard, UTM capture, SMS consent are all unchanged. You can now ship leads from these pages to GHL without ever opening the GHL Funnel page editor.