Dynamic number insertion that ties every call back to the click
Dynamic number insertion, usually shortened to DNI, shows a different phone number to each visitor so the call they place can be matched back to the ad, keyword and click that brought them. Here is what it is, how it works, and why it belongs in the same system that routes your leads.
Definition
What is dynamic number insertion?
Dynamic number insertion is a call tracking technique that changes the phone number printed on a web page depending on who is looking at the page. Two people opening the same page at the same moment see two different numbers. Both numbers ring the same place, and the caller notices nothing. The difference is that the business now knows which visitor called, because it knows which number it handed to whom.
That matters because an ordinary phone number on a website is a dead end for measurement. A form fill tells you where it came from — the page it was submitted on, the ad that was clicked, the search that led there. A phone call tells you none of that. You know the phone rang. You do not know which advert, which keyword, or which campaign paid for it, so you cannot tell the half of your spend that works from the half that does not.
Dynamic number insertion closes that gap. A small script on the page asks for a number when a visitor arrives, swaps the number shown on screen, and remembers what brought that person there — the search term, the campaign, the click identifier the ad platform attached to the visit. When a call comes in on that number, the call is matched back to that visit. The advert that produced the call is now a fact on the call record rather than a guess.
- Every visitor session gets a number held for them, not a number shared across the site.
- The number changes; the page, the routing and the caller experience do not.
- The visit's campaign, keyword and click identifiers travel with the number.
- The call arrives already attributed, so reporting does not depend on asking the caller.
Mechanism
How dynamic number insertion works
Four moving parts: a pool of numbers, a script that assigns one per visitor, the tags it captures from the URL, and the match that happens when the phone rings.
- 1
A pool of call tracking numbers
The campaign owns a pool of numbers rather than one. How many you need depends on how many visitors are on the page at once, not on how much traffic you get in a month — a number is only busy while the session that holds it is live.
- 2
One number, leased per session
When a visitor lands, the script asks for a number and holds it for that session. By default the lease lasts ten minutes of idle time, up to thirty minutes overall, with a five-minute grace period after the browser closes so a call placed on the way out still matches. Both limits are configurable up to four hours.
- 3
The number is swapped on the page
The script replaces the displayed number wherever it appears, including click-to-call links, so a visitor on a phone taps the number that belongs to them. Nothing else on the page changes.
- 4
Click and campaign tags are captured
From the landing URL it captures the standard UTM parameters — source, medium, campaign, term and content — along with click identifiers from the major ad platforms: gclid, gbraid and wbraid, msclkid, fbclid, ttclid, twclid and li_fat_id, plus generic click and sub-ID parameters used by affiliate traffic.
- 5
The session is stitched together
Alongside the tags it records a visitor identifier, a session identifier, the referrer and the landing page URL, so multiple page views in one visit resolve to a single session rather than looking like several separate people.
- 6
The call is matched back
When a call arrives on a leased number, the number identifies the session that was holding it, and the session's tags are copied onto the call record. The call now carries the same campaign, keyword and click identifiers the visit did.
- 7
The pool maintains itself
Expired leases release their numbers back to the pool automatically, the pool tops itself up as concurrent demand rises, and numbers that sit idle decay back out on an hourly sweep, so a spike does not permanently inflate what you rent.
- 8
Form values stay opt-in
Capturing values typed into a form on the page is a separate switch, off unless you turn it on, because form values are personal data and URL tags are not.
If every number in a pool is leased when a visitor arrives, the page falls back to the campaign's primary number and that session is recorded as unattributed rather than being attributed to the wrong visit. A pool miss is visible, not silently guessed.
Why one system
Why number insertion belongs in the system that routes your leads
The usual arrangement is two products. Call tracking software inserts the numbers and reports on calls. A separate platform routes leads to buyers and reports on leads. Each one is complete on its own terms, and the join between them is a spreadsheet somebody maintains.
That join is where the money goes missing. The call tracking platform knows a call came from a particular keyword but not which buyer bought it, what they paid, whether it was returned, or whether the same person had already come through as a form lead an hour earlier. The routing platform knows all of that and has no idea which advert caused the call. Neither can answer the only question that matters: which traffic source is actually profitable once the sale, the return and the payout are counted.
When insertion and routing are one system, the join does not have to be made — it was never broken. The tracking number is issued by the same platform that owns the buyers, contracts and payouts, so a call arrives already carrying its source and is routed, billed and reported against that source in one pass. Deduplication sees the caller and the form lead as the same person. A returned call reverses against the campaign that produced it. Keyword-level reporting reaches all the way to revenue rather than stopping at call volume.
It is also the step that makes the rest of the loop possible. Because the platform issues the numbers, the AI voice agent that dials a routed lead can be handed a tracked number to transfer to — so the human conversation at the end is attributed to the same click as the form fill at the beginning.
One loop, not three products
Route the lead, insert the number, dial it, attribute the call
Call tracking vendors insert numbers but do not route leads. Voice-agent vendors dial but start from an empty contact list. Lead distribution platforms route but do not dial. Lead Router runs all four steps on one record, so the call an agent places carries the same attribution as the lead that produced it — and the outcome lands back on the source that sent it.
Route
A lead arrives and the routing engine picks the buyers and the price.
Insert
The landing page shows a number held for that visitor, carrying their click.
Dial
An AI voice agent calls the routed lead, qualifies, and transfers a live prospect.
Attribute
The call, its recording and its outcome report back to the keyword that started it.
After the call
From click to keyword: what keyword-level call tracking shows you afterwards
Attribution is only useful if it survives all the way to an outcome. Each call carries its source through routing, billing and disposition, so the same chain is readable end to end.
Source
The campaign, medium and source the visit came in on, plus the referrer and the landing page, so paid, organic and partner traffic are separable without tagging discipline on your side.
Keyword and click
The search term parameter and the platform click identifier ride with the call, which is what makes keyword-level call tracking possible: Google Ads calls resolve to a gclid, not just to a campaign name.
Publisher and sub-ID
Affiliate traffic keeps its sub-ID slots, so a call can be traced to the individual placement that produced it, not merely to the partner who sent it.
The call itself
Duration, disposition, recording and the routing trace that shows which buyers were evaluated, which were eligible, and which one took it.
The outcome
What the buyer paid, whether the call converted, and whether it was later returned — attached to the same record, so a source that looks strong on volume and weak on returns is visible as such.
The person, not just the call
Calls and form leads resolve to the same person where they match, so a caller who already submitted a form is not counted or sold twice.
Questions
Frequently asked questions
The questions people ask when they first meet the term, and the ones buyers ask before they switch.
What is dynamic number insertion?
Dynamic number insertion is a call tracking technique that shows a different phone number to each visitor to a web page, so that when someone calls, the business can tell which advert, keyword or campaign produced the call. A small script swaps the number displayed on the page and records what brought that visitor there; when a call arrives on that number, the two are matched. The visitor sees an ordinary phone number and notices nothing.
How is DNI different from ordinary call tracking?
Ordinary call tracking gives a campaign or a channel its own permanent number — one number for a billboard, another for a print advert. That tells you the channel but nothing finer. Dynamic number insertion assigns a number per visitor session instead, so it can separate two people who arrived on the same page from different keywords. Static numbers answer "which channel"; DNI answers "which click".
How many tracking numbers do I need?
Enough to cover your peak concurrent visitors, not your monthly traffic, because a number is only occupied while a session is live and returns to the pool when that session ends. The pool tops itself up as concurrent demand rises and lets idle numbers go on an hourly sweep, so it settles at the size your traffic actually requires rather than the size you guessed.
How long does a visitor keep the same number?
By default the lease runs for ten minutes of idle time and up to thirty minutes in total, with a five-minute grace period after the browser is closed so that a call placed shortly after leaving the page still matches the right visit. Both limits are configurable, up to a four-hour ceiling.
Which tracking parameters are captured automatically?
The standard UTM parameters (source, medium, campaign, term and content), platform click identifiers including gclid, gbraid, wbraid, msclkid, fbclid, ttclid, twclid and li_fat_id, and generic click-ID and sub-ID parameters used by affiliate traffic. Alongside them the script records a visitor identifier, a session identifier, the referrer and the landing page URL. Capturing values typed into a page form is a separate opt-in, because form values are personal data.
Does dynamic number insertion work for Google Ads call tracking?
Yes. The gclid, gbraid and wbraid parameters Google attaches to a paid click are captured with the visit and travel onto the call record, which is what allows a call to be resolved to the keyword and click that produced it rather than only to the campaign it sat in.
What happens if every number in the pool is taken?
The page falls back to the campaign's primary number and the session is recorded as unattributed. The call still connects and is still tracked as a call; it is simply not credited to a visit it cannot be proven to belong to. A pool miss is reported rather than resolved by guessing.
Do I need a separate call tracking platform as well?
No — insertion, routing, billing and reporting run in the same system here, which is the point. A separate call tracker can tell you which keyword produced a call but not which buyer bought it or what they paid, and a separate routing platform knows the sale but not the advert. Running both in one place means the call arrives already attributed and stays attributed through the sale, the payout and any return.
Put a number on the page
Start attributing calls to the clicks that caused them
Add one script to your landing page, point a number pool at the campaign, and the next call that arrives carries the keyword that produced it.
Every feature is part of the plan. Usage is billed in credits.