Roofing Facebook Ads: Copy and Audiences Tested With AI on a Small Budget

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Roofing Facebook Ads: Copy and Audiences Tested With AI on a Small Budget.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Roofing Facebook Ads: Copy and Audiences Tested With AI on a Small Budget.

Use AI to draft three offers, a few creative angles and two audience setups, then run them as a four-week grid with a hard spend cap: lifetime budgets on every ad set, one variable changed at a time, and a stop rule tied to what a lead is worth to you rather than to clicks.

Roofing ads attract scrutiny, so the claims have to be true, and a small budget means the data will be thin. This plan is built around both facts: honest offers, and decisions made on your cost per booked inspection instead of a platform's idea of a winner. AI drafts the variants. You set the cap, the offers and the stop rule.

Follow me on Instagram@sagnikteaches

Work out what a lead is worth before spending a dollar

Every test needs an answer to one question first: what is a lead worth to you? Start from your own jobs. The figures below are invented to show the sum, so replace each one with a number from your records.

Connect on LinkedInSagnik Bhattacharya
  • An average replacement job brings $14,000 of revenue at a 28% gross margin, which is $3,920 of gross profit.
  • An average repair job brings $900 at 40%, which is $360.
  • From your past leads of the kind an offer attracts, take the share that became jobs. Say a free roof-check lead became a replacement 10% of the time and a repair 20% of the time. Value per lead is 0.10 x $3,920 plus 0.20 x $360: $392 plus $72, or $464.

A firm happy to spend roughly an eighth of a lead's value to get it has a target cost per lead of about $60. That is a stop-rule input, not a market benchmark: Meta, not you, decides what leads cost where you work, and the grid exists to find out whether you can afford it. The break-even figure is the full $464, but the target sits far below it because leads also cost phone time, estimates and jobs lost.

Subscribe on YouTube@sagnikteaches

Value differs by offer, which matters later. A leak-repair lead is worth less than a roof-check lead, so a test that compares only the cost per lead will pick the wrong winner. And the cap comes before the test: at a $60 target, a $900 budget buys 15 leads if everything goes to plan. If that number feels too small to learn from, run fewer variants. Do not raise the cap to pay for more.

The Complete Excel Course with AI Integration thumbnail

The Complete Excel Course with AI Integration

From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.

By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner

Buy now

The four-week grid, with a hard cap on every cell

Here is a five-person residential roofing firm's plan, which changes one thing at a time and never spends beyond its cap. Each ad set gets a lifetime budget with an end date. That choice matters: Meta's help centre says that on days with better opportunities it may spend up to 75% over a daily budget (while keeping each calendar week within seven times the daily figure), whereas a lifetime budget is a hard cap rather than an average.

WeeksQuestionVariantsAd sets and lifetime budgetsCap
1 and 2Which offer?A: roof check with photo report. B: leak repair at a posted price. C: replacement quote in three days.3 ad sets at $168 each over 14 days$504
3Which creative?Winning offer with an annotated roof photo, against a 20-second owner video.2 ad sets at $98 each over 7 days$196
4Which audience setup?Winning offer and creative with controls only, against controls plus suggestions.2 ad sets at $98 each over 7 days$196
Total$896

The rules of the grid are short. The same service radius, the same form and the same landing details apply to every variant, so only the thing under test differs. Budgets are equal within a stage. Nothing is edited once an ad set is live. Meta's learning-phase page says an ad set usually leaves learning after about 50 results in the week after its last significant edit, and that editing an ad, ad set or campaign during learning resets it. At these budgets nothing here will reach 50 results, and Meta may label the ad sets "Learning limited". That is not a failure, but it does mean every comparison is directional, and the reason to stop editing is to keep the comparison clean.

Spend-per-variant sets the quality of the evidence. At a $60 target, a $168 offer variant can spend almost three times the target, enough to tell "a few leads" from "none". A $98 creative variant gets about one and a half times the target, so those stages only break ties between candidates that already look sound. For the question of how much to spend before judging any AI-run ads, see how much to spend on AI-run ads before judging results, which this grid applies to a roofing budget.

Honest offers and claims that survive review

Roofing marketing has a reputation to live down, and AI will cheerfully write the lines that earn it. Give the model these rules, then check its output against them by hand.

  • "Free" means no charge. If there is any fee, any condition or any "free with a repair", do not write it.
  • Only your own photos. Never use stock roofs, other firms' jobs or AI-generated before-and-afters. A job photo needs the customer's permission.
  • Credentials only if they are real, and the model must not invent awards, ratings, years in business or "trusted by hundreds of homeowners".
  • No fear. Skip claims that a roof is about to collapse or that a storm has surely damaged theirs.
  • No insurance promises. Do not say you will handle the claim, deal with the insurer or get it approved. In many places that reads as adjusting. The companion tutorial on roof damage reports for insurance claims has safe wording, and the same caution applies to deductibles: leave them out unless an adviser has cleared the line.
  • Financing needs a check. Meta's special ad categories include financial products and services, and its page says that in some countries the housing, employment and financial categories limit options such as age and some audience tools. Read Meta's page on choosing a special ad category before advertising consumer financing. The page does not mention home services either way.
  • Promises you can keep: if you say "photo report in two working days", you need to be able to deliver it on a busy week.

A prompt that writes offers, angles and variants

The prompt supplies the facts it may use and names the facts it may not invent. That second list is the one that protects you, because a model asked for "roofing ad copy" reaches for the usual credentials by default.

You are writing Facebook and Instagram lead ad copy for a small residential roofing company.

Facts you may use: [services offered; service radius; typical response times I can honestly meet; licence and insurance status if I say so; prices I allow you to quote].
Facts you may NOT invent: awards, ratings, years in business, certifications, guarantees, customer numbers, prices, response times.

Task: write 3 offers. For each give a primary text whose first line works before the "See more" cut-off, a short headline, a one-line description and a call-to-action button that fits a lead form.

Rules: plain words. No urgency I have not listed. No claims about insurance, claims, deductibles or storm damage. No fear of an imminent collapse. Use "free" only where I say there is no charge. If you need a fact I have not given you, write ASK instead of guessing.

An illustrative first draft looked like this:

OFFER A
Primary text: A+ rated roofers trusted by hundreds of homeowners. Not sure if your roof needs repair or replacing? We'll inspect it, send a photo report in two working days and tell you plainly what we found. Free, no obligation.
Headline: Free roof check, photo report
Description: Book this week, limited slots

OFFER B
Primary text: Leak around a vent or chimney? Repairs from $[price]. Send us a photo and we'll confirm the price before we visit.
Headline: Leak repair, price first
Description: Fast, local, no hassle

OFFER C
Primary text: Storm damage? We deal with your insurer so you don't have to. Get a written roof replacement quote in three days.
Headline: Storm damage specialists
Description: Insurance claims handled
  • "A+ rated" and "trusted by hundreds of homeowners" are invented credentials, despite the rule. Delete both.
  • "Limited slots" is urgency nobody supplied. Delete it, or replace it with a real count.
  • Offer C is the dangerous one. "We deal with your insurer" and "insurance claims handled" promise adjusting, and "storm damage specialists" implies a verdict on the roof. Rewrite it as a plain replacement quote.
  • "Fast, local, no hassle" is filler that nothing supports. Cut it.
  • "$[price]" is a placeholder the model correctly left open. A real price goes in, and it must match what customers pay.

Offer B survived almost untouched, which is typical: the more specific the facts, the less there is for the model to embellish. Meta's own setup screens may offer automatic variations of your text in some configurations. Check what each option would show, and switch off anything you have not read and approved line by line.

Six ad angles, with the rule for each

Galleries of roofing ads are easy to find. What they leave out is the rule that keeps each angle honest. Every angle below uses your own phone photos, and each can sit in the grid as an offer or a creative variant.

AngleVisual (your own)Sample primary textThe rule
Photo-report roof checkA roof photo with one finding circledNot sure whether your roof needs a repair or a replacement? We will check it, send a photo report within two working days and tell you plainly what we found. The check is free."Free" must be free, and the turnaround must be one you can hit in a busy week
Leak repair at a posted priceYour crew sealing a pipe bootLeak around a chimney or vent? Repairs start from $[price]. Send a photo and we confirm the price before we visit.The price must be real, and "from" must match what customers actually pay
Before you sellA page from one of your inspection reportsSelling soon? A roof inspection report shows what is sound and what is not before a buyer asks. Book a slot this month.No promises about sale price or buyer behaviour
Seasonal checkGutters full of leaves or granulesBefore the weather turns, have the roof and gutters checked. We photograph what we find and list what needs doing and what can wait.No fear language; "can wait" has to be honest
Meet the crewA 20-second clip of the owner on siteHi, I'm [first name] from [company]. Here is what we look at on every roof inspection, and why we send photos with every report.Real people only, with their agreement
Finished jobBefore and after photos from a completed jobNew roof finished in [two] days. Here is what the old one looked like and what we replaced.Only jobs you did, with the customer's permission, and no timeline claim you cannot repeat

If you need a steady supply of own-job photos for these, turning finished roofs into a month of posts shows a routine that feeds both organic posts and ad creative from the same camera roll. The general method for comparing variants without wasting spend is in testing ad variations with AI on a small budget.

Audience setups to test with Advantage+

On a Leads campaign the default path is Advantage+ audience, which Meta describes as letting its AI find the audience instead of you defining it, using signals such as past conversions, Meta Pixel data and interactions with previous ads. For a roofer that changes what testing audiences means. You no longer pick interests and hope. You decide the fences, which Meta calls audience controls (location, minimum age, language and custom audiences to exclude), and optionally give hints, which it calls audience suggestions (custom audiences, lookalikes, age, gender and detailed targeting). Controls are limits Meta should not go beyond. Suggestions are starting points it may leave behind when it expects better results. Meta recommends its fuller Advantage+ campaigns for leads, which is why Advantage+ leads for a local service business is worth reading alongside this grid.

SetupControlsSuggestionsUse it whenWatch-out
1. Controls onlyService radius around your yard (say 25 miles), a minimum age you choose, existing customers excludedNoneFirst test, as the baselineA wide radius means long drives, and the cap does not pay for fuel
2. Controls plus suggestionsThe sameAn age range and home-improvement interests, or your past-customer list as a custom audienceOnce a baseline existsSuggestions are hints, so judge by results and not by the setting
3. Tight radius10 miles around your best past jobsNoneWhen crew capacity limits where you can workA small pool delivers slowly and is more likely to show "Learning limited"

The grid uses setups 1 and 2 in week four, and keeps setup 3 as an option. If you upload a customer list, include only people who agreed to receive marketing from you, and follow the platform's terms for lists.

The instant form: three questions and a review screen

Lead ads with instant forms need the Leads objective, with Instant forms chosen as the conversion location. Build the form in Ads Manager if you want qualifying questions: Meta's help page says custom questions and conditional logic are only available there, and that forms made in Business Suite collect contact details only. A privacy policy is required to run instant forms.

FieldTypeWhy it is there
Full name and phone numberPrefilled contact fieldsMeta may prefill them from the person's profile, which means less typing
What do you need? Leak repair, roof check, replacement quote, not sureMultiple choiceRoutes the lead to the right call script and offer
When would you like us to look? This week, within a month, just researchingMultiple choiceSets how quickly you call
Town or postal areaShort answerConfirms they are inside your radius; keep it the only typed field

Meta's lead ads guidance says to ask as few questions as possible. It also says fewer multiple-choice questions bring more submissions, while more of them typically bring better-quality leads, and it recommends testing form length. Two multiple-choice questions plus one typed field is a sensible middle. Then choose the form type. Meta's page on instant form types describes More volume (the default, built for speed), Higher intent (an extra review screen plus a note that the business may follow up) and Rich creative. Higher intent appears only in Facebook Feed and Instagram feed on mobile. Since every roofing lead needs a phone call anyway, Higher intent is the better fit: the review screen gives people a chance to confirm their details, and the note that you may follow up tells them to expect contact.

The first hour after a lead arrives

Ad money is wasted at the phone, not in the ad. Before launch, decide who calls, within how many minutes, and what happens at six in the evening. Meta's lead ads guidance even suggests ad scheduling so your team will be ready to respond to leads as they come in. AI is useful for drafting the messages and a short call script. A person sends and calls. Check the rules on contacting people by text where you work, since consent requirements differ.

These are illustrative drafts with placeholders. The first goes out within minutes, the second after a missed call, the third next morning.

Hi [first name], it's [your name] at [company]. Thanks for your request about a roof check. I'll call you between [time] and [time] today. If a text is easier, reply with the best time to ring.
Hi [first name], [your name] from [company]. I tried you about your roof check and missed you. I'll try again at [time], or reply with a better time.
Subject: Your roof check with [company]. Hi [first name], following up on your request. To book the check I need three things: the best day this week, whether there is ladder access on each side of the house, and any leaks you have noticed. Reply here or call [number]. [your name]

Allow three attempts over five days, then stop and log the lead as "no contact". Leaving those out of your sheet makes your cost per booked inspection look better than it is. If you want the lead to land in your CRM and trigger the first message automatically, Facebook lead ads to CRM and first reply walks through the automation, and the same pattern works for a sheet.

Tracking: names, sources and a weekly sheet

The grid only teaches you something if every lead can be traced back to its ad set. That takes three habits.

  • Name everything by stage, variant and radius. For example campaign "RF-Leads-Nov-Grid", ad set "S1-OfferA-R25" and ad "A-Photo-v1".
  • Put the ad set name in your CRM's lead source field, for instance "FB form S1-OfferA". If leads arrive some other way, a lead without a source is a lead you cannot count.
  • Keep one weekly sheet with these columns: stage, variant, spend, leads, booked inspections, quotes sent, jobs won, cost per lead, cost per booked inspection and notes.

After weeks one and two, an illustrative readout might look like the table below. Value per lead comes from the firm's own history, assumed here as 10% replacements plus 20% repairs for offer A, 40% repairs for offer B and 14% replacements for offer C.

OfferSpendLeadsCost per leadBooked inspectionsCost per bookedValue per leadValue divided by cost per lead
A: roof check with photo report$1684$422$84$46411.0
B: leak repair, posted price$1687$243$56$1446.0
C: replacement quote in three days$1682$841$168$5496.5

This is why the grid tracks value and not just cost. Offer B has the cheapest leads and the cheapest booked inspections, and it ranks last on value. Offer A costs more per lead but is worth far more per lead, so it ranks first. Offer C produced only two leads, which tells you nothing yet. The firm carries A into week three and keeps C as a challenger. None of these counts is large enough to prove anything, so treat the ranking as a decision about where the next $98 goes, not as a verdict.

Rules that stop false winners

With a few leads per variant, the risk is not missing a winner. It is crowning a fluke. Write the rules down before launch so that you cannot bend them once the numbers arrive.

SituationRuleFrom the example
A variant has spent twice the target cost per lead with no leadPause it and move its budgetAt a $60 target, that is $120 of spend with zero leads
A variant leads on value divided by cost for the whole stageCarry it forward, keep the runner-up as the challengerA at 11.0 against 6.5 and 6.0
Cost per lead falls but booked inspections do not followCheck the form and the follow-up before blaming the adCheap leads that never answer the phone
The ad set shows "Learning limited"Leave it alone and judge by your sheetExpected at these budgets
A storm, holiday or heatwave lands inside the weekNote it, and do not compare that week's cost to another week'sVariants in the same stage run together for this reason
Only one or two leads separate two variantsTreat the lead count as a tie and let the value column decideA's 4 leads against C's 2 prove nothing on their own; the value ratio is what moves A forward

The week-four result, whichever setup wins, is not the end. It is your new baseline. Run it for a month at a higher cap if the cost per booked inspection looks sound, then add a challenger from the next idea on your list. If leads were too few to compare anything, extend the best-ranked variant instead of starting a second grid. Starting again with new variants only restarts the same problem.

A pre-launch check you can finish in half an hour

  1. The privacy policy link works, and the form has been submitted once from a phone as a test lead.
  2. That test lead reached your CRM or sheet with the right source label.
  3. The service radius, minimum age and excluded customers are set, and identical across variants in a stage.
  4. Each ad set has a lifetime budget and an end date, and the total matches your cap.
  5. Names follow the convention.
  6. One person owns the phone for the four weeks, with a named backup.
  7. Every line of copy has passed the honest-claims list, including a second AI pass: paste the finished ads into a fresh chat and ask it to list every claim, credential, price, timeline or insurance reference, and tick each one against your records.
  8. Your sheet has the weekly columns and a place for the week's notes.

That second AI pass finds the claims you have stopped seeing, and it is cheap. After four weeks, the test has done its job if you can name your best offer, your best creative and your best audience setup, your real cost per lead and per booked inspection, and the ads you stopped paying for. If you can also say which of those findings you trust and which are still guesses, you are ahead of most people running roofing ads.

Questions roofers ask about testing Facebook ads

How much should a roofer spend to test Facebook ads?

Spend what you can lose without changing your month, and give each offer variant room to spend at least twice your target cost per lead before you judge it. In the example here that is $168 per offer against a $60 target, about $900 over four weeks in all. If your target is higher or your market is expensive, cut the number of variants before you cut the budget per variant.

Are roofing ads a special ad category on Meta?

Meta's special ad categories cover housing, employment, financial products and services, and social issues, elections or politics. Its housing page lists property listings, homeowners and renters insurance, financing and appraisal services, and does not list roofing or other repairs. If an ad promotes financing, check whether it counts as a financial products ad, because in some countries that category limits targeting options such as age.

Why not just let Advantage+ run everything?

You can, and Meta recommends Advantage+ campaigns for leads. The catch is that you lose clean comparisons, because you cannot easily tell which offer or creative did the work. A small grid first tells you what to feed the automation and keeps your cost per booked inspection visible.

What if I get almost no leads in week one?

Check delivery first: is the ad approved, does the form work on a phone, is the radius too small? Resist editing mid-week, because Meta says editing during the learning phase resets it. If delivery is fine and leads are still zero after you have spent twice your target cost per lead, drop that variant and move its budget.

Further reads

Sources: Meta's business help pages on instant forms, instant form types, lead ad best practices, the learning phase, special ad categories and Advantage+ audience; Meta's help pages on daily and lifetime budgets and on ads for housing.

Want a test grid sized to your own margins?

On a 1:1 call we'll work out what a lead is worth in your business, set a spend cap you can live with, and decide which parts of the test AI can draft or run. You leave with a four-week plan your team can follow.

Book a 1:1 call with me