A customer says they found you online. You don’t know which part of online. Dynamic number insertion (DNI) is a small JavaScript snippet on your website that swaps the phone number on the page to match how each visitor arrived – organic search, Google Ads, Facebook, email, a referral – so when they call, you see the source, the campaign, the keyword and the landing page behind that call. Printed numbers handle your truck and your mailers. DNI handles the one page that every source lands on.
- DNI swaps the number your website shows; your real number stays in your site’s code and your listings.
- Source-level pools: a small set of numbers per source. Simple and inexpensive.
- Session-level pools: one number per active visitor. That’s what shows you the keyword.
- Session-level holds more numbers, so it costs more.
- DNI does not answer the phone. It only tells you which source the missed call came from.
DNI is not a rival to call tracking. It’s one part of it
Plenty of pages treat the two as products you choose between. They aren’t. Call tracking is the whole thing: numbers, recordings, reports, missed-call flags. DNI is the website piece.
You can run call tracking with no DNI at all. One number on the truck, one on the Business Profile, one on the postcard. That’s printed numbers versus swapped website numbers, and printed is cheap and flat.
DNI exists because your website is the one place you can’t print a different number. Organic search, paid search, social, email and referrals all land on the same page. One printed number there tells you nothing.
Next step: start with printed numbers on the things you control, then add DNI when the website is where the money goes.
How dynamic number insertion works
You add a small JavaScript snippet to your site. One line. When a visitor lands, the script reads how they got there: the referring site, UTM parameters, the Google Ads click ID, similar signals.
It swaps the number on the page for a tracking number tied to that visitor. Calls still ring your existing office or cell phone. Nothing changes about how you answer.
When the phone rings, the call matches back to that visit: the click ID, the campaign, the ad group and keyword via your UTM or ValueTrack parameters, the landing page, and the pages viewed before the call. Our walkthrough of what call tracking is and how it works covers the rest of the plumbing.
Next step: confirm your campaigns carry UTM tags, because DNI reads what your tagging gives it.
Can you use DNI yet? Check these four in 30 seconds
Are you ready for DNI?
DNI needs some things to be true before it tells you anything useful.
- Your campaigns are UTM-tagged, or auto-tagged in Google Ads. No tags, no keyword or campaign detail.
- You buy traffic to the website, or earn real organic traffic to it. A site nobody visits has nothing to swap.
- Enough calls arrive from the website that you’d act on the split. If you get two website calls a month, printed numbers are enough.
- You can add one line of JavaScript to your site, or you know who can.
Miss one of those and start somewhere else. If the real problem is the missed call, not the source, start with the 8am missed-call list and your answer rate. The industries page shows the trade-by-trade setups.
Next step: if you can’t tick all four today, fix the tagging first; everything else waits on it.
Source-level versus session-level: what each one costs you in numbers

Source-level vs session-level pools
This is the only real decision in DNI, and it’s the one that moves your bill.
| Pool type | What the visitor sees | What you see afterwards | Numbers held |
|---|---|---|---|
| Source-level | A number from a small set tied to their source, for example “Google organic” or “Facebook ads” | The source the call came from | Fewer |
| Session-level | Their own number for the length of their visit | The exact visit: landing page, pages viewed, keyword or campaign | More |
The cost mechanic, in one line: you pay for the numbers you hold, so a source-level setup with five sources holds five numbers, while a session-level pool that has to cover your busiest hour holds one number per visitor who is on the site at the same time. Numbers go idle and get reused when a session ends, so the pool is sized to peak concurrent visitors, not to monthly visitors.
So two shops with the same traffic can hold very different numbers. The one with five tracked sources and no keyword reporting holds a handful. The one that wants keyword detail during a weekday morning rush holds whatever that rush needs at once. We size it with you before you buy anything, and the rate per number lives on the pricing page.
Most owner-run shops do fine at source level. If you’re bidding on keywords and intend to act on what you learn, you need session level. Our page on tracking phone calls from Google Ads covers that side.
Next step: pick source-level unless a keyword report will change a bid this month.
What changes in your report: two worked examples
The plumber. Sample: you spend on Google Ads, and your report before DNI says “website: 46 calls.” That’s it. One line. After DNI, the same 46 calls split by source: Google Ads, organic search, your Business Profile click-through, the Facebook ad. With session-level pools, the Ads calls carry the search term and the landing page too. Now you know whether the drain-cleaning ad group or the water-heater one made the phone ring, and you stop paying for the one that didn’t.
Here’s the part owners don’t expect: a keyword can look weak in the ads dashboard because it produces few form fills, so you pause it. With the calls attached, you can see it was producing a steady stream of phone calls the whole time.
The dental practice. Sample: your report goes from “22 calls” to “new-patient calls from Google Ads: 22, booked: 9” – a 41% booking rate. DNI gets you that far. What happened on the 13 that didn’t book is a front-desk question, and it’s in the recordings: insurance questions point at pricing, “next opening is in three weeks” at capacity, “let me check and call you back” at training. A practice manager should listen to about ten recordings a month.
For a plumber the call is the win. For a practice the call is only halfway, and the win is a new patient on the schedule.
Next step: before you pause a keyword, check what it did on the phone.
Does DNI hurt your SEO?
Owners ask this first. The honest answer is no, not when it’s set up correctly.
The script swaps the number for human visitors while your real number stays in your site’s code and in your business listings, so your name, address and phone stay consistent everywhere Google checks.
Your Google Business Profile keeps your real number, or one dedicated tracking number, never a pool. Your citations keep your real number. The swap happens in the browser.
Next step: leave your listings alone and let DNI live only on the website.
DNI tells you where a call came from. It does not answer the phone. If a source is producing calls you’re not picking up, the number to fix is your answer rate, not your bid.
What it costs, in plain terms
We don’t price DNI as a separate product. You pay a plan fee plus exactly the usage you use, and the tracking numbers you hold are part of that. Session-level pools hold more numbers than source-level pools, so they cost more. That’s the whole mechanic.
Usage is prepaid, so there’s no surprise bill. Month-to-month, no setup fee, cancel anytime. The rate table and the Estimate my cost tool live on the plans and pricing page, which is the source of truth on rates.
I’m John Kirker, founder of CallTrackingServices, a trade name of Kirker Inc. in Tustin, California. I run my own business on the same account, the same reports and the same missed-call emails our customers get. Our system checks our own billing every day. This month it flagged a client sitting on two usage markups at once, from an old setup, which meant double billing on usage. We removed the duplicate the same day. The customer never had to raise it.
Next step: run your own numbers on the pricing page before you decide how many numbers to hold.
FAQ
What is dynamic number insertion in plain English?
It’s a script on your website that changes the phone number a visitor sees, based on how they found you. Someone arriving from a Google ad sees one number, someone from organic search sees another. Both ring your same phone. The difference shows up in your report.
Will dynamic number insertion mess up my Google listing?
No, not when it’s set up correctly. The swap happens in the visitor’s browser. Your real number stays in your site’s code and in your listings, so your name, address and phone stay consistent. Your Business Profile gets its own single number, never a pool.
How many tracking numbers does DNI need?
It depends on the pool type and your traffic. Source-level pools use a small set per source. Session-level pools give each active visitor their own number, then return it to the pool when they leave, so numbers get reused. We size it with you before you buy anything.
Do I need DNI if I already use Google’s call reporting?
Google’s forwarding numbers and the Business Profile call button are free and worth switching on. They cover Google only. They don’t record the call, don’t tell you about a missed call, and the numbers can change on you. Owners usually come to us after trying that and still not knowing where the other half of their calls came from.
Can I track calls without DNI?
Yes. Print a separate number on each thing you control: the truck, the yard sign, the postcard, the radio spot, the Business Profile. Each logs date, time, caller number, duration, and a recording if you turn it on. Cheap and flat. DNI is only for the website.
Does DNI work with my existing phone system?
Yes. Calls ring your existing office or cell phone, and there’s no hardware to install. Many customers keep their phone system and put us in front of it. You add one line to your website and it shows each visitor the right number.
Where this fits
DNI is one piece. Start with what call tracking is and how it works, then read how many call tracking numbers you actually need. A person sets it up with you, reads the numbers with you, and answers when you write. We don’t sell leads and we don’t run your ads. We’re not that, and we say so.
Reviewed by John Kirker, Founder, Serial Entrepreneur, Founder, Consultant - last updated October 24, 2026.
Sources for this article
- DNI definition and JavaScript snippet reading referrer, UTM parameters, Google Ads click ID - from 'What Is Call Tracking and How Does It Work?'
- Source-level vs session-level pools, idle numbers returned and reused, session-level costs more - from the same post and 'Call Tracking Numbers'
- SEO answer: script swaps number for visitors while real number stays in site code and listings, NAP consistency - from 'Call Tracking Numbers'
- Calls matched to GCLID, campaign/ad group/keyword via UTM or ValueTrack, landing page and pages viewed - from 'How to Track Phone Calls from Google Ads'
- Keyword looks weak on form fills but produces calls; offline conversion import and Smart Bidding - from 'Call Tracking Numbers'
- Printed numbers log date, time, caller number, duration, recording; cheap and flat - from 'Call Tracking Numbers'
- Dental: new-patient calls from Google Ads 22, booked 9, 41% booking rate; insurance/capacity/training signals; ~ten recordings a month - from brand facts doc
- Plumber's win is the call, practice's win is the booked new patient - from brand facts doc
Facts drawn from this site's own documented knowledge and first-hand experience.
