{"id":3526,"date":"2026-08-02T21:56:09","date_gmt":"2026-08-02T21:56:09","guid":{"rendered":"https:\/\/hyros.com\/updates\/?p=3526"},"modified":"2026-08-04T00:43:35","modified_gmt":"2026-08-04T00:43:35","slug":"offline-conversion-tracking","status":"publish","type":"post","link":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/","title":{"rendered":"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup)"},"content":{"rendered":"\n<div class=\"tldr\"><h2>TL;DR<\/h2><ul><li>Offline conversion tracking pushes real-world sales back to the ad platforms that drove the click<\/li><li>The pipeline is four steps: capture click ID, persist on CRM, trigger on close, push via API<\/li><li>A setup only works when ad-platform offline conversions match CRM closed-won within 10%<\/li><\/ul><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Offline conversion tracking sends real-world sales (phone calls, in-store visits, B2B closed-won, mailed checks) back to the ad platforms that drove the click. The pipeline is 4 steps: capture click ID at landing, persist on the CRM, trigger a webhook on close, push to Google Offline Conversions API + Meta CAPI for Offline Events. Google has two paths: GCLID-based Offline Conversion Imports plus Enhanced Conversions for Leads (hashed email\/phone safety net). Meta consolidated the legacy Offline Events tool into CAPI for Offline Events through 2025. Native APIs are free; the cost is engineering time and ongoing maintenance every vendor schema change, which UID-based attribution platforms abstract. A setup is &#8220;working&#8221; only when ad-platform offline conversions match CRM closed-won within 10%. Anything else is hopeful, not confirmed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What &#8220;Offline Conversion&#8221; Actually Means (And Why Online-Only Tracking Misses It)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Most ad budgets are measured against what the pixel can see: a click, a page view, a purchase that completes in the browser. Anything that happens off the website is dark.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is a problem for any business where the close happens elsewhere:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A roofing prospect clicks a Google Ads campaign, calls the office, books a $14,000 reroof on the phone.<\/li>\n\n\n\n<li>A B2B SaaS buyer clicks a LinkedIn ad, talks to sales over six weeks, closes inside HubSpot at $42,000 ACV.<\/li>\n\n\n\n<li>A shopper clicks a Meta ad and pays at the register the next weekend.<\/li>\n\n\n\n<li>A coaching client clicks a YouTube pre-roll and mails a check for the $25,000 program two weeks later.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In every case, the ad platform sees the click, assumes no sale, and starves the campaign of spend. The high-ticket use cases where attribution matters most are the same ones online-only tracking can never see.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Offline conversion tracking fixes that gap. It takes a sale that closed in the real world (phone, register, CRM deal stage, accounting system) and pushes it back to the ad platform that drove the original click, so the algorithm optimizes against actual revenue instead of fragments of it. A delayed click-to-purchase that still happens on the website is a <em>delayed online conversion<\/em>, not an offline one. Offline conversions are specifically the events that never touch a browser pixel. For the part of this problem that happens inside the website session, see our guide on <a href=\"https:\/\/hyros.com\/updates\/server-side-tracking\">server-side tracking<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The 4-Step Pipeline Every Offline Conversion Tracking Setup Uses<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1429\" src=\"https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/four-step-offline-pipeline-scaled.png\" alt=\"Brass tube passing through four stations: capture the click ID, persist on the CRM, trigger on close, push via API\" class=\"wp-image-3597\" srcset=\"https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/four-step-offline-pipeline-scaled.png 2560w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/four-step-offline-pipeline-300x167.png 300w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/four-step-offline-pipeline-1024x572.png 1024w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/four-step-offline-pipeline-768x429.png 768w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/four-step-offline-pipeline-1536x857.png 1536w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/four-step-offline-pipeline-2048x1143.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Whether you wire this yourself with native APIs or hand it to a platform like Hyros, the architecture is identical. Four steps:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 1. Capture the click ID at landing.<\/strong>&nbsp;Each platform appends an identifier to the ad URL: Google&#8217;s gclid, Meta&#8217;s fbclid, TikTok&#8217;s ttclid, LinkedIn&#8217;s li_fat_id. A script on the landing page reads the query string, drops the value into a first-party cookie, and copies it into a hidden form field on every lead-capture surface.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 2. Persist the click ID on the CRM record.<\/strong>&nbsp;The hidden field flows into the CRM at lead capture. The click ID has to be stored on the contact AND the opportunity. If you only store it on the contact, the deal-closed trigger fires with nothing to send.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 3. Trigger on the offline event.<\/strong>&nbsp;The conversion happens later: deal stage moves to &#8220;Closed Won,&#8221; POS records a sale tagged with the customer&#8217;s email, call duration crosses a threshold, accounting marks a check as cleared. The trigger fires a webhook with the deal payload.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 4. Push to the ad platform via API.<\/strong>&nbsp;The webhook receiver hashes the PII, packages the click ID + event metadata + value, and sends an HTTPS POST to each platform&#8217;s offline endpoint: Google Offline Conversions API, Meta CAPI for Offline Events, TikTok Events API. Same payload shape, parallel calls.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is the entire architecture. The same four steps apply whether the trigger is a phone call duration or a wire payment clearing. The difference between rolling it yourself and using a platform is who maintains each step when vendor APIs change (and they change constantly).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For agencies running this across many clients, see <a href=\"https:\/\/hyros.com\/updates\/agency-attribution\">agency attribution<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Capturing the Click: GCLID, fbclid, and the Hidden CRM Field<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1429\" src=\"https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/click-id-capsules-scaled.png\" alt=\"Four brass capsules tagged GCLID, FBCLID, TTCLID, and MSCLKID, most expiring in 90 days\" class=\"wp-image-3598\" srcset=\"https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/click-id-capsules-scaled.png 2560w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/click-id-capsules-300x167.png 300w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/click-id-capsules-1024x572.png 1024w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/click-id-capsules-768x429.png 768w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/click-id-capsules-1536x857.png 1536w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/click-id-capsules-2048x1143.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This is where most setups quietly fail. The implementer wires the click ID into the standard contact form, declares victory, and moves on. Two weeks later, half the offline conversions are missing because the phone-call capture, the chat widget, and the trade-show form never got the same field.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every lead-intake surface needs the click ID: standard contact forms (hidden input from URL parser or cookie), phone-call capture (call tracking number maps caller back to the original click), chat widgets (custom attribute pass-through on Intercom, Drift, Tidio), pop-ups and lead magnets (same hidden field pattern), and any manual rep-entered lead (an attribution dead zone you document, not fix).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The click IDs to capture, by platform:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>Platform<\/strong><\/th><th><strong>Click ID Param<\/strong><\/th><th><strong>Typical Lifetime<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Google Ads<\/td><td>gclid&nbsp;(or wbraid&nbsp;\/ gbraid&nbsp;for iOS app)<\/td><td>90 days default for offline imports<\/td><\/tr><tr><td>Meta (Facebook, Instagram)<\/td><td>fbclid<\/td><td>90 days typical<\/td><\/tr><tr><td>TikTok Ads<\/td><td>ttclid<\/td><td>30 days typical<\/td><\/tr><tr><td>LinkedIn Ads<\/td><td>li_fat_id<\/td><td>90 days typical<\/td><\/tr><tr><td>Microsoft Ads<\/td><td>msclkid<\/td><td>90 days<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Verify each platform&#8217;s current click-ID lifetime before publishing your setup. Google has changed the GCLID window before; Meta and TikTok update their docs without announcement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The custom field has to live on the contact, the lead (if your CRM separates them), AND the opportunity. The deal-closed trigger fires on the opportunity, but the click ID was captured against the contact. Three places, easy to miss, accounts for most &#8220;I set this up and it does not work&#8221; complaints.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A related technique on the Google side is Enhanced Conversions for Leads, which uses hashed email and phone to match even when the GCLID is missing or expired. Treat it as a safety net alongside the GCLID path. See <a href=\"https:\/\/hyros.com\/updates\/google-enhanced-conversions\">Google Enhanced Conversions<\/a>&nbsp;for the full setup.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Google Offline Conversions API: GCLID-Based Upload Path<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Google has two paths for offline conversion data, and you usually want both running.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Path 1: Classic Offline Conversion Imports (GCLID match).<\/strong>&nbsp;Collect the GCLID at landing, persist it on the CRM, and when the deal closes send Google a record with the GCLID, conversion name, time, and value. Google matches the GCLID back to the original click and credits the right campaign. Three sub-paths for getting data in: manual CSV upload through the Google Ads UI (works, does not scale), Google Ads API direct call from your webhook receiver (the production standard), or scheduled imports via native CRM connectors (Salesforce direct, HubSpot through middleware). The GCLID has a click-to-import upper bound that runs roughly 90 days for the default conversion category. Verify the current window in Google Ads Help before building against a specific number.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Path 2: Enhanced Conversions for Leads (hashed PII match).<\/strong>&nbsp;When the GCLID is missing or expired, this fills the gap. You send hashed email and phone alongside the conversion event, and Google matches against the signed-in Google account of the user who clicked. No GCLID required.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Run both together. GCLID-based imports are the most accurate when the click ID survives the funnel. Enhanced Conversions for Leads is the safety net for the cases where it does not.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>Method<\/strong><\/th><th><strong>Match Key<\/strong><\/th><th><strong>Strength<\/strong><\/th><th><strong>When to Use<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Classic Offline Conversion Imports<\/td><td>GCLID<\/td><td>Highest accuracy when click ID survives<\/td><td>Default path for all Google offline events<\/td><\/tr><tr><td>Enhanced Conversions for Leads<\/td><td>Hashed email + phone<\/td><td>Recovers conversions when GCLID is missing<\/td><td>Safety net layer; run in parallel<\/td><\/tr><tr><td>CSV upload<\/td><td>GCLID or PII<\/td><td>Same accuracy as API, lower velocity<\/td><td>One-off backfills only<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Meta CAPI for Offline Events: The 2025 Migration That Changed the Setup<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Meta consolidated its offline tracking infrastructure into the Conversions API through 2025. The standalone Offline Events tool (the CSV-upload-in-Events-Manager workflow) was deprecated, and all new offline events now flow through CAPI for Offline Events. Legacy workflows are read-only or removed; new pipelines have to use the CAPI endpoint. Verify the current deprecation and grandfathering status against <a href=\"https:\/\/developers.facebook.com\/docs\/marketing-api\/conversions-api\/offline-events\/\" rel=\"nofollow\">Meta&#8217;s CAPI for Offline Events documentation<\/a>&nbsp;before you build.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Setup is four stages:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Stage 1. Dataset in Business Manager.<\/strong>&nbsp;Create or select a dataset (Meta renamed Pixels to datasets; the UI still uses both terms). The dataset receives events from your online Pixel\/CAPI setup AND your offline events. Same dataset ID, multiple channels.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Stage 2. Generate the CAPI access token.<\/strong>&nbsp;Business Settings \u2192 Data Sources \u2192 Dataset \u2192 Settings \u2192 Generate Access Token. Treat it like a password; store it in environment variables on the server doing the API calls.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Stage 3. Build the event payload.<\/strong>&nbsp;At least one match key per event (hashed email, hashed phone, external ID, or fbclid) is required. Three or more match keys score higher on Meta&#8217;s Event Match Quality scale. EMQ scores below 6 (out of 10) usually mean a match key is missing or the hashing is wrong.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Stage 4. Send via direct API or partner integration.<\/strong>&nbsp;You can POST straight to the Meta Graph API or route through a managed integration. The endpoint accepts an array of events, each with event_name, event_time, user<em>data (the match keys), and custom<\/em>data (value, currency, order ID).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The same mechanics that govern online CAPI apply here. See our guide on <a href=\"https:\/\/hyros.com\/updates\/meta-conversions-api\">Meta Conversions API setup<\/a>&nbsp;for the full walkthrough. The offline endpoint is the same API with a different action_source&nbsp;value and an emphasis on match keys over browser cookies.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The CRM Webhook Pattern: One Trigger, Multi-Platform Push<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the highest-impact piece of the setup, and where most marketers stop because the manual CSV path looks easier than building a webhook receiver. Build it once and every offline conversion fires to every ad platform automatically, with no human in the loop.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The recipe, using HubSpot as the trigger source:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>HubSpot workflow.<\/strong>&nbsp;Trigger when &#8220;Deal stage = Closed Won.&#8221; Send webhook with deal payload (deal ID, value, contact email, phone, GCLID, fbclid, ttclid, close date).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Webhook receiver.<\/strong>&nbsp;A simple HTTP endpoint on Cloudflare Workers, AWS Lambda, Vercel, or your own server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Hash the PII.<\/strong>&nbsp;SHA-256 hash the email and phone. Click IDs go through unhashed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Parallel POSTs.<\/strong>&nbsp;Google Ads API offline conversion endpoint, Meta CAPI for Offline Events, TikTok Events API offline endpoint, LinkedIn Conversions API if applicable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Log and retry.<\/strong>&nbsp;Log each response. On error, queue for retry with exponential backoff.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The same pattern works elsewhere: Salesforce uses Flow, Pipedrive\/Zoho\/Keap offer native webhook actions on deal stage change, Close.com requires Pro, custom CRMs use a database trigger or app-layer hook. Trigger source changes; the pipeline does not.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A webhook receiver costs roughly two engineering days to build for one CRM and two ad platforms. Adding a third platform is another half day. Maintaining it costs time every quarter when a vendor API changes. That maintenance is what attribution platforms abstract away.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Phone Calls, In-Store Visits, B2B Closed-Won, Mailed Checks: Use-Case Walkthroughs<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1429\" src=\"https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/sales-the-pixel-never-sees-scaled.png\" alt=\"Three tubes converging with capsules for a $14,000 phone booking, a $42,000 CRM deal, and a $25,000 check payment\" class=\"wp-image-3599\" srcset=\"https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/sales-the-pixel-never-sees-scaled.png 2560w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/sales-the-pixel-never-sees-300x167.png 300w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/sales-the-pixel-never-sees-1024x572.png 1024w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/sales-the-pixel-never-sees-768x429.png 768w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/sales-the-pixel-never-sees-1536x857.png 1536w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/sales-the-pixel-never-sees-2048x1143.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Each of the four high-value offline conversion types maps to the same pipeline. Only the trigger source changes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Phone calls.<\/strong>&nbsp;Call tracking numbers (CallRail, CallTrackingMetrics, WhatConverts) assign a dynamic number to each visitor session and stamp the call record with the original click ID. The trigger fires when the call meets a qualification threshold (duration above 60 seconds, or a sales-team disposition). For high-ticket service businesses where phone is the primary close channel, this is the highest-impact offline conversion setup. For the full call-side build, see <a href=\"https:\/\/hyros.com\/updates\/call-tracking-attribution\">call tracking attribution<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>In-store visits and POS sales.<\/strong>&nbsp;Two patterns. Pattern A: the POS captures the customer&#8217;s email at checkout. Hashed email gets pushed to Meta CAPI for Offline Events and Google Enhanced Conversions for Leads, both of which match against ad clicks. Pattern B (Google-only): Google Store Visits uses location signals from signed-in Android and iOS users to attribute in-store visits automatically. Store Visits has eligibility requirements (minimum number of physical locations, certain categories excluded); verify current Google Ads Help thresholds before relying on it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>B2B closed-won.<\/strong>&nbsp;The canonical CRM webhook use case. Deal stage moves to Closed Won, workflow fires, receiver pushes deal value to Google and Meta. The complication is the long sales cycle: a deal that closes 90 days after the original click runs into GCLID expiration risk. Run Enhanced Conversions for Leads in parallel as the safety net. See our guide on <a href=\"https:\/\/hyros.com\/updates\/b2b-attribution\">B2B attribution<\/a>&nbsp;for the full problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Mailed checks and wire payments.<\/strong>&nbsp;The trigger is the accounting system, not the CRM. QuickBooks, Stripe, or a custom invoicing tool fires when payment clears. The payment record needs to carry forward the original click ID, which means it has to flow from CRM to invoice to payment record (three hops, often broken). Common in high-ticket coaching and B2B services, and the use case where GCLID expiration burns most often.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The best setups treat each use case as a separate webhook flow landing in the same receiver: phone from CallRail, POS from Shopify POS or Square, B2B from HubSpot or Salesforce, wire payments from QuickBooks. One receiver, four trigger sources, same downstream API calls.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Hyros Collapses the Pipeline (And When You Do Not Need It)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Native APIs work. Google Offline Conversions API, Meta CAPI for Offline Events, and TikTok Events API are all free and well-documented. With one engineer or a technical agency you can roll your own pipeline and never pay a third party. The platforms want you to do this. That is why the APIs are free.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The trade-off is engineering time, not money. Initial build runs 1-3 engineer-weeks per platform. Ongoing maintenance is the bigger cost: every vendor schema change, every endpoint deprecation, every match key update means someone has to ship code. Meta consolidating Offline Events into CAPI through 2025 was the most recent example; there will be another one this year. EMQ scores drift, Google diagnostic flags drift, and identity stitching for lost click IDs is something native APIs cannot recover. Enhanced Conversions for Leads helps but only on Google.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">UID-based attribution platforms like Hyros abstract that maintenance layer. Same four steps, but the platform handles the API calls, schema changes, retry logic, and identity stitching across email\/phone\/device when the click ID was lost. According to <a href=\"https:\/\/checkthat.ai\/review\/hyros\/\" rel=\"nofollow\">a 600-customer review on CheckThat.ai<\/a>, customers report 29-33% more conversions captured versus native platform reporting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>You do not need a managed platform when:<\/strong>&nbsp;single ad platform, single CRM, simple deal-stage trigger, low offline volume (&lt;100\/month), and in-house engineering capacity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>You probably do when:<\/strong>&nbsp;multi-platform (Google + Meta + TikTok + LinkedIn), multiple trigger sources (phone, CRM, POS, accounting), high-ticket use cases where every lost conversion is a $5,000+ miss, or agencies running this across many clients (<a href=\"https:\/\/hyros.com\">Hyros works with 4,000+ businesses<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pick the layer that matches the team&#8217;s tolerance for maintenance overhead. The pipeline is the same either way.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">30-Minute Validation: How to Confirm Offline Conversions Are Actually Landing<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1429\" src=\"https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/within-10-percent-gauge-scaled.png\" alt=\"Brass pressure gauge with the needle in the green wedge, platform numbers within 10 percent of closed won\" class=\"wp-image-3600\" srcset=\"https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/within-10-percent-gauge-scaled.png 2560w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/within-10-percent-gauge-300x167.png 300w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/within-10-percent-gauge-1024x572.png 1024w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/within-10-percent-gauge-768x429.png 768w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/within-10-percent-gauge-1536x857.png 1536w, https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/within-10-percent-gauge-2048x1143.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A setup that looks plumbed is not the same as a setup that is working. Four tests before declaring done:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Test 1. Fake conversion end-to-end.<\/strong>&nbsp;Create a test deal, move it to Closed Won, watch the webhook fire. Confirm receipt in the webhook receiver logs. Confirm the event appears in Google Ads (Conversions \u2192 Diagnostics, &#8220;received&#8221; status against the test GCLID) and Meta Events Manager (Dataset \u2192 Activity, test event with EMQ score). End-to-end should take under 5 minutes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Test 2. Event Match Quality.<\/strong>&nbsp;In Meta Events Manager, open Dataset \u2192 Diagnostics. Target EMQ 6+ out of 10, ideally 8+. Below 6 means match keys are missing or hashed incorrectly. Verify the current Meta EMQ scale before treating any specific number as canonical.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Test 3. Reconcile against CRM closed-won.<\/strong>&nbsp;The most important test and the one most setups skip. Pull closed-won deal count from the CRM for the last 30 days. Pull offline conversion count from Google Ads and Meta Events Manager for the same period. Numbers should match within roughly 10%. Wider gap means click IDs are being lost somewhere: missing field on the opportunity, expired GCLIDs, channels never wired, or hashing errors corrupting match keys.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Test 4. Spot-check by attribution path.<\/strong>&nbsp;Pull 5-10 closed-won deals, look up the click ID on each CRM record, and search for it in the ad platform&#8217;s offline conversion logs. Any deal with a valid click ID at lead capture should be present. Missing ones trace backward through webhook receiver and CRM workflow logs until you find the drop point.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A setup is &#8220;working&#8221; only when ad-platform offline conversion counts match CRM closed-won segment by segment. Anything else is hopeful, not confirmed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently Asked Questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Can I track phone-call conversions back to the original ad?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. Call tracking platforms (CallRail, CallTrackingMetrics, WhatConverts) assign a dynamic phone number to each visitor and stamp the call record with the original click ID. When the call meets a qualification threshold (typically duration over 60 seconds, or a sales-team disposition), the offline conversion fires to Google Offline Conversions API and Meta CAPI for Offline Events. The campaign that drove the call gets credit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How long is the attribution window for offline conversions?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Varies by platform. Google Offline Conversion Imports historically allows roughly 90 days for default conversions. Meta CAPI for Offline Events typically accepts events up to 62 days after the click. TikTok and LinkedIn each set their own windows. Verify current windows in each platform&#8217;s developer docs; vendors update these without announcement. For B2B sales cycles longer than 90 days, supplement with Enhanced Conversions for Leads on Google.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Do offline conversions count for ROAS calculations?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, when sent back with a value. The platform treats offline conversions identically to online ones in its ROAS math. This is the whole reason to wire offline tracking. Campaigns driving phone calls, B2B deals, and high-ticket sales look unprofitable on platform ROAS until the offline conversions land. Once wired, the same campaigns often jump from &#8220;looks like it is losing money&#8221; to &#8220;highest-ROAS channel in the account.&#8221; See our <a href=\"https:\/\/hyros.com\/updates\/how-to-calculate-roas\">ROAS calculation guide<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What is the difference between Google Offline Conversion Imports and Enhanced Conversions for Leads?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Offline Conversion Imports match on the GCLID. Accurate when the click ID survives the funnel. Enhanced Conversions for Leads matches on hashed email and phone, which works even when the GCLID is missing or expired. Run both in parallel. Imports is the primary path; Enhanced Conversions for Leads is the safety net.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why do my offline conversions show fewer events than my CRM closed-won count?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Common culprits in rough frequency order: the click ID field is missing on the opportunity object (only on contact); the deal closed after the GCLID expiration window; the hashed email or phone is malformed (whitespace, casing, country-code); leads from phone or trade show never had a click ID at all; the webhook receiver is failing silently. Run the CRM-to-ad-platform reconciliation test to isolate the cause.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Do I need a third-party platform like Hyros for offline conversion tracking?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Not necessarily. Native APIs from Google, Meta, TikTok, and LinkedIn are free and well-documented. With engineering capacity, a single CRM, and one or two ad platforms, you can roll your own. The trade-off is ongoing maintenance every time a vendor changes its schema. Platforms like Hyros abstract that work and add UID-based identity stitching for cases where the click ID was lost.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Bottom Line<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Offline conversion tracking is the highest-impact attribution upgrade for any business where the close does not happen on the website. Phone-call businesses, B2B SaaS, multi-client agencies, high-ticket coaching, ad-driven retail foot traffic. Without it, the campaigns driving the highest-value sales look unprofitable, get starved of spend, and quietly die. With it, the algorithm finally sees the revenue and optimizes for it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The pipeline is four steps: capture, persist, trigger, push. The steps do not change whether you wire it yourself or use a managed platform. The difference is who maintains the wiring when the vendors change.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your ad-platform ROAS does not match your CRM closed-won revenue, the gap is your offline tracking. Fix it and the next 90 days of ad spend optimizes against actual revenue instead of fragments of it. For a comparative look at the tools that handle this at scale, see our <a href=\"https:\/\/hyros.com\/updates\/best-attribution-tools\">best attribution tools guide<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Related in This Series<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cluster: Technical Setup<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">More from the Technical Setup series:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/hyros.com\/updates\/meta-conversions-api\">Meta Conversions API: Implementation Guide<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hyros.com\/updates\/google-enhanced-conversions\">Google Enhanced Conversions Setup Guide<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hyros.com\/updates\/server-side-tracking\">Server-Side Tracking: Implementation Guide<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hyros.com\/updates\/agency-attribution\">Agency Attribution: Tracking Client Ad Spend<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hyros.com\/updates\/b2b-attribution\">B2B Attribution: Long Sales Cycle Tracking<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hyros.com\/updates\/call-tracking-attribution\">Call Tracking Attribution: Vendor-Neutral Setup Guide<\/a><\/li>\n<\/ul>\n\n\n\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"headline\":\"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup)\",\"description\":\"The complete offline conversion tracking pipeline: capture click ID at landing, persist on CRM, trigger on close, push to Google Offline Conversions API and Meta CAPI for Offline Events. Covers phone calls, B2B, in-store, and mailed checks.\",\"author\":{\"@id\":\"https:\/\/hyros.com\/#alex-becker\"},\"datePublished\":\"2026-08-02\",\"dateModified\":\"2026-08-02\",\"publisher\":{\"@id\":\"https:\/\/hyros.com\/#organization\"},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/hyros.com\/updates\/offline-conversion-tracking\"},\"image\":\"https:\/\/hyros.com\/images\/offline-conversion-tracking.png\",\"keywords\":[\"offline conversion tracking\",\"Google Offline Conversions API\",\"Meta CAPI for Offline Events\",\"GCLID tracking\",\"CRM webhook attribution\",\"phone call conversion tracking\",\"B2B offline attribution\"],\"@id\":\"https:\/\/hyros.com\/updates\/offline-conversion-tracking#article\"},{\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Can I track phone-call conversions back to the original ad?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. Call tracking platforms like CallRail, CallTrackingMetrics, and WhatConverts assign a dynamic phone number from a pool to each ad visitor. When the visitor calls that number, the call tracking system records the original click ID (GCLID, fbclid) from the visitor session and attaches it to the call record. When the call meets a qualification threshold (typically duration over 60 seconds, or a sales-team disposition), the offline conversion fires to Google Offline Conversions API and Meta CAPI for Offline Events using the original click ID. The campaign that drove the call gets credit.\"}},{\"@type\":\"Question\",\"name\":\"How long is the attribution window for offline conversions?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"It varies by platform. Google Offline Conversion Imports historically allows a click-to-import window of roughly 90 days for the default conversion category, with longer windows available for specific categories. Meta CAPI for Offline Events typically accepts events up to 62 days after the original click. TikTok and LinkedIn each set their own windows. Verify current windows in each platform's developer docs before assuming a specific number; vendors update these without major announcements.\"}},{\"@type\":\"Question\",\"name\":\"Do offline conversions count for ROAS calculations?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes, when they are sent back to the ad platform with a value. The platform treats the offline conversion identically to an online conversion in its ROAS calculations: total revenue attributed to the campaign divided by total spend. This is the entire reason to wire offline tracking in the first place. Campaigns that drive phone calls, B2B deals, and high-ticket sales often look unprofitable on platform-reported ROAS until the offline conversions land.\"}},{\"@type\":\"Question\",\"name\":\"What is the difference between Google Offline Conversion Imports and Enhanced Conversions for Leads?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Offline Conversion Imports match on the GCLID, the click ID Google appends to ad URLs. Accurate when the GCLID survives the funnel. Enhanced Conversions for Leads matches on hashed email and phone, which means it works even when the GCLID is missing or expired. Run both in parallel. Offline Imports is the primary path; Enhanced Conversions for Leads is the safety net that catches what slips through.\"}},{\"@type\":\"Question\",\"name\":\"Why do my offline conversions show fewer events than my CRM closed-won count?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"The most common reasons: the click ID field is not populated on the opportunity object even though it is on the contact, so the webhook receiver has nothing to send. The deal closed after the GCLID expiration window. The hashed email or phone is malformed because of whitespace, mixed casing, or country-code formatting. Leads from phone or trade show never had a click ID attached in the first place. The webhook receiver is failing silently on a subset of events without retry. Run the CRM-to-ad-platform reconciliation test to identify the specific culprit.\"}},{\"@type\":\"Question\",\"name\":\"Do I need a third-party platform like Hyros for offline conversion tracking?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Not necessarily. Native APIs from Google, Meta, TikTok, and LinkedIn are all free and well-documented. If you have engineering capacity, a single CRM, and one or two ad platforms, you can roll your own pipeline. The trade-off is ongoing maintenance: every time a vendor changes their schema, someone has to update the integration. Platforms like Hyros abstract that maintenance work and add UID-based identity stitching for cases where the click ID was lost. Choose the layer that matches your team's tolerance for engineering overhead.\"}}]},{\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/hyros.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Updates\",\"item\":\"https:\/\/hyros.com\/updates\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to Track Offline Conversions from Online Ads\",\"item\":\"https:\/\/hyros.com\/updates\/offline-conversion-tracking\"}]},{\"@type\":\"Organization\",\"@id\":\"https:\/\/hyros.com\/#organization\",\"name\":\"Hyros\",\"url\":\"https:\/\/hyros.com\",\"description\":\"Ad tracking and attribution platform providing server-side tracking, cross-device attribution, and independent revenue reporting for digital advertisers and agencies.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/hyros\",\"https:\/\/twitter.com\/zssbecker\",\"https:\/\/www.youtube.com\/@alexbecker\",\"https:\/\/www.crunchbase.com\/organization\/hyros\"],\"knowsAbout\":[\"ad attribution\",\"ad tracking\",\"return on ad spend\",\"server-side tracking\",\"multi-touch attribution\",\"offline conversion tracking\",\"conversion API\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/hyros.com\/#alex-becker\",\"name\":\"Alex Becker\",\"jobTitle\":\"Founder and CEO\",\"worksFor\":{\"@id\":\"https:\/\/hyros.com\/#organization\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/alexbecker\",\"https:\/\/x.com\/zssbecker\",\"https:\/\/www.youtube.com\/channel\/UCKQvGU-qtjEthINeViNbn6A\",\"https:\/\/www.youtube.com\/@alexbeckerbusiness\"],\"knowsAbout\":[\"ad attribution\",\"server-side tracking\",\"ROAS optimization\",\"performance marketing\",\"offline conversion tracking\",\"SaaS growth\"]},{\"@type\":\"SpeakableSpecification\",\"cssSelector\":[\".tldr\",\".standalone-summary\"],\"xpath\":[\"\/html\/body\/\/*[contains(@class, 'tldr')]\",\"\/html\/body\/\/*[contains(@class, 'standalone-summary')]\"]}]}<\/script>\n","protected":false},"excerpt":{"rendered":"<p>TL;DR Offline conversion tracking pushes real-world sales back to the ad platforms that drove the click The pipeline is four steps: capture click ID, persist on CRM, trigger on close, push via API A setup only works when ad-platform offline conversions match CRM closed-won within 10% Offline conversion tracking sends real-world sales (phone calls, in-store [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":3596,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[45,44],"tags":[283,281,280,278,279,277,282],"class_list":["post-3526","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ad-attribution","category-hyros","tag-b2b-offline-attribution","tag-crm-webhook-attribution","tag-gclid-tracking","tag-google-offline-conversions-api","tag-meta-capi-for-offline-events","tag-offline-conversion-tracking","tag-phone-call-conversion-tracking"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"How to capture click IDs, persist them in your CRM, and push closed deals back to Google and Meta so offline revenue lands on the right ads.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Gregory\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"HYROS\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup) - HYROS\" \/>\n\t\t<meta property=\"og:description\" content=\"How to capture click IDs, persist them in your CRM, and push closed deals back to Google and Meta so offline revenue lands on the right ads.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/\" \/>\n\t\t<meta property=\"article:tag\" content=\"b2b offline attribution\" \/>\n\t\t<meta property=\"article:tag\" content=\"crm webhook attribution\" \/>\n\t\t<meta property=\"article:tag\" content=\"gclid tracking\" \/>\n\t\t<meta property=\"article:tag\" content=\"google offline conversions api\" \/>\n\t\t<meta property=\"article:tag\" content=\"meta capi for offline events\" \/>\n\t\t<meta property=\"article:tag\" content=\"offline conversion tracking\" \/>\n\t\t<meta property=\"article:tag\" content=\"phone call conversion tracking\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-02T21:56:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-08-04T00:43:35+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup) - HYROS\" \/>\n\t\t<meta name=\"twitter:description\" content=\"How to capture click IDs, persist them in your CRM, and push closed deals back to Google and Meta so offline revenue lands on the right ads.\" \/>\n\t\t<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t\t<meta name=\"twitter:data1\" content=\"Gregory\" \/>\n\t\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t\t<meta name=\"twitter:data2\" content=\"17 minutes\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/#article\",\"name\":\"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup) - HYROS\",\"headline\":\"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup)\",\"author\":{\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/author\\\/gregorydigitalrooftop-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/hyros.com\\\/updates\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/send-the-sale-back-scaled.png\",\"width\":2560,\"height\":1429,\"caption\":\"Brass tube diagram carrying a closed-won capsule back to the ad platform\"},\"datePublished\":\"2026-08-02T21:56:09+00:00\",\"dateModified\":\"2026-08-04T00:43:35+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/#webpage\"},\"articleSection\":\"Ad Attribution, Hyros, B2B offline attribution, CRM webhook attribution, GCLID tracking, Google Offline Conversions API, Meta CAPI for Offline Events, offline conversion tracking, phone call conversion tracking\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/hyros.com\\\/updates\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/category\\\/hyros\\\/#listItem\",\"name\":\"Hyros\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/category\\\/hyros\\\/#listItem\",\"position\":2,\"name\":\"Hyros\",\"item\":\"https:\\\/\\\/hyros.com\\\/updates\\\/category\\\/hyros\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/#listItem\",\"name\":\"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup)\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/#listItem\",\"position\":3,\"name\":\"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup)\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/category\\\/hyros\\\/#listItem\",\"name\":\"Hyros\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/#organization\",\"name\":\"HYROS\",\"description\":\"Blog\",\"url\":\"https:\\\/\\\/hyros.com\\\/updates\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/author\\\/gregorydigitalrooftop-com\\\/#author\",\"url\":\"https:\\\/\\\/hyros.com\\\/updates\\\/author\\\/gregorydigitalrooftop-com\\\/\",\"name\":\"Gregory\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/#authorImage\",\"url\":\"https:\\\/\\\/hyros.com\\\/updates\\\/wp-content\\\/uploads\\\/2020\\\/08\\\/Screen-Shot-2020-08-05-at-5.19.03-AM-150x150.png\",\"width\":96,\"height\":96,\"caption\":\"Gregory\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/#webpage\",\"url\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/\",\"name\":\"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup) - HYROS\",\"description\":\"How to capture click IDs, persist them in your CRM, and push closed deals back to Google and Meta so offline revenue lands on the right ads.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/author\\\/gregorydigitalrooftop-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/author\\\/gregorydigitalrooftop-com\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/hyros.com\\\/updates\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/send-the-sale-back-scaled.png\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/#mainImage\",\"width\":2560,\"height\":1429,\"caption\":\"Brass tube diagram carrying a closed-won capsule back to the ad platform\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/offline-conversion-tracking\\\/#mainImage\"},\"datePublished\":\"2026-08-02T21:56:09+00:00\",\"dateModified\":\"2026-08-04T00:43:35+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/#website\",\"url\":\"https:\\\/\\\/hyros.com\\\/updates\\\/\",\"name\":\"HYROS\",\"description\":\"Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/hyros.com\\\/updates\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup) - HYROS","description":"How to capture click IDs, persist them in your CRM, and push closed deals back to Google and Meta so offline revenue lands on the right ads.","canonical_url":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/#article","name":"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup) - HYROS","headline":"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup)","author":{"@id":"https:\/\/hyros.com\/updates\/author\/gregorydigitalrooftop-com\/#author"},"publisher":{"@id":"https:\/\/hyros.com\/updates\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/send-the-sale-back-scaled.png","width":2560,"height":1429,"caption":"Brass tube diagram carrying a closed-won capsule back to the ad platform"},"datePublished":"2026-08-02T21:56:09+00:00","dateModified":"2026-08-04T00:43:35+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/#webpage"},"isPartOf":{"@id":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/#webpage"},"articleSection":"Ad Attribution, Hyros, B2B offline attribution, CRM webhook attribution, GCLID tracking, Google Offline Conversions API, Meta CAPI for Offline Events, offline conversion tracking, phone call conversion tracking"},{"@type":"BreadcrumbList","@id":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/hyros.com\/updates#listItem","position":1,"name":"Home","item":"https:\/\/hyros.com\/updates","nextItem":{"@type":"ListItem","@id":"https:\/\/hyros.com\/updates\/category\/hyros\/#listItem","name":"Hyros"}},{"@type":"ListItem","@id":"https:\/\/hyros.com\/updates\/category\/hyros\/#listItem","position":2,"name":"Hyros","item":"https:\/\/hyros.com\/updates\/category\/hyros\/","nextItem":{"@type":"ListItem","@id":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/#listItem","name":"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup)"},"previousItem":{"@type":"ListItem","@id":"https:\/\/hyros.com\/updates#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/#listItem","position":3,"name":"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup)","previousItem":{"@type":"ListItem","@id":"https:\/\/hyros.com\/updates\/category\/hyros\/#listItem","name":"Hyros"}}]},{"@type":"Organization","@id":"https:\/\/hyros.com\/updates\/#organization","name":"HYROS","description":"Blog","url":"https:\/\/hyros.com\/updates\/"},{"@type":"Person","@id":"https:\/\/hyros.com\/updates\/author\/gregorydigitalrooftop-com\/#author","url":"https:\/\/hyros.com\/updates\/author\/gregorydigitalrooftop-com\/","name":"Gregory","image":{"@type":"ImageObject","@id":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/#authorImage","url":"https:\/\/hyros.com\/updates\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-05-at-5.19.03-AM-150x150.png","width":96,"height":96,"caption":"Gregory"}},{"@type":"WebPage","@id":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/#webpage","url":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/","name":"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup) - HYROS","description":"How to capture click IDs, persist them in your CRM, and push closed deals back to Google and Meta so offline revenue lands on the right ads.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/hyros.com\/updates\/#website"},"breadcrumb":{"@id":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/#breadcrumblist"},"author":{"@id":"https:\/\/hyros.com\/updates\/author\/gregorydigitalrooftop-com\/#author"},"creator":{"@id":"https:\/\/hyros.com\/updates\/author\/gregorydigitalrooftop-com\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/hyros.com\/updates\/wp-content\/uploads\/2026\/08\/send-the-sale-back-scaled.png","@id":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/#mainImage","width":2560,"height":1429,"caption":"Brass tube diagram carrying a closed-won capsule back to the ad platform"},"primaryImageOfPage":{"@id":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/#mainImage"},"datePublished":"2026-08-02T21:56:09+00:00","dateModified":"2026-08-04T00:43:35+00:00"},{"@type":"WebSite","@id":"https:\/\/hyros.com\/updates\/#website","url":"https:\/\/hyros.com\/updates\/","name":"HYROS","description":"Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/hyros.com\/updates\/#organization"}}]},"og:locale":"en_US","og:site_name":"HYROS","og:type":"article","og:title":"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup) - HYROS","og:description":"How to capture click IDs, persist them in your CRM, and push closed deals back to Google and Meta so offline revenue lands on the right ads.","og:url":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/","article:tag":["b2b offline attribution","crm webhook attribution","gclid tracking","google offline conversions api","meta capi for offline events","offline conversion tracking","phone call conversion tracking"],"article:published_time":"2026-08-02T21:56:09+00:00","article:modified_time":"2026-08-04T00:43:35+00:00","twitter:card":"summary_large_image","twitter:title":"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup) - HYROS","twitter:description":"How to capture click IDs, persist them in your CRM, and push closed deals back to Google and Meta so offline revenue lands on the right ads.","twitter:label1":"Written by","twitter:data1":"Gregory","twitter:label2":"Est. reading time","twitter:data2":"17 minutes"},"aioseo_meta_data":{"post_id":"3526","title":null,"description":"How to capture click IDs, persist them in your CRM, and push closed deals back to Google and Meta so offline revenue lands on the right ads.","keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/","og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-08-03 07:49:14","updated":"2026-08-04 01:38:00","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/hyros.com\/updates\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/hyros.com\/updates\/category\/hyros\/\" title=\"Hyros\">Hyros<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tHow to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup)\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/hyros.com\/updates"},{"label":"Hyros","link":"https:\/\/hyros.com\/updates\/category\/hyros\/"},{"label":"How to Track Offline Conversions from Online Ads (Google + Meta + CRM Setup)","link":"https:\/\/hyros.com\/updates\/offline-conversion-tracking\/"}],"_links":{"self":[{"href":"https:\/\/hyros.com\/updates\/wp-json\/wp\/v2\/posts\/3526","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hyros.com\/updates\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hyros.com\/updates\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hyros.com\/updates\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/hyros.com\/updates\/wp-json\/wp\/v2\/comments?post=3526"}],"version-history":[{"count":2,"href":"https:\/\/hyros.com\/updates\/wp-json\/wp\/v2\/posts\/3526\/revisions"}],"predecessor-version":[{"id":3601,"href":"https:\/\/hyros.com\/updates\/wp-json\/wp\/v2\/posts\/3526\/revisions\/3601"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hyros.com\/updates\/wp-json\/wp\/v2\/media\/3596"}],"wp:attachment":[{"href":"https:\/\/hyros.com\/updates\/wp-json\/wp\/v2\/media?parent=3526"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hyros.com\/updates\/wp-json\/wp\/v2\/categories?post=3526"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hyros.com\/updates\/wp-json\/wp\/v2\/tags?post=3526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}