Revenue, not calls
Rank channels by the invoiced revenue they produced, so one substantial job outweighs a page of inquiries.
Marketing attribution for Painting Contractors
Match accepted estimates and the revenue they earned to the campaigns that produced the homeowner, weeks after the quote.
$199,500 57% of $350,000 paid
The blind spot
Painting is quoted freely and accepted slowly. Estimate volume is easy to grow and says nothing about which channel produces work that is actually booked.
What you get
Rank channels by the invoiced revenue they produced, so one substantial job outweighs a page of inquiries.
A job that closes quarters after the click still credits the campaign behind it, because the match is on the customer rather than a session.
High-confidence matches count automatically; a partial link is queued for review rather than quietly counted as a job.
A worked example
Not impressions, not leads, not cost per click. Closed revenue, by the channel that produced it, for a period you choose — with the portion we could not trace shown rather than quietly shared out across your paid channels.
| Channel | Sales | Revenue | Share | % |
|---|---|---|---|---|
| Google Ads | 79 | $94,500 | 27% | |
| Meta Ads | 38 | $45,500 | 13% | |
| Local service ads | 49 | $59,500 | 17% | |
| Direct / Unknown | 127 | $150,500 | 43% |
Every channel produces estimate requests. Acceptance rates differ sharply, and a channel producing twice the estimates at half the acceptance rate is not the bargain the lead report claims.
Ranking on accepted job revenue rather than estimates requested reorders the channels immediately, and it is usually the difference between growth and a busier estimator.
A $900 interior room and a $40,000 commercial repaint arrive from different places, and blending them into one average job value describes neither.
A job-type column mapped as Product / service shows each kind of work as its own line, with how much of it traces to a channel, so neither is judged on the other's numbers.
A repaint of a family home and a scheduled maintenance contract for a property manager are sold differently, priced differently and won differently. One is a discretionary household purchase decided by a couple over several weeks against two other quotes; the other is a procurement decision with a budget cycle behind it.
They share a phone number, a website and usually an advertising account. Blended into one report, the residential volume dominates the job count and the commercial contracts dominate the revenue, and no single average describes either of them usefully.
A customer-type column mapped as Product / service, read beside a revenue-based ranking, splits them apart, so residential work is seen on collected job value while commercial work is seen on contract revenue over its term.
Almost every residential repaint is competitively quoted, which means the estimator visits, measures, specifies and prices work that two thirds of the time goes to somebody else. That time is the largest controllable cost in the business and it is invisible to every advertising metric.
A channel that produces households who collect quotes as a hobby is expensive in exactly the resource the company cannot buy more of. Ranking on collected revenue exposes it; uploading the quote list alongside the invoices exposes it precisely, as a quote-to-job conversion rate per channel.
For most painting companies that conversion rate, not the cost per lead, is the number that should be setting the marketing budget, and it is the one they have never been able to see.
The first upload is usually a disappointment and then a relief. A painting company that has never reconciled its invoices against its inquiry records will find duplicated households, estimates recorded under a spouse's mobile, and a handful of jobs with no contact detail on them at all. None of that is a fault in the data; it is what a busy estimating diary looks like when nobody has ever had a reason to read it end to end. The first month is largely spent discovering which of those habits matter to the answer and which are harmless.
Practically, the work divides into two evenings. One is spent mapping columns once, confirming which field holds the customer's phone and which holds the invoiced total, and that mapping is then reused on every later upload. The other is spent reading the matched rows behind the first ranking, plus the few links held for review, to see whether the records say what you think they say. Neither task returns in week three. By the second upload the whole exercise is a file export and ten minutes, and the useful question changes from whether the records are good enough to what to do about what they say.
One habit is worth starting immediately and costs nothing: capture a phone number or an email on every estimate, including the ones taken at the door and the ones that arrive through a neighbor. Adopting that in month one is the single change most likely to shrink the unmatched share by the end of the quarter, because the limiting factor in this trade is almost never the matching itself. It is whether the household was ever written down. Everything else in the report improves as a side effect of that one change to how an estimator takes a booking.
Why it matters
"We generated 400 leads" invites an argument. "This channel closed $186,400 last quarter, here is the reconciliation" ends one. The teams that can show closed revenue by channel are the teams that get the next increase approved, because they are asking with evidence rather than with conviction.
Killing spend is politically harder than adding it, because someone always owns the channel being cut. A number that reconciles to the sales export takes the argument out of the room — you are not overruling a colleague's judgment, you are reading the same ledger they are.
Platform-reported conversions do not reconcile to revenue, and eventually someone in finance notices. Reporting built from your own closed-sales export starts from the number finance already trusts, which is why it holds up when it is checked.
Because this reconciles exports rather than tracking visitors, it works on months that have already closed. You are not instrumenting now to learn something in ninety days — you can answer for last quarter today, which is usually when the question is being asked.
Honest answers
Which is why accepted work is the measure. Estimates that go nowhere appear as unmatched leads and cost nothing.
There is no attribution window — a job accepted a month later still credits the campaign behind it.
If it exports accepted jobs to CSV, that is enough.
Pricing
The price here is the price on the invoice, plus any sales tax that applies — no per-call, per-minute or per-form fees. Starter usually fits residential and commercial painting companies — one workspace, one seat, and everything that makes the number defensible from the first plan.
A single business getting started
$9/mo
billed monthly
Questions
Anything else? Talk to us — a person answers, usually the same day.
Accepted jobs: a customer email or phone, the amount, and a date.
Yes — estimates are the lead file, accepted jobs the sales file.
Yes, with a job-type column mapped as Product / service, which shows interior, exterior and commercial revenue separately with how much of each traces to a channel. Channels are not ranked within each job type.
Yes — later jobs credit the channel that produced the customer in the first place, rather than counting as new acquisitions.
Yes, with the relevant column, so each one can be funded against its own invoiced revenue rather than a portfolio figure.
It is encrypted in transit and at rest and isolated per workspace, so no other account can reach your customers. Deletion is immediate and a DPA is available.
Yes. Nothing needed to be installed when those jobs happened, which is the whole reason this works on history.
Job rows analyzed in a calendar month. Estimate rows do not count.
Nothing at all. The method reads exports, so there is no tag to maintain and nothing that can silently stop working.
Yes. Most residential and commercial painting companies begin with last year, because it is the cheapest way to find out whether the exercise tells them anything.
Nothing is reassigned. Word of mouth and walk-in jobs are real, and the report names them rather than crediting a campaign for them.
Yes, if both the quote list and the invoiced work are uploaded. In a competitively quoted trade this is usually the most actionable view.
Yes, with a customer-type column. Their cycles and values are not comparable.
Yes, credited to the channel that produced the customer originally.
Twelve to eighteen months, so a full season and the repeat cycle behind it are inside the file.
Mapping the columns is a one-off and takes a few minutes. Reading the first set of matches takes longer, because that is also when you find out what your own records look like. Later uploads reuse the mapping, so the recurring cost is an export and a short look at the results.
Whoever runs the estimating diary rather than whoever buys the advertising. Checking a match means recognizing a household by name and job, and that recognition sits in the office. The channel decisions can follow once the numbers are settled.
Record a phone number or an email against every estimate, including door-knock work and jobs passed on by neighbors. The match reads a person, so an estimate written down with no contact detail cannot be linked to anything later, and that is the usual reason an unmatched share stays stubbornly high.
Nearby
Match completed jobs and their revenue to the campaigns and showroom visits that produced the customer.
See how it worksMatch signed and completed remodels to the inquiries, showroom visits and ads that produced them.
See how it worksMatch signed jobs and their value to the calls and campaigns that produced them, including the work that follows a roof.
See how it worksWhere your sales already are
Export paid invoices and match them to the campaigns that produced the customer — including the recurring work that follows.
What to exportExport invoices from Tradify, upload the leads behind them, and see which channels produce work rather than price comparisons.
What to exportExport your Thumbtack leads, match them against paid jobs, and find out which categories and which job sizes are worth being in.
What to exportFrom 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 articleGoogle's Local Services Ads charge for the phone call, not the click, and they hand you the caller's number with the invoice. It is the easiest channel in the budget to attribute to closed revenue. Almost nobody does, because the lead inbox is not where the reports live.
Read the articleFor a business that sells by phone, a missed call is a lead that was paid for and then dropped. It also quietly rewrites channel ROI: the channel whose callers ring after hours looks weaker than it is. Here is how to measure missed calls and callback speed from a call log, and how to report them without inventing revenue.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.