The Challenge
The owner was spending real money across several channels at once, but every lead showed up the same way: a phone call with no clue where it came from. Google, print, and the vehicle wraps all looked identical in the pipeline. Every budget decision was a guess, and the guesses were expensive.
With no way to trace a call back to its source, a few problems were quietly draining the budget:
- No call tracking meant no attribution on any channel
- Good and bad channels looked exactly the same
- The client kept funding things that did not actually drive calls
- There was no cost-per-call number to compare sources against
- Ad and print spend was allocated on gut feel, not data
The Solution
We set up call tracking across every channel so each call carried its source with it. Dynamic number insertion handled the website, unique numbers covered the offline channels, and everything tied back to GA4 and Google Ads so the owner could finally see cost per call by source. Here is what went into it.
- A unique tracking number for each offline channel
- Dynamic number insertion on the website
- Call recording so lead quality could be judged, not just counted
- Every number tied back to GA4 and Google Ads
- Print, wraps, and signs tracked separately
- Cost per call calculated for every source
- A simple reporting dashboard the owner could read at a glance
- Calls tagged by source so budget shifts were easy to justify
Dynamic number insertion that ties each web call to its source
For website visitors, a single static phone number tells you nothing about who called or why. Dynamic number insertion swaps the number shown based on how the visitor arrived, so every web call is traced back to the campaign, keyword, or referral that sent it.
- Source on covered calls: dynamic numbers preserve session-level source data when the pool, attribution window, cookies, and campaign tagging operate as configured.
- Keyword-level detail: for Google Ads traffic, calls can be tied all the way down to the search that triggered them, which is where the real budget decisions live.
- No visitor friction: the swap is invisible to the caller, who just dials the number on the page and reaches the same business as always.
- Clean data into GA4: each tracked call flows into GA4 and Google Ads as a real conversion, so bidding and reporting run on actual phone leads.
Unique numbers for print, wraps, and signs
Offline channels are where most companies fly blind. We gave each one its own dedicated trackable number so print, vehicle wraps, and signage each reported their own calls, side by side with the digital channels.
- One number per channel: the flyer, the wraps, and the yard signs each got a distinct number, so a call could only have come from one place.
- Offline meets digital: with unique numbers, offline channels finally sat in the same report as Google Ads and could be compared apples to apples.
- Cost per call by source: spend divided by tracked calls gave a clear cost per call for every channel, cheap or expensive.
- Cut what does not work: channels that produced almost no calls were easy to spot and easy to defund, which is how the wasted offline spend got cut.
How We Did It
01. Number setup per channel
A unique CallRail tracking number provisioned for each offline channel and a dynamic pool for the website.
02. Dynamic insertion
Dynamic number insertion added to the site so each visitor’s number matched their source.
03. Recording and tagging
Call recording and source tagging were enabled so covered calls could be reviewed for quality and connected to the available channel data.
04. Connect the stack
CallRail wired into GA4 and Google Ads so calls counted as real conversions.
05. Reporting dashboard
A simple cost-per-call-by-source dashboard built so the owner could act on it weekly.
The Results
Within a couple of weeks, the new tracking covered the measured web and named offline channels. Two sources produced most qualified calls, so the owner reallocated budget; blended cost per tracked call fell by a third during the reporting period.
| Call attribution | 0% to 100% |
| Blended cost per call | -33% |
| Wasted offline spend | Cut on dead channels |
| Build time | 1 to 2 Weeks |
Services & tools used: CallRail, dynamic number insertion, GA4, and Google Ads.
call trackingAttribution became useful when it changed a budget decision
Tracking did not make every call perfectly attributable. It created a much stronger source-level view, with enough coverage to identify channels that deserved more or less spend.
- Use a number pool large enough for the site's concurrent visitors.
- Separate first-time callers, repeat callers, spam, and qualified jobs.
- Treat offline numbers consistently or the comparison will be distorted.
Frequently Asked Questions
How we built the call-attribution baseline
Tracking sources brought together
The attribution view combines dynamic number insertion for website visitors with dedicated numbers for print, vehicle wraps, and signs. Call logs and channel spending were then compared so the owner could see source-level call volume and blended cost per call.
Where call attribution can still be imperfect
Attribution depends on number-pool coverage, correct campaign tagging, consistent use of offline phone numbers, and staff handling of repeat callers. The 33% lower blended cost per call reflects decisions made from this setup; it does not mean every future call will have a single uncontested source.
Editorial review: Gilmedia strategy team. First published July 15, 2026.
Primary references
Related Gilmedia services
Spending on ads but flying blind?
We will show you exactly which channels drive your calls and which are wasting budget. Stop guessing and start funding what actually works.
Get your free auditNo obligation. A 15-minute call and a clear action plan.
Services in this project: AI Phone Receptionist · Google Ads Management

