Dynamic number insertion is the single most important piece of call tracking technology, and it has the least approachable name. This guide explains it without code, using one running analogy, so you can understand what your site is doing, explain it to a stakeholder, and recognize when it’s misbehaving.
What DNI is (the 10-second version)
DNI is a small script on your website that swaps the phone number each visitor sees, so that when they call, the call can be matched back to their exact visit — the ad they clicked, the search they made, the pages they viewed.
The analogy that makes it click: imagine a shop that hands every arriving customer a numbered ticket at the door. Whatever the customer does later — asks a question, makes a purchase, phones the shop that afternoon — the ticket number connects the action back to that specific visit. DNI is the ticket, except the ticket is a phone number.
What visitors see vs. what the code does
What the visitor sees: a phone number on your website. It looks like a normal number because it is one. If they refresh, they’ll usually see the same number. Nothing about the page looks or feels different.
What actually happened: when the page loaded, your regular business number was in the page’s code as usual. In the first moments of loading, the DNI script asked your call tracking platform, “I have a new visitor — which number should this one see?” The platform assigned a number from your pool, and the script replaced the displayed digits. The script also noted everything knowable about the visit: the source (a Google Ads click, an organic search, a Facebook referral), the campaign parameters in the URL, and the pages the visitor moves through.
Now the number on screen isn’t just a phone number. It’s that visitor’s ticket.
Session-level tracking: connecting the call to the click
When the visitor dials the number they were shown, your platform sees which pool number was called and checks who it was assigned to at that moment. It finds the session — mobile visitor, arrived 2:40pm from the “Emergency Repairs” ad group, searched “burst pipe repair near me,” viewed the pricing page — and attaches all of it to the call record.
That’s the payoff, and it’s worth being precise about what it buys you over simpler methods. Static tracking (one number per channel) can tell you “the website drove this call.” DNI tells you which ad, which keyword, which landing page drove it. That’s the difference between knowing marketing works and knowing which marketing works — and it’s what makes call conversions useful to ad platforms’ automated bidding, covered in the Google Ads playbook. For the decision between the two approaches, see Static vs. Dynamic Call Tracking Numbers.
What DNI needs to work
Three ingredients:
The script. A snippet your platform gives you, installed once across the site — directly, or via a tag manager. Installation is genuinely a copy-paste task; “non-developer” is not marketing spin here, though a developer or your web person should still do a quick pass to confirm placement.
A number pool. DNI shows different visitors different numbers, which requires a supply of numbers sized to your simultaneous traffic. Undersized pools are the most common cause of degraded tracking. The mechanics of pools — and why they’re the real cost driver of session-level tracking — are explained in How Call Tracking Numbers Work.
Swap targets and triggers. The script needs to know which numbers on the page to replace (it should catch your number everywhere it appears — header, footer, contact section, click-to-call buttons) and which visitors trigger a swap. You can configure it to swap for everyone, or only for visitors from sources you’re tracking. Most setups swap for all visitors so nothing slips through.
Common DNI failure modes and how to spot them
DNI is reliable, but when it misfires, it does so in recognizable ways. Symptoms worth knowing:
The number doesn’t swap at all. Usually the script isn’t firing — wrong installation, blocked by a consent manager awaiting cookie acceptance, or the number on the page is embedded in an image, which no script can rewrite. Test by visiting your site from an ad click and checking whether the displayed number differs from your real one.
The number flickers. Visitors briefly see the original number before it changes. Cosmetic, but it can look glitchy. It means the swap is happening late in page load; your platform’s installation guidance usually has a fix.
Some numbers swap, others don’t. The footer swaps but the header doesn’t, or desktop swaps but the mobile click-to-call button doesn’t. The script’s swap targets need adjusting to cover every instance and format of your number.
Attribution is mostly “unknown” or source-only. Calls are logging but session details are missing. First suspect: pool too small for your traffic. Second: heavy traffic spikes (a promotion, a press mention) temporarily exhausting the pool.
Numbers cached in odd places. Page-caching plugins or CDNs occasionally freeze a swapped number into the cached page, showing one visitor’s ticket to everyone. Your developer can exempt the number element from caching.
A quarterly five-minute test — click your own ad, check the swap, place a test call, verify the session data lands — catches all of these before they quietly corrupt a month of reporting.
DNI and page speed: what the data says
The perennial stakeholder question: “won’t this slow down the site?”
The honest answer: the script is small and loads asynchronously, meaning the page doesn’t wait for it. The measurable impact on modern, reasonably built sites is negligible — a few tens of milliseconds of script work happening in parallel with everything else the page is doing. It does not block rendering, and it does not meaningfully move Core Web Vitals on a healthy site.
The proportional way to think about it: the marketing data DNI produces routinely reallocates thousands in monthly spend. A well-implemented script’s speed cost is orders of magnitude below anything a visitor could perceive. If your site is slow, DNI is not why — and if you’re worried about the SEO angle more broadly, Does Call Tracking Hurt SEO? takes that question apart properly.
Frequently asked questions
Does DNI slow down my website?
Not perceptibly. The script is lightweight and loads asynchronously alongside the rest of the page. On a healthy site the impact is a rounding error; it doesn’t block rendering or meaningfully affect Core Web Vitals.
What if a visitor writes the number down and calls later?
Pool numbers are held for a session plus a buffer window. A call within that window still matches the session. After the window lapses, the call still connects and still logs — it just attributes at a coarser level rather than to the original session. In practice, the large majority of website-driven calls happen promptly, which is exactly the behavior DNI is built for.
Does DNI work on mobile click-to-call?
Yes, when configured correctly — the script rewrites both the visible digits and the underlying tap-to-call link. It’s also one of the checks to include in your periodic test, since a missed click-to-call target is a classic partial-failure mode.
You now understand the machine. Next question: where should you use it versus simple static numbers? That’s Static vs. Dynamic Call Tracking Numbers: When to Use Each. For the full map, return to the complete call tracking guide.