Call tracking & DNI

Know which campaign made the phone ring

Every inbound call carries the campaign, keyword, landing page and ad click that produced it — captured before anyone picks up. Run it for every client you have, on the carrier you choose, under your own name.

Twilio · Telnyx · Bandwidth · Plivo · CallRail · Google Voice

No card to start. Bring your own carrier account, or use ours.

6 carriersProvision numbers from whichever is cheapest in the area code you need
Per visitNumbers are assigned per session, not per campaign — down to the keyword
< 300msSwap happens on page load, before the visitor can read the number

The question every client asks, and why the answer is usually a guess

Somewhere in the second or third month of every retainer, a client asks the same question: is this working? If the business takes its enquiries by form, you can answer honestly in about four minutes. If it takes them by phone — and most local businesses worth having as clients take most of theirs by phone — the honest answer is that you do not know.

You know how many people arrived from Google Ads. You know how many sessions the SEO work produced. You know the phone rang forty-one times last month, because the client told you so. What you cannot do is join those facts together. The visitor who read three pages, took out their phone and dialled left no trail between the click and the call. Analytics saw a session end. The business saw a call begin. Nothing connects them.

So the reporting fills the gap with proxies. Time on page. Scroll depth. Assisted conversions. Clicks on the tel: link, which counts the desktop visitor who tapped it by accident and misses the one who read the number and keyed it in by hand. Each is a reasonable stand-in and none of them is the thing the client asked about, and everybody in the meeting knows it.

The cost of that gap is not really the reporting. It is the budget. A campaign that produces cheap calls and no forms looks like a failure and gets cut. A campaign that produces cheap form fills and no calls looks like a triumph and gets scaled. Agencies lose accounts over decisions made on exactly this misreading — not because the work was bad, but because the half of the results that arrived by telephone was invisible when the spend was allocated.

Call tracking closes the gap by making the phone number itself the identifier. Instead of one number on the website, the visitor is shown a number tied to how they arrived. When that number rings, the source is already known — not inferred, not modelled. The call arrives with its own provenance attached, and the answer to "is this working" stops being a judgement call.

How dynamic number insertion actually works

Dynamic number insertion — DNI — sounds more complicated than it is. There are five moving parts and the whole thing happens between the visitor clicking a link and the page finishing its first paint.

  1. A pool of numbers is provisioned for the client

    You buy tracking numbers in the area codes your client's customers expect — local numbers convert better than toll-free for a local business, and a Denver number on a Denver roofer is worth more than an 800 number. Each number forwards to whatever line already rings today. Nothing about how calls reach the business changes.

  2. The snippet reads how the visitor arrived

    One script tag on the site captures the referrer, the UTM parameters, the gclid or fbclid on the URL, the landing page and the keyword where the platform passes one. That is the visit's fingerprint, and it is recorded before any number is chosen.

  3. A number is assigned to that visit

    Not to the campaign — to the session. The visitor gets a number held for them for the length of their visit and a window afterwards, so two people reading the same page at the same time see different numbers and their calls never get confused with each other.

  4. Every number on the page is swapped

    The script rewrites the displayed number, the tel: link, the click-to-call button and the number in the footer. It does this on load, so the visitor never sees the original — and it leaves structured data and schema markup alone, so your local SEO is not fighting your call tracking.

  5. The call arrives already attributed

    When that number rings, the platform already knows which session it belongs to. Campaign, keyword, landing page, device, first touch and last touch are attached to the call record at the moment it connects — not reconciled afterwards, not matched on a best guess.

What you get out of it

The attribution is the point, but it is not the only thing that falls out of putting a tracked number in front of every visit.

Keyword-level attribution

Where the ad platform passes a keyword, the call carries it. You can see that "emergency plumber near me" produces calls at half the cost of the generic head term you were told to bid on.

Whole-journey context

The call record holds the landing page, the pages read before dialling, the device and the referrer. A ninety-second call from a pricing page is a different lead from a ninety-second call from the homepage.

Missed-call visibility

Calls that rang out are recorded as leads, not silence. For a lot of local businesses the most valuable report you will ever hand over is the one listing the calls nobody answered on Saturday morning.

Recording and transcription

Optional per client, with consent handling built in. Where you enable it, the recording is attached to the attributed call rather than sitting in a separate system nobody opens.

Numbers that survive a rebrand

The forwarding target is editable. When a client moves office or changes their answering service, you repoint the number instead of buying a new one and losing its history.

Spam filtered before it counts

Repeat robocalls and immediate hang-ups are scored and excluded, so the lead count you put in front of a client is the number of real conversations, not the number of times the handset lit up.

A worked example: one roofing client, three channels

A roofing company spends four thousand dollars a month with you. Twenty-two hundred goes to Google Ads, a thousand to Local Services Ads, and the rest is retainer for SEO and content. Last month the business took ninety-one calls and closed eleven jobs. Without call tracking, that is the entire dataset, and every conversation about budget is a negotiation between two opinions.

With tracked numbers on every visit, the same month reads differently. Google Ads produced thirty-eight calls at fifty-eight dollars each. Local Services produced twenty-nine at thirty-four dollars each. Organic produced twenty-four at no marginal cost, and nine of those came from three blog posts about ice dams that the client nearly cancelled you over in January.

Now look at duration and outcome rather than count. Of the thirty-eight paid-search calls, fourteen lasted under thirty seconds — the caller wanted a part, or a job in a suburb the client does not serve. Local Services calls averaged four minutes and produced six of the eleven closed jobs. The cheapest channel by cost per call was also, in this case, the best by cost per job, but you would never have known that from the platform dashboards, because Local Services reports calls and Google Ads reports conversions and neither of them knows what happened afterwards.

The recommendation writes itself, and it is defensible in a way it never was before: hold Local Services, cut the two paid-search ad groups producing sub-thirty-second calls, and put the difference into more of the content that is quietly producing free calls in January. That is a conversation about evidence rather than a conversation about faith, and it is the conversation that keeps the account.

What it takes to set up

Setup is the part most agencies expect to lose a day to. In practice the guided flow provisions a client, a number and a snippet in a single pass, and the longest step is usually waiting for someone at the client to paste one line into their site.

  • One script tag. Added to the site head, or installed by the WordPress plugin if the client is on WordPress. It is asynchronous and does not block rendering.
  • One tracking number per pool. Start with one. Add more when concurrent traffic justifies it — the system tells you when the pool is running dry rather than silently reusing numbers.
  • A forwarding target. The number the business already answers. No porting, no change to their phone system, no conversation with their telecoms provider.
  • Optional: your own carrier account. Bring your own Twilio, Telnyx, Bandwidth or Plivo credentials and pay wholesale rates directly, or use the platform's. The choice is per agency.
  • Optional: recording consent settings. Announcement, two-party consent or off, configured per client, because the law differs by state and it is not a decision to make globally.

Where the numbers come from

Most call tracking products are a reseller wrapper around one carrier, which is why their per-number pricing looks the way it does. This one speaks to six, and the choice is yours per agency — including bringing your own account and paying the carrier directly.

Numbers are released back to the carrier when you delete them, and the release is confirmed by the carrier before the record is removed — so a deleted number stops costing money.
CarrierNumbersRecordingBest for
TwilioSearch, buy, releaseYesBroadest area code coverage, easiest to start
TelnyxSearch, buy, releaseYesLower per-minute rates at volume
BandwidthSearch, buy, releaseYesEnterprise volume, direct carrier pricing
PlivoSearch, buy, releaseYesStrong international coverage
CallRailImport existingVia CallRailAgencies migrating without renumbering
Google VoiceImport existingNoSingle-number clients already set up

What call tracking does not do

It is worth being straight about the limits, because every vendor in this category oversells them and the disappointment always lands on the agency.

It does not tell you what happened on the call. A tracked call is attributed, timed and optionally recorded, but whether the caller booked, haggled or was calling about a job the business turned down is not something a phone number knows. Call intelligence and lead scoring get you closer by reading the transcript, and the client's own follow-up is what closes the loop properly.

It does not attribute calls to people who never visited the website. A customer who saw the van, kept the fridge magnet and rang the number printed on it is not part of this dataset, and any product that claims otherwise is guessing. What you can do is put a distinct tracking number on the van, the magnet and the Google Business Profile, and measure those as their own channels.

It does not survive a visitor who copies the number into a different device. Someone who reads the number on a laptop and dials from a mobile is still attributed, because the number itself carries the session. Someone who screenshots it and rings a week later after the session window closes is attributed to the channel, not the keyword. That window is configurable, and the honest answer is that it is a trade between attribution precision and how many numbers you have to buy.

And it does not make an unanswered phone ring. Attribution tells you that Saturday morning produces eleven calls and the business misses nine of them. Fixing that is the client's job — but it is the single most valuable thing you will find in the first month, and it has nothing to do with marketing at all.

The economics, honestly

Call tracking is usually sold per number per month, and that pricing model is why so many agencies ration it — one number per client, pointed at the whole website, which tells you the site produced calls and nothing more useful than that. The rationing is a response to the price, and the price is mostly resale margin on a wholesale number that costs about a dollar a month.

Bring your own carrier account and the arithmetic changes completely. A local number from Twilio or Telnyx is roughly a dollar a month plus a cent or two a minute; the same number resold by a call tracking vendor is commonly four to six dollars, before per-minute charges that carry their own markup. Across twenty clients with five numbers each, that is the difference between a hundred dollars a month and six hundred — for identical telephony, because it is identical telephony.

The reason that matters is not the saving on its own. It is what the saving lets you do. At wholesale rates, giving a client eight numbers instead of one stops being a budget conversation, and eight numbers is the difference between "the website produced forty calls" and "the Google Ads brand campaign produced nine calls, the non-brand campaign produced twenty-two, and the Google Business Profile produced eleven that you were previously crediting to organic".

There is a second cost worth naming, which is the one nobody quotes: the numbers you forget to release. A campaign ends, the landing page comes down, and the number keeps billing quietly for a year because nothing in the product ever told anybody it was idle. Releasing a number here is confirmed with the carrier before the record is deleted, and the platform reconciles its own list against the carrier's in both directions — so a number live at the carrier with no client attached gets surfaced rather than silently invoiced.

None of which is an argument that this is free. Numbers cost money, minutes cost money, and recording and transcription cost more. The argument is that you should be able to see those costs at wholesale, decide how many numbers a client is worth, and not have the decision made for you by a per-number price sheet designed to make eight numbers feel extravagant.

How it fits with everything else

Call tracking on its own produces a better spreadsheet. It becomes something a client notices when the attributed call is joined to the rest of what you already know about them.

Ad spend is pulled from the ad platforms automatically, so the cost per call is calculated rather than typed in. Multi-touch attribution means the blog post that started the journey is credited alongside the paid click that ended it. CRM delivery pushes the attributed call into the client's pipeline the moment it lands, so their sales team sees the source without opening your dashboard. And the client-facing report — a link they can open any time — shows the calls, the sources and the trend without them ever needing a login.

That last one is the part that changes retention. The reason agencies lose clients is usually not the work; it is the client's inability to see it between meetings. A link that always shows this month's tracked calls, by source, is a standing answer to the question that would otherwise be asked in an uncomfortable email.

Common questions

Do my clients have to change their phone number?

No. Tracking numbers forward to whatever line already rings — the desk phone, the mobile, the answering service. Nothing about how calls reach the business changes; you are only changing what is displayed to visitors on the website.

Will dynamic number insertion hurt local SEO or NAP consistency?

Not when it is done properly. The swap happens in the rendered page for human visitors, while structured data, schema markup and the number in your Google Business Profile stay on the real business number. Search engines and directories continue to see a consistent name, address and phone; only the visitor who arrived from a tracked source sees a tracked number.

How many tracking numbers does a client actually need?

Fewer than most vendors sell them. Numbers are assigned per visit and released back to the pool after the session window, so a pool of a handful covers a site with steady traffic. The platform warns you when concurrency is exhausting the pool rather than silently handing two visitors the same number, which is where cheap call tracking quietly corrupts its own data.

What happens if a visitor calls a week after their visit?

The session holds its number for a configurable window after the visit. Inside that window the call is attributed to the full journey — campaign, keyword, landing page. Outside it, the number has returned to the pool and the call is attributed to the channel rather than the specific visit. Widening the window improves late attribution and costs more numbers; it is a trade you set per client.

Can I use my own Twilio or Telnyx account?

Yes, and for most agencies at any scale you should. Bring your own carrier credentials and you pay the carrier wholesale directly rather than a marked-up per-number fee. The platform handles provisioning, release, webhooks and recording against your account. If you would rather not deal with a carrier at all, use the platform's.

Is call recording legal?

It depends where the caller and the business are, which is exactly why it is a per-client setting rather than a global switch. Recording can be off, announced to the caller before connection, or set for explicit two-party consent. The announcement wording is editable, and the consent decision is recorded alongside the call — because "we thought it was on" is not a defence anybody wants to run.

Can I white-label call tracking for my clients?

Yes. Your domain, your logo, your colours and your sending address across the dashboard, the reports and the notification emails. Clients log into your brand, and the client-facing report a business owner opens carries your name rather than ours.

How does this compare to CallRail or CallTrackingMetrics?

The mechanics of DNI are broadly the same across all of them — this is a mature technique and nobody has a secret. Three things differ here: you can bring your own carrier instead of paying per-number resale margin; call tracking sits in the same product as your SEO, landing pages, reviews and client reporting rather than being a separate subscription you have to reconcile; and white label is a plan feature rather than an enterprise upsell. If you already run CallRail, you can import those numbers and migrate without renumbering.

Does it work on WordPress, Webflow, Squarespace and custom sites?

Anywhere you can add a script tag, which is all of them. There is a WordPress plugin that installs the snippet and adds server-side form capture, which is worth using where the client is on WordPress because it survives themes that strip inline scripts.

What happens to the call data if I leave?

You export it — calls, recordings, leads, attribution, the lot — from inside the dashboard, without asking anyone. Tracking numbers are released back to your carrier account, and if the carrier account is yours, the numbers stay yours.

Stop guessing which half of the phone calls came from you

Provision a client, a tracking number and the snippet in one pass. Most agencies have their first attributed call the same day.