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.
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.
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
| 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.
Static location numbers will capture that a call came from "the website," but will not surface keyword-level data. For granular Google Ads attribution:
This gives you a clean signal: every call to that number came from that specific campaign.
When deploying via the CallRail WordPress plugin:
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
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).
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.