> For the complete documentation index, see [llms.txt](https://docs.chord.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chord.co/activate/event-streaming/destinations/advertising/google-ads/google-ads-conversions.md).

# Google Ads Conversions

**Google Ads** is Google's advertising platform. The **Google Ads Conversions** destination sends conversions to Google Ads from Chord's servers, so purchases still count when a browser blocks the Google tag or the order is completed somewhere the tag can't run.

It is the server version of the [Google Ads Gtag](/activate/event-streaming/destinations/advertising/google-ads/google-ads-gtag.md) destination, and is designed to run alongside it. See [Google Ads](/activate/event-streaming/destinations/advertising/google-ads.md) for how the two fit together.

This destination uses Google's **Data Manager API** (v1). Google closed conversion uploads through the Google Ads API to new integrations in June 2026, and recommends the Data Manager API in its place.

## Getting started

Events are sent from the server, so ad blockers and browser privacy features don't affect them.

You will need:

* The ten-digit ID of the Google Ads account that owns your conversion actions, shown at the top of the Google Ads UI (for example `123-456-7890`).
* A Google Cloud service account in a Google Cloud project you own, and its JSON key. Chord does not hold credentials for your Google Ads account.
* For each conversion action you want to send to, the **Conversion type ID** shown on its **Details** page in Google Ads (**Goals → Conversions**, then click the action). The action's **Source** must be **Website**.
* Only if you give the service account access through a manager account instead of the Google Ads account itself, the manager account's ID.

### Set up the service account

1. In the [Google Cloud console](https://console.cloud.google.com/), choose or create a project.
2. Enable the **Data Manager API** for the project.
3. Under **IAM & Admin → Service Accounts**, create a service account. It needs no Google Cloud roles.
4. Open the service account, go to **Keys → Add key → Create new key**, choose **JSON**, and download the file.
5. In Google Ads, go to **Admin → Access and security**, click **+**, and add the service account's email address (it ends in `iam.gserviceaccount.com`) with **Standard** access.

Keep the JSON key safe. Anyone with it can send conversions to your Google Ads account.

## Settings

* **Destination Name** (required): a name to tell this destination apart.
* **Customer ID** (required): the Google Ads account that owns your conversion actions, for example `123-456-7890`.
* **Manager Account ID** (optional): only if you gave the service account access through a manager account instead of the Google Ads account itself. Leave it blank otherwise.
* **Service Account Key** (required): the whole JSON key file of your service account, pasted into the field.
* **Conversions** (optional): one row per event. Enter the Chord **Event Name**, which is not case-sensitive, and the **Conversion Action ID** it should count toward. Map an event to several actions to count it in each. Events not listed here are skipped.
* **Test Mode** (optional): Google checks each request and reports problems, but records nothing. Off by default. Leave it on for your first events (see [Testing](#testing)), then turn it off.
* **Consent Requirements** (optional): the consent categories a visitor must accept before Chord sends data to this destination. See [Consent](/activate/event-streaming/consent.md).

## Connect

Add **Google Ads Conversions** from the destination catalog, using the settings above. See [Connect a destination](/activate/event-streaming/connect-a-destination.md) for the full steps.

## Event mapping

Only the events you list under **Conversions** are sent. Each goes to every conversion action it is mapped to. Event names are not case-sensitive.

| Chord event                            | Google Ads event                                       | Notes |
| -------------------------------------- | ------------------------------------------------------ | ----- |
| Any event listed under **Conversions** | An online conversion for each mapped conversion action |       |
| Any other `track` event                | Skipped, with a log line in the destination's logs     |       |
| `page`, `identify`, `group`            | Not sent                                               |       |

A typical setup maps `Order Completed` to your purchase conversion action.

## Conversion fields

| Chord source (priority order)                                                                                                                                                                                                         | Google Ads field            | Notes                                                                        |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- | ---------------------------------------------------------------------------- |
| `properties.order_id` > `properties.orderId` > `properties.id` > `properties.cart_id` > the event's message ID                                                                                                                        | `transactionId`             | Used to merge with the tag's conversion. See [Deduplication](#deduplication) |
| `timestamp`                                                                                                                                                                                                                           | `eventTimestamp`            |                                                                              |
| `Order Completed`: `properties.total` > `properties.value` > `properties.price` > the sum of each product's price times quantity > `properties.revenue`. Other events: `properties.value` > `properties.total` > `properties.revenue` | `conversionValue`           | Omitted when none is present                                                 |
| `properties.currency` > `properties.meta.i18n.currency`                                                                                                                                                                               | `currency`                  | Uppercased. Defaults to `USD`                                                |
| `gclid` on the page URL > `properties.gclid` > the Google click ID saved with the cart > the `_gcl_aw` cookie                                                                                                                         | `gclid`                     |                                                                              |
| The page URL > `properties` > the click ID saved with the cart                                                                                                                                                                        | `gbraid`, `wbraid`          |                                                                              |
| `context.ip`                                                                                                                                                                                                                          | `eventDeviceInfo.ipAddress` |                                                                              |
| `context.userAgent`                                                                                                                                                                                                                   | `eventDeviceInfo.userAgent` |                                                                              |

On Shopify, the Google click IDs reach server-side orders through the cart, so the storefront needs Chord's Shopify identifier script installed.

## Customer data

Email, phone and name are normalized as [Google specifies](https://developers.google.com/data-manager/api/devguides/concepts/formatting) and SHA-256 hashed before they leave Chord.

| Chord source (priority order)                                   | Google Ads field     | Notes                                                                                                                                                 |
| --------------------------------------------------------------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `properties.email` > `context.traits.email`                     | `emailAddress`       | Normalization: Lowercased, all whitespace removed. On `gmail.com` and `googlemail.com` only, dots and anything from `+` to `@` are removed            |
| `properties.phone` > `context.traits.phone`                     | `phoneNumber`        | Normalization: E.164 (`+18005550100`). Sent only when the number starts with `+`, because a number without a country code can't be converted reliably |
| `properties.first_name` > `context.traits.first_name`           | `address.givenName`  | Normalization: Lowercased and trimmed                                                                                                                 |
| `properties.last_name` > `context.traits.last_name`             | `address.familyName` | Normalization: Lowercased and trimmed                                                                                                                 |
| `properties.address.country` > `context.traits.address.country` | `address.regionCode` | Normalization: Two-letter country code, not hashed                                                                                                    |
| `properties.address.zipcode` > `context.traits.address.zipcode` | `address.postalCode` | Normalization: Not hashed                                                                                                                             |

The address is sent only when all four address fields are present, as Google requires. Values that are already SHA-256 hashed are passed through unchanged.

Google rejects a conversion that has none of a click ID, email, phone, address or IP address. Such events fail with an error in the destination's logs.

## Deduplication

Chord sends the order ID as `transactionId`, so Google can merge this conversion with the Google tag's conversion for the same order. See [Google Ads](/activate/event-streaming/destinations/advertising/google-ads.md#how-they-deduplicate).

## Property mappings

Google's Data Manager API accepts a fixed set of fields, so custom property mappings are not forwarded by this destination.

## Testing

With **Test Mode** on, Google checks every request and reports problems, but records nothing. Errors appear in the destination's logs in Chord with Google's explanation.

A successful test only proves the request is well-formed. Google runs some checks later, during processing, so check the conversion action's status in Google Ads after the first real conversions arrive.

## Gotchas

* **Use website conversion actions.** Google accepts these conversions only for conversion actions whose source is **Website**.
* **Google holds server-side data out of bidding for its first 14 days.** See [Google Ads](/activate/event-streaming/destinations/advertising/google-ads.md#why-use-both).
* **Service account access.** A `403` error means the Data Manager API isn't enabled in the service account's project, or the service account isn't a user of the Google Ads account.
* **Rotating the key.** Paste the new JSON key into the destination. Chord stops using the old one immediately.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.chord.co/activate/event-streaming/destinations/advertising/google-ads/google-ads-conversions.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
