Revenue, not calls
Rank channels by the invoiced revenue they produced, so one substantial job outweighs a page of inquiries.
Marketing attribution for Flooring Retailers & Installers
Match completed jobs and their revenue to the campaigns and showroom visits that produced the customer.
$250,000 50% of $500,000 paid
The blind spot
Flooring is chosen in a showroom and researched online for weeks beforehand. The showroom takes the credit and the campaign that filled it takes none.
What you get
Rank channels by the invoiced revenue they produced, so one substantial job outweighs a page of inquiries.
No cookie has to survive the wait. A job closing months later still traces back to the inquiry that started it.
Nothing is redistributed. If a job cannot be traced to a channel, the report says so instead of improving the attributed share.
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 | 96 | $150,000 | 30% | |
| Meta Ads | 36 | $55,000 | 11% | |
| Showroom events | 29 | $45,000 | 9% | |
| Direct / Unknown | 161 | $250,000 | 50% |
Customers browse online, then come in and decide with a sample in hand. Every dashboard records the visit as direct traffic, and the campaign that produced it disappears.
If the showroom captures a name and a contact detail, that list belongs in the lead file, tagged as showroom. Matched against completed jobs, the campaigns that fill the showroom finally show up in the revenue.
Retail-only sales and full supply-and-fit jobs differ by several thousand dollars, and channels feed them unevenly.
A job-type column mapped as Product / service shows full installations and material-only sales as separate lines, with how much of each traces to a channel, so the two are not averaged into one figure.
Most flooring is sold in a showroom. Somebody searches, browses, and then drives to look at samples, because nobody commits to a floor from a photograph. The advertisement's job is to produce a visit, and the visit's job is to produce a sale, and almost no flooring retailer can connect the two.
So the website is measured on form submissions and phone calls, which are a small and unrepresentative slice of the demand it actually generates. The channels that drive footfall look weak and the channels that drive form fills look strong, and the ranking that results is close to backwards.
Matching invoiced sales back to the customer, using whatever contact detail is captured at the point of quotation or order, recovers the footfall that the website produced. It will not recover all of it — some walk-ins genuinely cannot be traced — and the report says so rather than pretending otherwise.
A supply-only sale and a supplied-and-fitted job carry very different margins, and they are frequently produced by different searches at different costs. A price-led keyword tends to bring supply-only buyers; a design-led or room-led keyword tends to bring fitted work.
Ranking channels on total revenue hides that, because a large supply-only order and a smaller fitted job can invoice the same amount while earning very different money.
Exporting margin rather than revenue as the amount lets the report rank on what the business actually keeps; do it consistently, because the report adds up every row in the workspace. It is a one-column change and it can reverse which campaign looks like the best in the account.
Flooring paperwork names whoever paid, and that is frequently not the person the campaign reached. A retail order can be raised against a husband's card when the wife spent three weeks researching and chose the product. A fitted job can sit under a builder's trade account when the homeowner found you directly. A landlord's details can appear on work an agent arranged. In each case the inquiry file holds one person and the sales file holds another, and a match that reads contact details will not connect them, because strictly they are two different people.
The remedy is not cleverer matching, it is the right contact. Most order and point-of-sale systems carry a site or delivery contact alongside the bill-to account; put that person's phone or email in the row's contact fields instead of the account's, and the engine has a person to test rather than an account name. Where a trade account genuinely covers many households, the honest treatment is to export each job's own contact instead of the account, and to accept that builder-supplied work belongs to the builder relationship rather than to a consumer campaign that never touched it.
What should not happen is guessing. A shared surname and a nearby address are not a match, and the engine does not link such a pair at all. Anything unmatched stays in Direct and Unknown rather than being allocated to whichever campaign looks most plausible. For a showroom business that means the attributed figure starts lower than you might like and can be relied on. Raising it is a change to how orders are recorded, not a setting.
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 the visit list belongs in the lead file — that is the only way the campaign that produced the visit gets credited.
Which is why revenue rather than job count is the ranking.
If it exports completed sales 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 flooring showrooms and installation 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 or sales: a customer email or phone, the total, and a date.
Add the visit or inquiry list to the lead file, tagged as showroom.
Yes, with a job-type column — and it is worth adding, because a blended average across them describes none of them.
Yes — everything billed later credits the campaign behind the first job.
Yes, with a location column mapped as Location. It shows each showroom's revenue with how much of it traces to a channel; channels are not ranked within each showroom.
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.
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 showroom and quote requests exported from your ad platforms is enough to start.
Job rows analyzed in a calendar month. Visit rows do not count.
No — and that is the point. A tag has to be installed before the jobs happen; an export can be run after they already have.
Yes. Most flooring showrooms and installation companies begin with last year, because it is the cheapest way to find out whether the exercise tells them anything.
It stays in Direct / Unknown and is never redistributed across your channels. The unattributed share is usually larger than people expect, and showing it is what makes the rest believable.
Partly. Any visit where a contact detail is captured at quotation or order can be matched; genuine anonymous walk-ins cannot, and are reported as unattributed rather than assigned.
Yes, if your export carries it. In flooring that change alone often reorders the channels.
Yes, with a sale-type column mapped as Product / service.
Use the right contact on the row. Most order systems keep a site or delivery contact beside the bill-to account, and the match reads a person, so putting the household's own phone or email in the row's contact fields, rather than the account holder's, is what joins the inquiry to the invoice.
Only where one of the contact details appears in both files; a row can carry one partner's phone and the other's email. A shared surname on its own is never a match and is not flagged either, so if nothing lines up the revenue stays in Direct and Unknown.
They can sit in the same upload, with a customer-type column mapped as Product / service so trade and consumer revenue show as separate lines. A trade account is a standing relationship rather than a response to a campaign; the channel ranking still includes it, which is why the breakdown is worth reading beside it.
Nearby
Match signed and completed remodels to the inquiries, showroom visits and ads that produced them.
See how it worksMatch accepted estimates and the revenue they earned to the campaigns that produced the homeowner, weeks after the quote.
See how it worksMatch installed replacement jobs to the appointments, canvassing and ads that produced them.
See how it worksFrom 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 articleFirst touch, last touch, linear, time decay, U-shaped, data-driven. Six ways to divide a number that nobody has verified. Here is what each model is actually claiming, when the choice genuinely matters, and why arguing about it before you can match a sale is arguing about the wrong thing.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.