Closed revenue, not pipeline stages
Every channel is measured on the closed revenue behind it, so volume stops flattering whichever source is cheapest per inquiry.
Marketing attribution for multi-location retailers
Match transactions across every store and the web to the campaigns that produced the customer, without a tag on a single till.
$3,500,000 50% of $7,000,000 paid
The blind spot
Online revenue is measured to the click and store revenue is measured by footfall. The campaigns that drive people into shops are credited with almost nothing.
What you get
Every channel is measured on the closed revenue behind it, so volume stops flattering whichever source is cheapest per inquiry.
Long gaps are the normal case here, not an edge case. The customer appears in both files, so the match holds however far apart the two dates are.
Every match is auditable and reversible, and sales that trace to nothing are shown as Direct and Unknown rather than shared out across the paid channels.
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 | 4120 | $1,470,000 | 21% | |
| Meta Ads | 3140 | $1,120,000 | 16% | |
| Email marketing | 2551 | $910,000 | 13% | |
| Direct / Unknown | 9812 | $3,500,000 | 50% |
A customer researches online, checks stock, and buys in a shop. The session ends without a transaction, the campaign is judged a failure, and the revenue lands in a store's till attributed to nobody.
If the till captures a loyalty identifier, an email or a phone number, the in-store transaction can be matched to the campaign that produced the customer. In most chains this moves a majority of paid-media value out of Direct / Unknown.
A flagship in a city center and a suburban store draw from different demand and respond to different channels, and a chain-level average conceals both.
A store column mapped as Location shows each store's revenue and how much of it traces to a channel, so local budgets can follow local evidence rather than a national average that describes no individual shop.
Retail revenue is provisional for as long as the returns window is open. A channel driving volume in a category with a high return rate books impressive gross sales one month and gives a large fraction of them back the next, and every report built on the gross figure ranks it near the top. The returns are recorded, usually against the original transaction, and almost never propagated into anything marketing reads. The effect is not uniform either: it concentrates where fit or expectation is hard to judge online, which is exactly where paid social tends to spend.
Exporting net of returns changes the ranking, sometimes sharply. It is more work to produce than a gross sales extract, because refunds may sit in a different table and be dated to the refund rather than the sale, but the decision only has to be made once. Whichever basis is chosen, use the same one across every period being compared or a trend appears that was created by the export rather than by the business. A middle path is a column flagging returned or exchanged transactions, mapped as Product / service, which shows them as their own line so the gross figure is honest about how much of it came back.
Exchanges deserve a decision of their own. A customer who returns one item and takes another has not stopped being revenue, and treating an exchange as a full reversal understates whichever channel produced them. Treating it as two sales overstates the same channel by roughly the same amount. Neither is right, and the practical answer is to export the net value of the visit and write the convention down where the next person will find it. This sounds pedantic until two years of reports rest on a convention nobody recorded and nobody now remembers choosing.
Chains spend heavily on media that produces no click at all. A door drop, a catalog, a regional radio buy, a poster campaign around a new store — all defended with reach estimates and a sense that footfall improved. Digital channels are measured to the transaction and everything else is measured on faith, so the budget drifts toward whatever can be counted regardless of what is working. That drift is not a decision anybody made and is very hard to argue against without a competing number, which exists more often than retailers expect.
Anything that produced a list of people with contact details can be uploaded and ranked beside the paid channels. A catalog mailing file is such a list. So is an event registration, a competition entry, a new-store opening sign-up, or a partner's shared audience where the sharing is properly permitted. Each one is ranked on the revenue that followed rather than on impressions delivered, which is usually the first honest comparison a marketing team has managed between a mailing and a media buy. Where no such list exists the activity stays unmeasured, and the report says so rather than estimating.
This is also the practical answer for store openings. A new location's early revenue is normally credited to whatever digital campaign ran nearby, because that is the only thing being counted at the time. With the opening's sign-up list added to the lead file, tagged with the opening, the opening itself appears as a channel with revenue attached and can be compared against the media that supported it. Chains opening several stores a year get a repeatable answer to what an opening is worth — a question usually settled by whoever presents most confidently, and one of the few in retail with a clean before and after.
Everything in a store depends on whether the transaction carries a contact detail. A loyalty scan, an emailed receipt, a delivery address, a warranty registration, a returns record — any of them is enough, and a till capturing none of them produces a sale that cannot be matched to anything at all. That capture rate, rather than the quality of the analysis, is the hard limit on how much in-store revenue can ever be traced. It varies enormously by chain, by category and often by shift, and knowing the number is the first useful output of the exercise.
What matters is that the limit is visible rather than hidden. Revenue from transactions with no identifier sits in Direct / Unknown and is never spread across the paid channels to improve a headline, which means the attributed share is a floor rather than an estimate. A chain capturing identifiers on two in five transactions is reading a report about two fifths of its store revenue, and it knows that while reading it. A tool reporting a complete picture from an incomplete till is guessing, and the guess is not marked anywhere on the page.
It also points at the highest-return operational change available. Raising the capture rate at the till by a few points does more for the quality of every future report than any refinement of the analysis, and it is a staffing and prompting question rather than a technology one. Most chains discover the rate varies more between stores than between channels, which is itself worth acting on. Nothing about the method changes as it improves; the same two exports simply cover more of the book each period, which makes the improvement measurable in the report it improves.
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
Loyalty programs, receipts by email and returns data usually do. Whatever share is captured is what can be matched, and the rest stays honestly unattributed.
Both go in the same sales file. Map a column marking online or in-store as Product / service and the report shows each as its own line.
Data is encrypted, isolated per workspace and deletable in one click, and only a contact detail, an amount and a date are required.
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. Enterprise usually fits retail chains and multi-site operators — ten seats for the team and the highest monthly record allowance, since a year of closed deals is a lot of rows.
One business closing at volume
$499/mo
billed monthly
Questions
Anything else? Talk to us — a person answers, usually the same day.
Transactions: a customer email, phone or loyalty identifier, the amount, and a date.
Yes, wherever the transaction carries a contact or loyalty identifier.
Yes: a store column mapped as Location shows each store's revenue and how much of it traces to a channel.
Yes: map a column marking online or in-store as Product / service, or treat the web as one more store in the Location column.
Yes — they credit the channel that produced the customer.
No. A CSV export is enough.
Yes — account records are encrypted both in transit and at rest, kept inside your own workspace, and removable on request. A DPA is available.
Transaction rows analyzed in a calendar month. Lead rows do not count.
Net is the more honest ranking, because return rates differ sharply by category and therefore by channel. Whichever basis you choose, keep it the same across every period you compare, or the trend will be the export changing rather than the business.
Export the net value of the visit rather than counting a reversal and a new sale. Decide the convention once and record it somewhere, because two years of reports built on an unwritten convention become impossible to interpret later.
Wherever they produced a list of people with contact details, yes. That list goes into the lead file, tagged with the piece that produced it, and is ranked on revenue beside the paid channels — possibly the first like-for-like comparison available to a chain.
The share of transactions carrying a contact detail — a loyalty scan, an emailed receipt, a delivery address. That capture rate is a hard ceiling, and the report shows the untraced remainder rather than estimating over the top of it.
Yes. Add the opening's sign-up or event list to the lead file, tagged with the opening, and the opening is ranked on the revenue that followed, next to whatever media supported it in the same weeks.
No. Run the stores whose exports you have and add the rest as they arrive. Each import is dated to the transactions it contains, so a store joining late still lands in the correct months.
Nearby
Match closed revenue across every location to the national and local campaigns that produced it, without asking franchisees to install anything.
See how it worksAttribute revenue closed by independent dealers to the campaigns head office paid for — without asking a single dealer to install anything.
See how it worksAttribute phone orders, quote requests and in-store purchases to the channels that produced them — the revenue your pixel never sees.
See how it worksWhere your sales already are
Export your Square transactions, upload the inquiries beside them, and find out which marketing produced the people who walked in.
What to exportExport your sales, upload the leads that produced them, and find out which channels produce clients who stay rather than clients who visit.
What to exportExport your sales from Vagaro, upload the leads that produced them, and stop paying to acquire clients who were already coming.
What to exportExport Birdeye conversations as your lead file, match them against closed revenue, and find out what the widget and the listings are worth.
What to exportFor off-marketplace campaigns, use your own tagged lead records and match them against closed sales in your own system.
What to exportExport sales from Zenoti, upload the leads behind them, and get guest value per source per location.
What to exportExport your conversations, match them against closed sales, and find out what texting actually produced.
What to exportExport sales from Fresha, upload your lead sources, and stop paying to acquire clients who were already arriving.
What to exportExport sales from WellnessLiving, upload the leads behind them, and rank channels on members rather than on intro passes.
What to exportCapture Yelp calls and requests as leads, match them against closed sales, and separate what the ads added from what the listing would have brought anyway.
What to exportExport collections from Open Dental, bring the referral source and your other lead files with them, and rank every source on what it collected.
What to exportExport collections from Denticon, upload the leads behind them, and rank sources on the patients the group actually won — office by office.
What to exportFrom the blog
A multi-location business that reports one national attribution number is hiding its most important finding. The same campaign performs differently in every market, and the aggregate is an average of things that should never have been averaged.
Read the articleFranchisees pay into a national marketing fund and receive a report about impressions. Attribution turns that relationship from a matter of faith into a matter of record — which is exactly why some franchisors are in no hurry to build it.
Read the articleAdd up what your agencies and platforms claim and you have sold the same thing several times over. Nobody is lying. Here is why double counting is structural, how to run the reconciliation meeting, and what to change in the contracts so it stops recurring.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.