Back to Resources
Sales & Marketing Alignment 8 min read

How to Track the Lead-to-Revenue Journey When Sales Happen Offline

Wali Nori
Wali Nori
10 January 2024

The Offline Attribution Problem

Most B2B sales don't close online. A lead sees your Google Ad, clicks through, downloads a whitepaper, books a call, has three meetings over six weeks, and then signs a contract via DocuSign. From Google Ads' perspective, you paid for a click that never converted, because the conversion happened in a CRM, not a shopping cart. This gap means your performance marketing data tells you your CPL is €350, your actual CAC is €2,800, and you have no idea which campaigns are generating clients vs. just generating leads.

Offline Conversion Tracking: The Technical Mechanism

Google Ads' Offline Conversion Import (OCI) allows you to upload conversion events after they happen offline, and Google attributes them back to the original ad click. The technical chain: when someone clicks your Google Ad, Google captures a unique click identifier (GCLID) in the URL. You must store this GCLID in your CRM against the lead's record when they first convert online (form fill, chat, etc.). When that lead closes as a customer, you export their GCLID and revenue to Google Ads via a CSV upload or direct API integration. Google then retrospectively attributes the revenue to the original campaign, ad group, and keyword, giving you true ROAS data.

Implementing GCLID Capture in Your CRM

GCLID capture requires coordination between your website, CRM, and marketing stack. On the website: add a hidden field named "GCLID" to every form, and use JavaScript to populate it from the URL parameter on page load (store it in localStorage so it persists across sessions). In HubSpot: create a custom contact property called "Last GCLID" that stores this value from form submissions. Set up a workflow that preserves the first-touch GCLID even if subsequent contacts update other properties. The critical rule: you must capture the GCLID at the first conversion event, not later, it expires after 90 days and is URL-specific.

Connecting Deals to Revenue in Google Ads and Meta

Once you have GCLID data in your CRM, build a HubSpot workflow triggered by a deal reaching "Closed Won" stage that exports the associated contact's GCLID, deal amount, and close date to a Google Sheet. From there, the Google Ads API or a manual CSV upload sends this to your Offline Conversions Manager. For Meta, the equivalent is the Conversions API (CAPI) with the match_keys parameter, send hashed email/phone alongside the purchase event and deal value, and Meta matches it to the original ad impression. Both mechanisms close the loop between offline revenue and online media spend.

Building the Full Revenue Attribution Report

With offline conversion data flowing into both Google Ads and your CRM, you can build the report that actually matters: revenue by campaign, ad group, and keyword. In HubSpot, create a custom deal report filtered by lead source and utm_campaign, showing average deal size and time-to-close by channel. In Looker Studio, connect Google Ads spend data to HubSpot deal data via a Google Sheet bridge table, creating a unified view of cost-per-acquisition by channel, campaign, and audience. This report, cost, leads, pipeline, revenue in one view, is what transforms paid media from a cost center to a calculable growth investment. Book a strategy call to discuss your specific offline attribution setup.

Wali Nori
Wali Nori
Founder of Excel Consultancy. Digital marketing and marketing operations specialist with 3 years building automation systems and tracking infrastructure for SMEs across Australia and Europe.
Connect on LinkedIn