Multi-step funnels

Every campaign you publish gets a funnel landing page generated from a category template. Funnels convert 2 to 3x better than static landing pages for local services because they qualify the lead before asking for contact info.

What they are

Quiz-style multi-step pages that capture intent, urgency, location, and contact information. Each step is one decision. Visitors do not see a long form on arrival, which dramatically reduces bounce.

Funnels are available on Pro and Max. Free tier uses static landing pages.

Standard 5-step funnel

Most categories use a 5-step funnel:

  1. Pain or service choice. What do you need help with?
  2. Urgency. How soon do you need it done?
  3. Zip code. Service area gate. Pre-filled from visitor IP on Cloudflare edge.
  4. Testimonials and trust. Reviews, license number, response time proof.
  5. Contact form. Single step with name, email, phone. Lead is captured here.

30 category templates: plumber, dentist, HVAC, electrician, roofer, painter, landscaper, pest control, cleaner, junk removal, lawyer, auto repair, christmas lighting, moving, real estate, insurance, pool services, carpet/flooring, waterproofing, pressure washing, window/door, garage door, appliance repair, locksmith, handyman, fencing, tree service, financial services, education, healthcare. Plus a generic fallback.

Emergency hybrid

Emergency ad groups (intentPriority 1) get a different single-page template instead of the standard 5-step. Designed for high-urgency searches like "burst pipe", "locked out", "AC not working".

Layout: dominant click-to-call CTA above fold, inline lead capture form, and a 3-step mini-funnel below fold for the not-yet-ready visitors.

46 intentPriority=1 ad groups are mapped across 19 categories (plumber, HVAC, electrician, locksmith, roofer, pest control, auto repair, appliance repair, garage door, tree service, cleaner, painter, waterproofing, pool services, handyman, fencing, window/door, moving, junk removal). Detection is by explicit map plus a regex fallback for emergency keywords.

Personalization

Three runtime personalization layers:

  • Step-level interpolation. {{step_1_label}} tokens in step 2+ headlines get replaced with the visitor's prior choices.
  • Dynamic Text Replacement. The keyword from the Google Ads URL parameter swaps into headlines (when enabled per template).
  • Geo personalization. The visitor's city/region from Cloudflare edge headers gets injected into social proof text.

Hosting

Funnels are served by a Cloudflare Worker at *.localad.app by default, or your custom domain if you connect one. The Worker handles:

  • Cookie-based A/B variant routing
  • Per-account GTM container injection
  • Consent Mode v2 (US: granted, EU/EEA/GB/CH: denied)
  • Dynamic call number insertion (DNI) script injection
  • gclid + fbclid capture at the edge
  • Intent sub-paths (/free-estimate, /pricing, /same-day, /how-it-works) that swap headlines and CTAs
  • 24h edge cache + AdsBot bypass for variant testing

Tracking integration

Every funnel auto-injects:

  • GTM container snippet (your dedicated container)
  • GA4 measurement ID
  • Google Ads conversion linker
  • Meta Pixel (Pro+ if configured)
  • TikTok and LinkedIn pixels (Max if configured)
  • DNI script for call tracking

Funnel events fire to dataLayer: landing_page_view,funnel_step_complete (with time_on_step_ms),scroll_depth (25/50/75/100%),form_submission (with conversion_value),phone_call_click.