How do I import closed-won deals into Google Ads as offline conversions?
Store the click ID (GCLID, GBRAID or WBRAID) on the CRM record, and when the deal closes, upload it with close time and deal value to its own offline conversion action within 90 days of the click. New builds use Data Manager. Of 28 lead-gen Google Ads accounts I manage, 6 bid on one (30 days to October 21, 2026).
The mechanism in three moves
Offline conversion imports close the loop between a Google Ads click and a deal that closes weeks later. There are three moving parts.
First, capture the click ID. Google appends a gclid parameter to most ad clicks, and on some iOS traffic it sends a gbraid or wbraid instead. A small script reads whichever one arrives from the URL and writes it into its own hidden field on your form. Google’s Data Manager API accepts a gclid, a gbraid or a wbraid as the ad identifier, so store all three fields rather than one. When the form submits, the ID rides into the CRM on the new contact or deal record.
Second, store it. The click ID lives on the CRM record as a custom property next to the lead. It sits there through the whole pipeline: lead, booked appointment, proposal, closed-won. It has to survive every stage transition without getting wiped, and it has a shelf life. Google’s GCLID import guide requires a click-to-conversion cycle under 90 days or under 14 days, depending on the data source. Some connected sources, such as BigQuery, import only the last 14 days on each run. If your deals routinely close later than that, upload an earlier stage you trust, like the booked consult or estimate, as its own conversion action, and send closed-won only on the deals that land inside the window.
Third, push the win back. When the deal moves to closed-won, you send an offline conversion to Google Ads carrying that original click ID plus the conversion time and the deal value, against a conversion action set up for closed-won deals only. Google matches the ID to the click that started it and credits the campaign, ad group, and keyword that produced the actual customer.
That’s the loop. The CRM is the ledger, and the win flows back to the ad platform where the bidding happens.
The loop in three moves
- 1 Capture gclid, gbraid or wbraid into hidden form fields
- 2 Store On the CRM record through every stage
- 3 Push back Closed-won with conversion time and deal value, to its own offline conversion action
Why this changes how Smart Bidding behaves
Without the loop, Smart Bidding optimizes against form-fills. The algorithm does what you tell it to. It finds the cheapest conversions. The cheapest form-fills are usually the worst leads: price shoppers and the contact who filled out four firms’ forms at once. The algorithm has no idea those leads never close, so it buys more of them.
Feed closed-won deals back in with their dollar value, move bidding to a value-based strategy, and the target changes. Now the algorithm sees which clicks turned into signed clients and which dollar amounts they carried. It bids toward revenue. The expensive keyword that produces a $40,000 matter starts winning the auction over the cheap keyword that produces 30 junk fills.
Few accounts are set up this way. Across 33 Google Ads accounts I manage, 30 days to October 21, 2026, 6 of the 28 lead-gen accounts bid on an offline import, while 27 of 28 bid on calls.
The import also isn’t the first fix. A law firm I worked with shows the order. I fixed the conversion signal and rebuilt the account: WhatConverts-qualified calls became the conversion, forms got required-field validation so a half-filled form stopped counting, and the account was rebuilt by case type with filtering ad copy and 300+ negatives. In 90 days spend fell 50%, qualified signups doubled, and cost per qualified lead fell by about half. There was no signed-case import behind that. Google Ads never saw a signed case, every qualified call still imported at $0, and I didn’t isolate which change did what.
On call-first accounts a click-ID import has a second limit: only a small share of calls carry a click ID. Match the rest by the caller’s number and call time with enhanced conversions instead.
Three ways to build it
Pick the method that matches your stack and your tolerance for maintenance.
Zapier or a similar connector. A Zap fires when a deal hits closed-won, filters out records without a click ID, and runs Zapier’s Google Ads Send Offline Conversion action with the GCLID and deal value. That action needs a GCLID and an “import from clicks” conversion action. No code to maintain. The trade is that you pay per task and add a dependency that can break quietly on a plan change or an auth expiry.
Your call-tracking platform. When calls are the lead, the platform that tracks them can often do the sending. Most of my lead-gen clients run WhatConverts for call and form tracking and qualification, and its Google Ads integration can send leads once they’re marked quotable or get a quote or sales value, with that value attached. The CRM’s job is to tell it which leads qualified and which closed.
Custom webhook plus a Cloudflare Worker. A CRM workflow fires a webhook when the deal closes. A Cloudflare Worker receives it, formats the offline conversion, and posts it to Google. New builds go to the Data Manager API. From June 15, 2026, the Google Ads API stopped accepting offline conversion and enhanced-conversions-for-leads uploads from developer tokens that hadn’t already been sending them. Tokens that were sending them were allowlisted and keep API access for now, though Google recommends moving them to the Data Manager API too. You own the code, it costs near nothing to run, and you control the exact payload and timing. The trade is that a failed upload is yours to catch.
A spreadsheet upload, to start. Before any automation, you can export closed-won deals with their click IDs and upload them to Google Ads as a manual offline conversion file. It’s tedious and it lags, but it proves the loop works and validates that your click IDs actually matched clicks before you spend time on a webhook.
Where this sits in the larger stack
Importing closed-won deals is layer eight of the Lead Quality Stack, the loop that’s unique to lead generation. It only works if the layers under it are wired. The click ID has to land on the form and survive into the CRM. The CRM has to expose closed-won through a webhook or API. Your primary conversion in Google Ads should already be a qualified lead, which on my accounts means a booked appointment, a booked consult or estimate, not a raw form-fill. The offline import then sharpens a signal that’s already pointed the right way.
When I audit this, I check two things in order. First, is the primary conversion a qualified lead, a booked appointment or a WhatConverts-qualified call, rather than a form fill? Second, where your CRM holds closed deals, are they reaching Google Ads with the click ID and a value? If the first is wrong, you’re optimizing toward the wrong event before the imports even matter.
If you want the click-ID path and the offline import checked against your own account, the free 25-page Google Ads Setup Checklist covers the conversion settings around it, with no email gate, and the free ads audit reads the whole conversion setup on your account, back within 24 hours of read-only access.
When to bring me in
Bring me in when closed deals live in your CRM and never reach Google Ads, when the CRM doesn’t store the click ID, or when an offline import is set up but its conversion column stays empty. I’ll find where the signal breaks before it reaches Google Ads.
I'm Conner Crowe, and I write every audit myself. Send the free audit request and add me as a read-only user, and within 24 hours of access you'll have a written read on what your account counts as a lead and what to fix first. No call needed, and nothing in your account or store changes.
Where to look in your account.
What Google is allowed to count
Goals, then Summary, then View all conversion actions
- Tracking status. Inactive or Needs attention means the tag hasn’t recorded anything lately, so check it before you trust the totals.
- Primary or Secondary. Only Primary actions feed Smart Bidding; Secondary ones are reported and ignored by the bidding.
- Count. One per click for leads, Every for purchases. A lead form set to Every counts a double-submit twice.
- Included in account-level goals. Yes is what the campaigns actually optimize toward.
From my own Google Ads account, October 2026. Tap or click the screen to see it full size.
Tools for this diagnosis
-
The Lead Quality Stack
Reference architecture for service-business and lead-gen accounts.
-
Google Ads Setup Checklist
Free 25-page PDF checklist. No email required.
Related questions
-
Do I need a CRM to run Google Ads for a service business?
A senior operator's answer on whether a CRM is required for service-business Google Ads, what it has to expose, and what to do before you own one.
-
How do I stop spam form submissions from inflating my Google Ads conversions?
Spam form fills inflate Google Ads conversions because the tag fires on submit. Gate the event on server validation and count qualified leads only.
-
Should I optimize Google Ads for form fills or qualified leads?
Optimizing for raw form fills teaches Smart Bidding to find junk. How to make the booked appointment your one primary conversion and bid Target CPA on it.
-
Why are my Google Ads leads low quality?
Low-quality Google Ads leads usually trace to Smart Bidding optimizing on raw form-fills. The four real causes, and the order to fix them.
Same diagnosis,
run on your leads.
Add me as a read-only user and I'll write the audit myself: what your account counts as a lead and what to fix first, 5 to 7 pages, back within 24 hours of access. No call needed. If you'd rather talk first, a call is open too.