Dynamic number insertion swaps the phone number on your website per visitor. One script tag, automatic source attribution, and zero impact on page speed.
Dynamic number insertion (DNI) automatically swaps the phone number on your website based on how each visitor found you. CallScaler ships DNI free on every plan, including pay-as-you-go, while many competitors charge extra or restrict it to higher tiers. The async script weighs under 5 KB, has no impact on page speed, and captures gclid, fbclid, msclkid, and every UTM parameter for full visitor-level call attribution.
Dynamic number insertion (DNI) 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. The swap happens invisibly through a single JavaScript snippet. When any of these visitors call, you know which channel, campaign, and keyword drove the call.

You add a lightweight async JavaScript snippet to your website, or deploy it through Google Tag Manager. When a page loads, the script reads the visitor's referral source, captures click IDs like gclid, fbclid, and msclkid, and assigns a unique tracking number from your pool. That number is displayed everywhere on the page in place of your default business number. The assignment sticks to the visitor session, so if they browse multiple pages and call back later, the attribution still holds.
Static call tracking assigns one number per campaign. If you run 10 Google Ads campaigns, you use 10 numbers. That tells you which campaign drove the call, but not which keyword or which specific visitor. Dynamic number insertion goes further by assigning numbers per visitor session, capturing the full click path including keyword, landing page, and device. For any business running online ads, DNI is the only path to accurate ROI measurement.
The CallScaler dynamic number insertion script loads asynchronously and weighs under 5 KB. It does not block page rendering or affect Core Web Vitals. The number swap happens after the page paints, so visitors do not see any layout shift. Search engines like Google index your real business number from the HTML source, which keeps your local SEO and Google Business Profile consistent. The swap is JavaScript-only, so Googlebot sees one number while users see tracking numbers.
Build a number pool in CallScaler with at least 5 to 10 tracking numbers. Set the target number, which is the real number DNI replaces on your site. Copy the one-line snippet from your dashboard and paste it in your site header or in Google Tag Manager. The script auto-detects your phone number formats on the page and swaps them. No template changes needed. End-to-end setup takes about 5 minutes.

Get the most out of your dynamic number insertion setup:
If numbers are not swapping on your site, check these common causes:
If your site uses Google Tag Manager, deploy the DNI snippet as a custom HTML tag that fires on all pages. This skips editing your site code 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 is identical to a direct install in attribution, speed, and reliability.

The same tracking script that powers dynamic number insertion also captures form submissions on your site. When a visitor fills out a form, it gets the same source attribution as a phone call, including UTM parameters, gclid, landing page, and referrer. You can compare call and form conversion rates by source in one dashboard, with no extra code.

One script tag, automatic visitor-level attribution.
Drop one async script tag in your site header. Loads in under 5 KB with no impact on page speed.
Build a pool of tracking numbers and set the swap target. 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 exact visitor session, including source, keyword, landing page, and device.

Dynamic number insertion that tracks everything without slowing your site.
Tie every call back to the individual visitor session that drove it, not just the campaign.
A single async script tag. Works with any website, CMS, or landing page builder.
Detects Google Ads, Facebook, Bing, organic search, direct, and custom UTM sources automatically.
Captures gclid, msclkid, fbclid, and every UTM parameter from the visitor URL.
Numbers recycle after visitor sessions expire. Track more traffic with fewer numbers.
Use one pool across many domains. Built for agencies managing several client sites.
Paste this in your site header or drop it in Google Tag Manager. Replace YOUR_BUSINESS_ID with the ID from your CallScaler dashboard.
<!-- CallScaler Dynamic Number Insertion -->
<script>
(function(c,a,l,s){
c._cs=c._cs||[];
var t=a.createElement('script');
t.async=1;
t.src=l+'/api/v1/public/tracking.js?bid='+s;
a.head.appendChild(t);
})(window,document,'https://v3.callscaler.com','YOUR_BUSINESS_ID');
</script>| Provider | DNI included | Click IDs captured | Page weight | Multi-domain |
|---|---|---|---|---|
| CallScaler (every plan) | Free | gclid + fbclid + msclkid + UTM | < 5 KB | Yes |
| CallRail (Essentials) | Higher tier only | gclid + UTM | ~10 KB | Limited |
| WhatConverts (Pro) | Free | gclid + fbclid + UTM | ~8 KB | Yes |
| CallTrackingMetrics (Marketing) | Free | gclid + fbclid + UTM | ~12 KB | Yes |
Pricing and feature data as of April 2026, pulled from public docs and pricing pages.
Anyone who needs to know which website visitors turn into phone calls.
Common questions about Dynamic Number Insertion.
Works great with Dynamic Number Insertion.
Give every campaign, ad, and landing page its own phone number. See exactly which marketing source drove each call. No guesswork, no spreadsheets, no manual tagging.
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, set up in under 60 seconds. No credit card required.