Why call-based is structurally different

The default architecture of every major ad platform (Google Ads, Meta, Microsoft, TikTok) assumes the conversion happens on the website, on the same device that saw the click, within hours of that click. Optimisation algorithms, attribution windows, audience tools, even the example documentation are all built around that assumption. It works fine for ecommerce. It works badly for any business where the conversion is a phone call.

Four mismatches drive the difference, and an architecture that doesn't address all four will under-perform regardless of how clever the bidding gets.

One. The conversion happens off-site. The user clicks, browses, and dials. The platform sees the click and the on-site engagement; it does not see the call, the qualification on the call, or the sale that comes (or doesn't) at the end. Without an offline import path, the platform optimises against on-site proxies (page views, button clicks, form starts) that correlate weakly with revenue. The first job of the architecture is to stop letting the platform bid against proxies it can see and start letting it bid against the outcome it can't.

Two. The conversion is time-lagged. The browse-to-call gap is rarely instant. A user might compare deals on Monday, call on Tuesday from a landline, and complete a sale on Wednesday with a follow-up. The platform's attribution window has to be wide enough to claim the sale, the offline import has to fire on the right click ID, and the bidding algorithm has to be patient enough to learn from a delayed signal. Most native bidding objectives weren't designed for this and need explicit handling.

Three. Attribution lives in the call tracker, not the platform. Infinity is the dominant call-tracking platform in the UK; Calltracks, Mediahawk, ResponseTap and AVANSER are the next tier; CallRail and Invoca lead in the US; many in-house implementations exist on top of Twilio. Whichever tracker is in use, it (not Google, not Meta) is the source of truth for which click drove which call, which call qualified, and which call closed. The architecture has to make the call tracker the conversion ledger and pipe its data to every platform that bids.

Four. Cross-device is the norm, not the exception. Mobile browse to landline call is the default behaviour for a high-intent comparison user. The dynamic number insertion (DNI) session window has to cover the realistic browse-to-call gap (typically 24-72 hours, but pull the data from your call tracker; the 90th percentile is the threshold that matters). Calls outside the DNI window appear as direct traffic and silently inflate channel CPAs across the entire account.

Get all four right and the platforms suddenly start to look much smarter than they did before. They were always smart; they just couldn't see the outcome you cared about.

The conversion taxonomy

A workable architecture needs three layers, deliberately separated. The call tracker (Infinity in the example below; substitute the equivalent for your stack) is the source of truth for off-site outcomes. The on-site tag layer (gtag.js for Google Ads, Meta Pixel for Meta) is the source of truth for browsing behaviour. A clean taxonomy keeps the two from contaminating each other.

Three-band architecture diagram. The top band shows three event sources feeding the system: web events (page views, clicks, form starts, deal views with item_id matched), call events from the call tracker (ring, answer, qualify, duration, handler tag), and CRM events from the deals database (deal won, revenue, refund, cancellation). The middle mint-highlighted band shows the call tracker as the conversion ledger, stitching click_id to session_id to call_id to deal_id with revenue attached. The bottom band shows the four ad platforms receiving offline feeds from the ledger: Google Ads via Offline Conversion Import and tROAS, Meta via CAPI offline events, Microsoft via offline conversions, and TikTok via the Events API.
Sources fan into the call tracker as the single conversion ledger; the ledger then feeds the ad platforms with sale-shaped events only. Reporting and bidding are kept separate at the platform layer.

Layer 1 · Call tracker to ad platforms (offline import)

Every event the platforms bid against comes from the call tracker via offline conversion import. For Google Ads, that's the Offline Conversion Import API tied to the gclid (or wbraid/gbraid for app); for Microsoft Ads, equivalent; for Meta, the Conversions API offline events endpoint. Five events worth tracking, with explicit reporting-vs-bidding roles:

EventDefinitionBidding role
Call connectedPhone connected for ≥ N secondsReporting only (selects for volume not value)
Call durationSeconds connected (parameter on the Call event)Parameter, not standalone goal
Qualified callCall dispositioned as qualified by the call centreReporting only (directional, not commercial)
Offline salePhone sale confirmed in CRM, with revenue valuePRIMARY · this is what you bid against
Online saleWeb checkout completed (where applicable)PRIMARY · the on-site half of the same outcome

The most common architectural mistake at this layer is letting bidding optimise against "call connected" or, worse, the on-site phone-button click. Both select for volume rather than value. The user who calls and qualifies and closes a £400 deal is identical, from the call-button-click event's perspective, to the user who calls in confused and hangs up after twelve seconds. Bid against the sale, with revenue, every time.

Layer 2 · On-site events (audience and dynamic-creative join)

The on-site tag layer's job is to build audiences and to provide the join key that lets dynamic creative serve the package the user actually browsed. Critical events:

Eventgtag.jsMeta PixelPurpose
Page viewpage_viewPageViewAudience building, custom segments
Package viewview_item with item_idViewContent with content_idsRequired for dynamic retargeting against the deals feed
Compare actionview_item_listCustom Search"Comparer" audience signal
Callback requestgenerate_leadLeadFriction-reducer audience signal (never a primary bidding goal)
Call-button clickCustom contactCustom ContactCall-intent audience signal (reporting only)
// WATCH OUT

The single most common implementation failure at this layer is shipping view_item / ViewContent without the item_id / content_ids parameter, or shipping IDs that don't match the deals feed. Dynamic retargeting then can't serve the package the user looked at, falls back to generic creative, and the entire dynamic-feed investment evaporates. Audit the values, not just the events.

Layer 3 · Reporting vs bidding

Two events are bidding goals: offline sale (with revenue) and online sale (with revenue). Everything else is reporting. The temptation to add qualified call or callback request as bidding goals is strong (they're directional, they fire often, the platforms learn faster) and resisting it is the discipline that separates accounts that keep scaling from accounts that plateau halfway. If a campaign genuinely lacks the conversion volume to bid against sales, use a max-conversions strategy on the closest sale-shaped event for an explicit bootstrap window (30 days), then promote the campaign to sale-bidding once volume supports it. Don't leave it on a proxy and forget.

Don't bid against the proxies you can see. Bid against the outcome you can't.

The five-tier funnel

Five sequential stages, numbered top-of-funnel (cold) to bottom-of-funnel (hot). Each one seeds the next. Note that the numbering is conceptual rather than chronological: Search closers (tier 5) usually exist before this work begins, with prospecting and retargeting added above them. The funnel works because the stages are sequential and named, not because the targeting inside any single stage is clever.

Tier 1 · Prospecting (create demand)

PMax Prospecting on Google, prospecting campaigns on Meta, plus YouTube/Demand Gen for video-first awareness. Audience signals are cold: competitor browsers, life-event segments (moving home, becoming a parent, redundancy depending on category), value-tagged lookalikes seeded from your highest-LTV CRM cohort, custom intent built from your proven mid-funnel Search query winners. The job is to seed intent and build the retargeting pool. Success is measured by non-brand Search query uplift and hot-pool growth, not by platform-attributed CPA. Bid prospecting against tCPA on the closest sale-shaped event initially, and graduate to tROAS once 30+ days of sale data have accumulated.

Tier 2 · Warm retargeting (8-30 days)

Comparers and provider-intent visitors who browsed but didn't call. PMax Retargeting and Meta Retargeting carry the load, with dynamic creative serving the specific package the user browsed via the deals-feed join. Messaging is offer + trust: concrete reasons to come back to a specific deal, social proof against the competitor they were comparing against. Land on mid-funnel pages (deal detail, comparison) not on the contact page; warm users aren't ready to dial yet.

Tier 3 · Friction reducers (capture non-callers)

Some high-intent users will not call in the moment, no matter how good the warm creative is. Callback request forms, schedule-a-call widgets, live chat and WhatsApp give them another way through. Treat the resulting interactions as both a conversion path in their own right (handle them properly in the call centre, attribute them, fold them into bidding once volume supports it) and as an extremely high-intent audience signal for retargeting. Measure success in two parts: completion rate by page type, and qualified-call / sale rate from callback leads vs direct callers, to prove the channel is incremental rather than just displacing organic calls.

Tier 4 · Hot retargeting (0-7 days)

Call-intent visitors (clicked the call button but didn't connect), repeat visitors within seven days, and call-tracker-qualified users with no sale yet. PMax Retargeting and Meta Dynamic Retargeting at maximum bid, plus RLSA bid-up on Search for the same audience pool. Click-to-call CTAs, urgency, deal freshness. Budget should never be capped on this tier as long as CPA is within target. Every additional impression here is a high-LTV user who has actively considered you and not yet converted.

Tier 5 · Search closers (existing, protect)

Brand search and high-intent non-brand search are usually the existing layer in any call-based business: large, mature, on tROAS, with the call tracker already integrated. Every upper-funnel channel above seeds intent that returns here. The job at this tier is protection: defend impression share on core terms, layer RLSA bid-ups for warm and hot recency tiers, daypart against call-centre close rates (bid up during high-close hours, down during low). Search spend is rarely reduced to fund new channels; new spend is additive.

The audience grid

The retargeting layer needs an audience grid, not a single list. Recency tiers cross with engagement depth to give nine usable segments and explicit suppression boundaries. Build them once, in both GA4 (for Google) and Meta Custom Audiences (for Meta), and the rest of the program inherits them.

RecencyWindowTreatment
Hot0-7 daysMaximum retargeting bid. Hot-pool growth is a leading KPI for prospecting channels.
Warm8-30 daysDynamic creative against the deals feed. Sequential messaging.
Cool31-90 daysSuppress from active retargeting. Use as seed only for prospecting lookalikes.

Depth tiers separate intent levels within a recency window. A page-view-only visitor, a comparer, and a call-intent visitor all sit inside the same 0-7d window but are worth wildly different bids. Three depth tiers cover most categories: content reader (landed on a content page or top-of-funnel article), comparer (engaged with comparison or deal-list pages, fired view_item_list), and call-intent (viewed a deal-detail page with view_item, or clicked a call-button without connecting).

Cross-product audiences matter where the business sells more than one product to overlapping buyers. A user looking at TV packages today is a viable broadband prospect tomorrow. Build cross-product visitor pools explicitly and use them for cross-sell prospecting; use within-product sales as suppression so you don't keep paying to acquire the customer you already have.

The two suppression rules that matter most: suppress in-product converters from in-product retargeting (don't pay to chase the customer you've just won), and suppress active callbacks for 24-48 hours (the user is already in a queue; another ad won't help, and may annoy).

The non-negotiables

Five rules that hold the whole architecture together. If any one of them is missing at launch, pause the affected campaign rather than ship it half-built. Partial implementations train the platforms against the wrong signal and the cleanup takes weeks.

RuleApplies toWhy
Brand exclusions on PMaxAll PMax campaignsWithout explicit brand-keyword exclusions, PMax harvests branded queries from your existing Search campaigns and claims credit for conversions that would have happened anyway. The 4-figure-percent Brand Search ROI you used to see disappears overnight.
Separate retargeting + prospectingPMax, MetaShared budget means retargeting starves prospecting every single time. Separate campaigns, independent budgets, separate signals. No exceptions.
Suppression lists activeAll channelsWithin-product converters, non-eligible segments, active callback queue (24h). Without these, you pay to acquire users you've already won and to chase users who can't buy.
Sale (with value) as primary bidding goalAll campaigns at maturityNever call-connected, never call-button-click. These select for volume; sale selects for value. Use a sale-shaped proxy only as an explicit time-boxed bootstrap.
Search impression share monitoringGoogle Search + PMaxPMax retargeting primarily serves additive reach (Display, YouTube, Gmail) when properly excluded from brand and core non-brand search terms, so auction overlap is usually contained. Verify weekly that core-term impression share is flat or improving as PMax scales; a drop is the leading indicator that exclusions need tightening.

The four-phase rollout

Infrastructure first. Retargeting second. Prospecting third. Friction reducers fourth. Each phase de-risks the next; each phase generates the data the next one needs. The cost of a bad launch isn't the wasted budget; it's polluted bidding data that takes weeks to unwind. Keep the build light until the data proves it works, then scale complexity, budgets, creative and analytics together.

Phase 1 · Infrastructure (months 1-2)

  • Wire the call tracker (Infinity, Calltracks, ResponseTap, CallRail, Invoca, equivalent) to Google Ads, Microsoft Ads and Meta as the source of truth. Verify call and sale events appear in each platform's events manager with the correct values before any new spend.
  • Verify the dynamic-number session window covers your 90th percentile browse-to-call gap. Pull the timing data from the call tracker; default DNI windows are often shorter than the actual gap, especially for upper-funnel channels.
  • Deploy view_item + item_id on package detail pages (Google). Deploy ViewContent + content_ids on the same pages (Meta). Verify the IDs match the deals-feed IDs end-to-end.
  • Build the recency × depth audience grid in GA4 and Meta Custom Audiences. Mirror the tiers exactly across both platforms so audience-level reporting is comparable.
  • Build suppression lists from call-tracker sales, non-eligible segments, and the active callback queue.
  • Upload value-tagged CRM seeds to Google Customer Match and Meta Custom Audiences. Minimum 1,000 records per platform for the match rate to support bidding signal.
  • Build the deals feed to a minimum spec covering ID, name, price, image, landing URL, availability, and any product-specific fields the platforms accept (Google: Merchant Center / PMax catalogue; Meta: Commerce catalogue). Same join-key IDs as on-site events.
  • Scope friction reducers with product/engineering. Rank by feasibility and expected impact; build in Phase 4.

Phase 2 · Retargeting build (months 2-4)

  • Launch PMax Retargeting. Brand exclusions on, URL expansion off, customer acquisition setting on, deals feed connected, audience signals from your hot and warm audience tiers.
  • Launch Meta Retargeting against the recency × depth grid. Sequential messaging windows: days 1-3, 4-7, 8-14, 15-30. Different concept per window.
  • RLSA bid-ups on Google Search and Microsoft Search for the hot tier (0-7d call-intent and repeat visitors).
  • Ship the creative matrix: 3 concepts × 3 funnel stages (offer, trust, urgency) × 2 variants = 18 executions. Image and video; vertical 9:16 for Meta Reels and YouTube Shorts; 1:1 for feed; 16:9 for in-stream and Display.
  • Bid retargeting against tROAS on PMax (call-tracker sale value) and Maximise Conversions on Meta (Purchase event via offline import).

Phase 3 · Prospecting (months 4-6)

  • Launch only after retargeting passes week-6 governance (see below).
  • PMax Prospecting on a separate campaign with cold audience signals (competitor browsers, life events, custom intent built from Search winners). Independent budget. Never shared with retargeting PMax.
  • Meta Prospecting on value-based lookalikes (1% + 1-3% from CRM seed), Advantage+ audience on, exclude all site visitors so Meta doesn't double-count retargeting.
  • Initial bid strategy: tCPA on the closest sale-shaped event. Promote to tROAS once 30+ days of sale data have accumulated.
  • Scale prospecting budgets in 5% increments, gated on incremental sales vs Search baseline rather than platform-attributed CPA.

Phase 4 · Friction reducers (months 6+)

  • Deploy the friction reducer mechanisms scoped in Phase 1: usually some combination of callback request, schedule-a-call, live chat, and WhatsApp. Pace by what the call centre can actually pick up; a callback request that goes unanswered is worse than no callback request at all.
  • Integrate friction-reducer audiences into retargeting (high-intent signal, even if the user didn't immediately call).
  • Measure: callback completion rate by page type, and the qualified-call and sale rate from callback leads vs direct callers. The point of the test is to prove the channel is incremental, not just displacing organic calls.
  • Once incremental volume is proven, fold callback Lead events into bidding (as a secondary signal alongside Sale, never as a replacement).

Week-6 governance

Six weeks after each new channel goes live, run an explicit pass-or-fail decision against the criteria below. The temptation to "give it more time" past week six, in the hope that the bidding will stabilise, is the most expensive mistake in the rollout. If a channel hasn't passed the criteria by week six on a launched-clean infrastructure, it usually hasn't because of a structural reason that more time won't fix.

The baseline is the trailing four weeks of pre-test Search performance: qualified calls, sales, and CPA. The primary measurement method is uplift versus that baseline. Network attribution is a directional signal; it is never the primary decision metric.

DecisionCriteria
Pass · scale budget in 5% increments · Incremental sales above Search baseline in test period
· Search impression share on core terms flat or improved
· Hot audience pool (0-7d) grew vs pre-launch
· No correlated increase in direct / branded organic (which would suggest the new channel is claiming credit for traffic it didn't drive)
Fail · cap or pause · Incremental CPA more than 30% above Search CPA after the 6-week window
· Search impression share drops (a cannibalisation signal)
· Direct or branded traffic increases coincide with the new channel launch
· PMax serving on broad inventory unrelated to deal or compare pages (most often a feed-quality or brand-exclusion failure)

The 30% CPA tolerance is a starting heuristic. Calibrate against your actual margin per sale and any provider bonus thresholds: a channel that pushes you past a volume bonus tier can earn back its higher per-unit CPA from bonus revenue, and a channel that doesn't can't. The CFO version of this calculation matters more than the platform-attributed version.

Where this came from

This architecture is the distilled version of a full-funnel build for a UK comparison and reseller business with a £500k+/month Search account, a roughly 75/25 split between phone and online sales, and an existing Infinity integration. The work itself was specific to that business (competitor set, package mix, call-centre operating model, provider bonus structure), but the architecture generalises to any business where the dominant conversion happens on a phone call. Phone share varies by category: typically higher in legaltech and home services, lower in financial services, with comparison and reseller models clustering around the 70-80 percent range used in the headline. The other live engagements where I've used variants of this method include telco resellers, insurance comparison, financial services, and home services, with the same five-tier funnel and the same phased rollout shape.

The architecture and phasing are an S01 Strategy output; the day-to-day account work that follows is the S02 Paid Media Management side of the same engagement.

The two methods this rides on top of are Enhanced Conversions + CAPI (the on-site signal recovery layer) and Two-layer measurement (the MMM oversight layer that catches what offline import cannot, particularly upper-funnel video).