“JobNimbus already reports on the pipeline.”
It does, thoroughly. It has no record of the canvasser, advert or storm list that produced the contact.
For JobNimbus
Export collected work from JobNimbus, upload the leads behind it, and rank channels on the stage that actually pays.
No API key Nothing to install in JobNimbusNothing to install No card requiredNo card
CloseRev reads a JobNimbus export of invoiced or collected work — the customer's phone or email, the amount and the date — and matches it against the canvassing, calls and ads that produced the lead. JobNimbus tracks a job from lead through sold to built, and the gap between those stages is where a contractor's real economics live. Revenue with no traceable lead is reported as Direct / Unknown.
Last checked against JobNimbus's own documentation on September 25, 2026.
The gap
The pipeline says sold. The crew calendar says otherwise, and the bank says something else again.
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 contact record. Phone carries the match in this trade, canvassed leads included.
What was received. A signed contract is a stage and a percentage of them never get built.
When money arrived. Keep the lead created date too — the gap runs to months on insurance work.
Retail or insurance, and where jobs stop. Both explain more than the revenue ranking alone.
Step by step
Written for somebody with JobNimbus open in the next tab. Report names vary by edition, so each step says what to look for.
One row per payment with a customer contact detail, the amount and the date.
They are a real cost — a measure-up, a contract, sometimes a deposit refunded — and they cluster by source.
Their values are set by different people on different timelines, and averaging them describes neither.
Canvasser codes, tracked numbers, search and social, storm lists and any marketplace you buy from.
The join runs on the phone and the email, normalised, grouped by when the lead arrived.
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 Roofing Contractors page — not from a JobNimbus account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Google Ads | 19 | $342,000 | |
| Meta Ads | 9 | $153,000 | |
| Email marketing | 3 | $45,000 | |
| Direct / Unknown | 21 | $360,000 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
A job can be sold and then die: the adjuster reduces the scope, the homeowner changes their mind, the mortgage company sits on the cheque, the crew never gets scheduled.
Every one of those has already consumed a measure-up, a sales appointment and a contract, and none of them produced revenue.
Ranking channels on sold jobs therefore rewards whichever source produces the most contracts, not the most roofs, and the two lists are different.
Exporting the sold-and-never-built jobs alongside the collected ones makes the difference visible per source, which is the number worth acting on.
It is also usually a process finding rather than a channel one: a source whose jobs die at one particular stage is pointing at that stage.
On an insurance job the price is set by an adjuster, the timeline is set by a carrier, and the contractor's sales process is mostly about documentation.
On a retail job the price is the contractor's, the timeline is the homeowner's, and the sale is a sale.
Blending them produces an average value that describes neither and a conversion rate that moves with the weather rather than with the marketing.
Where the export carries a job type, the report splits on it and each gets its own ranking and its own sensible window.
Most contractors find the sources feeding each barely overlap, which argues for two budgets rather than one.
Door-knocking produces a large share of exterior work in storm markets, and the cost of it — wages, commission, vehicles — is entirely knowable.
Because it is a payroll line rather than an advertising invoice, it sits outside the marketing report and is never ranked against paid search.
A canvasser code on the lead puts it into the same comparison on the same collected revenue, against what it genuinely cost.
The finding is often about which crews and which neighbourhoods produced collected work rather than signatures, which changes next season's plan more than a channel ranking would.
A hail event fills the pipeline for a fortnight. Those leads arrived because of the sky, and crediting them to whatever campaign happened to be running produces a conclusion that will not repeat.
Reading those weeks separately — by job type, by an insurance flag, or simply by the date range — keeps the rest of the year honest.
The point is not to discard the revenue, which is real, but to stop it being used as evidence that something works.
A contractor who does this consistently ends up with a defensible picture of the baseline, which is the thing that decides whether to spend in a quiet season.
It also stops the reverse error, which is cutting a channel that looked poor during a month when every crew was busy with storm work and nobody answered the phone. That is a capacity problem wearing a marketing problem's clothes.
Fair questions
It does, thoroughly. It has no record of the canvasser, advert or storm list that produced the contact.
Sold is a stage, and a percentage of sold jobs never get built. The channels differ on that percentage.
Then split it out and the retail ranking becomes readable for the first time.
No. It reads an exported file, so your boards, documents and photographs stay where they are.
Collected work with a customer contact detail, the amount and the date.
A share of them never get built, and that share differs by source. Ranking on contracts rewards whichever channel produces the most paperwork.
Yes. Each consumed a measure-up and a sales appointment, and they cluster by source.
Yes, where the export carries a job type, and they should be — different price setters, different timelines.
Yes, with a canvasser code on the lead, ranked on collected revenue against its payroll cost.
Read separately, so weather is not mistaken for marketing.
A year. Seasonality and insurance timelines both make anything shorter a comparison of conditions.
Yes, which is what makes a seasonal budget decidable.
Anything with no traceable lead, usually untracked calls and referrals.
A contact detail, an amount and a date, plus a job type if you include one. No property addresses required, no photographs, no claim documents. Encrypted in transit and at rest and deleted with the import.
Collected revenue per source, sold-but-never-built shown beside it, insurance and retail apart, and everything unmatched kept visible.
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.
JobNimbus 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 JobNimbus, no API key, and no need to have been tracking anything until now. Last year works as well as this month.