AI CEO Lab← All free guides
On this page
Growth ยท Landing pages

High Converting Landing Page: The One I Build For Leads

Put most of your effort at the top of the page, match every number to the ad, write so a tired person can scan it, and track it without recording anything you'd regret.

High Converting Landing Page: The One I Build For Leads

Most landing pages are a website with the menu removed. She clicked an ad about her problem, and the page changes the subject.

Know where you stand first. Across 41,000+ landing pages, Unbounce measured a median conversion rate of 6.6% overall, and 5.1% for healthcare pages. And attention is front-loaded: Nielsen Norman Group measured about 57% of viewing time above the fold and 74% in the first 2 screens.

So this guide spends the most time on the top of the page, then covers the rest, the form, the copy and the tracking.

It's for cash-pay clinic owners and the people who build their lead pages.

You need
A host for the page, your CRM's inbound webhook, analytics you can turn features off in, UTM tags on your ads, a real Google rating, and a named provider

The mental model

Wrong

A pretty page about the clinic, every section given equal weight, and the form somewhere near the bottom.

Right

A three layer diagram of a lead page: above the fold holds the headline, subheadline, proof and form; below the fold holds proof, how it works, the provider, FAQ and the form again; behind the page sits the tag on submit, first touch attribution and 4 events.A salesperson made of text. The top does most of the work, every number matches the ad, and the copy scans while distracted.

TermWhat it means
Above the foldGets most of the attention, so it gets most of the effort
Below the foldAnswers the questions a salesperson would get in the room
Behind the pageThe tag on submit, first-touch attribution, and a few safe events

The build, weighted the way the page is weighted

1. Write the brief, then check it against the ad

4 lines: who's arriving, why she clicked, what she must understand, and the one next step. If you can't write them, no design will fix the page.

Then the rule that quietly kills more clinic pages than anything: every number on the page matches the ad. Same price, timeframe and words. She clicked "$99 consult", the page says "request a consultation", and she leaves.

Keep one anchor price in one file, and check with the congruency prompt below. If the ad itself needs work first, start with what makes a good Facebook ad.

2. Build the top of the page. This is most of the work

6 elements, in this order.

Headline: the outcome, not what you do. Use the "so that" chain. Write what you do, then add "so that" until you reach what she wants. "We offer exterior cleaning" becomes "so that your bill drops", then "so that you feel confident your solar is working". The last link is the headline.

Subheadline: how, and without what. Without downtime, without surgery, without a consult fee.

A hero image that proves the headline.

2 kinds of proof. A Google rating with the real review count, and a named provider with credentials.

The form. On a lead page, the form is the call to action.

Risk reducers under the button. Free. No obligation. Your information is never sold.

Test: read only the headlines on your page. If the offer isn't clear, rewrite them. No section headed "How it works" or "What makes us different". Put the answer in the heading.

3. Below the fold, in this order

1. Proof: cleared before and afters, or named reviews with the source.

2. How it works, in 3 steps. More reads as more effort.

3. Benefits, headline first.

4. A comparison with her other option, using the ad's numbers.

5. Who performs it: names, photos, credentials. For a clinic this beats almost anything.

6. Testimonials headlined by the benefit.

7. FAQ written as objections, including money.

8. The form again.

9. Footer: address, phone, disclaimer.

Add a sticky call to action bar, and a tap-to-call link in the header. For local services the phone is often the main conversion, and most pages don't measure it.

4. The form, and the trade you're making on purpose

HubSpot's analysis of 40,000+ landing pages found asking for age, address or phone number lowers conversion. I require phone anyway. A clinic lead with no number can't be called. You're trading some conversion rate for leads you can work. Add one line under the field saying why you need it.

So: first name, last name, email, phone, a required consent box, and a hidden honeypot field (a spam trap bots fill in).

No clinical fields. No treatment area, condition or free text. Without a BAA (the HIPAA agreement) with your CRM, nothing tying a person to a treatment should leave the page.

// The lead schema from a live clinic page. Five visible inputs.
export const leadSchema = z.object({
  firstName: z.string().trim().min(2).max(60),
  lastName:  z.string().trim().min(1).max(60),
  email:     z.string().trim().toLowerCase().email().max(120),
  phone:     z.string().trim().min(7).max(25)
               .regex(/^[+()\d\s.-]+$/, "Digits, spaces and + ( ) - only."),
  consent:   z.literal(true, { message: "Please agree to be contacted." }),

  company:   z.string().max(0).optional().or(z.literal("")), // honeypot: must stay empty

  // Campaign identifiers only. Nothing clinical is accepted here.
  attribution: z.record(z.string(), z.string().max(300)).optional(),
});

5. Rewrite the copy so it's easy to scan

Unbounce's 2024 report found pages written at a 5th to 7th grade reading level convert at 11.1%, about 56% higher than pages at 8th to 9th grade. Words of 3 or more syllables correlated -24.3% with conversion, and longer reading time -19.4%.

A physician-written page fails this by default: "controlled subdermal thermal energy delivered at two wavelengths" is the exact sentence that finding is about.

Long pages don't kill conversions. Dense ones do.

Run a readability checker and rewrite anything above 7th grade.

6. Tag the lead on submit and keep the first touch

A five step flow of the lead chain: an ad with one price, a page with the same numbers, a five field form, the CRM webhook adding the tag, and analytics events with no treatment names.Post the form to your CRM's inbound webhook, which needs no key in the page, and let the workflow create the contact and add the routing tag. Test which tag lands: it's set by the workflow, not the payload. The GoHighLevel workflow build covers that side.

If the webhook isn't set up, return an error rather than accepting a lead into nowhere.

On page load, read the campaign parameters and keep the first touch for the visit. Forward only an allowlist, and shorten the values.

One trap: practices often put the treatment in the campaign name, so it arrives as "Clinic-Botox-fb-lead-form". That puts a treatment next to a named person in your CRM. Use neutral campaign codes.

7. Track it without recording anything you'd regret

Autocapture off. It records the text of whatever was clicked, and here that text is a treatment name tied to a person.

Session recording off. It captures the form as it's typed, phone number and email included.

Track 4 events instead: form_started, lead_submitted, cta_click, call_click, each carrying the campaign and nothing about anyone's body.

Fire lead_submitted before you move to the thank-you page, or the navigation beats it and the event is lost.

posthog.init(KEY, {
  api_host: HOST,
  autocapture: false,               // clicked text on a clinic page is a treatment
  disable_session_recording: true,  // it would capture the form as typed
  capture_pageview: false,          // sent manually, with attribution attached
  capture_pageleave: true,          // scroll depth and time on page
  persistence: "localStorage+cookie",
  mask_personal_data_properties: true,
});

// fire the event BEFORE the navigation, or the router races it
track("lead_submitted", { ...readAttribution() });
router.push("/book");

8. Test the whole chain, then check it on a phone

Submit with a throwaway name. Confirm the contact shows up in the CRM with the tag and the attribution fields, and the events arrive with the campaign and no treatment name. Then delete the test contact.

Check the page at 375 pixels wide. Don't hide reviews in a carousel or content in accordions.

Then check load time. In a Google study run by fifty-five and Deloitte across 30 million+ sessions, a 0.1 second faster mobile load moved 21.6% more lead generation visitors on to the form submission page.

9. Read the funnel monthly. You're probably not ready to A/B test

"One split test a week" comes from operators at portfolio scale, with traffic a single location clinic doesn't have. A valid split test needs far more visitors than most clinic pages see in a month, so at clinic volume it's noise.

Instead, watch page views to form starts to submits by campaign, and make one change a month on the biggest drop. Drop between page view and form start? Fix the top of the page. Between form start and submit? Fix the form. And if the leads arrive but nobody books, the gap is after the page: see the med spa marketing system.

Starter prompts

Paste these as written. They are short on purpose, because the long ones drift.

Page brief and top of the page

Act as my landing page strategist. Here is the ad I'm running: [paste primary text and headline]. Offer: [price and what's included]. Audience: [who]. Produce: 1) A 4 line brief: who's arriving, why she clicked, what she must understand, the one next step. 2) 3 headline candidates built with the so-that chain, each with a "without X" subheadline. 3) The top block: headline, subheadline, what the hero image must show, 2 kinds of proof, the form, and 3 risk-reducer lines under the button. 4) The FAQ written as her objections, including the money one. Every number must appear in the ad. Invent no statistics, reviews or results. 7th grade reading level. No em dashes.

The congruency check

Here is the ad copy and here is the page copy. List every number, price, timeframe, guarantee and claim that appears in one and not the other, or differs. Then tell me the single change that would make the page feel like the same conversation as the ad. Don't rewrite anything yet.

If this happens, do this

Every one of these has happened to me or to someone I set this up for.

FailureFix
The page says $149 and the ad said $99One anchor price in one file, changed the same hour as the ad
Good traffic, almost no form startsThe top of the page. The headline says what you do, or there's no proof above the fold
Form starts, almost no submitsThe form. Too many fields, or a required field you never explained
It reads well to you and converts badlyReading level. Rewrite to 7th grade or below
Treatment names or typed phone numbers in your analyticsAutocapture and session recording off, 4 explicit events only
lead_submitted never fires on real trafficThe navigation beat it. Fire the event first
An A/B result reversed the next monthNot enough traffic. One change a month, read against the month before

The tools I use for this

ToolWhat it is for here
Unbounce Conversion Benchmark ReportMedians by industry from 41,000+ pages, plus the reading-level finding.Read
Nielsen Norman Group, Scrolling and AttentionWhat's measured about the fold: 57% of viewing time above it, 74% in the first 2 screens.Read
PostHogEvents and funnels, with autocapture and session recording off.Open
GoHighLevelWhere the lead lands and gets tagged. The inbound webhook needs no key in the page.Get it
ClaudeRuns the congruency check and the readability rewrite, the 2 edits that move the number most.Open
Some links are affiliate links. I only recommend tools I run in my own accounts.

What I'd tell you over coffee

  • Put the review count next to the rating. 4.9 means nothing. 4.9 from 312 reviews means something.
  • Measure load time on a real phone on cellular, not your laptop on office wifi.

The free skill

It carries the top-of-page block, the section order, the ad congruency check, the form spec, the tag on submit, the chain test and safe analytics for a clinic page. Give it your offer and your ad copy and it returns the page brief and the event plan.

How to use it: copy the whole thing, paste it into your bot (or save it as a skill file if you use Claude Code), and say “build my landing page”. It walks you through the rest. Works with any agent that can read your files.
high-converting-landing-page.md
---
name: lead-landing-page
description: Builds a cold-traffic landing page that generates leads. One audience, one offer, one action, every number matching the ad. Tags the lead on submit through the CRM webhook, keeps first-touch attribution, and sets up PostHog safely for a medical page (autocapture and recording off, explicit events only). Trigger on "build my landing page", "why isn't my page converting", "track my landing page", "set up posthog on my page".
---

# Lead Landing Page

Help the user build a lead page. One audience. One offer. One action. Every number matches the ad. Ask for the live ad copy and the offer before writing anything.

## Brief first (4 lines)
Who's arriving. Why she clicked. What she must understand. The one next step.

## Top of the page (most of the effort)
1. Headline: the outcome, found with the "so that" chain, not what the clinic does.
2. Subheadline: how, and without what (downtime, surgery, a consult fee).
3. A hero image that proves the headline, with concrete offer math (a unit price, not a bundle).
4. 2 kinds of proof: a Google rating with the real review count, and a named provider with credentials.
5. The form.
6. 3 short risk reducers under the button: free, no obligation, information never sold.

Test: read only the headlines. If the offer isn't clear, rewrite them. No label headings like "How it works". Put the answer in the heading.

## Below the fold, in order
Proof (cleared before and afters or sourced reviews), how it works in 3 steps, benefits, comparison with the ad's numbers, named providers, testimonials headlined by the benefit, FAQ written as objections including money, the form again, a map, footer with address, phone and disclaimer. Add a sticky call to action bar and a tap-to-call link in the header. Scarcity only if true. A price calculator only when the offer has options.

## Congruency rule
One anchor price in one file. Every number on the page appears in the ad. When the ad changes, the page changes the same hour.

## Form
First name, last name, email, phone (required, with one line saying why), a required consent box, and a hidden honeypot that must stay empty. No clinical fields. Without a BAA, nothing that ties a person to a treatment leaves the page.

## Copy
5th to 7th grade reading level. Short words, short sections. Rewrite anything above 7th grade before launch. Never invent a statistic, review or result. No em dashes.

## Tag on submit
Preferred: the CRM's inbound webhook, which needs no key in the page. The workflow creates the contact and adds the routing tag. Fallback: a serverless function with the API key in an environment variable that upserts, then adds the tag separately, because upsert alone can drop tags. Confirm which tag lands with a real test. Normalise phone to +1XXXXXXXXXX. If the webhook isn't configured, return an error instead of accepting the lead. Keep a dry-run flag for demos, and show a plain link to the thank-you page under the success message.

## Attribution
On load, capture utm_source, utm_medium, utm_campaign, utm_content, utm_term, fbclid, gclid, msclkid, gbraid, wbraid, landing page and referrer. Keep the first touch for the visit. Send it with the lead. Forward an allowlist only, values truncated. Campaign names use neutral codes, never a treatment.

## PostHog for a medical page
```
posthog.init(KEY, {
  autocapture: false,               // clicked text is a treatment name
  disable_session_recording: true,  // would capture the form as typed
  capture_pageview: false,          // captured manually with attribution
  capture_pageleave: true,
  mask_personal_data_properties: true,
});
posthog.capture("$pageview", { route, ...attribution });
track("form_started" | "lead_submitted" | "cta_click" | "call_click", { location, ...attribution });
```
Events carry a location and the campaign, never a treatment. No treatment name in any pixel or conversions API event either. Fire `lead_submitted` before navigating to the thank-you page.

## Test the chain
Submit with a throwaway name. Confirm the contact, tag and attribution fields in the CRM, and the events in PostHog with the campaign attached. Delete the test contact. Check the page at 375 pixels wide, with reviews and content visible, not in carousels or accordions. Measure load time on a real phone on cellular.

## Read monthly
Page views, form starts and submits, by campaign. Change the biggest drop, one change a month. Below roughly 40,000 visitors a month, don't run split tests.

What done looks like at thirty days

  • Every number on the page appears in the live ad, and the copy grades at 7th grade or below
  • A test submit created a tagged contact with attribution, and the test contact was deleted
  • No event, pixel or campaign name mentions a treatment

Want the page, the tag and the follow-up built as one system?

The page is step three of the Predictable Patient Pipeline. Inside the AI CEO Lab, Demand Engine walks from ad to page to booked call with your offer.

Pick a side.

Most people read this and forget it by Friday.

The other kind builds the thing that week. They stop needing free guides, because they are too busy running actual systems.

Free guides stay free. The room is where the builds happen.