One line of JavaScript. Every website visitor sees a unique tracking number based on how they found you — Google Ads, Facebook, organic, or direct. Visitor-level attribution without changing your site.
CallScaler's dynamic number insertion (DNI) automatically swaps phone numbers on your website based on visitor source, including Google Ads, Facebook, organic, or direct. Unlike competitors that charge extra for DNI or limit it to higher tiers, CallScaler includes it on all plans. The async JavaScript snippet has zero page speed impact and captures gclid, fbclid, UTM parameters, and landing page data for every visitor session.
One script tag. Automatic visitor-level attribution.
Paste a single JavaScript snippet on your website. It loads asynchronously — zero impact on page speed.
Create a pool of tracking numbers and set your swap targets. CallScaler handles the rest.
Each visitor sees a unique number based on their referral source, campaign, and keyword. The swap is invisible and instant.
When they call, CallScaler matches the number back to the specific visitor session — source, keyword, landing page, and more.
DNI that tracks everything without slowing your site.
Go beyond source-level. Track individual visitor sessions with unique number assignment.
A single async script tag. Works with any website, CMS, or landing page builder.
Automatically detects Google Ads, Facebook, Bing, organic search, direct, and custom UTM sources.
Captures gclid, msclkid, fbclid, and all UTM parameters from the visitor's URL.
Numbers are recycled after visitor sessions expire. Maximize tracking with fewer numbers.
Use the same pool across multiple domains. Perfect for agencies managing many client sites.
No credit card required. Set up in under 60 seconds.
Anyone who needs to know which website visitors turn into phone calls.
Dynamic number insertion (DNI) is a technique that automatically swaps phone numbers on your website based on how each visitor found you. A visitor from Google Ads sees one number, a visitor from Facebook sees another, and an organic search visitor sees a third. This happens invisibly through a JavaScript snippet. When any of these visitors call, you know exactly which channel, campaign, and even keyword drove the call.
You add a lightweight JavaScript snippet to your website (or use Google Tag Manager). When a page loads, the script checks the visitor's referral source, captures click parameters like gclid, fbclid, and UTM tags, and assigns a unique tracking number from your number pool. That number is displayed everywhere on the page, replacing your default business number. The assignment is tied to the visitor's session, so if they browse multiple pages and call later, the attribution still holds.
Static call tracking assigns one number per campaign. If you run 10 Google Ads campaigns, you use 10 numbers. This tells you which campaign drove the call, but not which keyword or which specific visitor. DNI goes further by assigning numbers per visitor session, capturing the full click path including keyword, landing page, and device. For most businesses running online ads, DNI is essential for accurate ROI measurement.
CallScaler's DNI snippet loads asynchronously and weighs under 5KB. It does not block page rendering or affect Core Web Vitals. The number swap happens after the page paints, so there is no layout shift visible to users. Search engines see your original number in the HTML source, which is the correct behavior for local SEO. The swap is JavaScript-only, meaning Googlebot indexes your real business number while visitors see tracking numbers.
Create a number pool in CallScaler with at least 5-10 tracking numbers. Set the target number (the real number DNI should replace on your site). Copy the one-line JavaScript snippet and add it to your website header or via Google Tag Manager. The script automatically detects your phone number formats on the page and replaces them. No code changes to your site templates are needed. The whole setup takes about 5 minutes.
Optimize your DNI setup with these tips:

If numbers are not swapping on your site, check these common causes:
If your site uses Google Tag Manager, you can deploy the DNI snippet as a custom HTML tag that fires on all pages. This avoids editing your site code directly and lets your marketing team manage the tracking script without developer involvement. Set the tag to fire on DOM Ready for the fastest number swap. GTM deployment works identically to a direct script install — same attribution, same speed, same results.
The same tracking.js snippet that powers DNI also captures form submissions on your site. When a visitor fills out a form, it gets the same source attribution as a phone call — UTM parameters, gclid, landing page, and referrer. This means you can compare call and form conversion rates by source in a single dashboard without adding any extra code.
Common questions about Dynamic Number Insertion.
Works great with Dynamic Number Insertion.
Assign unique phone numbers to every marketing channel, campaign, and landing page. Attribute every inbound call to the source that generated it — with zero guesswork.
Learn moreCapture gclid, msclkid, fbclid, and UTM parameters automatically. Know which keywords, ad groups, and campaigns generate phone calls — and feed that data back to your ad platforms for smarter bidding.
Learn moreClose the attribution loop. When a Google Ads click turns into a phone call, CallScaler sends the conversion back to Google Ads — including gclid, call duration, and lead score. Your Smart Bidding gets smarter.
Learn moreSign up free and get started in under 60 seconds. No credit card required.