wiki/knowledge/call-tracking/call-attribution-strategy.md · 884 words · 2026-04-05

Call Attribution Strategy — DNI vs. Static Numbers

Overview

When running paid campaigns, the digital attribution path breaks the moment a visitor picks up the phone instead of filling out a form. Call tracking tools like [1] solve this by inserting a forwarding layer — tracking numbers that record calls, capture source data, and pass the call through to the client's real phone system. The client's existing numbers remain unchanged.

The recommended approach is a hybrid model combining two complementary tracking methods: a Dynamic Number Insertion (DNI) pool for the main website number, and static tracking numbers for location pages and offline campaigns.


The Two Methods

Dynamic Number Insertion (DNI) Pool

Best for: Tracking calls originating from the main website, especially from paid ad traffic.

A JavaScript snippet (deployed via the [1] WordPress plugin or direct script injection) monitors each site visitor and swaps the target phone number with a unique number from a pool. That pool number is reserved for the visitor for approximately 20 minutes. If they call within that window, CallRail captures the Google Click ID and attributes the call back to its original source — campaign, keyword, ad group, etc.

Key parameters:
- One pool per website (running two pools on a single site causes conflicts)
- Pool size should match expected concurrent visitor volume; 4 numbers is a reasonable starting point for most SMBs
- Swap target is a single number (e.g., the main number displayed in the header/footer)
- Attribution degrades if the visitor calls after the 20-minute window, but the call still routes correctly

Limitation: Google does not always connect the search keyword to the Click ID in real time — it can take up to 12 hours. A webhook can be configured to backfill this data retroactively.

Static Tracking Numbers

Best for: Location-specific pages, offline campaigns (print, direct mail, billboards), and ad call extensions.

A static CallRail number is a permanent forwarding number assigned to a specific source. It records every call and captures available source data, but does not perform visitor-level swapping. The number is manually placed on the relevant page, ad, or printed material.

Key parameters:
- One static number per tracked source (one per location page, one per offline campaign, one per ad call extension)
- Must be manually updated in both the visible text and the tel: href link on the page
- Whisper messages (which announce the call source to the recipient before they speak) should be disabled initially to avoid staff confusion; enable once staff are trained
- Attribution granularity is lower than DNI — source is captured (e.g., "website"), but not keyword-level detail


Hybrid Model in Practice

Use Case Method Notes
Main website number (header/footer) DNI Pool Full ad source + keyword attribution
Individual location pages Static number per location Routes to that location's real number
Google Ads call extension / call-only ad Dedicated static number Name it clearly (e.g., "Glendale Google Ads")
Print ad / direct mail / billboard Dedicated static number One number per campaign for clean attribution

Rule of thumb: If it's on the website and you want to know which ad drove the call, use the DNI pool. If it's a specific place or campaign you want to isolate, use a static number.


Attribution for Google Ads Specifically

Static location numbers will capture that a call came from "the website," but will not surface keyword-level data. For granular Google Ads attribution:

  1. Create a dedicated static CallRail number for each Google Ads campaign or call extension
  2. Use that CallRail number as the call extension number in Google Ads (instead of the client's real number)
  3. Name the number descriptively in CallRail (e.g., "Glendale — Google Ads")

This gives you a clean signal: every call to that number came from that specific campaign.


WordPress Implementation Notes

When deploying via the CallRail WordPress plugin:

  1. Install and activate the CallRail plugin from the WordPress plugin directory
  2. In CallRail, navigate to Integrations → WordPress to retrieve the WordPress-specific connection code (this is not the general API key)
  3. Paste that code into the plugin settings under Settings → CallRail → Plugin Key
  4. After saving, the DNI swap activates within a minute or two

After any phone number changes on the site:
- Clear the WP Engine cache (WP Engine → Caching → Clear All)
- Clear the WP Rocket cache (WP Rocket toolbar → Clear Cache)
- Verify changes using an incognito window to bypass local browser cache


CRM Integration (Future)

Call recordings are available after the call completes. To surface recordings inside HubSpot leads, a webhook must be configured to pull the recording from CallRail and attach it to the corresponding contact/deal. This is not real-time — it runs post-call. See [2] (future).


Cost Considerations

Most CallRail plans include 10 numbers. Each additional number incurs a small incremental monthly cost. For accounts with many locations or campaigns, number count should be reviewed periodically against the plan tier.


Reference

Sources

  1. Callrail
  2. Callrail Hubspot Webhook
  3. Adava Care
  4. 2026 04 05 Adava Care Callrail Setup