Track inbound phone calls in Google Ads: import calls as offline conversions
Tell Google Ads which campaigns generate phone calls — not just web form fills — and watch CPA drop 20–40%. The GCLID workflow, the CSV format, the threshold that counts as a qualifying conversion, and how to wire it up with NumberGroup call data.
Google Ads optimises for the conversions you tell it about. If you only count web-form fills as conversions, the campaigns that generate phone calls look unprofitable — even though they're where the actual revenue lives. The fix is offline conversion import: feed phone calls back to Google Ads with the original click ID (GCLID), and the bidding optimises for the campaigns that earn calls.
UK businesses that do this properly typically see 20–40% drop in CPA within 4–6 weeks. Here's the working setup.
How it works end-to-end
- A visitor clicks your Google Ad — Google adds a
?gclid=XYZto the destination URL - Your website captures the GCLID and stores it in a first-party cookie
- If the visitor calls your business, your website also reads the displayed phone number (via Dynamic Number Insertion) and the caller's number
- NumberGroup logs the call against that tracking number — you have caller ID, call time, duration, outcome
- Join the call data + GCLID and upload to Google Ads as an offline conversion
- Google Ads optimises future spend toward campaigns/keywords that produced the calls
Setup, step by step
Step 1 — Set up a Google Ads conversion action
- Google Ads → Tools → Conversions → New conversion action
- Type: Import → Other data sources or CRMs → Track conversions from clicks
- Name: "Phone call (from NumberGroup)"
- Category: Phone call leads
- Conversion window: 90 days
- Value: per-conversion, or use specific values per upload
- Count: One per click (avoids double-counting a caller who rings twice in the attribution window)
- Conversion ID: copy this — you'll need it
Step 2 — Capture GCLIDs on your website
Add to your site (or set up via Google Tag Manager):
<script>
(function () {
// Capture gclid from URL and store as first-party cookie for 90 days
var p = new URLSearchParams(window.location.search);
var g = p.get('gclid');
if (g) {
document.cookie = 'gclid=' + g + '; max-age=' + (90 * 24 * 3600) + '; path=/; SameSite=Lax';
}
})();
</script>Save the GCLID against your website session — e.g. in your CRM as part of the lead record — so you can join it back to the call later.
Step 3 — Assign tracking numbers per campaign
Two approaches, increasing sophistication:
- Per-campaign static numbers — simplest. One NumberGroup DDI per Google Ads campaign. Allocates a handful of numbers per channel. With Membership, standard UK numbers are unlimited and free.
- Dynamic Number Insertion (DNI) — every visitor gets a session-unique number from a pool. The attribution is 1:1 with the original click. Reads keyword, ad-group, GCLID. See our DNI guide.
Step 4 — Pull call data from NumberGroup
Via the portal's Calls → Export or the API. Each call row gives you:
- Tracking number rung
- Caller's number (CLI)
- Date / time
- Duration
- Outcome (answered / voicemail / busy)
Step 5 — Join call data to GCLID
Most common pattern: the website pushes the GCLID + tracking number assignment to your CRM. Your CRM (HubSpot, Salesforce, a Google Sheet) holds the lookup. Match incoming call rows on tracking number + caller number + date.
Step 6 — Decide what counts as a qualifying conversion
Not every call is a lead. Reasonable filters:
- Minimum duration — typically 60s. Calls shorter than that are usually wrong numbers, hangups or callbacks. Tune to your business.
- Time of day — only count calls during business hours (out-of-hours often go to voicemail and don't convert)
- Repeated callers — count first call only per caller in a 30-day window
Step 7 — Upload to Google Ads
Format the CSV:
Parameters:TimeZone=Europe/London
Google Click ID,Conversion Name,Conversion Time,Conversion Value,Conversion Currency
EAIaIQobChMI...XYZ,Phone call (from NumberGroup),2026-06-04 14:23:11,75,GBP
EAIaIQobChMI...ABC,Phone call (from NumberGroup),2026-06-04 14:51:02,75,GBP
- Conversion Name must match what you set up in Step 1
- Conversion Time must be within the 90-day attribution window
- Upload at Tools → Conversions → Uploads → New upload
- Once Google verifies, the conversions appear on the corresponding ad clicks within ~24 hours
Automate it (the easy way)
Manual CSV upload is fine for testing. In production, two paths:
- Google Ads Conversions Upload API— push conversions programmatically. A small nightly script that reads NumberGroup's API + your CRM and uploads via the Google Ads API.
- Call-tracking SaaS— CallRail, Mediahawk, Infinity. They handle DNI + GCLID capture + Google Ads upload as a managed product. £100–£500/mo. They source the underlying numbers from a carrier — that's us if you point them at our SIP trunks.
What good results look like
- Week 1: data starts flowing. Don't change bids yet.
- Week 2–3: enough conversions for Google to optimise. Switch impacted campaigns to Maximise Conversions or Target CPA with the new conversion type included
- Week 4–6: CPA drops as Google reallocates budget away from impression-rich-but-call-poor keywords
- Don't expect a step-change overnight. Treat as a 2-month optimisation cycle.
Common gotchas
- GCLID lost during phone-only sessions — if a user clicks the ad on mobile, then dials the number from the website without filling a form, you need DNI to capture the GCLID-to-tracking-number mapping at that moment. Static per-campaign numbers can't do this.
- Conversion-window mismatch — if your call typically happens days after the click, increase the conversion window in Google Ads to 60 or 90 days.
- Time-zone errors — set
Europe/Londonin the CSV header; Google defaults to America/Los_Angeles. - Double-counting — make sure the GCLID-to-conversion mapping is unique; otherwise repeated uploads create duplicate conversions.
Unlimited UK numbers for call tracking
Standard UK numbers are unlimited and free with Membership. Spin up as many tracking numbers per campaign as you need. £149/mo flat.