“CallRail already shows revenue when we push values back.”
That works when somebody consistently pushes a value onto the call record. This reads the money from the system that already holds it, so it does not depend on anyone remembering.
For CallRail
CallRail tells you which campaign produced the call. Match the caller against your sales export and find out which calls became money.
No API key Nothing to install in CallRail No card required
The gap
You can see that a keyword produced forty calls. You cannot see that six of them bought, or that two of those six were worth the whole month.
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.
The tracked call's caller ID. This is the join key, and it is unusually clean — it is captured by the network rather than typed by anyone.
CallRail's attribution fields on the call record. This is the half CallRail is genuinely good at.
Used to order the match when a caller appears more than once.
Lets you compare a channel's qualified-call rate against its revenue, which is where the two often disagree.
Step by step
Written for somebody with CallRail open in the next tab. Report names vary by edition, so each step says what to look for.
CallRail's call log exports to CSV with the caller number and the source, campaign and keyword attached. This is the lead file.
From whatever holds the money — your CRM, practice management, job management or accounting system. Customer phone, amount, date.
The sales file needs to reach further back than the call file, because the call precedes the sale by weeks or months.
The join is the phone number, normalised on both sides with a proper phone library rather than string comparison.
Where a channel's qualified-call rate and its revenue rank differ, that gap is usually the most useful thing on the report.
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 Law Firms page — not from a CallRail account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Google Ads | 18 | $312,000 | |
| Meta Ads | 6 | $54,000 | |
| Email marketing | 3 | $30,000 | |
| Direct / Unknown | 14 | $204,000 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
CallRail is very good at the thing it does. Dynamic number insertion attributes a phone call to a source, campaign and keyword, which is genuinely hard, and it produces a clean identifier — the caller's number, captured by the network rather than typed into a form.
That clean identifier is why this pairing works so well. Most attribution failures are matching failures, and most matching failures come from dirty keys: misspelt names, personal versus work email, a form filled in by an assistant. A caller ID is none of those things.
What call tracking cannot do is know what happened after the call. It can tell you the call lasted four minutes and was tagged as a lead. It cannot tell you the caller signed a contract in March for eleven thousand dollars, because that fact lives in a different system entirely.
The usual proxy for value is call duration or a manual qualification tag. It is a reasonable proxy and it is systematically biased: long, polite, thorough calls from people who never buy score well, and short decisive calls from people who already knew what they wanted score badly.
When you rank channels by qualified calls and then by revenue, the two lists differ. That difference is not noise, it is the thing worth knowing — it identifies the channel that is filling the phone with conversation and the channel that is filling it with customers.
For a plumber a call converts in days. For a law firm, a senior living community, a custom home builder or a commercial insurance broker, the call in February becomes revenue in September or later.
Call tracking reporting is naturally organised around the call, so the further the revenue sits from it the less visible it becomes. Reconciling the call log against a sales export that covers a longer period recovers exactly that revenue, and it is disproportionately the large revenue.
Most businesses take both. Calls go through CallRail; forms go through the website into a CRM or an inbox. They are usually reported separately and compared with hand-waving.
Uploading both as source files puts them on one axis, ranked on closed revenue. In practice the split between them differs enormously by industry, and very few businesses have ever measured it properly rather than assumed it.
A call log is noisier than it looks. It carries existing customers calling about a job in progress, suppliers, recruiters, wrong numbers and outright spam, and all of them are attributed to whichever number they happened to dial.
That noise inflates cost-per-call comparisons and it is not evenly distributed — a heavily advertised tracking number collects more of it than a quiet one. Matching against the sales export filters it out by construction: a call that never became revenue simply does not appear in the revenue column.
It also surfaces the opposite case, which is more interesting. An existing customer who calls a tracked number and then buys again is real revenue, and whether that should credit the campaign is a judgement call — so the report shows repeat customers separately rather than deciding for you.
Fair questions
That works when somebody consistently pushes a value onto the call record. This reads the money from the system that already holds it, so it does not depend on anyone remembering.
Nothing is being swapped. CallRail stays exactly where it is and its export becomes the lead file.
That is the normal case and the reason this exists. Two exports, one join, on the phone number.
No. CallRail supplies the lead file; this adds what the callers went on to pay. The two are complementary by design.
The call log with caller number, source, campaign, keyword and date.
Closed sales from whatever holds your money: CRM, practice management, job management or accounting.
On the phone number, normalised with a proper phone library on both sides rather than string comparison.
Then the link is weaker and it is flagged for a person rather than counted automatically.
Yes. Upload both as source files and they rank on closed revenue on one axis.
Yes, and the disagreement between those two rankings is usually the most useful output.
Further than the call file, because the revenue lands after the call — often months after.
Yes. Any provider that exports a caller number with a source works the same way.
Encrypted in transit and at rest, isolated per workspace, deletable in one click, DPA available.
They are reported separately rather than silently counted, so you can decide whether repeat revenue should credit the campaign.
They never appear in the revenue column, because they produced no revenue to match. That filtering is automatic.
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.
CallRail 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 CallRail, no API key, and no need to have been tracking anything until now. Last year works as well as this month.