“We already tag every job with a lead source.”
That is the source somebody typed at booking. This adds what that source went on to collect, and which campaign sat behind it — neither of which the field can hold.
For Housecall Pro
Match paid jobs to the campaigns and calls behind them, and rank channels on collected revenue rather than booked work.
CloseRev reads a Housecall Pro export of completed jobs — customer contact detail, the amount collected and the job date — and matches it against your lead sources. It answers which channel produced the work you were paid for, including the jobs booked by phone that never touched a form. Unmatched jobs are counted honestly rather than assigned to whichever campaign ran that week.
Page updated September 24, 2026.
The gap
Booked is not paid, and paid is not profitable. Your marketing report stops at booked, which is the least useful of the three.
What was sold, to whom, and for how much.
The click, the keyword, the call, and what each one cost.
The file
Three things carry the match: who, how much, and when. Anything else is optional and only changes how the report can be sliced.
The customer on the job. Phone first in this trade — residential work is booked by call far more often than by form.
What was actually paid, not what was booked. A canceled or written-off job is not revenue and should not credit a channel.
Whichever is consistent with how you close your books.
Separates a diagnostic visit from a full replacement so the two do not average.
Step by step
Written for somebody with Housecall Pro open in the next tab. Report names vary by edition, so each step says what to look for.
One row per job with the customer's contact detail, the amount collected and a date. Look for the export that lists money received rather than work scheduled.
Residential replacement work closes slowly enough that a quarter of data will only show you the quick jobs.
Phone or email on each row is what makes the file matchable at all.
Column mapping is suggested and confirmed by you, with manual mapping always available.
Google Ads, Local Services Ads, Meta, or your call tracking provider — whichever you run, combined into one lead file with the source named on each row.
What comes back
Revenue by channel, the count of sales behind each figure, and an honest bucket for the ones nobody could trace. Sample figures, from the worked example on the HVAC Companies page — not from a Housecall Pro account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Google Ads | 38 | $241,400 | |
| Meta Ads | 24 | $61,600 | |
| Email marketing | 19 | $46,200 | |
| Direct / Unknown | 63 | $164,300 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
The gap between a booked job and money in the account is where residential trades lose the thread. Jobs get canceled, rescheduled into oblivion, cut down on site, or completed and never paid. If a channel's jobs cancel at twice the rate of another's, booked revenue will rank them identically and be wrong.
Exporting what was collected rather than what was booked is a one-column decision that changes the answer. It also makes the report reconcilable to your own accounts, which is the difference between a marketing number and a number you will actually repeat to somebody.
Residential systems fail on their own schedule. A homeowner gets a diagnostic in spring, decides to nurse it through the summer, and replaces in autumn when it fails properly. The advertisement that produced that customer ran five months before the revenue.
Any tool that measures inside a window will credit the September branded search and score the April campaign as a cost with no return. Matching on the customer makes the five-month gap irrelevant: the same person appears in both files, so the match is made and the September revenue is credited to the channel that produced the April inquiry.
Residential trades earn most of their money from customers they already have. A first visit leads to a repair, then a maintenance plan, then eventually the replacement. Treating each of those as a separate conversion triple-counts the marketing and makes cost per job look better than it is.
Matching on the customer keeps one person as one acquisition with all their revenue attached. The headline number usually goes down and becomes correct, which is the trade this product exists to make.
There is no tag, no script, no connected app and no permission to grant. The inputs are two CSVs you can export and inspect before uploading either of them.
Because the method reads records kept for billing rather than a tag that had to be running at the time, you can analyze a period that has already finished. Uploading last year first is the fastest way to find out whether the exercise tells you anything.
Residential trades get a meaningful share of work from review sites and home services marketplaces, which charge per lead or take a commission and report their own performance. That spend sits beside paid search in the budget and has never been compared with it on a common measure.
Add the marketplace's leads to the lead file under its own source name and it is ranked on collected revenue exactly like a Google campaign. The answer can go either way — the marketplace may be the best value in the mix, or it may be buying jobs you would have won anyway.
Either answer is worth having before the annual renewal conversation, which is usually conducted on the marketplace's own figures.
Fair questions
That is the source somebody typed at booking. This adds what that source went on to collect, and which campaign sat behind it — neither of which the field can hold.
Individually. The customer behind them is not, once the repeat work is attached to the original acquisition, which is precisely what the match does.
It is two file uploads. The first report takes about as long as the export does.
Paid jobs or payments: a customer phone or email, the amount collected, and a date.
Collected. Cancellation rates differ by channel, and booked revenue hides that.
Yes, and they credit the channel that produced the customer the first time.
Twelve months minimum for residential replacement work.
Yes, with a job type column, so diagnostics and replacements are judged separately.
No. It works from a CSV export, so there is nothing to authorize.
Yes — put the LSA leads in the lead file with their own source label and they rank beside paid search.
Give its leads their own source name in your lead file and the marketplace ranks on revenue like anything else.
They are shown as Direct / Unknown and never redistributed.
Only the columns the match needs — a phone or email, an amount and a date. No job photos, no notes, no card details, because none of those are part of the join. Uploads are encrypted in transit and at rest, scoped to your workspace, and removable in one click along with the file they came from.
Only by giving it one of the two cuts: map a technician column as Product / service in place of job type. An import takes one Product / service column and one Location column.
Export each payment as its own row against the same customer. They all credit the original channel, though each row also counts as a sale in the sales total.
The report has no time-to-close figure. It credits the earliest lead in the file, however long before the payment it arrived, so twelve months of both files keeps a slow replacement attached to the channel that started it.
Yes. Export what was collected, including finance proceeds, as rows against the customer.
Yes — filter them out before exporting. Every row in the sales file counts as a sale, so an unpaid return visit left in adds a sale with no revenue.
By trade
What the report looks like once the export is in, written for each one.
Other systems
Running more than one system, or comparing? The method is the same and the columns are not.
Housecall Pro and the other product names and logos on this page belong to their owners and are shown to identify the software a file comes from. CloseRev is not affiliated with or endorsed by them, and connects to none of them: it reads a file you export.
From the blog
Multi-crew home and field services businesses run on phone calls and job management software, not on web forms. Which means the standard marketing dashboard is measuring the smallest part of the business and missing where the money actually is.
Read the articleCall tracking answers one question well: which campaign produced the ring. It has no view of what happened after the call ended, which is where the money is decided. This is what the gap costs, and how to close it without replacing the call tracker you already have.
Read the articlePixels were built for sales that finish in a browser. Most sales don't. Here's the method that works on exports you already have — and why the tools you're paying for structurally cannot do it.
Read the articleStart today
Nothing to install in Housecall Pro, no API key, and no need to have been tracking anything until now. Last year works as well as this month.