---
title: "Google enhanced conversions, offline imports and Data…"
description: "The Google conversion toolkit Google offers several ways to send richer, more durable conversion data: Tool What it does Typical use --- --- --- Enhanced…"
url: https://optimizeall.com/learn/privacy-first-measurement/google-enhanced-conversions-and-offline
updated: 2026-10-05
---

Privacy-First Measurement: Server-Side Tagging, Consent Mode and Conversion APIs · Conversion APIs: Meta, Google, TikTok and LinkedIn · lesson 8 of 14 · 8 min

# Google enhanced conversions, offline imports and Data Manager

## The Google conversion toolkit

Google offers several ways to send richer, more durable conversion data:

| Tool | What it does | Typical use |
|---|---|---|
| **Enhanced conversions for web** | Sends hashed first-party data (email, phone, name, address) collected on the conversion page with the conversion tag | E-commerce, sign-ups |
| **Enhanced conversions for leads** | Captures hashed email/phone when a lead form is submitted; later you upload the conversion (e.g., "qualified") matched on that hashed data | Lead gen with CRM follow-up |
| **Offline conversion import (click-based)** | Upload conversions with a click ID (gclid, gbraid, wbraid) | Phone sales, CRM stages |
| **Store sales / other first-party imports** | Upload offline transactions matched on user data | Retail |
| **Google tag gateway / server-side GTM** | First-party delivery of Google tags | Durability |
| **Data Manager (in Google Ads) and API options** | Connect first-party data sources (CRM, warehouses, CDPs) and manage uploads | Scaling uploads |

All of these depend on consent: for EEA/UK users, send `ad_user_data` consent status with uploads where the API supports it, and only upload data you are permitted to use.

## Enhanced conversions for web with gtag

Set user data before the conversion event fires. Google's tag normalizes and hashes it (you can also send pre-hashed SHA-256 values).

```javascript
// On the order confirmation page, after consent for ads measurement is granted
gtag('set', 'user_data', {
  email: order.email,            // or sha256_email_address: '<hex>'
  phone_number: order.phoneE164, // e.g. '+971501234567'
  address: {
    first_name: order.firstName, last_name: order.lastName,
    city: order.city, country: order.countryCode // 'AE'
  }
});
gtag('event', 'conversion', {
  send_to: 'AW-XXXXXXXXX/AbCdEfGhIjK',
  value: order.value, currency: order.currency, transaction_id: order.id
});
```

In Google Tag Manager, the Google Ads conversion tag has a "user-provided data" option; you can use automatic detection (less reliable), CSS selectors, or a data layer variable (recommended). Check the **Diagnostics** tab in Google Ads for enhanced conversion coverage and errors.

## Offline conversion import with click IDs

1. Capture the click ID from the landing page URL (`gclid`, or `gbraid`/`wbraid` from iOS app contexts) and store it with the lead in your CRM. The Conversion Linker tag also stores it in the `_gcl_aw` first-party cookie.
2. When the lead reaches a stage (qualified, closed-won), upload a conversion with the click ID, conversion action, time (with time zone), value and currency.
3. Upload via scheduled file (Sheets/HTTPS), a CRM integration (e.g., HubSpot, Salesforce), Data Manager, or the Google Ads API.

A minimal Google Ads API example using the official Python client:

```python
# pip install google-ads   (configure google-ads.yaml or env vars; never hard-code credentials)
from google.ads.googleads.client import GoogleAdsClient

client = GoogleAdsClient.load_from_env()  # reads GOOGLE_ADS_* environment variables
customer_id = "1234567890"
svc = client.get_service("ConversionUploadService")
ca_path = client.get_service("ConversionActionService").conversion_action_path(customer_id, "987654321")

conv = client.get_type("ClickConversion")
conv.gclid = "Cj0KCQ...stored_with_lead"
conv.conversion_action = ca_path
conv.conversion_date_time = "2026-09-20 14:05:00+04:00"
conv.conversion_value = 12000.0
conv.currency_code = "AED"
conv.consent.ad_user_data = client.enums.ConsentStatusEnum.GRANTED

req = client.get_type("UploadClickConversionsRequest")
req.customer_id = customer_id
req.conversions.append(conv)
req.partial_failure = True
resp = svc.upload_click_conversions(request=req)
if resp.partial_failure_error:
    print("Partial failure:", resp.partial_failure_error.message)
```

Check the Google Ads API documentation for the current API version and any newer upload options (Google has been consolidating first-party data ingestion under Data Manager).

## Enhanced conversions for leads flow

- Form submit: tag captures hashed email/phone (with consent).
- CRM: lead progresses; when qualified, you upload the conversion with the same email/phone (hashed) instead of a gclid.
- Google matches the upload to the original ad interaction.

This is more robust than gclid-only flows when click IDs are lost (e.g., forms on other domains, Safari link protections).

## Worked example: a Dubai real-estate brokerage

Leads come from Search and PMax; deals close offline weeks later. They implement enhanced conversions for leads on the enquiry form, store gclid and hashed email in the CRM, and upload "viewing booked" (value = expected commission × viewing-to-deal rate) and "deal closed" (actual commission) conversions daily. Bidding shifts to value-based once enough conversions accumulate; campaigns stop optimizing for low-intent enquiries.

## Pitfalls

- Uploading conversions older than the click-through window of the conversion action.
- Wrong time zone formats, causing rejected rows.
- Primary vs secondary conversion actions misconfigured, so bidding optimizes to the wrong goal.
- Uploading users who did not consent where consent is required.

## How to measure success

Enhanced conversions "active" with good coverage in Diagnostics, upload success rate near 100%, offline conversions appearing in reports within the expected delay, and bidding goals aligned to qualified outcomes.

## Video lecture: Google enhanced conversions, offline imports and Data Manager

Lecture coming soon · 13 chapters · about 8 minutes. Read the full transcript below.

1. Google's conversion toolkit
2. Why it matters
3. The toolkit
4. Enhanced conversions for web
5. Offline import
6. Simple example: Islamabad car dealer (illustrative)
7. Upload with the API
8. Enhanced conversions for leads
9. Example: Dubai brokerage (illustrative)
10. Common failures
11. Mistakes + try this now
12. Watch me do it: lead loop check (illustrative)
13. Recap and next step

## Lecture transcript

### Google's conversion toolkit

Google Ads can only optimize toward what it can see. If your real wins happen in a CRM weeks after the click, or your conversion tag misses a chunk of buyers, the bidding is flying half blind. In this lecture you'll learn Google's conversion toolkit: enhanced conversions for web and for leads, offline imports with click IDs, and where Data Manager fits, with code for each and the consent rules that apply.

### Why it matters

Why does this matter? Because for many businesses the most valuable outcomes happen after the click, on the phone, in the showroom or in the CRM, and Google can't bid for what it can't see. Here's an analogy. It's like a fishing guide who's only told when a fish bites, never whether it was landed or how big it was. They'll take you to spots with lots of bites, even if every fish gets away. Offline conversions and enhanced conversions tell the guide which spots produced the big catches, so the next trip goes there.

### The toolkit

Here's the toolkit. Enhanced conversions for web sends hashed first-party data, like email or phone, with your conversion tag. Enhanced conversions for leads captures hashed data when a form is submitted, so you can later upload that lead's outcome. Offline conversion import uploads conversions with a click ID. Store sales imports cover retail transactions. Tag gateway and server-side Tag Manager improve delivery. And Data Manager in Google Ads helps connect CRM and warehouse sources and manage uploads.

### Enhanced conversions for web

Enhanced conversions for web is straightforward with gtag. On the confirmation page, after the user has granted consent for ads measurement, you set user data, email, phone in international format, and name and address fields if you have them. Google's tag normalizes and hashes the values, or you can send them pre-hashed. Then the conversion event fires with value, currency and transaction ID. In Tag Manager, use a data layer variable for user-provided data rather than automatic detection.

### Offline import

Now offline imports. Step one, capture the click ID from the landing URL: g c l i d, or g braid and w braid in some iOS contexts. Store it with the lead in your CRM. Step two, when that lead reaches a meaningful stage, like qualified or closed-won, upload a conversion with the click ID, the conversion action, the time with its time zone, the value and the currency. Step three, choose your upload method: scheduled files, a CRM integration, Data Manager, or the Google Ads API.

### Simple example: Islamabad car dealer (illustrative)

Here's a simple worked example. An Islamabad car dealership gets leads from Google Search. When someone submits a test-drive form, the page stores the gclid from the URL and the email in the CRM, and the tag captures hashed email for enhanced conversions for leads. Two weeks later, the salesperson marks the lead as test drive completed. The nightly upload sends that stage to Google with the gclid, the time with the correct time zone offset, and a value based on how often test drives turn into sales. A month later, a car is sold, and a second conversion with the actual margin is uploaded. Google now knows which searches sell cars.

### Upload with the API

The lesson shows an upload with the official Google Ads Python client. Credentials come from environment variables. You build a click conversion with the stored g c l i d, the conversion action path, a date time with offset, the value and currency, and the consent status for ad user data. Turn on partial failure, so one bad row doesn't block the rest, and always print partial failure messages. Google has been consolidating first-party data ingestion under Data Manager, so check the current docs.

### Enhanced conversions for leads

What if click IDs get lost, say your form is on a different domain, or a browser strips parameters? That's where enhanced conversions for leads shines. When the form is submitted, the tag captures hashed email or phone, with consent. When the lead is qualified in your CRM, you upload the conversion matched on that same hashed data, no click ID required. Google matches it back to the original ad interaction.

### Example: Dubai brokerage (illustrative)

Here's an illustrative example. A Dubai real-estate brokerage gets leads from Search and Performance Max, but deals close offline weeks later. They added enhanced conversions for leads to the enquiry form, stored the click ID and hashed email in the CRM, and uploaded two stages daily: viewing booked, valued at expected commission times the viewing-to-deal rate, and deal closed, with the actual commission. Once volume built up, they moved to value-based bidding, and campaigns stopped chasing low-intent enquiries.

### Common failures

Four common failures. Uploading conversions older than the conversion action's click-through window, which get rejected. Time zone formats that don't match, causing errors. Primary and secondary conversion actions set up wrongly, so bidding optimizes for the wrong goal. And uploading data for users who didn't consent, where consent is required. Check the Diagnostics tab weekly for enhanced conversion coverage and upload success.

### Mistakes + try this now

Common mistakes with Google's conversion tools. Uploading conversions older than the conversion action's window. Wrong time zone formats that get rows rejected. Marking every stage as primary, so bidding tries to optimize for all of them at once. Losing the gclid because a form redirect strips URL parameters. And skipping consent status in uploads for European users. Try this now: submit a test lead on your own site with a test gclid in the URL, then check your CRM. Is the click ID stored on the lead record? If not, nothing downstream can work.

### Watch me do it: lead loop check (illustrative)

Watch me do it. Let's check that an illustrative Lahore property developer's lead loop actually works. Step one, I click our own ad in a test, or add a test g c l i d to the landing URL, and submit the enquiry form with a test email. Step two, in the CRM, I open the new lead: the g c l i d field is filled, and the source shows paid search. Step three, in Google Ads, the enhanced conversions diagnostics for the lead form show user-provided data detected. Step four, I move the lead to site visit booked in the CRM. At the nightly upload, a conversion is sent with the g c l i d, the conversion action site visit, the time with the plus five hours Pakistan offset, a value of our expected revenue for that stage, and consent status. Step five, next morning, the uploads page shows the file processed with one success and zero errors. Step six, I check the conversion action's settings: site visit is primary, form submit is now secondary. Within weeks, bidding learns which searches lead to site visits, not just form fills.

### Recap and next step

Recap. Enhanced conversions add hashed first-party data to Google conversions. Enhanced conversions for leads and click-ID imports close the loop with your CRM. Store click IDs, upload stages with values and proper time zones, include consent, and monitor diagnostics. Your next step: design your offline loop, the stages, values, storage, upload method, schedule, and how consent is recorded.

## Key takeaways

- Enhanced conversions add hashed first-party data to Google conversions for better matching.
- Enhanced conversions for leads and click-ID offline imports close the loop on CRM outcomes.
- Store gclid/gbraid/wbraid with each lead and upload stages with values and correct time zones.
- Send consent status (ad_user_data) with uploads and only upload permitted data.
- Monitor Diagnostics and upload success; align primary conversion actions with bidding goals.

## Try it

Design your Google offline loop: which stages you'll upload, their values, where gclid and hashed email are stored, upload method and schedule, and how consent is recorded.

- [Previous: Meta Conversions API: payloads, matching and deduplication](https://optimizeall.com/learn/privacy-first-measurement/meta-conversions-api)
- [Next: TikTok Events API and LinkedIn Conversions API](https://optimizeall.com/learn/privacy-first-measurement/tiktok-events-api-and-linkedin-capi)
- [All lessons of Privacy-First Measurement: Server-Side Tagging, Consent Mode and Conversion APIs](https://optimizeall.com/learn/privacy-first-measurement)
