Skip to content
TradeAdWatchLocal trade ads and lead costs

Sample data. Advertisers on this site are invented. Lead-cost figures cite published research and are marked when they are estimates. A live Meta Ad Library import is not connected.

Methodology

Reviewed October 30, 2026. The point of this page is to show which numbers were published and which ones we made up on purpose, in the open.

What a “lead” is

In the LocaliQ search study, cost per lead is the advertiser’s tracked conversion. That might be a form, a call, or a click on a call button. It is not a booked job and it is not revenue. Meta’s figure is for leads campaigns, which are usually form fills from people who were scrolling. Angi and Thumbtack prices, where we show them, are what a contractor is reported to pay for a contact — often a shared one. Do not line those four prices up and declare a winner without saying which kind of lead you mean.

Google search

Anchors are LocaliQ / WordStream, “2025 Search Ad Benchmarks for Home Services.” The study covers 3,211 US search campaigns from April 2024 through March 2025, at least 103 campaigns in each subcategory. About 80–85% of the spend is Google and 15–20% is Microsoft. Published “averages” are medians.

Home services overall: $90.92 per lead. Roofing and gutters, plumbing, electrical, and landscaping use the published subcategory medians. HVAC is the straight average of air conditioning installation and repair ($127.74) and heating and furnaces ($129.02). Pest control is not a subcategory in that report. We repeat the overall median and label the cell “category median, not this trade.” We do not invent a pest-specific Google number and call it a study.

Meta, by trade

WordStream’s 2025 Facebook benchmarks put Home & Home Improvement leads campaigns at $41.26 per lead (median cost per click $2.23). The report does not split that number by trade. Trade rows on this site are estimates:

Meta estimate = $41.26 × (1 + 0.5 × (trade Google cost per lead ÷ $90.92 − 1)). A trade that is expensive on search is assumed to be somewhat expensive on Meta, but only halfway, so we do not paste search prices onto social. Pest control is not scaled, because its Google cell is already the overall median.

TradeMeta estimateLabel
Roofing$72.40Estimate
HVAC$49.76Estimate
Plumbing$49.90Estimate
Pest control$41.26Estimate
Lawn & landscaping$47.39Estimate
Electrical$41.89Estimate

Unrounded roofing example, so the formula can be checked: Google roofing median $228.15 produces a Meta estimate of $72.40.

Angi and Thumbtack

Neither company publishes a rate card we can cite as official. Angi cells use contractor-reported ranges from Lead Gen Economy and, where a second roundup disagrees, 7ten Marketing. We show the envelope of those reports, not a pretend typical price. Shared leads are called out in the notes.

Thumbtack’s help center says pros set a minimum and maximum, and the charge inside that range depends on the job. Dollar bands for roofing, HVAC, and plumbing are Skillmammoth’s October 2026 observations, labeled as observations. Lawn, electrical, and pest control are left blank on Thumbtack. Pest control is also blank on Angi. An empty cell is the honest one.

City factors

No source we use breaks these medians out by metro. Each city page multiplies the national figure by a factor and rounds to the dollar. The factor is a TradeAdWatch judgment about market size and season, set October 30, 2026. It is not a measurement. Replace it with your account’s cost per lead as soon as you have thirty leads.

MetroFactorWhy it’s on the list
Chicago, IL1.12Large metro with heavy contractor competition.
Denver, CO1.08Higher-cost market and a short roofing and HVAC season.
Phoenix, AZ1.06A big cooling market. HVAC ads run most of the year.
Dallas, TX1.04Large trade market. Hail season crowds the roofing auctions.
Nashville, TN1.02Growing metro, held close to the national line.
Atlanta, GA1.00Baseline metro in this planning set. Factor is 1.00 on purpose.
Houston, TX0.98Large market with a lot of shops bidding.
Tampa, FL0.96Steady home-services demand, set a little under the largest metros.
Charlotte, NC0.95Mid-size metro. The factor is a judgment, not a measurement.
Orlando, FL0.94Mid-size metro. The factor is a judgment, not a measurement.

The calculator

Affordable cost per lead = average ticket × gross margin × close rate × the share of that gross profit you will spend. Break-even is the same math with the share set to 100%. Cost per booked job is the benchmark divided by the close rate. Preset tickets are round numbers a shop can edit. They are not from the studies above.

Sample ads

data/ads.json is generated by scripts/build-sample-ads.mjs. Days running are counted to October 30, 2026. Every sample record has isSample: true and source: "sample". Real imports belong in data/ads.live.json as the same shape. src/lib/ingest.ts maps a Meta Ad Library record once you have already decided the trade, offer, and city. The library does not know our taxonomy, and this site does not scrape it.

Updating the numbers

  1. When LocaliQ or WordStream ships a new benchmark, edit data/benchmarks.json.
  2. Change reviewed and data/site.json asOf together.
  3. Re-run node scripts/build-sample-ads.mjs only if you want sample day counts moved forward. That rewrites the sample file.
  4. City factors live in data/metros.json. Leave them alone unless you mean to change the judgment.
  5. Redeploy. Pages read these files at build time.

Sources