> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hightouch.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Ads

> Empower your marketing team to run highly granular retargeting and lookalike campaigns on Google

> [!TIP]
>
> Google is centralizing data delivery on the Data Manager API for better match
> quality, simpler maintenance, and built-in privacy features. Customer Match
> user lists, click conversions, and offline store conversions can all move to
> the Data Manager API without rebuilding anything. See [Migrate to Data Manager
> API](#migrate-to-data-manager-api).

## Supported syncing

| Sync Type | Description | Supported Sync Modes | API Reference |
| - | - | - | - |
| [**Customer Match User List**](#customer-match-user-lists) | Creates a customer list for the Customer Match feature of Google Ads. Segments are automatically created in Google Ads based on the name of the model | Add, Update, Remove | [Upload customer lists ↗](https://developers.google.com/google-ads/api/docs/remarketing/audience-types/customer-match) |
| [**Click Conversions**](#click-conversions) | Sends click conversion tracking information to Google Ads for each record in the query results | Insert | [Upload click conversions ↗](https://developers.google.com/google-ads/api/docs/conversions/upload-clicks) |
| [**Click Conversion Adjustments**](#click-conversion-adjustments) | Sends click conversion adjustments to Google Ads for each record in the query results | Insert | [Upload conversion adjustments ↗](https://developers.google.com/google-ads/api/docs/conversions/upload-adjustments) |
| [**Call Conversions**](#call-conversions) | Sends call conversion tracking information to Google Ads for each record in the query results | Insert | [Upload call conversions ↗](https://developers.google.com/google-ads/api/docs/conversions/upload-calls) |
| [**Offline Store Conversions**](#offline-store-conversions) | Sends offline store sales conversion tracking information to Google Ads for each record in the query results | Insert | [Upload store sales ↗](https://developers.google.com/google-ads/api/docs/conversions/upload-store-sales-transactions) |

For more information about sync modes, refer to the [sync modes](https://docs.hightouch.com/syncs/types-and-modes.md#sync-modes) docs.

API version in use: [v24](https://developers.google.com/google-ads/api/reference/rpc/v24/overview)

## Connect to Google Ads

Go to the [**Destinations** overview page](https://app.hightouch.com/destinations?from=docs) and click the **Add destination** button.
Select **Google Ads** and click **Continue**.

> [!WARNING]
>
> Beginning August 5, 2026, Google requires a passkey on your Google account to
> authorize this destination, including reauthorizing an existing connection. A
> new passkey can take up to 7 days to become usable, so add one at
> [g.co/passkeys](https://g.co/passkeys) before you authorize.

Hightouch supports three authentication methods for Google Ads:

| Method | Description |
| - | - |
| **Data Manager API OAuth (Recommended)** | OAuth-based authentication that uses Google's [Data Manager API](https://developers.google.com/data-manager/api). Recommended for all new destinations. |
| **OAuth (Legacy)** | OAuth-based authentication that uses the Google Ads API directly. Existing destinations configured with this method continue to work, and Hightouch can migrate them to the Data Manager API for you. |
| **Data Manager API (Existing Partner Link)** | A non-OAuth method for customers who can't complete the OAuth flow (for example, due to two-factor authentication restrictions). Requires a partner link that already exists in your Google Ads account. |

### Data Manager API OAuth (Recommended)

Select **Data Manager API OAuth (Recommended)**, click **Log in to Google Ads**, log in with your Google Account, and click **Allow**.
You should then see a success notification in the Hightouch UI.

With this method, Hightouch creates a partner link between Hightouch and your Google Ads account during the first sync run. Creating the partner link requires the authenticating user to have **Admin** access on the account. If the user doesn't have Admin access, the sync fails with a `PERMISSION_DENIED` error. See [PERMISSION\_DENIED from Data Manager API](#permission_denied-from-data-manager-api) to verify and fix the access level.

### OAuth (Legacy)

Select **OAuth (Legacy)**, click **Log in to Google Ads**, log in with your Google Account, and click **Allow**.
You should then see a success notification in the Hightouch UI.

> [!NOTE]
>
> If you already have a Google Ads destination configured with this method, you
> can re-authorize it using the **Data Manager API OAuth (Recommended)** method.
> Hightouch can also migrate the destination for you, even while
> **Authentication method** still shows **OAuth (Legacy)**. Either way, no
> changes are required to existing sync configurations. See [Migrate to Data
> Manager API](#migrate-to-data-manager-api).

### Data Manager API (Existing Partner Link)

Use this method if you can't complete the OAuth flow (for example, due to two-factor authentication restrictions on your Google account) and you already have a Hightouch partner link set up in your Google Ads account.

Unlike the OAuth method, this method doesn't create the partner link for you. Before connecting, create the partner link in your Google Ads account by linking **Hightouch** as a data provider. See Google's [data partner linking](https://developers.google.com/data-manager/api/devguides/concepts/destinations#ads-credentials) documentation for details.

Select **Data Manager API (Existing Partner Link)** and enter your Google Ads account ID. You can find this 10-digit value at the top-right corner of your Google Ads dashboard. Remove any dashes or spaces.

> [!NOTE]
>
> Because this method doesn't authenticate as a specific Google user, Hightouch
> can't query your Google Ads account on your behalf. As a result, existing user
> lists and ad accounts don't auto-populate in dropdowns during sync
> configuration—you'll need to provide these values manually.

## Sync configuration

Once you've set up your Google Ads destination and have a [model](https://docs.hightouch.com/getting-started/concepts.md#models) to pull data from, you can set up your sync configuration to begin syncing data.
Go to the [**Syncs** overview page](https://app.hightouch.com/syncs?from=docs) and click the **Add sync** button to begin.
Then, select the relevant model and the Google Ads destination you want to sync to.

### Select account

To begin, select the account you want to sync data to.
If an account appears at the top level, it means you have direct access to that ad account or [manager account](https://support.google.com/google-ads/answer/7459399).
Hightouch accesses nested accounts via the root account that you have direct access to.

![Select Google Ads account](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-select-account.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=7608a0694b4e4d25f1a2bc1a096d305c)

In the preceding example screenshot, the authenticated account has direct access to the **Hightouch** (5138398925) ad account and the **Hightouch Manager Account** (5277198417).
The authenticated account also has access to the manager account's three nested accounts, including the Hightouch (5138398925) ad account.

Selecting either account at the top level syncs directly to those accounts without logging in via another manager account.
Selecting a nested account requires Hightouch to login via the root manager account.

### Customer match user lists

> [!NOTE]
>
> For Customer Match user lists, Google recommends using the [Data Manager
> API](https://docs.hightouch.com/destinations/google-data-manager). If your destination already uses
> **Data Manager API OAuth**, your Customer Match syncs are already using the
> new API. If you're still on **OAuth (Legacy)**, see [Migrate to Data Manager
> API](#migrate-to-data-manager-api) to switch.

Google's [Customer Match](https://support.google.com/google-ads/answer/10550383) tool lets you use the online and offline data your customers have shared with you to deliver targeted ads.

Hightouch lets you create and maintain customer match lists via the Google Ads API.
It can take 6 to 48 hours for a list to be populated with members once Hightouch has sent the data to Google.
You can find more information about this on the API reference page linked in the [supported syncing](#supported-syncing) section.

#### User list type

To begin, select the [upload key type](https://developers.google.com/google-ads/api/reference/rpc/v24/CustomerMatchUploadKeyTypeEnum.CustomerMatchUploadKeyType) for the customer match list.
It can be one of these values:

* **CONTACT\_INFO**
* **MOBILE\_ADVERTISING\_ID**
* **CRM\_ID**

![Selecting user list type](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-user-list-type.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=0edf9d4fe2ef3ef0b6086c7f24fe4314)

Choose the type that aligns with the data fields you are sending.
For example, if you are sending email or address data, select **CONTACT\_INFO**.

#### Select an existing list or create a new one

You can create a new [Customer match user list](https://support.google.com/google-ads/answer/6276125) or use an existing one.
When creating a new list, you can optionally enter a name.
Otherwise, Hightouch defaults to the name of the associated model.

![New user list](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-new-user-list.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=7b98af3d4ff4072dd9d4a07071d28c2c)

To use an existing list, select the desired list from the dropdown.

![Existing user list](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-existing-user-list.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=7e7309e1f52c1dbac4ddee2fc6f2f2d9)

> [!WARNING]
>
> If you choose to create a new list, you can't update the
> [account](#select-account) to which you're syncing data after the initial sync
> run. If you need to change the account, configure a new sync.

Optionally, you can also set the **membership lifespan** for the list.
The value must be between 0 and 540. If you do not set this value, the default value is 540.

Starting April 7th, 2025, the maximum membership duration for a Google Ads customer list is **540 days**.
From this date, existing lists configured to have no membership expiration set or membership expiration greater than 540 days will be updated to use the maximum membership duration of 540 days, and a membership duration of 540 days will be retroactively applied to all those existing members that have a longer duration.
See [Google's announcement](https://ads-developers.googleblog.com/2025/02/update-to-customer-match-membership.html) for more information.

![User list membership lifespan](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-membership-lifespan.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=a15a300855536f9005a13d14fc21db06)

#### User identifiers

To identify which users to add or update in an audience, select model columns and the corresponding Google Ads fields.
You must map at least one identifier.

> [!TIP]
>
> Increase match rates in Google Ads customer match lists by enabling [Match Booster](https://docs.hightouch.com/match-booster/overview.md).

> [!NOTE]
>
> If you map an identifier field that contains an array of values, Hightouch automatically fans out each element into a separate record when syncing to Google Ads. Learn more about [array identifier fan-out](https://docs.hightouch.com/syncs/array-identifier-fan-out.md).

![Customer match user lists field mapping](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-field-mapping-customer-match.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=32e2814d30fe66797581bfa82e7069b5)

#### Handling PII and hashing

You can enable PII hashing if you wish for Hightouch to detect whether your data requires normalization and hashing based on the chosen record mapping.
For example, if you select **Email** and the model column with the email data is unhashed, Hightouch hashes the value for you.

By default, Hightouch automatically detects if the following fields require hashing:

* **Email**
* **Phone**
* **First Name**
* **Last Name**

![PII hashing](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-pii.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=2389d7ada1199010649edb28a3ffcd5c)

#### Cleaning your data

Optionally, you can decide if Hightouch should clean your phone numbers and remove `null` or incorrectly formatted values from your data.

![Clean phone numbers and remove null or incorrectly formatted fields](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-phone-numbers-remove-fields.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=4358265732a3039e04aac1b7d70335a5)

#### Delete behavior

The [delete behavior](https://docs.hightouch.com/syncs/overview.md#delete-behavior) you select dictates what to do when a row no longer appears in your model's query results.
You have the following options:

| Behavior | Description |
| - | - |
| **Do nothing** | Keep the record in the audience |
| **Remove record** | Remove the Google Ads record from the specified audience |

#### EU user consent policy

If you are uploading data for users in the European Economic Area ([EEA](https://ec.europa.eu/eurostat/statistics-explained/index.php?title=Glossary:European_Economic_Area_\(EEA\))),
you need to ensure you are passing the required consent signals to [Google](https://www.google.com/about/company/user-consent-policy/?sjid=2196795394224792925-NA).

For each sync, you can specify the consent status for these types:

* `ad_user_data`: consent for sending user data to Google for advertising purposes
* `ad_personalization`: consent for ad personalization

Check out Google's support [doc](https://support.google.com/google-ads/answer/14310715?hl=en) to learn more.

### Conversion events

Hightouch supports syncing the following conversion events:

* [Click conversions](#click-conversions) and [Offline click conversions](#offline-click-conversions)
* [Click conversion adjustments](#click-conversion-adjustments)
* [Call conversions](#call-conversions)
* [Offline store conversions](#offline-store-conversions)

When syncing conversion events, Hightouch treats any records added to [your source](https://docs.hightouch.com/getting-started/concepts.md) as new events and sends them to Google Ads when your sync runs.

> [!WARNING]
>
> To ensure syncs send each event, your event model must use a truly unique [primary key](https://docs.hightouch.com/getting-started/concepts.md#unique-primary-key-requirement). See the [events syncs](https://docs.hightouch.com/syncs/types-and-modes.md#event-syncs) documentation for more information.

#### Custom conversion variables

You can [map](https://docs.hightouch.com/syncs/mapping-data.md) custom variables when syncing conversion events to Google Ads.
First, you need to set up [custom conversion variables](https://support.google.com/google-ads/answer/9962082) in Google. Custom conversion variables are only available for the following:

* Conversion tracking using [tags on your website](https://support.google.com/google-ads/answer/6331314), if you're syncing [click conversions](#click-conversions) or [call conversions](#call-conversions)
* [Offline conversion import](https://support.google.com/google-ads/answer/2998031), if you're syncing [offline click conversions](#offline-click-conversions)

You can read more about this in [Google Ads Help](https://support.google.com/google-ads/answer/9964350) and also in [Google Ads' API documentation](https://developers.google.com/google-ads/api/docs/conversions/conversion-custom-variables).

#### Currency codes

Google requires all conversion events to include a currency code in a separate column in addition to the amount.
This applies to [click conversions](#click-conversions), [click conversion adjustments](#click-conversion-adjustments), and [offline store conversions](#offline-store-conversions).
Consult Google's chart of [supported currency codes](https://developers.google.com/adsense/management/appendix/currencies) to ensure your data meets their specifications.

#### Enhanced conversions

You can sync both types of [**Enhanced conversions**](https://support.google.com/google-ads/answer/9888656) to Google Ads using Hightouch:

1. [**Enhanced conversions for leads**](https://support.google.com/google-ads/answer/9888656#leads): set up an [Offline click conversion](#offline-click-conversions) in Google Ads; then select **Click Conversions** as the [sync type](#supported-syncing) and [set up your field mappings](#user-identifiers-1) accordingly
2. [**Enhanced conversions for web**](https://support.google.com/google-ads/answer/13261987): select [Click Conversion Adjustments](#click-conversion-adjustments) as the [sync type](#supported-syncing) and **Enhancement** as the [adjustment type](#select-conversion-action-and-adjustment-type)

#### EU user consent policy

If you are uploading data for users in the European Economic Area ([EEA](https://ec.europa.eu/eurostat/statistics-explained/index.php?title=Glossary:European_Economic_Area_\(EEA\))),
you need to ensure you are passing the required consent signals to [Google](https://www.google.com/about/company/user-consent-policy/?sjid=2196795394224792925-NA).

For [click conversions](#click-conversions), [call conversions](#call-conversions) and [offline store conversions](#offline-store-conversions), you can specify the Google consent status for advertising purposes, by mapping these fields in the sync configuration:

* `Ad user data consent` (for the `ad_user_data` property)
* `Ad personalization consent` (for the `ad_personalization` property)

As per [Google's API documentation](https://developers.google.com/google-ads/api/reference/rpc/v24/Consent), these fields only accept the following values: `​GRANTED​`, `​DENIED​`, `UNSPECIFIED`​, ​`UNKNOWN`​.

Check out Google's support [doc](https://support.google.com/google-ads/answer/14310715?hl=en) to learn more.

### Click conversions

Google Ads allows you to [import conversions from ad clicks](https://support.google.com/google-ads/answer/12216424) to see how your online ads are performing.
Before setting up your sync, you need to [set up a conversion action](https://support.google.com/google-ads/answer/12216226) in Google Ads.

After clicking **New conversion action**, remember to select **Website**.

![Setting up conversion action](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-conversion-action.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f35caab6b10f8dc306c7e954e8f11ec8)

It can take over 24 hours for click conversions to be processed by Google.
You can find more information about this and other requirements on the API reference page linked in the [supported syncing](#supported-syncing) section.

If your destination uses **Data Manager API OAuth**, click conversion syncs run through the [Data Manager API](#migrate-to-data-manager-api). The sync configuration is the same either way.

#### Offline click conversions

> [!NOTE]
>
> **Offline click conversions** are not [offline store
> conversions](#offline-store-conversions).

You can sync [offline click conversion imports](https://support.google.com/google-ads/answer/2998031) which allow you to measure what happens in the offline world after an ad results in a click or call to your business.
For these events, you need to [set up offline conversion imports](https://support.google.com/google-ads/answer/7012522).

After clicking **New conversion action**, remember to select **Import**.

![Setting up conversion action](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-conversion-action.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f35caab6b10f8dc306c7e954e8f11ec8)

Then select **CRMs, files, or other data sources** and **Track conversions from clicks** and continue the offline conversion import setup. You can safely skip setting up a data source.

![Import offline conversions](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-import-offline-conversions.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=ef287d3c3e72e37988a6f4a88cbb5410)

> [!TIP]
>
> Check out the [blog
> post](https://hightouch.com/blog/google-offline-conversions) and
> [playbook](https://hightouch.com/playbooks/automate-offline-conversion-uploads-to-maximize-roas)
> to learn how to sync **offline click conversions** to Google Ads.

#### Select conversion action

Select the **conversion action** you previously set up in your Google Ads account.
The dropdown menu displays the conversion action IDs present in your Google Ads account.

![Select conversion action](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-select-conversion-action.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=765a94446802b09bdd63679c5c2974ba)

#### User identifiers

Select which columns to sync from your source to Google Ads' fields. When syncing click conversions, at least one identifier is required:

* **GCLID**
* **GBRAID**
* **WBRAID**
* **User hashed email(s)**
* **User hashed phone(s)**

Furthermore, **Conversion time** is a mandatory field.

![Click conversion field mapping](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-click-conversion-field-mapping.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=2183ce7eccdf6ecc64c1371fd56837e3)

You can send [enhancements as click conversions](https://support.google.com/google-ads/answer/9888656#leads) by mapping the **User hashed email(s)** and **User hashed phone(s)** fields instead of **GCLID**.
The [model columns](https://docs.hightouch.com/models/data-types-casting.md) mapped to these fields can contain either single values or arrays.
Read through Google Ads' [API documentation](https://developers.google.com/google-ads/api/docs/conversions/upload-identifiers) for more details.

If you opt to send user emails and/or phone numbers instead of **GCLID**, keep in mind that each click conversion can only have up to five user identifiers in total.
For example, a click conversion can have three emails and two phone numbers, or any combination that adds up to five.

> [!NOTE]
>
> These enhancements are also referred to as **Enhanced conversions for leads**.
> They are not **Enhanced conversions for web**, which are described in the
> [Syncing click conversion
> adjustments](#select-conversion-action-and-adjustment-type) section.

Avoid storing your **GCLID**, **GBRAID**, and **WBRAID** data in the same model column since this can cause issues when syncing your data.
[Google Ads' limitations](https://developers.google.com/google-ads/api/docs/conversions/upload-clicks#id_parameters) determine which values can and cannot be synced together.
If this data is in the same model column and you try mapping this column to multiple Google Ads fields (such as **GCLID** and **WBRAID**), you might receive a `VALUE_MUST_BE_UNSET` or `GBRAID_WBRAID_BOTH_SET` error.
Check out the [common errors](#common-errors) section to learn more about these errors.

> [!NOTE]
>
> If a model row contains a `null` value in a model column mapped to the
> **GCLID**, **GBRAID**, or **WBRAID** fields, Hightouch ignores that value when
> syncing the row Google Ads. This process helps reduce
> [`VALUE_MUST_BE_UNSET`](#value_must_be_unset) or
> [`GBRAID_WBRAID_BOTH_SET`](#gbraid_wbraid_both_set) errors.

#### EU user consent policy

Learn more about the EU consent policy [in this section](#eu-user-consent-policy-1).

### Click conversion adjustments

After sending a click conversion to Google Ads, you can [adjust the conversion](https://support.google.com/google-ads/answer/7686447) later by sending a click conversion adjustment.
Wait at least 24 hours after a click conversion is reported to Google Ads before adjusting it to avoid a `CONVERSION_NOT_FOUND` or `TOO_RECENT_CONVERSION` error.
You can find more information about this on the API reference page linked in the [supported syncing](#supported-syncing) section.

#### Select conversion action and adjustment type

Select the **conversion action** you previously set up in your Google Ads account.
The dropdown menu displays the conversion action IDs present in your Google Ads account.

You also need to select the adjustment type. You can choose from:

* [Retraction](https://support.google.com/google-ads/answer/7686447)
* [Restatement](https://support.google.com/google-ads/answer/7686447)
* [Enhancement](https://support.google.com/google-ads/answer/13261987)

![Select conversion action and adjustment type](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-select-conversion-action-adjustment.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=cd5b4382d07ad567a4428e11b45ea9d5)

> [!NOTE]
>
> Enhancements are also referred to as **Enhanced conversions for web**. They
> are not **Enhanced conversions for leads**, which are described in the
> [Syncing click conversions](#user-identifiers-1) section.

If you select the **Enhancement** adjustment type, you need to select if this is a first party or third party data upload.

![First or third party data upload](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-first-third-party-data-1.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=20b4dc8a976355048d3124d6deecbbcd)

#### Field mapping

Select which columns to sync from your source to Google Ads' fields:

* **GCLID**
* **Conversion time**
* **Adjustment time**
* **Order ID**

If you select the **Retraction** adjustment type, you can only map those fields.

![Retraction field mapping](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-field-mapping-adjustment-retraction.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=71a6853374d887ff9c16e49fa5019676)

If you select the **Restatement** adjustment type, you can map those four fields plus:

* **Restatement value**, which is mandatory
* **Restatement currency**

![Restatement field mapping](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-field-mapping-adjustment-restatement.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=d80ea06408f2888b28baaf7d555c7ad3)

If you select the **Enhancement** adjustment type, you can map those four fields plus:

* **Enhancement User Agent**
* various hashed fields: **Email**, **Phone**, **First Name**, **Last Name**, **Street Address**
* **Country**
* **Postal Code**
* **State**
* **City**

![Enhancement field mapping](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-field-mapping-adjustment-enhancement.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=53858d62c4c4ecf303c769bc94ccdefb)

#### Handling PII and hashing

You can find more information about this in the [PII and hashing](#handling-pii-and-hashing) section.

### Call conversions

Google Ads allows you to import phone call conversions to keep track of how your calls impact your ad campaigns.
After setting up [phone call conversions](https://support.google.com/google-ads/answer/6275629), you can use Hightouch to sync your data to Google Ads.
You can find more information about this on the API reference page linked in the [supported syncing](#supported-syncing) section.

#### Select conversion action

Select the **conversion action** you previously set up in your Google Ads account.
The dropdown menu displays the conversion action IDs present in your Google Ads account.

![Select conversion action](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-select-conversion-action.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=765a94446802b09bdd63679c5c2974ba)

#### Field mapping

Select which columns to sync from your source to Google Ads' fields.
**Conversion time**, **Caller ID**, and **Call start time** are mandatory fields.

![Call conversion field mapping](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-field-mapping-call-conversions.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c0d2e4e9f86c21350d12fad14006e251)

#### EU user consent policy

Learn more about the EU consent policy [in this section](#eu-user-consent-policy-1).

### Offline store conversions

> [!NOTE]
>
> **Offline store conversions** are not [offline click
> conversions](#offline-click-conversions).

Google Ads offers enhanced store sales measurement and reporting data to better optimize your online ads.
After setting up [offline store sales conversions](https://support.google.com/google-ads/answer/9995886), you can use Hightouch to sync your data to Google Ads.
You can find more information about this on the API reference page linked in the [supported syncing](#supported-syncing) section.

If your destination uses **Data Manager API OAuth**, offline store sales syncs run through the [Data Manager API](#migrate-to-data-manager-api). The sync configuration is the same either way.

#### Select conversion action

Select the **conversion action** you previously set up in your Google Ads account.
The dropdown menu displays the conversion action IDs present in your Google Ads account.

![Select conversion action](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-select-conversion-action.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=765a94446802b09bdd63679c5c2974ba)

#### Optional settings

You can decide if you would like to include the following information:

* **custom key**, to segment store sales conversions
* **loyalty fraction**, which is a decimal value that sets the percentage of overall sales that can be associated with a customer
* **transaction upload fraction**, which is a decimal value that sets the percentage of overall sales with customer information that are already uploaded to Google Ads

![Offline store conversions optional settings](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-offline-store-conversions-optional.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e9ebfd4e66c3dfd3fdfcf7836fd72689)

#### First or third party data

You need to select if this is a first party or third party data upload.

![First or third party data upload](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-first-third-party-data-2.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f1ef00de3bf5032b46e3309c4a7304fb)

#### Field mapping

Select which columns to sync from your source to Google Ads' fields.
**Transaction time** and **Transaction amount (micros)** are mandatory fields.

![Offline store conversions field mapping](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-google-ads-field-mapping-offline-store-conversions.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c860941ace686aa6b158c7ed9a75c59f)

> [!NOTE]
>
> Any transaction amount here should be in the unit **micros**. For example,
> \$200 = 200000000.

#### EU user consent policy

Learn more about the EU consent policy [in this section](#eu-user-consent-policy-1).

#### Handling PII and hashing

You can find more information about this in the [PII and hashing](#handling-pii-and-hashing) section.

#### Cleaning your data

You can find more information about this in the [Cleaning your data](#cleaning-your-data) section.

## Migrate to Data Manager API

Google is centralizing data delivery on the Data Manager API. You can migrate supported syncs to the Data Manager API without replacing destinations, recreating audiences, or rebuilding syncs. Read the [launch article](https://hightouch.com/blog/introducing-google-data-manager-api) for more background.

### Why migrate

![Separate integrations vs. the unified Data Manager API](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/google-data-manager-migration/google-data-manager-api-migration-diagram.webp?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=ffa53c15ab61c94802c9f99d5f278766)

Google is shifting investment from the legacy Google Ads and DV360 APIs to the Data Manager API. Migrating gives you:

* **Unified endpoint**: One delivery path instead of multiple specialized connections.
* **Simpler maintenance**: Less setup and fewer ongoing configuration changes.
* **Better match quality**: Richer customer match data improves attribution and audience reach.
* **Privacy-enhancing technology**: Confidential matching and encryption built into the API.

### What you can migrate today

Hightouch supports migrating these Google Ads sync types to the Data Manager API:

* **Customer Match user lists** — Create and maintain customer match lists.
* **Click conversions** — Import conversions from ad clicks, including offline click conversions.
* **Offline store conversions** — Import offline store sales transactions.

Coverage expands as Google adds use cases to the Data Manager API. Hightouch continues to support legacy Google Ads and DV360 integrations while it does.

### Hightouch can migrate you automatically

Google advises its partners to move existing integrations onto the Data Manager API so customers keep getting new features. To follow that guidance, Hightouch can migrate a destination programmatically, even if its **Authentication method** still shows **OAuth (Legacy)**. Your destination, syncs, and field mappings don't change, and syncs keep running on their existing schedule.

To migrate on your own schedule instead, follow the steps in the next section.

### Migrate a destination yourself

Migration doesn't require a new destination or new syncs. When you reauthenticate an existing Google Ads destination with the Data Manager API OAuth method, Hightouch moves your supported syncs to the new API automatically. Sync behavior remains the same after migration.

1. In Hightouch, go to the [**Destinations** overview page](https://app.hightouch.com/destinations?from=docs) and select your existing Google Ads destination.

   ![Destinations list filtered to Google Ads](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/google-data-manager-migration/destinations-list.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f80a079d294d9f8cab427d7bdfcc530b)

2. Under **Authentication method**, select **Data Manager API OAuth**.

   ![Authentication method options showing Data Manager API OAuth selected](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/google-data-manager-migration/auth-method-selection.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=00a5dcaad4ff3cfff80ce4d7fa32003e)

3. Click **Reauthorize Google Ads**, log in with your Google account, and click **Allow**.

   ![Reauthorize Google Ads button](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/google-data-manager-migration/reauthorize-button.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=36ebc9e7ad551b1530498ea9e60122b6)

4. Click **Save Changes**.

After you save, your existing syncs for the [supported sync types](#what-you-can-migrate-today) use the Data Manager API. You don't need to update any sync configurations.

## Tips and troubleshooting

To see the exact API requests and responses from each sync run, use the [live debugger](https://docs.hightouch.com/syncs/debugger.md). To get notified by Slack, PagerDuty, SMS, or email when a sync fails, set up [sync alerts](https://docs.hightouch.com/syncs/alerting.md). If you run into an issue this page doesn't cover, [contact support](#pylon-chat).

> [!NOTE]
>
> For Hightouch platform error codes related to Google Ads, see [Error codes:
> Google Ads](https://docs.hightouch.com/developer-tools/error-codes.md#google-ads).

### Matched users count

Below only applies to the customer match user list sync type.

Hightouch retrieves the audience metadata from Google Ads in real-time. The matched number displayed in Hightouch should reflect what you see in Google Ads. Note that the matched numbers are approximated to maintain privacy thresholds. Hightouch takes the matched count to calculate a match rate for your sync, where applicable. The calculation breakdown:

`matched_user_count / # of rows queried in the latest sync run`

The match rate is **not** calculated when:

* syncing to an existing segment because the total number of records to ever be uploaded to the segment is unknown
* removed users from your model is not removed in Google Ads because the matched user count would be inflated in the calculation

Common causes for low match rates:

* Your audience model is too small. Most ad platforms do not display the matched number unless there's at least one thousand matched users to maintain privacy thresholds.
* The upload is still processing. We recommend waiting at least **72 hours** from the first sync run for numbers to settle.
* Your data isn’t cleaned or hashed properly. Hightouch normalizes and hashes your data according to destination requirements, but it’s still good to make sure that the data is as clean as possible. Note that Hightouch cannot clean your data if you opt to hash it yourself. In that case, ensure you follow the data cleaning requirements for Google Ads.

> [!NOTE]
>
> Google Ads contain a few different matched users count in their platform.
> Hightouch refers to the [display network
> size](https://support.google.com/google-ads/answer/117120?ctx=glossary\&sjid=7733029462129080931-NA)
> and the [search network
> size](https://support.google.com/google-ads/answer/90956?ctx=glossary\&sjid=7733029462129080931-NA).
> If the display network size is available, Hightouch displays that value, else
> the search network size is used. Google Ads also have a concept of a match
> rate but this is different than what Hightouch is calculating, which is the %
> of targetable users from your model in this GoogleAds audience. Per Google,
> ”Your Customer Match match rate is the percentage of your uploaded customer
> list that could be connected to Google users, so you can see how much of your
> list is usable. Keep in mind that your match rate is not an indicator of how
> your lists will perform, but rather an indicator of whether you're uploading
> the right data in the right way”
> ([reference](https://support.google.com/google-ads/answer/10534785?hl=en)).

### Audience uploads showing size 0

After a successful Customer Match sync, your audience in Google Ads may show a size of 0 for up to 24–48 hours. This is expected — Google Ads processes uploaded audience data asynchronously and doesn't reflect audience sizes immediately. A successful sync in Hightouch means the data was accepted by Google's API, but it takes time for Google to match and populate the audience.

## Common errors

### At least one click identifier ('gclid', 'gbraid' or 'wbraid') is required

Make sure that you mapped at least one identifier when syncing [Click conversions](#field-mapping).

### CONVERSION\_PRECEDES\_EVENT

As described in [Google Ads' documentation](https://developers.google.com/google-ads/api/reference/rpc/v24/ConversionUploadErrorEnum.ConversionUploadError#conversion_precedes_event), this error occurs if the imported event has a `conversion_date_time` that precedes the click.
To avoid this error, make sure that the timestamps in your source data and your Google Ads account have the same timezone configured.

### EXPIRED\_EVENT

As explained in [Google Ads' documentation](https://developers.google.com/google-ads/api/reference/rpc/v24/ConversionUploadErrorEnum.ConversionUploadError#expired_event), this error happens when a [click conversion](#click-conversions) can't be accepted since its click occurred before this conversion's [click-through window](https://support.google.com/google-ads/answer/3123169).

### GBRAID\_WBRAID\_BOTH\_SET

This error happens if you sync data both to the **GBRAID** and **WBRAID** fields.
You can read more about this in [Google Ads' API documentation](https://developers.google.com/google-ads/api/docs/conversions/upload-clicks).

### INCOMPATIBLE\_UPLOAD\_KEY\_TYPE

When syncing Customer Match user lists, make sure to select the correct [user list type](#user-list-type). If you selected the wrong type when setting up your sync, create a new sync with the correct type.

### INVALID\_CONVERSION\_ACTION

When syncing Click conversions, ensure that you've chosen the correct conversion type within the Google Ads UI.
For normal [Click conversions](#click-conversions), choose the **Website** type. For [Offline click conversions](#offline-click-conversions), choose the **Import** type.

Furthermore, make sure that:

* your data satisfies the requirements outlined in [this section](https://developers.google.com/google-ads/api/docs/conversions/upload-clicks#upload_clickconversion) of Google Ads' API documentation
* you selected the correct [Google Ads account](#select-account) in your sync configuration

> [!WARNING]
>
> Make sure to not confuse [Offline click
> conversions](#offline-click-conversions) with [Offline store
> conversions](#offline-store-conversions).

### INVALID\_CUSTOMER\_ID

You may receive a `400 - {"error":{"code":400,"message":"Request contains an invalid argument."..."message":"Invalid customer ID...}` error message because you are attempting to sync to a Google account that is different from the initial sync.

If there has been a successful initial sync with sync configurations of `Customer Match User List` and `Create a new user list`, changing the Google account will result in sync failure on the next run. You can resolve the error by either:

* Selecting the original Google account that was used on the initial sync
* Creating a new sync and selecting the new Google Account

### INVALID\_GRANT

The token for the user that connected the Google Ads destination has expired or revoked. Please re-auth within the destination settings.

### No error message provided

This error can happen if you [rename a model column](https://docs.hightouch.com/syncs/mapping-data.md#model-column-changes) after adding it as a field mapping in your sync configuration.
To resolve this, update your field mappings to contain the updated model column names.

### REQUIRED\_FIELD\_MISSING

[Customer Match user lists](#customer-match-user-lists) require at least one personal identifier. Check the required fields relevant for the match list type you've chosen.

### PERMISSION\_DENIED from Data Manager API

You may receive a `403 - {"error":{"code":403,"message":"The caller does not have permission","status":"PERMISSION_DENIED","domain":"datamanager.googleapis.com"}}` error when syncing to Google Ads.

This occurs when Hightouch creates the partner link during a sync run but the authenticating user doesn't have **Admin** access on the Google Ads account. Google Data Manager checks access against the login account, which in manager-account setups is the manager (MCC) account. A user with a lower access level, such as Standard, can sign in successfully but can't create the partner link.

To verify the access level:

1. Go to your Google Ads account.
2. Open **Access and security**.
3. Open the **Users** tab.
4. Turn off the **Show users in full hierarchy** toggle.
5. Confirm the authenticating user is listed directly on the manager (MCC) account.
6. Confirm the user's access level is **Admin**. For more on access levels, see Google's [access levels](https://support.google.com/google-ads/answer/9978556) documentation.

If the user isn't an Admin, upgrade the access level and rerun the sync, or re-authorize the destination with a different user who has Admin access. If you can't grant Admin access, create the partner link manually and switch to the [**Data Manager API (Existing Partner Link)**](#data-manager-api-existing-partner-link) authentication method instead.

### UNAUTHORIZED\_CUSTOMER

This error occurs when you try syncing a [click conversion](#click-conversions) to Google Ads that is associated with a different ad account. This commonly happens when importing click conversions from campaigns running under a different sub-account within the same manager account hierarchy.

To resolve this error, verify that the Google Ads customer ID in your sync configuration matches the account that owns the click. If you need to sync click conversions from different ad accounts without using separate syncs, set up a manager account and enable [cross-account conversion tracking](https://support.google.com/google-ads/answer/3030657).

### VALUE\_MUST\_BE\_UNSET

This error happens if you:

* sync data to the **GCLID** field and also to the **GBRAID** or **WBRAID** fields
* sync data to [custom conversion variables](#custom-conversion-variables) and also to the **GBRAID** or **WBRAID** fields

You can read more about this in [Google Ads' API documentation](https://developers.google.com/google-ads/api/docs/conversions/upload-clicks).
