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:
- Pain or service choice. What do you need help with?
- Urgency. How soon do you need it done?
- Zip code. Service area gate. Pre-filled from visitor IP on Cloudflare edge.
- Testimonials and trust. Reviews, license number, response time proof.
- 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.