Why 'spend 5-10% of revenue' is the wrong starting point
You've heard the rule of thumb. Spend 5 to 10 percent of revenue on marketing. It's not wrong, exactly, it's just useless for setting a Google Ads number, because it tells you nothing about cost per lead, cost per job, or how many clicks it takes to fill a truck. A contractor doing $2M a year and a contractor doing $400K a year could both land on the same 7 percent, and end up with wildly different ad budgets relative to what their market actually costs to compete in.
Google Ads and Local Services Ads (LSA) are auction-priced. What you pay per click or per lead is set by what your competitors in your zip codes are willing to pay, not by your revenue. A remodeler in a metro where three national franchises are also bidding pays a different rate than the only guy running ads in a rural county seat. Revenue tells you what you can afford. The auction tells you what it costs.
The better starting point: work backward from jobs needed. Decide how many jobs you need to book this month, find your average cost per lead for your trade and market, apply your close rate, and you have a defensible number. That number might be 4 percent of revenue or it might be 14 percent, depending on the month and the trade.
- Revenue-percentage rules ignore auction pricing in your specific zip codes.
- Two contractors at the same revenue can face completely different real costs per lead.
- Working backward from jobs-needed produces a number you can actually defend to your bank account.
The sections below break out real ranges by trade category, because a roofing budget and a plumbing budget solve different math problems.
Google Ads vs. Local Services Ads: which eats your budget
These are two different products with two different cost structures, and most contractors run both once they're past the startup phase. Google Ads (Search campaigns) is pay-per-click. You bid on keywords, you pay whether the click turns into a job or not, and you need a landing page and call tracking to make the spend accountable. LSA is pay-per-lead. Google verifies your license and insurance, slaps a Google Guaranteed badge on your listing, and you pay only when someone calls or messages through the platform (with some dispute process for junk leads).
LSA is usually the cheaper on-ramp. Setup is faster, the badge does real trust-building work for a contractor with no online reviews yet, and you're not paying for clicks that bounce off a bad landing page. The catch: LSA budgets cap out fast in smaller metros because there are only so many verified leads Google can serve in a given radius before you're competing dollar-for-dollar with every other verified contractor in your trade.
There's also a control tradeoff worth knowing before you pick one. Search gives you full say over keywords, ad copy, landing pages, and bid strategy, which means more setup work but also more room to sharpen a campaign once you see what's converting. LSA hands most of that control to Google's matching algorithm. You set a weekly budget and a service radius, and Google decides which searches you show up for and how leads get distributed among verified contractors nearby. That's less tinkering for you, but also less ability to course-correct if the leads coming in aren't the jobs you actually want.
| Factor | Google Ads (Search) | Local Services Ads |
|---|---|---|
| Pricing model | Pay per click | Pay per lead |
| Typical monthly floor | $1,500-2,000 to see data | $500-1,500 in most metros |
| Landing page required | Yes, and it needs to convert | No, Google's own profile is the landing page |
| Best for | High-intent, high-ticket, competitive keywords | Trust-building, service calls, faster launch |
| Budget ceiling in small metros | Scales with bid, effectively uncapped | Capped by available verified-lead volume |
Most contractors we talk to end up splitting budget across both once LSA volume plateaus. That split, and how to structure the campaigns themselves, is a full topic on its own. This guide stays on the budget math.
High-ticket trades: roofing, HVAC replacement, remodeling, solar
These trades sell jobs worth $8,000 to $40,000 or more, and the ad math reflects it. Cost per click on terms like "roof replacement near me" or "whole home HVAC installation" runs high because the value per closed job justifies aggressive bidding, and national players (some running seven-figure ad budgets) are in the same auction.
Realistic monthly range: $3,000 to $8,000, sometimes more in dense metros or storm-recovery markets where roofing demand spikes and CPCs spike with it. A remodeler averaging a $25,000 ticket can afford a $150-250 cost per lead and still post a healthy return, because it only takes a handful of closed jobs to cover the whole month's ad spend.
The trap in this bracket isn't underspending, it's underbudgeting for the landing page and follow-up system around the ads. A $5,000/month Google Ads budget feeding a slow, generic landing page with no financing calculator and no fast callback is money burned on clicks that never convert. High-ticket trades need:
- A dedicated landing page per service line (roof replacement, financing, storm damage) rather than one general contact page.
- Call tracking with a fast-response process, since high-ticket leads shop multiple contractors same-day.
- Budget reserved for remarketing, since a $25,000 decision rarely closes on the first visit.
Seasonal trades (roofing, solar) should also expect to shift 20-30 percent more budget into peak season and pull back in the slow months, rather than running a flat number year-round.
Mid-ticket trades: kitchen and bath, fencing, decking, landscaping design
This bracket sells jobs in the $3,000 to $15,000 range and tends to have more local competition than the high-ticket bracket (more small shops competing, fewer national franchises). Cost per click is generally moderate, but cost per lead can climb if your service area overlaps with several similarly-sized competitors all bidding the same terms.
Realistic monthly range: $2,000 to $4,500. The math here rewards tighter geographic targeting more than the high-ticket bracket does. A kitchen remodeler doesn't need to bid on a 40-mile radius when 90 percent of past jobs came from a 15-mile core. Narrowing radius targeting is often the fastest way to cut cost per lead without cutting total budget.
This bracket also benefits the most from combining paid ads with organic visibility, because buyers in this range research longer before calling (comparing three or four contractors, checking reviews, browsing past projects) and a strong Google Business Profile plus map pack presence catches that browsing behavior for less than another click on Search.
- Tighten radius targeting to your proven service area before raising bids.
- Budget for photo-heavy landing pages. Buyers in this range want to see past work, not just a phone number.
- Pair paid spend with a Google Business Profile that's actually optimized, not just claimed and left alone.
Mid-ticket trades that skip the local SEO half of the equation tend to overspend on ads to compensate for a map pack ranking that should be doing some of that work for free.
Repair and service-call trades: plumbing, electrical, garage doors, appliance repair
Service-call trades run on volume and speed, not big tickets. Average job value might be $200 to $1,500, so the whole budget equation is about keeping cost per lead low enough that a high number of small jobs still nets a profit, and about winning the "who answers the phone fastest" race, since emergency searches (burst pipe, no power, garage door off track) convert to the first contractor who picks up.
Realistic monthly range: $1,200 to $3,000. LSA tends to do more of the heavy lifting in this bracket than Search, because emergency searchers trust the Google Guaranteed badge and want a fast tap-to-call, not a landing page to read. A plumber running LSA well can often keep cost per lead well under $50 for straightforward service calls, though emergency and after-hours terms cost more.
This bracket also sees the widest swing between weekday and after-hours cost per lead. Emergency terms like "emergency plumber" or "electrician open now" cost noticeably more per click or per lead than daytime, non-urgent searches, because fewer contractors bid on after-hours coverage and the searcher is ready to book immediately. If you already staff for emergency calls, that premium is usually worth paying since close rates on true emergencies run high. If you don't staff after-hours, dayparting your budget to pause during hours nobody's answering the phone saves real money without costing you jobs you couldn't have taken anyway.
| Trade bracket | Typical job value | Realistic monthly ad budget | Where budget works hardest |
|---|---|---|---|
| High-ticket (roofing, HVAC replace, remodel) | $8,000-$40,000+ | $3,000-$8,000 | Search, dedicated landing pages |
| Mid-ticket (kitchen/bath, fencing, decking) | $3,000-$15,000 | $2,000-$4,500 | Search + local SEO combo |
| Service-call (plumbing, electrical, garage door) | $200-$1,500 | $1,200-$3,000 | LSA, speed-to-answer |
The single biggest lever in this bracket isn't the ad budget, it's answer speed. A contractor spending $1,500 a month but answering every call live will out-earn a contractor spending $3,000 a month who lets calls go to voicemail during business hours. Budget the ad spend, then budget for someone to actually answer the phone.
How to size your own number: the jobs-needed formula
Skip the industry-average guessing and run your own numbers. It's four inputs:
- Jobs needed this month. Pick a real number based on crew capacity, not a wish. If you can profitably run 8 jobs this month, that's your target.
- Your close rate on paid leads. If you don't track this, start now. A reasonable starting assumption for most trades is 20-35 percent of qualified leads close, but your actual number will differ.
- Leads needed. Jobs needed divided by close rate. Need 8 jobs at a 25 percent close rate means you need roughly 32 leads.
- Cost per lead for your trade and metro. Use the ranges above as a starting anchor, then let your own campaign data correct it after the first 60-90 days.
Multiply leads needed by cost per lead, and you have a defensible monthly number, not a percentage pulled from a blog post. If that number comes back higher than you expected, it usually means one of two things: your close rate needs work before you throw more ad spend at the problem, or your market is genuinely more competitive than the trade averages above and you need a sharper landing page and faster follow-up to compete on conversion rather than just outbidding everyone.
Re-run this formula every quarter, not once a year. Ticket sizes shift, competitors enter and leave your market, and seasonal trades need a different number in peak months than in the slow season. A budget set in January and never revisited is a budget that's wrong by summer.
Whatever number you land on, it's only half the equation. A Google Ads budget without a system to capture, track, and follow up on every lead is spend without accountability. That's the piece most contractors are actually missing when they say ads "don't work."
What happens when the budget is right but the leads still don't close
This is the conversation we have most often with contractors who've already tried Google Ads on their own or through a low-cost agency. The budget was reasonable, the clicks came in, and the phone rang, but the jobs didn't close at the rate they expected. Almost every time, the leak is downstream of the ad spend, not in it.
Common leaks: a landing page that loads slow and loses the click before it converts, no call tracking so nobody knows which keyword actually produced the job, a form that goes to an inbox nobody checks on weekends, or a generic contact page trying to serve five different services when the searcher clicked on one specific one. None of these are ad-budget problems. They're the reason two contractors can spend the identical amount on Google Ads and get completely different results.
There's a second leak that shows up specifically once a contractor tries to save money by cutting corners on the account itself: broad match keywords with no negative keyword list. Without negatives, a roofer's ad can show up for "how to patch a roof myself" or "roofing jobs hiring near me," burning real budget on clicks that were never going to become customers. A properly built negative keyword list, reviewed monthly against the search terms report, is one of the cheapest fixes available and it's the kind of maintenance a flat monthly retainer with no oversight tends to skip.
Before you raise your ad budget to fix a lead-quality problem, audit the full path: what page does the click land on, how fast does it load, does it match what the ad promised, and what happens to that lead in the first 60 minutes after it comes in. That full-path work, not just the ad account itself, is what a real lead-generation build fixes.
- Fix the landing page and follow-up system before increasing ad spend to compensate.
- Track cost per lead AND cost per closed job, not just clicks.
- Review the search terms report monthly and keep the negative keyword list current.
- Revisit your budget by trade-bracket math above every quarter, not once and forget it.