“Contractor Foreman already reports revenue by project.”
It does, and it has no record of what produced the client, because that happened before the project existed.
For Contractor Foreman
Export invoices from Contractor Foreman, upload the leads behind them, and rank marketing on the project rather than on the deposit.
No API key Nothing to install in Contractor ForemanNothing to install No card requiredNo card
CloseRev reads a Contractor Foreman export of invoices — the client's phone or email, the amount and the date — and matches it against the leads that produced the project. Construction bills in stages, so one decision by one client produces many invoices across many months, and a naive match counts one project as several wins. Invoices with no traceable lead are reported as Direct / Unknown.
Last checked against Contractor Foreman's own documentation on September 24, 2026.
The gap
Progress billing turns one won project into a dozen rows, and every report built on rows is wrong.
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 record rather than the invoice, so every progress bill joins to the same person.
Each billing, including change orders. The project's value is their sum, not the first one.
When each stage was billed. The spread across dates is what the report has to collapse.
The cleanest way to sum a project. Without it the client record does the same job slightly less precisely.
Step by step
Written for somebody with Contractor Foreman open in the next tab. Report names vary by edition, so each step says what to look for.
One row per billing with a contact detail, the amount, the date, and the project reference where available.
Otherwise a large job looks like a dozen small wins spread across whatever marketing ran each month.
Referrals, architects and designers, search ads, the website form, tracked numbers and any directory you pay for.
A project signed this quarter finishes billing next year, and the lead that produced it arrived the quarter before.
The join runs on the phone and the email, normalised, with the project's total reported against the lead that produced it.
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 Commercial Construction page — not from a Contractor Foreman account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Google Ads | 4 | $480,000 | |
| Events | 6 | $720,000 | |
| Email marketing | 3 | $320,000 | |
| Direct / Unknown | 17 | $2,480,000 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
A project billed in stages produces invoices in months when no marketing produced anything, and none in the month the client actually decided.
Attributed by invoice date, a single kitchen build credits whatever was running in each of nine months, which is nine wrong answers rather than one.
Summing by project and attributing the total to the lead that produced it gives one answer, which is the only version a budget decision can use.
Change orders belong in that sum too: they are revenue from the same decision, and excluding them understates every channel that produces clients who expand scope.
That last effect is not evenly spread, which is precisely why it matters.
A residential remodel is considered for months before a contractor is called, and the project bills for months after it starts.
Between the two, revenue arriving this quarter frequently traces to a lead from a year earlier, and any short window will attribute it to the wrong thing or to nothing.
Carrying the lead date through lets the report group by when the client arrived rather than when the money did, which is the grouping that answers what to buy next.
It also produces the lag per channel, which tells you how far ahead of a busy season you have to be spending.
For a contractor booking work six months out, that number is operationally more useful than the ranking itself.
Most established general contractors get the majority of their work from people who already know them: a designer who specifies them, a past client, a neighbour of a past client.
None of those produce an invoice from an advertising platform, so they are absent from every paid-media report and the paid channels are judged as if they were the whole picture.
Recording the referral source at first contact — one field — puts them into the same comparison on the same project value.
The usual result is that the paid budget is carrying a much smaller share of the business than anyone assumed, which changes where the next effort goes.
It also identifies which relationships are actually producing work, as opposed to which ones are pleasant.
A bathroom, a whole-house remodel and a commercial fit-out have different values, different durations and different buyers.
A source that mostly produces one will be ranked as though it produced the mix, which flatters some channels and buries others.
Where the export carries a project type, the report splits on it and the ranking becomes something a contractor can act on: this source for kitchens, that one for additions.
Without the split, a contractor running several project types is reading an average that corresponds to no decision they can make.
Fair questions
It does, and it has no record of what produced the client, because that happened before the project existed.
Then recording the referrer is the highest-value change available, and the report will show its true share.
Which is why the window is eighteen months and the grouping is by when the lead arrived, not when the money did.
No. It reads an exported file, so your schedules, documents and project records stay where they are.
Invoices with a client contact detail, the amount, the date and a project reference where available.
Summed by project, so one decision is one win rather than a dozen spread across months.
Yes. They are revenue from the same decision, and leaving them out understates the channels that bring clients who expand scope.
Eighteen months, because the lead, the signature and the final billing can span more than a year.
Yes, where the lead date is exported, and that is the grouping a marketing decision needs.
Yes, recorded at first contact. In this trade they are usually the largest source and the least measured.
Yes, where the export carries one. A blended average across project types is rarely actionable.
Include them where you can. Estimating a large project is expensive, and a channel that produces many losses is costing more than its leads.
Any revenue with no traceable lead. Its size is reported rather than distributed across the measurable channels.
A contact detail, an amount and a date, plus a project reference or type if you include them. No plans, no documents, no site photographs. Encrypted in transit and at rest and deleted with the import.
Project value per source grouped by when the lead arrived, split by project type where available, 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.
Contractor Foreman 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 Contractor Foreman, no API key, and no need to have been tracking anything until now. Last year works as well as this month.