Most bad renovation leads aren't a targeting problem. They're a capture problem. A one-tap form lets anyone through and tells you nothing: not the room, not the scope, not the budget. Here's the system we use to get quote-ready kitchen and bathroom leads instead: the ad, the landing page, a quiz-style survey, tracking that teaches Meta what a good lead looks like, and the exact tech stack and prompts to build it yourself.
Most kitchen and bathroom leads come from one of two places: a lead site that sells the same enquiry to three or four builders, or a Meta instant form that fills itself in from the person's Facebook profile. Both have the same flaw. The homeowner never had to think.
An instant form is one tap. People submit it while scrolling past a nice kitchen photo, forget they did, and don't answer when you call. You get a name, a number and maybe a suburb. You don't know which room, whether it's a full rip-out or new benchtops, what they want to spend, whether they own the place, or if they're starting this year or just collecting ideas.
So you spend the first ten minutes of every call qualifying, drive out to measure-ups that were never going to sign, and Meta keeps sending you more of the same people, because as far as it can tell, every one of those taps was a success.
Better leads don't come from better targeting. They come from asking better questions before the lead reaches you.
If you're weighing up where your jobs should come from, our breakdowns of cost per acquisition for trade businesses and Google vs Meta for trade leads cover the economics. This guide is about the build.
Each step does one job. The ad earns the click. The landing page earns the start. The survey does the filtering and collects what you need to price the job. Tracking tells the ad platform which people turned into real leads, so it finds more of them. And the CRM gets the whole picture the moment the lead lands, so you or an AI SMS can reply while they're still on the page.
None of it is new technology. What's different is that every step is built around one idea: make the lead tell you who they are before you pay attention to them.
Run the ad with a website conversion objective, not lead forms. You want the click to go to your own page, where you control the questions, not to an instant form Meta fills in for them.
Good hooks need something to sit on. You don't need a studio or an agency to make it: a phone, Canva and an AI writing tool cover almost everything.
The creative that works best is usually the simplest: the owner, on their phone, explaining the offer to camera. 30 to 60 seconds, ideally standing in a finished kitchen or bathroom. Who you are, what you do, who it's for, and "answer a few quick questions for a ballpark on yours". It feels local and trustworthy in a way a polished ad doesn't. Add captions, because most people watch with the sound off.
| Format | Size | Where it shows |
|---|---|---|
| Portrait 4:5 | 1080 x 1350 px | Facebook and Instagram feeds. The best all-rounder on mobile. |
| Square 1:1 | 1080 x 1080 px | Feeds, and a safe fallback anywhere. |
| Vertical 9:16 | 1080 x 1920 px | Stories and Reels. Keep text and faces away from the top and bottom edges, where the app's buttons sit. |
Make each creative in at least 4:5 and 9:16, so it fits every placement without Meta cropping it badly. Start with 8 to 12 creatives, roughly 60% images and 40% video.
The landing page exists to get the survey started. Everything else is a distraction.
This is the part that does the work. A quiz-style survey asks one question per screen, answered with big tap buttons, with contact details at the very end. It feels nothing like a form.
It sounds backwards, but a well-built survey often converts as well as a short form, and the leads are far better. Here's why:
| # | Question | Answers |
|---|---|---|
| 1 | Which room are you renovating? | Kitchen / Bathroom / Both / Ensuite or laundry |
| 2 | What kind of job is it? | Full renovation / Partial update (benchtops, cabinets, fixtures) / Not sure yet |
| 3 | How big is the space? | Small / Medium / Large or open-plan / Not sure |
| 4 | What budget do you have in mind? | Under $15k / $15k to $30k / $30k to $60k / $60k+ |
| 5 | Do you own the home? | Own outright / Mortgaged / Renting (ends the survey) |
| 6 | What type of property is it? | House / Townhouse or duplex / Apartment or unit |
| 7 | Do you have plans or a design yet? | Yes, plans ready / Ideas and inspiration / Starting from scratch |
| 8 | When are you looking to start? | ASAP / 1 to 3 months / 3 to 6 months / Just researching |
Then, and only then: name, email, phone and suburb or postcode.
Every lead arrives knowing which room, how big the job is, roughly what they want to spend, that they own the home and when they want to start. That's what we call quote-ready: you know whether it's worth a measure-up before you dial.
After the contact step, offer an optional upload: "Got a few photos of the space? Upload 2 or 3 and we'll come to the measure-up prepared." Make it clearly optional, and never block the lead on it.
Not everyone will do it. The ones who do are the most motivated leads you'll get, and the photos show you the layout, the condition and any surprises (old tiles, plumbing in an awkward spot) before you get in the car. Store uploads in a private storage bucket, only accessible to your team, and say so in your privacy policy. Photos of the inside of someone's home are personal.
This is the step most people skip, and it's why their ads keep finding tyre-kickers. Meta optimises for whatever event you tell it is a success. If that event is "tapped submit on a form", it finds people who tap submit. If it's "finished an 8-question survey as a homeowner with a real budget", it finds those people instead.
PageView on load and Lead only when the full survey and contact step are submitted. Not on the first question.Lead event server-side from your backend, with hashed email and phone and the same event_id so Meta de-duplicates it.fbclid and the UTM tags from the URL and store them on the lead, so every lead traces back to the ad that produced it.The survey filters the leads you get today. The tracking changes who Meta shows your ads to tomorrow. Together, lead quality gets better over time instead of worse.
Running Google too? The same idea applies: conversion tracking on the finished survey, with enhanced conversions. Our Google vs Meta comparison covers when each one makes sense.
A simple structure gives Meta enough data to learn fast. Splitting a small budget across lots of ad sets starves every one of them.
| Setting | What we use |
|---|---|
| Campaign | One campaign per offer (for example kitchens, and a separate one for bathrooms). Objective Leads, conversion location Website, optimise for the Lead event. |
| Budget | At least $50 a day, set at campaign level. |
| Ad sets | One, broad. Location is your service area (a radius or postcodes). Age and gender left open, unless your own sales data says otherwise. The survey does the filtering. |
| Ads | 8 to 12 creatives, about 60% images and 40% video, with 3 to 5 versions of the primary text. Call to action: Get quote. |
| Advantage+ creative | Turn off the automatic enhancements (text changes, image touch-ups, music). They can change your copy into something you didn't approve. |
| Tracking | UTM tags on every ad, so each lead traces back to the exact ad that made it. |
The fastest way to break a good campaign is to double its budget overnight. Meta treats a big jump as a new campaign and starts learning again, and your cost per lead usually jumps with it.
Don't change the creatives and the budget at the same time. If results move, you won't know which change did it.
A quote-ready lead goes cold fast. The homeowner who just finished your survey is probably filling in two other builders' forms too. An automatic SMS within seconds ("Thanks Sarah, got your details. Is now a good time for a quick call about the bathroom?") keeps them warm, and an AI agent can confirm their details and book the measure-up before a human picks up the phone.
The data on this is consistent. See why lead response time matters for the numbers.
Everything in this guide is built around one number: what it costs you to get a job booked. Cost per lead is easy to see in Ads Manager, so it's the number most people chase. It doesn't matter. A cheap lead that never answers, rents, or "just wanted a price" isn't cheap. It's a wasted call and a wasted measure-up.
Cost per booked job = cost per lead ÷ the share of leads that book.
| Cheap one-tap lead | Survey lead | |
|---|---|---|
| Cost per lead | $40 | $120 |
| Leads that book a job | 1 in 20 | 1 in 4 |
| Cost per booked job | $800 | $480 |
| Calls to get one job | 20 | 4 |
| Wasted measure-ups | Lots | Few: you already know the room, budget and timing |
Example numbers to show the maths. Use your own booking rate.
The lead that costs three times as much is the cheaper one: it costs less per job, takes a fifth of the phone calls, and saves you driving out to quote jobs that were never going to sign. That's why the survey asks 8 questions including budget, and why the tracking tells Meta which leads booked. You're not trying to make leads cheap. You're trying to make jobs cheap.
Track it monthly: ad spend ÷ jobs booked. Our guide to cost per acquisition for trade businesses goes deeper on the numbers.
You don't need a funnel builder subscription. A survey funnel is a fast static page plus a small backend, and the tools are free or close to it.
Lead event fires if you prefer a confirmation page.Never put an API key in the page. Anything in index.html can be read by anyone. The page sends the lead to your Supabase Edge Function, and the function, which holds the keys, posts it to your CRM and Meta. That's why the stack has a backend at all.
Open Claude Code in an empty folder (or your GitHub repo) and give it something like this. Swap in your business details.
Build a mobile-first kitchen and bathroom renovation lead
funnel as a static site for GitHub Pages. Business: Coastline
Kitchens & Bathrooms, Newcastle NSW. Brand colour #14B8A6,
dark background, modern sans-serif.
Pages: index.html, thank-you.html, privacy.html, terms.html.
Plain HTML, CSS and vanilla JS. No frameworks, no build step.
index.html
- Headline: "Get a ballpark for your new kitchen or bathroom."
- One project photo and one line of proof under it, then the
survey straight away.
- A quiz-style survey: one question per screen, big tap
buttons with icons, a progress bar ("Step 3 of 8") and a
Back link. Auto-advance on tap.
- Questions, in order:
1. Which room are you renovating? Kitchen / Bathroom /
Both / Ensuite or laundry
2. What kind of job is it? Full renovation / Partial update
(benchtops, cabinets, fixtures) / Not sure yet
3. How big is the space? Small / Medium / Large or
open-plan / Not sure
4. What budget do you have in mind? Under $15k / $15k-30k /
$30k-60k / $60k+
- Under $15k ends the survey with a friendly "that's below
the jobs we take on" message. No lead is sent.
5. Do you own the home? Own outright / Mortgaged / Renting
- Renting ends the survey with a friendly "sorry, you need
to own the home" message. No lead is sent.
6. Property type? House / Townhouse or duplex /
Apartment or unit
7. Do you have plans or a design yet? Yes, plans ready /
Ideas and inspiration / Starting from scratch
8. When are you looking to start? ASAP / 1-3 months /
3-6 months / Just researching
- Final step: first name, last name, email, mobile, suburb or
postcode, with a consent checkbox for calls, SMS and email.
Validate an Australian mobile and a 4-digit postcode.
- Optional photo upload (up to 3 images) after the contact
step, clearly marked optional.
- Capture fbclid and utm_* from the URL and include them.
- Add Cloudflare Turnstile (site key: TURNSTILE_SITE_KEY).
- On submit, POST JSON to SUPABASE_FUNCTION_URL with every
answer, contact details, tracking and an event_id (UUID).
Then fire fbq('track', 'Lead', {}, {eventID: event_id}) and
go to thank-you.html. Never put API keys in the page.
- Meta Pixel ID: PIXEL_ID, PageView on every page.
privacy.html: an Australian Privacy Principles style policy
covering what we collect, the Meta Pixel and Conversions API,
photo uploads stored privately, SMS follow-up, and how to request
access or deletion. Contact: hello@coastlinekb.com.au.
terms.html: simple website terms of use.
Then write a Supabase Edge Function (TypeScript) that receives
the POST, verifies Turnstile, saves the lead to a "leads" table,
stores the photos in a private bucket, sends the Lead event to
the Meta Conversions API (hashed email and phone, same event_id)
and forwards the lead to my CRM. Give me the SQL for the table.
Claude Code will build the pages, show you the files and explain how to deploy them. Review the copy, check it on your phone, and push it to GitHub. Treat the privacy policy and terms it writes as a first draft to check, not legal advice.
Almost every CRM accepts new leads over an HTTP POST: a webhook URL, or an API endpoint with a key. Your Edge Function sends something like this:
POST https://api.your-crm.com/v1/leads
Authorization: Bearer YOUR_CRM_API_KEY
Content-Type: application/json
{
"first_name": "Sarah",
"last_name": "Nguyen",
"email": "sarah@example.com",
"phone": "0412345678",
"postcode": "2290",
"source": "Meta - Bathroom renovations",
"custom_fields": {
"room": "Bathroom",
"job_type": "Full renovation",
"size": "Medium",
"budget": "$30k-60k",
"ownership": "Own outright",
"property_type": "House",
"plans": "Ideas and inspiration",
"timeframe": "1-3 months",
"photo_urls": ["https://.../signed-link"]
},
"tracking": { "fbclid": "...", "utm_campaign": "..." }
}
Every CRM names its fields differently, and that's where Claude Code earns its keep. Give it your CRM's API documentation (paste the "create a lead" or "create a contact" page, or the link) and ask it to map the survey answers to your CRM's fields, including any custom fields you've set up. Then test with one fake lead, check it lands in the CRM with every answer, and you're live.
Fewer total submissions than a one-tap instant form, usually. But far more usable leads, because the ones who finish are real homeowners who told you what they want. With tap answers and contact details last, a well-built survey often converts about as well as a short form.
Around 8 tap questions, plus contact details. That covers the room, the scope, the budget and the timing, which is everything you need to decide on a measure-up. Past that, each extra question costs more completions than the answer is worth.
Yes, as ranges. It's the answer that saves you the most wasted measure-ups, and people are far happier to tap "$30k to $60k" than to type a number or be asked on the phone.
A landing page with a survey, if lead quality matters. Instant forms are cheap per lead because they're easy to submit, and that's exactly the problem: they're easy to submit without meaning it.
Yes. The Pixel alone misses a meaningful share of conversions because of ad blockers and browser privacy settings. CAPI sends the same events from your server, so Meta sees more of your real leads and optimises better.
Start at $50 a day or more, set at campaign level, with one broad ad set and 8 to 12 creatives. Less than that and Meta doesn't get enough data to learn who your good leads are.
After at least two weeks of steady data, raise the budget by about 20%, then wait 3 to 5 days for the cost per lead to settle before the next increase. Big jumps reset Meta's learning and usually push your cost per lead up.
The wrong question. Cost per lead doesn't matter on its own: cost per booked job does. A $120 lead that books 1 in 4 is far cheaper than a $40 lead that books 1 in 20.
With Claude Code, mostly yes. It writes the pages, the backend function and the CRM mapping from a plain-English brief. You'll still need to set up the accounts (GitHub, Supabase, your domain, Meta) and test it properly before you spend on ads.
We build this exact system for kitchen and bathroom businesses, on your own ad account and your own domain, ready to go live within 48 hours of access, then hand it over in your name.
Your ad accounts Your domain No lock-in