Call Tracking

Why Is Your Call Tracking Number Showing the Wrong Source?
A call tracking number shows the wrong source when the tracking script assigns a swap number to a visitor’s session before it can correctly identify which channel, campaign, or keyword actually brought them to the site. The most common triggers are browser caching that serves a stale number, dynamic number insertion (DNI) that swaps too late or not at all, session timeout windows that are too short or too long for how people actually browse, and CRM sync delays that overwrite correct attribution with default or blank values. Each of these breaks the chain between an ad click and the number a visitor calls, and once that chain breaks, every report built on it is wrong.
Below is a breakdown of exactly how each cause distorts your data, followed by a step-by-step audit you can run this week to find out which one is happening to you.
Browser Caching Serves an Old Number
Dynamic number insertion works by swapping a static number on the page for a session-specific tracking number the instant the page loads. If a browser or a caching layer (CDN caching, WordPress page caching plugins, or even a visitor’s own browser cache) serves a previously rendered version of the page, the visitor sees a number that was assigned to someone else’s session, sometimes from a completely different campaign or even a different day. This shows up in reports as calls attributed to a source that has nothing to do with how the person actually arrived, and it’s especially common on pages that were built to load fast, since aggressive caching is often the first optimization applied to landing pages.
Dynamic Number Insertion Is Misconfigured
DNI needs the tracking script to run before the phone number renders on the page, and it needs a large enough pool of numbers to avoid overlap between simultaneous visitors. Two failure patterns are common here. First, the script loads after the number has already been painted onto the page (a render-blocking issue, often from theme or plugin conflicts), so the static fallback number displays and gets called instead of a session-specific one. Second, the number pool is too small for traffic volume, so two visitors from different campaigns get assigned the same number within the same time window, and the second call gets credited to the first visitor’s source. If your traffic spikes during specific campaign flights and misattribution spikes with it, pool size is worth checking first.
Session Timeout Settings Don’t Match Real Behavior
Every DNI setup has a session window, the length of time a visitor keeps their assigned tracking number before it resets or gets reassigned. If that window is set too short (say, a few minutes) but your average visitor browses for 10 to 15 minutes, checks a couple of pages, and then calls, the number may reset to a different source before they dial. If the window is set too long, returning visitors from a new session (a different ad, a different search) can still be shown the number tied to their last visit weeks earlier, crediting a fresh conversion to stale, outdated attribution. Neither extreme reflects how people actually shop before calling a business, and getting this setting wrong is one of the quieter causes of bad data because nothing looks broken on the page itself.
CRM Sync Delays Overwrite Correct Data
Even when the tracking number captures the right source at the moment of the call, that source can still get lost or overwritten downstream. If your CRM pulls call records on a batch schedule rather than in real time, records can sync out of order, get matched to the wrong contact record, or arrive after a sales rep has already manually logged the lead with a generic source like “phone” or “walk-in.” Attribution reports that pull from the CRM rather than the call tracking platform directly will then show whatever the CRM has, not what actually happened on the call. Any manual re-entry step between the call and the report is a place where the original source can be lost.
Other Causes Worth Ruling Out
- Ad blockers and privacy browsers stripping click IDs: Safari’s Intelligent Tracking Prevention and common ad blockers can strip GCLID, fbclid, and UTM parameters before your tracking script ever sees them, causing the session to fall back to “direct” or “unknown.”
- Cross-domain tracking gaps: If a visitor moves from your ad landing page to a separate booking or checkout domain, the tracking parameters need to be explicitly passed across that domain boundary or they’ll be dropped.
- Multiple ad platforms firing on the same click: If Google Ads and Meta Ads pixels both fire on a landing page and both tracking scripts try to claim the session, whichever fires last frequently wins attribution regardless of which ad the person actually clicked.
- Static numbers left on printed or offline materials: A number pulled from an old business card, email signature, or PDF won’t reflect DNI swaps and will always attribute to whatever default source that number is tied to.
How to Audit Your Tracking Setup
- Clear cache and test in an incognito window. Load your landing page from a fresh Google Ads click and a fresh Meta Ads click in separate private browser sessions, confirming a different number appears for each.
- Check your number pool size against peak concurrent traffic. If your busiest campaign day brings more simultaneous visitors than you have numbers in the pool, you have your answer.
- Review your session timeout window against average time-on-site. Pull your analytics data for median session duration and compare it to the DNI timeout setting; they should be reasonably aligned.
- Trace a single call end to end. Pick one recent call, confirm the source recorded at the moment of the call, then check what source shows in the CRM and in the attribution report. If those three don’t match, you’ve isolated exactly where the break is happening.
- Confirm click IDs are landing on the page. Inspect the URL parameters on your landing page after clicking a live ad to verify GCLID or fbclid values are actually present and not being stripped before the page loads.
- Check for duplicate pixel firing. Use your browser’s network tab to confirm only one tracking script is claiming the session on pages that run both Google Ads and Meta Ads tracking simultaneously.
The recurring theme across all of these causes is timing and synchronization: a number that swaps too late, a session window that doesn’t match real behavior, or a CRM that updates on a delay rather than the moment the call happens. Attribution data is only as reliable as the speed and accuracy of the handoff between the ad click, the phone call, and the record that stores it. That’s the specific gap that real-time data analysis and direct CRM integration are built to close, since a live sync between the call event, the CRM record, and the ad platform removes most of the windows where a wrong source can get introduced in the first place.
Frequently Asked Questions
How quickly should a call show up correctly in my reports?
A properly synced platform should reflect a new call and its source within moments of it ending, not on a nightly or weekly batch. If there’s a noticeable lag between when a call happens and when it appears correctly attributed in your dashboard, that lag is itself worth investigating as a likely cause of misattribution.
Can a VPN or ad blocker cause wrong attribution even with a perfectly configured setup?
Yes. Privacy tools that strip click IDs or block third-party scripts can cause a session to fall back to a generic source no matter how well your DNI and CRM sync are configured. This shows up as a baseline level of “direct” or “unknown” traffic that a technically sound setup can’t fully eliminate.
Should I use a static or dynamic number on my ads?
Dynamic numbers are necessary anywhere you need to distinguish between campaigns, keywords, or ad platforms. Static numbers are appropriate only for channels where source is already known and fixed, such as a printed sign or a single offline listing where no further segmentation is needed.
Power Answer resolves these gaps with live, integrated data across your CRM, Google Ads, and Meta Ads rather than delayed batch syncs, so Get Started Today to have your setup audited and corrected before another reporting cycle runs on bad numbers.








