Home / Call Tracking
Call Tracking

Dynamic Number Insertion Explained

Dynamic Number Insertion, usually shortened to DNI, swaps a website's displayed phone number with a tracking number based on visitor or source context.

Why DNI Is Useful

A single static number makes it hard to separate calls generated by different marketing sources. DNI provides the tracking layer needed to associate a call with acquisition context.

CallRail and DNI

CallRail documents DNI as a JavaScript-based implementation: its script detects phone numbers on a page and can swap them with the appropriate tracking number for visitors from sources being tracked.

Source Pools and Session-Level Tracking

DNI is most powerful when it is paired with a pool of tracking numbers. Rather than assigning one number permanently to every website visitor, the platform can temporarily allocate a number to a visitor session and reuse it later. That makes detailed website attribution possible without buying a unique number for every person who ever visits the site.

Where the Script Belongs

For consistent measurement, the DNI script should be present wherever a trackable business number can appear. CallRail's own setup guidance recommends installing its JavaScript across the website rather than only on a single landing page. If multiple companies are managed in one account, the relevant company-specific script needs to be used for each site.

DNI and Local SEO

A common concern is whether number swapping will destroy NAP consistency. CallRail states that its implementation keeps the main business number in the page's HTML while JavaScript performs the visitor-facing swap. Even so, local businesses should test the rendered implementation and keep their canonical business information consistent across core listings.

How to QA DNI

Test multiple traffic sources in fresh browser sessions, verify that the visible number changes according to the intended rule, place calls, and compare the resulting source data. Also test mobile layouts, click-to-call links, and pages built from different templates. A technically installed script is not enough if some templates never render the target number correctly.