Revenue, not calls
Rank channels by the jobs they actually closed, so one large job outweighs twenty inquiries.
Marketing attribution for garage door companies
Match completed jobs and their revenue to the calls and campaigns that produced them, from a $180 spring to a $4,200 installation.
$274,500 61% of $450,000 paid
The blind spot
Repair calls and full installations arrive through the same phone number at the same cost per call, and are twenty times apart in revenue.
What you get
Rank channels by the jobs they actually closed, so one large job outweighs twenty inquiries.
A quote given in spring and accepted in summer still credits the campaign behind it.
Exact matches only, with weaker links held back for a person to accept or reject — which is what makes the invoiced revenue figure survive being questioned.
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 | 171 | $153,000 | 34% | |
| Local service ads | 109 | $94,500 | 21% | |
| Meta Ads | 29 | $27,000 | 6% | |
| Direct / Unknown | 196 | $175,500 | 39% |
A broken spring and a two-door replacement are the same inquiry on a cost-per-call report. One pays for the click ten times over; the other barely covers the van.
Ranking on completed job revenue separates them on the first report, and the channels that produce installation work are usually not the ones that produce the most calls.
A repair customer often replaces the door within a few years, and the campaign that produced them is credited for none of it.
Because the match is on the customer, the later replacement credits the original channel. That reframes repair advertising from a low-margin necessity into an acquisition channel with a measurable return.
A broken spring is an emergency worth a few hundred dollars and converts within hours. A new insulated door with an opener is a considered purchase worth several thousand and takes weeks. They arrive through overlapping searches, they are served by the same technicians, and they are reported as one job count.
The consequence is predictable: emergency repair keywords dominate the volume, look excellent on cost per lead, and produce a fraction of the revenue. Replacement keywords cost more per inquiry and carry the margin, and on a lead-based report they look like the weaker investment.
A job-type column mapped as Product / service, read beside a revenue-based ranking, separates them, so repair and replacement revenue are seen as their own lines rather than as a blended figure that flatters one and penalizes the other.
A significant share of replacement doors are sold by a technician standing in a garage having just fixed something else. The homeowner called about a spring, and left having ordered a door. That sequence is one of the most profitable things this trade does and it is credited to nobody.
Because the match is on the customer rather than the job, the later replacement invoice credits the channel that produced the original repair call. Channels that generate repair volume stop looking like a low-value commodity once the work they lead to is attached to them.
One file of completed jobs with a customer phone or email, the amount and a date. A job-type column separating repairs from replacements is the one addition that changes the report materially, because without it the two businesses average into a number that describes neither.
The second file is your advertising export — Google Ads, Local Services, or a call tracking export if you run one. This trade is almost entirely phone-booked, so a call export can produce the highest match rate available to you and is worth adding even if it is the only demand-side file you have.
There is nothing to install and nothing to connect. Because the method reads records kept for billing rather than a tag that had to be running at the time, last year is as analysable as this month, which is how most companies start.
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 the report handles — a short cycle is easier than a long one. What it adds is separating repair revenue from installation revenue.
If it exports completed jobs to CSV, that is enough. Any column layout works.
Nothing is installed. Two exports, one mapping you confirm, and no numbers to buy.
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 garage door installers and repair 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.
Completed jobs: a customer email or phone, the total, and a date.
Yes, with a job-type column.
Yes — later jobs credit the channel that produced them.
No. Where you already have them, a tracked caller's number is a clean key and raises the match rate, but nothing requires tracking numbers — the repair and installation requests from your ad platforms is enough to start.
Yes, with a location column. Without it the report averages jobs that have no business being averaged.
Encrypted in transit and at rest, isolated to your workspace, and deletable in one click. A DPA is available, and customer details never leave that workspace. Gate codes and property notes can stay out of the export.
Yes. Those jobs were recorded because you billed for them rather than because anybody was tracking, so a finished year matches exactly as well as the current one. A full year also shows how cold-snap spring and opener repairs compare with planned door replacements.
Job rows analyzed in a calendar month. Call rows do not count.
Yes, with a job-type column, and it is the most important cut on this report.
Yes, credited to the channel that produced the original call.
Collected, where you can export it.
No, but this trade is almost entirely phone-booked, so a call export is usually the strongest second file.
Yes, by mapping a technician column as Product / service (one extra breakdown per import), which shows each technician's revenue with how much of it traces to a channel.
It is a starting point, and an honest one. It means those customers could not be traced to anything in the lead file you uploaded, which is usually because the list of sources was incomplete rather than because the revenue is mysterious. Add the exports you left out — directories, the answering service, past-customer lists — to the lead file, each tagged with its source, and run it again.
Monthly suits this trade well, because repair work closes within days of the call. Unlike slower trades, a garage-door month is mostly made up of jobs that began in the same month, so the report is close to current. That makes a monthly cadence genuinely informative rather than a slow picture arriving late.
Wait. A single door replacement can outweigh a dozen repairs, so one month's ranking can turn on where two large jobs happened to fall. Look at a quarter, and split repairs from replacements if you have the column. A source that only ever brings small repair work is a different problem from one having a quiet month.
It will not show you the margin on a job, whether a technician sold well on site, or what a call would have been worth had somebody answered it sooner. It maps revenue to the source that produced the customer. Operational questions live in your scheduling system, and this is not a substitute for looking there.
The job is credited automatically to whichever directory produced the earlier lead, not to both, and the duplicate is not reported separately. The pattern still matters more than any single row: if two paid listings keep producing the same households, you are buying one audience twice over, and comparing their lists with each other before combining them shows how often. That can be the clearest money on the table for a local service business.
Nearby
Match installed replacement jobs to the appointments, canvassing and ads that produced them.
See how it worksMatch your invoiced jobs to the calls and ads that produced them, and find out which channel is actually paying for the trucks.
See how it worksMatch completed jobs and their revenue to the calls and campaigns that produced them, from a $140 outlet to a $22,000 service upgrade.
See how it worksWhere your sales already are
Match paid jobs to the campaigns and calls behind them, and rank channels on collected revenue rather than booked work.
What to exportExport completed jobs, upload the calls and leads beside them, and rank your marketing on invoiced work instead of on booked calls.
What to exportExport your jobs, upload the calls and leads beside them, and rank channels on what was charged rather than on what was booked.
What to exportExport invoices from Kickserv, upload the leads behind them, and find out which marketing produced work rather than calls.
What to exportExport invoices from FieldPulse, upload the leads behind them, and see which channels produce work that closes.
What to exportExport invoices from ServiceM8, upload the leads behind them, and find out which marketing paid for itself.
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.