Offline Conversion Tracking Google Ads Setup
Offline Conversion Tracking Google Ads Setup
Offline conversion tracking Google Ads setup: sync closed-won CRM deals with GCLID and conversion value. Step-by-step guide, no warehouse needed.
No credit card required
Free 100k syncs every month
Smart Bidding is only as smart as the conversions you feed it. If the only signal Google Ads sees is a form submission, it optimizes for form-fillers. The real buyers are the ones whose deals close three weeks later in your CRM, and to the bidding engine they're invisible. Offline conversion tracking Google Ads is built to close that gap, and for most B2B teams it's the single biggest ROAS lever sitting untouched.
This guide walks through setting up offline conversion tracking Google Ads end to end by syncing closed-won CRM deals directly to the Google Ads offline conversions API. No data warehouse, no reverse-ETL tool, no CSV uploads. Start with Google Ads, then extend the same pattern to Meta, LinkedIn, and TikTok. For the broader picture of how offline conversions fit into campaign measurement, start with our pillar on what is marketing analytics.
Why offline conversion tracking Google Ads is the ROAS lever most teams ignore
Here's the scenario almost every B2B SaaS or lead-gen team lives in. You spend $30k a month on Google Ads. Google sees a few hundred "lead submitted" events per month and optimizes accordingly. Three weeks later, your sales team closes 18 deals worth $240k. None of that revenue makes it back to Google Ads.
Smart Bidding now has two problems. First, it can't tell which clicks produced paying customers and which produced tire-kickers, so it keeps bidding on lookalikes of everyone who filled a form. Second, your reported CPA is based on lead volume, not revenue, so you underspend on the keywords that actually generate pipeline.
Google acknowledges this gap in its own offline conversion imports documentation. The fix is offline conversion tracking: upload the real outcome back to Google Ads, tied to the GCLID that started the journey. Deal closed, deal value, deal date. Once those conversions land, Smart Bidding recalibrates around revenue, not lead count.
The reason most teams skip it is not ignorance. It's that every published guide on offline conversions Google Ads assumes a data warehouse and a reverse-ETL tool sitting on top of it. That architecture is expensive and usually overkill. Your CRM already has the deal, the GCLID, the amount, and the close date. The only thing missing is a sync.
How offline conversion tracking Google Ads works: GCLID, enhanced conversions, and the Google Ads offline conversions API
There are three flavors of offline conversion imports, and picking the right one up front saves a week of rework later.
GCLID-based uploads are the classic flow. When someone clicks a Google ad, Google appends a gclid parameter to the landing page URL. You capture that value in a hidden form field, pass it into the CRM on the Contact or Lead record, and carry it forward to the Deal. When the deal closes, you POST the GCLID plus conversion time, conversion action ID, and conversion value to the Google Ads offline conversions API. Google matches GCLID to the original click and credits the conversion.
Enhanced Conversions for Leads is the backup. It uses hashed first-party data (usually email or phone) as the match key. Use it when a lead arrived before you captured GCLIDs, or when the lead form is on a property you don't fully control. You trade some match rate for more coverage.
Call conversions are a separate lane for ad extensions that trigger phone calls. They work the same way conceptually but with a different identifier.
For deal-based B2B, GCLID is the primary flow and Enhanced Conversions is the safety net. You can send both.
Method | Match key | Best for | Lookback window |
|---|---|---|---|
GCLID upload | Google Click ID | Deals you can tie to a specific click | 90 days |
Enhanced Conversions for Leads | Hashed email or phone | Missing GCLIDs or long sales cycles | 90 days |
Call conversions | Caller ID | Phone-driven conversions | 90 days |
Under the hood all three hit the Google Ads API. Historically this was called the Google offline conversion API (and before that, offline conversions AdWords, back when AdWords was still the product name). Today the documented endpoints are UploadClickConversions and UploadCallConversions under the Google Ads offline conversions API. Every competitor in this space wraps that same API. The difference is whether you go through a warehouse first or not.
Step-by-step: sync CRM deal data to Google Ads offline conversions
Here is the end-to-end setup, assuming your CRM is HubSpot, Salesforce, or Pipedrive and your ad account is a standard Google Ads manager account.
1. Capture GCLID on every form. Add a hidden field named gclid to every landing page form. On page load, read gclid from the URL query string and populate the hidden field. If the parameter is missing, fall back to a first-party cookie set on any previous visit. Write both to the CRM Contact.
2. Carry GCLID to the Deal record. When a Contact becomes a Deal, copy the GCLID forward. In HubSpot this is a property copy workflow. In Salesforce it's a trigger or Process Builder. In Pipedrive it's a custom field on the Deal that inherits from the Person. Without this step, closed-won deals arrive at Google Ads with no click to match against.
3. Create the Google Ads conversion action. In Google Ads, open Goals > Conversions > New conversion action. Choose "Import" as the source, then "Other data sources or CRMs," then "Track conversions from clicks." Name it something honest like "Closed-Won Deal." Set a default value if most deals are similar size, or leave it open if you'll pass per-deal values. Save the conversion action ID. You will need it for field mapping.
4. Connect the sync. In Oneprofile, add your CRM as a source and Google Ads as a destination. Authenticate Google Ads over OAuth and pick the ad account. For the record type, select Offline Conversions (click-based).
5. Map fields. Match the deal fields to the Google Ads offline conversions API payload. Filter so only closed-won deals with a GCLID flow through.
6. Schedule and run. Every 15 minutes is the right cadence. Smart Bidding refreshes on its own clock, but more frequent uploads let adjustments flow through quickly. The first sync backfills the last 90 days of closed deals. That 90-day window is the maximum lookback Google accepts.
7. Verify. Open Google Ads > Goals > Conversions > Diagnostics a few hours later. You want to see accepted uploads climbing and rejected uploads near zero. Common rejection reasons: GCLID older than 90 days, conversion time before the click, or a malformed action ID.
Which CRM fields to map for Google Ads offline conversions (GCLID, conversion value, conversion time)
Field mapping is where most setups break. Get this table right and the rest is schedule-and-forget.
Google Ads field | CRM source field | Notes |
|---|---|---|
| Hard-coded action ID from step 3 | Same value on every row |
| Deal.gclid (copied from Contact at creation) | Required for click-based uploads |
| Deal.close_date | Must be after click time and within 90 days |
| Deal.amount | Pass as a number, not a currency string |
| Deal.currency (ISO 4217) | Default to account currency if blank |
| Deal.id | Enables deduplication and future adjustments |
A couple of things that trip people up:
Time format. Google expects timezone-aware timestamps. A naive "2026-03-14" gets rejected. Use
2026-03-14 14:22:00-08:00or similar.Currency on multi-currency deals. If your CRM stores deal amount in the rep's local currency but the Google Ads account is in USD, either convert upstream or include the currency_code field on every row and let Google convert.
Deduplication. Include
order_id. Without it, a re-uploaded row can look like a new conversion and double-count. With it, the second upload is recognized as an adjustment.
Handle conversion adjustments. B2B deals move. An amount gets revised up after a contract amendment. A deal flips from closed-won to refunded. Google supports conversion adjustments for exactly this: upload the same GCLID and conversion time with a new value, and Google overwrites. Field-level change tracking in the sync means only the deals whose amount or stage changed get re-sent, keeping API usage clean.
Test-mode vs production. Google Ads has no test mode for offline conversions. A bad upload hits your real reporting. Before enabling the sync, dry-run by uploading a single deal manually via Google's template and confirming it appears correctly. Then turn on the automated sync.
Extending offline conversion tracking Google Ads to Meta, LinkedIn, and TikTok Conversions APIs
Once Google Ads is live, the same architecture extends to every other ad platform. The pattern is identical: capture the platform's click ID at ad click, carry it to the deal, sync closed-won deals to the platform's server-side conversions API. The only thing that changes is the identifier and the endpoint.
Platform | Click identifier | API | Also accepts |
|---|---|---|---|
Google Ads | GCLID | Google Ads offline conversions API | Hashed email, phone |
Meta | FBCLID or | Meta Conversions API | Hashed email, phone, external_id |
| LinkedIn Conversions API | Hashed email, SHA-256 | |
TikTok | TTCLID | TikTok Events API | Hashed email, phone |
One sync config per destination. Same CRM source, same "closed-won deals in the last 90 days" filter, different destination and field mapping. The CRM's Contact record accumulates GCLID, FBCLID, li_fat_id, and TTCLID over time depending on which ads brought each lead in. A deal can fire offline conversions to multiple platforms if the contact touched multiple ads. Google and Meta both attribute to the click ID they own, so there's no double-counting within a platform.
For teams running ads across all four, this is often the point where leadership notices the shift. Last quarter's report talked about clicks and leads. This quarter's report talks about pipeline and closed revenue by ad, because the ad platforms now see the same number the sales team does.
What changes after offline conversions are live in Google Ads
You stop measuring Google Ads by lead volume and start measuring by pipeline. Smart Bidding stops optimizing for any-click and starts optimizing for buyers. The CPL metric on the dashboard gets less useful; CPA-on-closed-deal and ROAS get much more useful. The keywords and audiences that fill the top of funnel but never convert show up in the conversion column with zeros next to them. Next quarter's budget reflects that.
The team stays out of Google Ads day to day. The CRM is still where revenue lives. It just flows outward now, to every ad platform that wants to know whether its clicks turned into customers.
What is offline conversion tracking in Google Ads?
Do I need a data warehouse to upload Google Ads offline conversions?
How long does Google Ads remember a GCLID?
What if the deal value changes after the first upload?
Does this work for Meta, LinkedIn, and TikTok too?
What's the difference between GCLID upload and Enhanced Conversions for Leads?