Skip to main content
AdStack Logo

Dynamic Number Insertion, Explained: Tie Every Call Back to Its Source

How dynamic number insertion and number pools work, when to use static vs session-level tracking, and how to connect call data to campaigns and analytics.

Dynamic number insertion call tracking attribution explained

The Mechanics Behind Call Attribution

Most marketers understand at a conceptual level that call tracking exists. Fewer understand how it actually works under the hood - and that gap matters, because the architecture of how you set up call tracking determines what questions you can and cannot answer about your phone-based conversions.

Dynamic number insertion is the technology that makes session-level call attribution possible. Understanding how it works, where it fits versus static number tracking, and how the data flows into your analytics and ad platforms will help you build a call tracking setup that is actually useful rather than just technically present.

Static Numbers: The Baseline

The simplest form of call tracking assigns a unique, dedicated phone number to each marketing channel or campaign. The number for your Google Ads traffic is different from the number on your Facebook ad, which is different from the number on your print mailer. When someone calls, the platform logs which number was dialed and credits the associated source.

Static numbers work well for offline attribution - billboards, direct mail, radio, print - where you need a persistent, human-readable number that does not change. They also work for source-level digital attribution where you only need to know whether a call came from paid search in general versus organic or social.

What static numbers cannot tell you is which specific keyword, ad, or page drove a call from a digital session. For that, you need dynamic number insertion.

How Dynamic Number Insertion Works

DNI works through a JavaScript snippet placed on your website. When a visitor lands on your site, the script reads their session data - specifically the UTM parameters, referrer, and ad click identifiers associated with their visit - and swaps the phone number displayed on the page with a number from a pool of tracking numbers assigned to that session.

The process works like this:

  1. A user clicks a paid search ad for a specific keyword and lands on your site
  2. The DNI script reads the click identifier (gclid for Google, msclkid for Microsoft) and UTM parameters from the URL
  3. A tracking number from your pool is assigned to that session and displayed on the page instead of your main business number
  4. If the user calls, the platform associates the call with that session's source data - keyword, ad group, campaign, and landing page
  5. The call record is stored with full session context attached

The pool of numbers rotates across concurrent sessions. A visitor who is on the site at the same time as nine other visitors gets a different number than each of them. When the session ends, that number returns to the pool and becomes available for a new session.

Number Pool Sizing: Getting It Right

The size of your number pool determines how reliably sessions are matched to calls. If your pool is too small relative to your concurrent session volume, two sessions may share a number, and the call cannot be attributed to the right visitor. If the pool is oversized, you are paying for numbers you never use.

Pool sizing should be based on your peak concurrent session count with a buffer. Your call tracking provider can typically recommend a pool size based on your traffic volume, but it is worth reviewing this periodically as your traffic grows. Undersized pools are a common and silent source of attribution errors.

A few practical considerations:

  • Use separate pools for separate traffic sources if you want to maintain source-level segmentation in addition to session-level data
  • Session duration settings on your tracking platform should match your typical session length - if users commonly spend 20 minutes on your site, a 10-minute session window will cause attribution mismatches
  • Pages where users convert quickly (paid landing pages) may need a different pool configuration than pages where users browse before converting

What DNI Data Looks Like Downstream

The value of DNI data is in where it flows after the call is logged. By itself, a call record with session data attached is useful but limited. Connected to your other systems, it becomes part of a complete attribution picture.

Google Ads and Microsoft Ads

Call conversions captured by DNI can be imported into Google Ads as offline conversions or transmitted in real time via the Google forwarding number integration. Either way, the call becomes a bidding signal that smart bidding strategies can act on. Keyword-level call data fed into your paid search campaigns means the platform can optimize toward the specific terms that produce calls, not just the terms that produce form fills.

Google Analytics and Reporting

Most call tracking platforms can push call events into Google Analytics or GA4 as events. When set up correctly, calls appear in your analytics as conversion events alongside form submissions, purchases, and other tracked actions. You can then analyze call volume within the same funnel and attribution reports you use for everything else.

CRM Integration

The most complete implementation connects call records to your CRM. When a tracked call results in a new contact or deal record, the session data - source, medium, campaign, keyword - travels with it. That means your sales team can see how a lead arrived, and you can close the loop from marketing spend to CRM outcome as part of a broader conversion attribution model.

Common Setup Mistakes

DNI implementation is straightforward but it is easy to get wrong in ways that silently degrade data quality:

  • Hardcoded numbers in HTML: If your phone number is hardcoded as text rather than dynamically generated by the DNI script, it will not swap. Make sure the number on every template and page is rendered by the script, not written statically into the markup.
  • Missing UTM parameters on ads: DNI depends on URL parameters to capture source data. If your ad URLs do not have consistent UTM tagging or your platform auto-tagging is disabled, the session data will be incomplete.
  • Schema markup conflicts: If you use LocalBusiness or similar schema with a hardcoded phone number, make sure that number matches your primary business number, not a tracking number. Mismatches can create NAP inconsistency issues for local SEO.
  • No call quality qualification: Logging all calls as equal conversions inflates your numbers and undermines bidding signals. Set up call duration thresholds or manual qualification workflows so that only meaningful calls are counted as conversions.

DNI as Part of a Complete Tracking Stack

Dynamic number insertion solves the session-to-call attribution problem specifically. It belongs inside a broader tracking architecture that also handles form attribution, offline conversion imports, and first-party data collection. The businesses that use call tracking most effectively are the ones that treat it as one layer in a connected measurement stack rather than a standalone tool.

If you want to build a call tracking setup that ties every inbound call back to its source and feeds that data into your campaigns and analytics, our call tracking and voice analytics services cover the full implementation. Book a call - we will help you design the right architecture for your traffic volume and tech stack.

Written by
Addie
The AdStack team builds the connected marketing stack - ads, tracking, AI, and web - under one roof.

Article imagery is illustrative. Product names, logos, and brands that may appear in images or text are the property of their respective owners and are used for identification and commentary only; their appearance does not imply any affiliation with, or endorsement by, those owners.

Stack, track, grow.
Let's get started.