Marketing attribution for contractors: cost per lead, cost per booked job, and which source actually pays
Cost per lead tells you what a phone call costs. Cost per sold job tells you what a customer costs. Here is how to track where every lead comes from, compare sources on booked and sold jobs instead of form fills, and run a 30 minute monthly review that moves your budget to what works.

By The Revcore team
Reviewed by Hayden Mitchell, founder
12 min read

Quick answer
How do contractors track which marketing actually brings in jobs?
Record the lead source the moment a lead arrives, from the form, the tracking number, or by asking, and keep it on the same customer record through the estimate, the signed contract and the paid invoice. Then compare each source on cost per booked job, cost per sold job and revenue, not on cost per lead.
Ask most contractors which marketing works and you get an answer based on feel. The phone rang after the mailer. The agency says the ads are up. None of that tells you which dollar turned into a signed job, and signed jobs are what pay for the trucks.
Marketing attribution is the habit of connecting each job back to the source that started it, then doing the math on cost. It is a discipline before it is software: capture the source every time, keep it on the customer, and review it on a schedule. Below are the numbers that matter, a worked comparison of six sources, a tracking setup, and a monthly routine.
Cost per lead, cost per booked job, cost per sold job
These three numbers use the same spend and a different bottom half. Each one answers a different question, and only the last one tells you what a customer costs.
| Metric | Formula | What it answers | What it hides |
|---|---|---|---|
| Cost per lead | Spend on a source divided by leads from that source | How much it costs to make the phone ring or a form arrive | Junk, duplicates, wrong service area, people shopping for the lowest price |
| Cost per booked job | Spend divided by leads that became a booked estimate or service call | How much it costs to get a qualified homeowner on your calendar | Whether those appointments turn into signed work |
| Cost per sold job | Spend divided by signed jobs from that source | What a paying customer from this source really costs you | Job size, which is why you also track revenue per source |
A booked job here means a lead that turned into an appointment on your calendar: an estimate visit for a roofer or remodeler, a scheduled service call for a plumber or HVAC shop. For service trades that book and complete work on the same visit, cost per booked job and cost per sold job sit close together. For replacement and remodel work with a separate sales visit, the gap between them is where most of the money disappears.
Add one more column once the first three are steady: revenue per source, or better, gross profit per source. A source with a higher cost per sold job can still win if it sends bigger projects.
A worked comparison of six lead sources
The table below is an illustrative example for a replacement roofing and exteriors company. The numbers are invented to show the math, not industry benchmarks. Your own will look different, and the point is to fill this table in with yours.
| Source | Spend | Leads (cost per lead) | Booked (cost per booked job) | Sold (cost per sold job) | Revenue |
|---|---|---|---|---|---|
| Paid search ads | $6,000 | 60 ($100) | 30 ($200) | 9 ($667) | $126,000 |
| Local Services Ads | $4,000 | 50 ($80) | 30 ($133) | 10 ($400) | $140,000 |
| Shared lead service | $4,500 | 90 ($50) | 18 ($250) | 3 ($1,500) | $36,000 |
| Social media ads | $3,000 | 75 ($40) | 15 ($200) | 3 ($1,000) | $39,000 |
| Website and local SEO | $2,000 | 25 ($80) | 15 ($133) | 6 ($333) | $84,000 |
| Referrals and repeat customers | $500 | 12 ($42) | 10 ($50) | 6 ($83) | $90,000 |
Read the table by cost per lead and you would pour money into social ads and the shared lead service. Read it by cost per sold job and the order flips. In this example the shared lead service costs $1,500 per signed roof, because those homeowners were also called by other contractors, and social ads fill the pipeline with people who were curious, not ready.
Meanwhile the quiet rows do the heavy lifting. Referrals cost almost nothing and half of them sign. None of that is visible if all you count is leads.
How the math changes by trade
- Roofing and exteriors. Long gap between lead and signature, big tickets. Cost per sold job and revenue per source matter most, and storm seasons distort single months.
- HVAC. Two funnels in one shop. Service calls live on cost per booked job. Replacement leads behave like roofing, so track them as a separate lead type.
- Plumbing and electrical. Short service cycles, so cost per booked job is close to cost per sold job. Watch phone booking rate and average ticket per source.
- Remodeling. Few leads, very large jobs, long decisions. Judge channels on six months and track gross profit, not just revenue.
Why most contractors cannot answer this today
The math is simple. The hard part is that the source and the result live in different places. The ad platform knows who clicked, the form tool knows who submitted, the contract sits in a folder and the payment sits in accounting. Nobody stitches them together, so marketing gets judged on the only easy number: leads.
Homeowners also do not follow a straight line. A homeowner might see your truck, read your Google reviews, ask an AI tool for roofers nearby, then click an ad and fill out your form. Your records will credit the ad. That is fine, as long as you know it is the last step you are measuring and you ask what else brought them in.
6
Average number of review sites consumers use when choosing a local business
45%
Consumers who use ChatGPT and other AI tools for local recommendations
97%
Consumers who read reviews for local businesses
How to set up lead source tracking
You do not need an analytics team. You need four capture methods working together, one rule for your office, and a single record that carries the source from the first contact to the paid invoice.
Write your source list
Pick 8 to 12 sources you will actually use, such as paid search, Local Services Ads, Google Business Profile, website organic, social ads, referral, repeat customer, yard sign and mailer. Keep the names identical everywhere, or "Google" and "google ads" become two sources in a report.
Tag every link with UTM parameters
A UTM parameter is a tag on the end of a link, like utm_source=google and utm_campaign=spring-roofing, that says where a visitor came from. Add them to every ad, email, social post and listing link you control, including the website link on your Google Business Profile. Use the same lowercase names from your source list.
Capture the source on the form, not just in analytics
Web analytics tells you about visits. You need the source written onto the contact record when the form is submitted, so it stays with that homeowner. Test it by submitting your own form from a tagged link.
Give each paid channel its own tracking number
Many leads still call. A call tracking service gives each channel its own forwarding number that rings your main line, so you know which ad or mailer produced the call. Keep your main number consistent on your Google Business Profile and directories, and use tracking numbers on ads, mailers and signs.
Make lead source a required field
Whoever creates the contact picks the source from your list before saving. Phone calls, referrals, walk-ins and yard sign leads never pass through a form, so this field is the only way they get counted. No blank sources and no "other" without a note.
Ask how they heard about you, every time
Ask on the first call and again at the kitchen table: "Just so I know what is working, how did you first hear about us?" Note the answer next to the tracked source. When the two disagree, you learn how your channels work together.
Keep the source on one record all the way to payment
Capture is only half the job. If the lead, estimate and invoice live in three tools, somebody has to match them by hand every month, and nobody will. The fix is a single customer record that carries the source from the form to the estimate, the signed contract and the paid invoice. That is what a contractor CRM is for, and it is what makes a cost per sold job report possible without a spreadsheet project.
A source that looks weak is sometimes a follow-up problem, not a marketing problem. Before you cut a channel, check how fast those leads got a response. Our guide to five follow-up texts that turn cold leads into jobs covers the second half of that.
A monthly attribution review in 30 minutes
Attribution only pays off if someone looks at it. Book 30 minutes in the first week of each month with the owner and whoever runs marketing or the office, and work the same steps every time.
Pull spend by source
Collect last month's spend from each ad account, lead service, agency retainer, mailer and referral program, using your CRM's source names.
Pull leads, booked jobs and sold jobs by source
From your CRM or reporting, count leads created, appointments booked and contracts signed for each source. Use the lead's creation month so a signed job is credited to the month its lead arrived.
Fix the gaps first
Count leads with a blank or "other" source. If it is more than a small share, the problem is capture, not marketing. Fix the habit before trusting the numbers.
Calculate the three costs and revenue
Divide spend by leads, booked jobs and sold jobs for each source, and add revenue. Use the same layout as the example table so months compare easily.
Check the rolling quarter
One month is noise, especially for roofing and remodeling where jobs sign weeks after the lead. Compare each source on the last three months combined before making a decision.
Move money in small steps
Shift 10 to 20 percent of budget from the worst source per sold job toward the best one that can scale. Big swings make it impossible to tell what caused the change.
Write down one decision
End with a single written change, such as pausing a campaign, raising a referral reward or fixing how the office answers calls from one source. Check next month whether it worked.
Mistakes that make attribution lie
- Counting a lead twice. The same homeowner fills out a form and calls. Merge duplicates, or one source looks twice as productive as it is.
- Crediting jobs to the month they signed. A roof lead from March that signs in May belongs to March's spend. Otherwise a slow sales cycle makes a good channel look bad.
- Ignoring the free channels. Referrals, repeat customers and your Google Business Profile have real costs, like referral rewards, review requests and time. Put a number on them so they show up in the comparison.
- Forgetting the sales side. If sources are routed to different reps, a weak closer makes a good source look bad. Check close rate by rep alongside source.
How Revcore handles lead source tracking
In Revcore, the source is recorded at the door. When a homeowner fills out a Revcore form or survey, including one embedded on the website you already have, the UTM source, medium and campaign are written onto the contact record. You can add your Meta pixel so it fires on form submissions. For phone, referral and yard sign leads, your team sets the lead source on the contact when they add it.
Because that same contact receives the estimate, signs it and pays the invoice, lead source reporting shows which sources produced contacts, booked estimates and signed jobs. Revcore does not replace a call tracking service or pull in your ad spend, so you still bring spend numbers to the monthly review.
Frequently asked questions
What is cost per booked job?
Cost per booked job is what you spent on a marketing source divided by the leads from that source that became a booked appointment, such as an estimate visit or a scheduled service call. It filters out junk and tire kickers that cost per lead counts, so it shows what it really costs to get a qualified homeowner on your calendar.
What is a good cost per lead for contractors?
There is no single good number, because it depends on your trade, market, job size and close rate. A $150 lead that closes often can beat a $40 lead that rarely closes. Work backward instead: decide what you can afford per sold job from your average gross profit, then see which sources come in under it.
How do I track phone leads?
Use a call tracking service to give each paid channel its own forwarding number that rings your main line, so the call is tied to its source. For calls that come to your main number, have whoever answers ask how the caller heard about you and set the lead source on the contact before saving it.
How long before I judge a marketing channel?
Give most channels at least three months of data before cutting or doubling them, and longer for SEO and for remodeling or roofing, where jobs can sign weeks after the lead. Judge on cost per sold job over the full period, and decide the review date before you start so one slow month does not drive the call.
How do I know if my SEO is working?
Tag the website link on your Google Business Profile with UTM parameters, capture the source on your website forms, and ask callers how they found you. Then compare organic search on booked and sold jobs against your paid channels, including the monthly retainer or content cost as its spend.
Further reading: BrightLocal's Local Consumer Review Survey 2026 covers where homeowners look before they call. For the channels themselves, see local SEO for contractors, and to raise the close rate on every source, see good, better, best pricing.

Written by the Revcore team. Reviewed by Hayden Mitchell, founder of Revcore Pro, who closed $3.5M of home improvement door to door and helped scale a contractor from $1M to $10M.










