conversion tracking5 min readBy Phloz team

Call tracking for agencies: attributing the phone calls you're currently missing

For service and lead-gen clients, the phone is half the pipeline — and usually invisible to optimisation. How call tracking works, static numbers vs dynamic insertion, and how to feed calls into GA4, Google Ads, and the CRM.

TL;DR

For service, local, and lead-gen clients, a large share of conversions happen on the phone — and untracked calls are the single biggest blind spot in most paid accounts, making channels that drive calls (especially paid search) look worse than they are. Call tracking attributes inbound calls back to their source. Two methods: static unique numbers (a different number per channel — simple, attributes to channel only) and dynamic number insertion (DNI) (a pool of numbers swapped per visitor session — attributes to the exact source/keyword/click). Feed the call as a conversion into GA4, Google Ads (call conversions / offline import), and the CRM, and gate it on call duration so a 10-second wrong number doesn't count as a lead. Below: the methods, the wiring, and the pitfalls.


Run paid search for a plumber, a law firm, or a B2B service client and watch what happens when you finally turn on call tracking: conversions you were attributing to "nothing" suddenly have a source, and the campaigns you were about to cut turn out to be driving the phone. If you're optimising a lead-gen account on form-fills alone, you're optimising on half the data. Here's how to capture the other half.

Why untracked calls quietly distort the whole account

When a visitor clicks a paid ad, browses, then calls instead of filling the form, the conversion is real but invisible — GA4 and Google Ads see a click with no conversion. Multiply that across a service client and the effect is systematic: paid search (which drives calls) looks inefficient, and channels that drive form-fills look better than they are. You then shift budget toward the wrong channels, confident in a dashboard that's blind to the phone. Call tracking closes that gap; it's often the highest-leverage tracking fix you can make on a service account.

The two methods

Static unique numbers

Assign a different phone number to each channel (one for paid search, one for organic, one for the GBP listing, one for print). When a number rings, you know the channel. Simple, cheap, no on-site script — but it only attributes to the channel, not the specific click, keyword, or campaign, and it doesn't scale to granular paid reporting.

Use it for: offline/print, Google Business Profile, broad channel-level attribution.

Dynamic number insertion (DNI)

A small script swaps the phone number shown on the site per visitor session, drawing from a pool, so each caller's number ties back to their exact session — source, medium, campaign, keyword, even the gclid. This is what gives you click-level call attribution and feeds Google Ads call conversions properly.

Use it for: any paid-media client where you need to attribute calls to campaigns/keywords. This is the agency default.

A call-tracking provider (CallRail, CallTrackingMetrics, WhatConverts, and others) supplies the numbers, the DNI script, the recording, and the integrations. You're choosing a vendor + wiring it in, not building it.

Wiring calls into the stack

A tracked call should flow to the same three places as a lead-gen form:

  1. GA4 — fire the call as an event and mark it a conversion, so it sits alongside form conversions in your channel reports.
  2. Google Ads — as a call conversion (or via offline import keyed by the gclid the DNI captured), so Smart Bidding optimises toward calls, not just forms. This is the step that fixes the "paid search looks bad" distortion.
  3. The CRM — log the call as a lead with its source, so the closed-deal loop works for phone leads too, not just web forms.

The pitfalls

  • Spam and junk calls inflate conversions. Wrong numbers, robocalls, and 8-second hang-ups will count as conversions if you let them. Gate on call duration — only calls over, say, 30–60 seconds count — so the conversion signal means "a real conversation," not "the phone rang."
  • Consent + page speed. The DNI script runs client-side; make sure it respects consent and doesn't tank page performance. It's another tag to account for in the container.
  • Number-pool sizing. Too small a pool for the traffic and two visitors share a number, breaking session-level attribution. Size the pool to concurrent sessions.
  • Losing the click ID. For Google Ads call conversions to work, the DNI has to capture and keep the gclid against the call — verify it actually does, or you're back to channel-level only.
  • NAP consistency for local SEO. Swapping numbers can worry teams about local-SEO citation consistency; reputable DNI keeps your primary number as the canonical NAP and only swaps for tracked sessions — confirm the setup honours that.

Make it part of the plan, and verify it

Calls are a first-class conversion, so they belong in the measurement plan next to forms — named, owned, and verified — not bolted on later. And like every conversion, "we set up call tracking" isn't the same as "calls are recording with their source and reaching Google Ads": make a test call, confirm it lands in the call-tracking dashboard with the right source, shows up in GA4, and (if wired) posts to Google Ads. Untested call tracking fails as silently as any other tag.

Where this fits

Call tracking spans the website (DNI script), the provider, GA4, the ad platform, and the CRM — five systems that have to agree for a phone lead to be attributed and optimised toward. That's exactly the kind of multi-node path that goes stale and breaks unnoticed, which is why Phloz models it per client — the DNI/number pool, the call conversion, the Google Ads import, the CRM hand-off — as part of the tracking-infrastructure map with a health state. The CRM for PPC agencies and pricing pages cover the workflow — but the takeaway is simple: if your client takes calls, optimising without tracking them is optimising blind.