> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.pivolio.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pivolio.com/_mcp/server.

# Google Ads

Pivolio delivers to Google via
`POST https://datamanager.googleapis.com/v1/events:ingest`. Connection is by
OAuth rather than a pasted key, and — unlike every other destination — Google
sends **nothing at all** until you map events to conversion actions.

> **Warning**
>
> Google Ads is **mapping-only**. A connected, enabled, fully authorized Google
> destination with no event mappings delivers zero conversions, forever, without
> erroring. Every event must point at a specific conversion action before it can
> be sent. Finish the mapping step below or the integration is decorative.

## Connect

#### Start the OAuth flow

Open **Destinations → Google Ads** and start the connect flow. You'll be
sent to Google to authorize Pivolio for AdWords and Data Manager access.
Sign in with a Google account that already has access to the Ads account you
want to feed.

#### Pick the ad account

After returning, choose the customer account from the list Pivolio fetched.
If you manage the account through an MCC, the manager account is recorded
alongside it so requests are made on the right behalf.

#### Check the customer-data terms

Pivolio reads back whether that account has accepted Google's customer-data
terms. Until it has, enhanced conversions stays disabled and cannot be
switched on — accept the terms in the Google Ads UI, then reload.

#### Map events to conversion actions

Choose which Pivolio events map to which conversion actions. You can point
at an existing action or have Pivolio create one. Nothing dispatches until
at least one mapping exists.

## Credential fields

#### customer_id

The Google Ads customer account conversions are uploaded to. Selected from
the accounts your authorized Google user can reach — not typed by hand.

#### refresh_token

Obtained through OAuth, scoped to `adwords` and `datamanager`. Stored
encrypted and never returned. If the grant is revoked in your Google account
security settings, delivery fails with an auth error and you must reconnect.

#### login_customer_id

Optional. The manager (MCC) account acting on behalf of `customer_id`. Set
automatically when the selected account is reached through a manager.

## Conversion actions and categories

The dashboard offers eight curated events, each with a sensible default
conversion category so a newly created action is typed correctly from the
start:

| Pivolio event           | Default category |
| ----------------------- | ---------------- |
| `order_completed`       | PURCHASE         |
| `lead`                  | SUBMIT_LEAD_FORM |
| `sign_up`               | SIGNUP           |
| `complete_registration` | SIGNUP           |
| `add_to_cart`           | ADD_TO_CART      |
| `begin_checkout`        | BEGIN_CHECKOUT   |
| `subscribe`             | SUBSCRIBE_PAID   |
| `start_trial`           | DEFAULT          |

Each mapping can be marked **primary** or left secondary. Primary actions are
the ones Smart Bidding optimizes toward and that count in your Conversions
column; secondary actions are recorded for reporting only. Marking every
mapping primary is the usual mistake — it tells the bidder that a cart add is
worth as much as a purchase.

## Enhanced conversions

Enhanced conversions attaches hashed customer data (email, phone, name) to the
upload so Google can match conversions it would otherwise lose. It is **opt-in
per destination and off by default**, and the toggle stays locked until the
selected account has accepted Google's customer-data terms. Turning it on is a
statement that you have the right to share that data — which is why Pivolio
will not do it for you.

## Deduplication

Every upload carries a `transaction_id`, taken from `properties.order_id` when
present and falling back to the event ID. Sending the same order twice — a
refresh on the thank-you page, a retry after a timeout — resolves to the same
transaction ID and Google counts it once. Set `order_id` on your purchase
events; without it, two genuine attempts at the same order will look like two
sales.

> **Note**
>
> Pivolio uses the Data Manager API, not the older Google Ads API
> `uploadClickConversions` method. That legacy upload path is closed to new
> integrations as of 2026, so any guide telling you to configure it no longer
> applies here.

## Related

* [Event mappings](/documentation/destinations/event-mappings)
* [Consent rules](/documentation/destinations/consent-rules)
* [Troubleshooting](/documentation/destinations/troubleshooting-delivery) — start here if Google shows events
  arriving but zero delivered.