“We already set a lead source on every job.”
Then you have something to check this against, which is better than most. Where the two disagree, the click and the invoice are the harder evidence.
For Workiz
Export your jobs, upload the calls and leads beside them, and rank channels on what was charged rather than on what was booked.
No API key Nothing to install in WorkizNothing to install No card requiredNo card
CloseRev reads a Workiz export of completed jobs — the client's phone or email, the amount charged and the date — and matches it against the calls and leads that produced them. It is built for the trades Workiz serves, where jobs are booked on the phone in minutes and the same customer never appears twice, so a channel's booking count says very little about its worth. Jobs with no matching lead are reported as Direct / Unknown.
Last checked against Workiz's own documentation on September 24, 2026.
The gap
You spend on three or four channels and the phone rings from all of them. Which one pays for itself is a matter of opinion in your business, and it should not be.
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.
On the client the job is attached to. The phone is the realistic key here: these jobs are booked by phone and a large share of clients never give an email at all.
What the job actually took, after whatever was added on site. In these trades the difference between the quote and the total is routine and is often most of the margin.
When the work happened or was paid for. These jobs close fast, so the two are usually days apart.
If your team already sets a source on the job, include it — the report will compare it against what the match found, which is an education.
Step by step
Written for somebody with Workiz open in the next tab. Report names vary by edition, so each step says what to look for.
One row per job with a client contact detail, the amount and a date. The export listing jobs with totals is the one; its name differs by account.
These jobs close quickly, so a tight window works better here than in most trades — but emergency work still arrives days after somebody first searched.
Call tracking is the main one. Marketplace leads, website forms and anything else that produced a phone call belong in the same file.
The join runs on the phone number, normalised on both sides. Exact matches count automatically and weaker ones are put in front of a person.
If the office has been setting a source on jobs, put the two side by side. The gap between what people remember and what the numbers say is usually large and always instructive.
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 Garage Doors page — not from a Workiz account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Google Ads | 171 | $153,000 | |
| Local service ads | 109 | $94,500 | |
| Meta Ads | 29 | $27,000 | |
| Direct / Unknown | 196 | $175,500 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
A locksmith, a junk removal outfit or a garage door repairer mostly sees a customer once. There is no maintenance agreement, no second visit, no lifetime value to spread over — the job is the whole relationship.
That makes the revenue of the individual job the only thing that matters, and it makes booking counts actively misleading. A channel producing thirty small lockouts and a channel producing eight door replacements look very different on a dashboard and very similar on the bank statement, or the other way round.
Ranking on what was charged, per channel, is the only comparison that means anything in these trades, and it is the one nobody has because the money and the leads are in different systems.
Urgent work has the shortest consideration window in this catalogue. Somebody locked out of their car is not researching, they are calling the first three numbers and going with whoever picks up and can come now.
Two things follow. The cost per click is high because everyone is bidding on the same intent, and the conversion depends on operations as much as on marketing — a missed call is a lost job, whatever the campaign did.
Matching invoiced jobs back to channels exposes both. A channel that produces calls you do not answer shows up as expensive, and it should, because for your business it is.
Across these trades, the spread between the smallest and largest job is very wide and the distribution has a long tail. A handful of jobs carry a disproportionate share of the month.
Any metric that treats jobs as interchangeable — cost per lead, cost per booking, conversion rate — is blind to exactly the jobs that paid for the month. Ranking channels on money is not a refinement here, it is the difference between a useful answer and a wrong one.
Most teams already ask callers how they heard about the business, and most already have a source field somebody fills in. It is worth keeping and it is not worth trusting on its own.
The known failure is not carelessness. Callers genuinely do not remember, they say the internet when they mean a search advert, and staff under pressure pick whichever option is first in the list. The error is systematic rather than random, so it does not average out.
Putting the recorded source beside the matched source shows the size and direction of that error, which is usually the first thing a business learns from doing this at all.
Fair questions
Then you have something to check this against, which is better than most. Where the two disagree, the click and the invoice are the harder evidence.
More useful, not less. A short window means fewer confounders, and the money still sits in a different system from the lead.
The smaller the business, the more one wrong channel costs as a share of the budget. Two exports is the whole exercise.
No. It reads a file you exported; no credential to your account is held and nothing is written back.
Jobs with a client contact detail, the amount charged and a date.
Calls and leads with a source — call tracking, marketplace leads, web forms.
Yes. The phone number is the better key in these trades and it is what the match leans on.
Because it disagrees with the evidence in a predictable direction, and the size of the disagreement is worth knowing.
On the phone number, normalised with a proper phone library on both sides rather than compared as text.
Yes, where the export carries a job type — and in these trades that is usually the most useful split there is.
They are reported as Direct / Unknown rather than assigned to a channel.
Indirectly and usefully: a channel producing calls that never became jobs ranks badly, which for your business is the true reading.
A little further than the lead file. These jobs close fast, but not always the same day.
A contact detail, an amount and a date. No job notes, no photos, no dispatch records, no card details. Encrypted in transit and at rest, isolated to your workspace, deleted with the import.
Revenue by channel from charged jobs, what share could be matched, and everything that could not.
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.
Workiz 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.
Start today
Nothing to install in Workiz, no API key, and no need to have been tracking anything until now. Last year works as well as this month.