Troubleshooting Guide

How to Send CRM Data to Google Ads: Offline Conversion Upload Guide

Your CRM knows when deals close. Google Ads doesn't. Here is how to bridge that gap and get your CRM revenue data into Google Ads automatically.

4 causes explainedExact fixes for eachAutomated solution included
10 min
Setup time
5
CRMs supported
30-50%
ROAS improvement typical
0
Manual exports needed

Key Takeaways

1

Google Ads can receive offline conversion data from any CRM via the UploadClickConversions API.

2

The data needed: a GCLID (captured when the contact first clicked your ad) plus a conversion event and value.

3

Most CRMs can fire webhooks when deals close — this is the trigger point for the upload.

4

The GCLID must be captured and stored against the contact email before the deal closes.

5

No developer is required if you use a tool that handles GCLID capture, matching, and upload.

1

Gap 1: CRM doesn't know about ad clicks

Your CRM stores contacts and deals. It doesn't know which Google ad each contact clicked. That click data lives in Google Ads. Bridging the two requires storing the GCLID at contact creation time.

Fix: Add cl.js to your landing page. It captures the GCLID on ad click and stores it. When the contact submits a form, the GCLID is included in the form payload and saved against the contact record.
2

Gap 2: No trigger for 'deal closed' upload

Even if your CRM has the GCLID, there's no automatic mechanism to send it to Google Ads when a deal closes. Someone has to do it manually — or a custom integration has to be built.

Fix: Use CRM webhooks. Most CRMs (HubSpot, GHL, Salesforce, Pipedrive) can trigger an HTTP webhook when a deal stage changes. Point that webhook at ConversionLoop and the upload happens automatically.
3

Gap 3: Upload format is strict

Google Ads' UploadClickConversions API requires: a valid GCLID, a conversion action name matching exactly, a UTC timestamp in the right format, and an optional value in the right currency code. One mistake and the upload fails silently.

Fix: Use a tool that talks directly to the API and handles formatting. You supply the GCLID, value, and timestamp — the tool handles the rest.
4

Gap 4: No visibility into failures

Manual CSV uploads and custom integrations often fail silently. Conversions are accepted but discarded. You find out weeks later when you audit campaign performance and nothing adds up.

Fix: Use a tool with a diagnostics dashboard. ConversionLoop shows every upload attempt, match result, and failure reason in real time.

Manual upload vs. ConversionLoop

Why the manual process breaks at scale — and what changes with automation

Feature
Manual CSV
ConversionLoop
CRM webhook support
Manual export required
Native — any webhook CRM
GCLID lookup
Spreadsheet join
Automatic on webhook
Google Ads API upload
Custom code required
Handled automatically
Deal value passthrough
Often missed
Full value uploaded

How to do it manually (and why it breaks)

Manual CRM-to-Google Ads sync requires exporting contacts with GCLIDs from your CRM, filtering by closed date, formatting as a CSV, and uploading in Google Ads. At low volume this works. At scale it is unreliable — the GCLID export misses contacts without it, formatting breaks, and the 90-day window gets missed.

The automated approach

ConversionLoop acts as the bridge. Your CRM fires a webhook when a deal closes. ConversionLoop receives it, looks up the GCLID for that contact's email, formats the conversion, and uploads to Google Ads via API. Runs in under 60 seconds.

Stop diagnosing. Start tracking.

ConversionLoop handles GCLID capture, upload formatting, and delivery automatically. Set it up once.

Start free trial

Verifying CRM data is reaching Google Ads

In Google Ads, go to Conversions and open your import conversion action. The Diagnostics tab shows every import attempt, the GCLID matched, the conversion time, and any errors. If conversions are uploading, you'll see recent entries within hours of a deal closing in your CRM.

Frequently asked questions

What if a deal closes but we don't have a GCLID for that contact?

If the contact never clicked a Google ad (or the GCLID was not captured), there is nothing to upload. ConversionLoop logs these as unmatched and shows you the rate. If your match rate is low, the most common cause is cl.js not being on all your landing pages.

Can I upload multiple conversion events per deal?

Yes. You can upload different conversion actions at different pipeline stages — one at Proposal Sent, one at Contract Signed, one at Closed Won. Each maps to a different Google Ads conversion action.

Never debug offline conversions again

Automated GCLID capture, real-time upload, and full error diagnostics. Every conversion, every time.

Start free — 14 days on us

No credit card required · No developer needed · Cancel anytime