Measuring lead quality
Cheap leads or good jobs? Cost per booked job
You're paying for ads, a directory listing, or a lead service, and every month someone tells you how many leads it produced. The number that matters is how many of those leads turned into jobs you wanted, finished, and got paid for. This guide shows how to track that without fancy software and how to compare sources fairly.
By Logen Doiel, founder of Tech Turtle and former painting business owner · 6 min read
The short version
- 1Track six stages for every inquiry: inquiry, qualified, estimate sent, booked, completed, and paid.
- 2Divide a source's ad spend by its booked jobs, not just by its leads.
- 3A lower cost per booked job still doesn't prove a source is more profitable. Job size, costs, and cancellations matter.
- 4Log spend once per source per month, not on every inquiry, so you don't count it twice.
- 5Don't judge a source on last week's leads. Many of them haven't decided yet.
Define the numbers in plain terms
| Stage | What it means |
|---|---|
| Inquiry | Anyone who called, texted, or filled out a form about work. |
| Qualified inquiry | An inquiry that fits your business by your own written definition (below). |
| Estimate sent | You gave them a price. |
| Booked job | They said yes and you scheduled it. |
| Completed job | The work is done. |
| Collected revenue | Money actually received, not the estimate amount. |
Write your own definition of "qualified"
"Qualified" means whatever is true for your business, so write it down once and use it every time. Answer these four questions:
- Is it a service we actually offer?
- Is it inside our service area?
- Is the timing something we could schedule?
- Is the job big enough to be worth an estimate? Name your minimum.
A concrete coatings company might write: "Garage, patio, or basement floor; within 40 miles; wants it done in the next six months; at least 300 square feet." If an inquiry answers yes to all four, it's qualified.
A worked comparison
These numbers are made up. They illustrate the math. They aren't Tech Turtle client results or industry benchmarks.
| Campaign A | Campaign B | |
|---|---|---|
| Advertising spend | $900 | $900 |
| Leads | 30 | 10 |
| Booked jobs | 2 | 4 |
| Advertising cost per lead | $30 | $90 |
| Advertising cost per booked job | $450 | $225 |
If you only looked at cost per lead, Campaign A wins: $30 against $90. But Campaign A's 30 leads produced two jobs, and Campaign B's 10 leads produced four. Per booked job, B cost $225 and A cost $450. A also took more of your time, since every lead needs a call back.
In this example, Campaign B has the lower advertising cost per booked job. That still doesn't prove B is more profitable. For that you'd need to know what the jobs were worth and what they cost to do.
What that comparison leaves out
- Job size. If Campaign A's two jobs were $12,000 each and B's four were $1,500 each, A brought in far more work.
- Direct job costs. Materials, labor, and travel. Booked revenue isn't profit.
- Cancellations. A booked job that cancels before you start shouldn't count as booked.
- Whether the work got done. Count completed jobs separately from booked ones.
- Whether the customer paid. Collected revenue is what you actually have.
- Other costs of getting the customer. Agency fees, lead-service fees, software, and your own time. Keep those apart from ad spend so "advertising cost per booked job" means just that, and add them up separately when you want the total cost of getting a customer.
- Time to decide. A source that sends bigger jobs may also take longer to close. Two weeks of data can make it look worse than it is.
Build a simple source tracker
You need one row per inquiry and one consistent label for where it came from. Pick a short list of source names and use them exactly the same way every time: "Google Ads," not sometimes "Google" and sometimes "AdWords."
Always have an Unknown option and use it honestly. Ask "How did you hear about us?" and write down what they say. Some people found you three ways and only remember one. No tracker captures every step of a customer's decision, and an honest "Unknown" is more useful than a guess.
| Inquiry date | Source | Service requested | Qualified? | Estimate date | Estimate amount | Current outcome | Booked date | Completed date | Collected revenue | Reason lost | Next action |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-09-02 | Google Ads | Garage floor coating | Yes | 2026-09-05 | $3,200 | Completed | 2026-09-09 | 2026-09-23 | $3,200 | Ask for a review | |
| 2026-09-04 | Google Ads | Basement floor | No (outside area) | Not a fit | Outside service area | None | |||||
| 2026-09-08 | Referral | Patio coating | Yes | 2026-09-10 | $2,400 | Booked | 2026-09-18 | Install 2026-10-14 | |||
| 2026-09-11 | Facebook post | Garage floor coating | Yes | 2026-09-15 | $2,900 | Open estimate | Follow up 2026-09-29 | ||||
| 2026-09-15 | Directory listing | Garage floor coating | Yes | 2026-09-17 | $3,100 | Lost | Chose a lower bid | None | |||
| 2026-09-20 | Unknown | Pool deck | Yes | Waiting on photos | Text for photos |
Keep spend in a separate monthly summary
Don't put ad spend on each inquiry row. If you write "$600" next to both Google Ads leads, it looks like you spent $1,200. Record spend once per source per month in a summary sheet, then count the rows from the tracker.
| Source | Spend this month | Inquiries | Qualified | Booked | Completed | Cost per inquiry | Cost per booked job |
|---|---|---|---|---|---|---|---|
| Google Ads | $600 | 2 | 1 | 1 | 1 | $300 | $600 |
| Directory listing | $150 | 1 | 1 | 0 | 0 | $150 | Not available yet |
| Referral | $0 | 1 | 1 | 1 | 0 | No paid spend | No paid spend |
| Facebook post | $0 | 1 | 1 | 0 | 0 | No paid spend | No paid spend |
| Unknown | $0 | 1 | 1 | 0 | 0 | No paid spend | No paid spend |
Compare sources fairly
- Recent inquiries may still be deciding. Mark them "Open estimate" instead of counting them as lost.
- Compare like with like. Compare full months against full months, and if your work is seasonal, compare against the same season.
- Call out open estimates. A month with five open estimates isn't finished yet. Note that next to its numbers.
- Don't cut a source after one bad lead. One wrong-number call says almost nothing. Look for a pattern over a few months.
A practical monthly review
Once a month, sit down with the tracker and summary and work through these questions in order:
- 1Which sources sent qualified inquiries?
- 2Which ones turned into booked and completed work?
- 3What's still undecided, and when will you know?
- 4What information is missing, like an unknown source, a blank outcome, or revenue not entered?
- 5What do you need to look into before you change what you spend?
Common mistakes and better alternatives
- Judging a source by cost per lead alone
- Instead: Track it through to booked and completed jobs before deciding.
- Treating estimate amounts as revenue
- Instead: Log collected revenue when the money arrives.
- Calling booked revenue "profit"
- Instead: Profit is what's left after materials, labor, and all your costs of getting the customer.
- Repeating spend on every inquiry row
- Instead: Record spend once per source per month in the summary.
- Guessing the source
- Instead: Use "Unknown" when you don't know. It's still useful data.
Do this todayWrite your four-line definition of "qualified" and tape it next to wherever you take calls. Starting tomorrow, mark every new inquiry yes or no against it.
Where your website fits
Tracking falls apart when inquiries arrive through a dozen places. A website form that sends every request to one dashboard gives you a clean starting list for the tracker.
Tech Turtle's $50/month contractor website includes an estimate request form, instant lead notifications, and a private dashboard where those requests are kept. It doesn't track offline sales, job costs, or collected revenue, and it doesn't do the rest of this worksheet. That part stays in your tracker.
See the $50/month contractor website