# google_ads_upload_customer_match

> Add or remove Customer Match members on a CONTACT_INFO user list of the selected customer, through one OfflineUserDataJob (create, add operations, run).

[Documentation](https://www.getmcpads.com/docs) / [Sources](https://www.getmcpads.com/docs/sources) / [Google Ads](https://www.getmcpads.com/docs/sources/google-ads)

Add or remove Customer Match members on a CONTACT_INFO user list of the selected customer, through one OfflineUserDataJob (create, add operations, run). Emails and international phones are normalized and SHA-256 hashed by the server as Google documents; the preview and the answer carry counts, never the values. Google processes the job asynchronously: read offline_user_data_job.status, then user_list.size_range_for_search, with google_ads_run_gaql. Google requires the account's Customer Match terms and policy eligibility, and since 1 April 2026 refuses this API for developer tokens without earlier Customer Match uploads (Data Manager API instead). Preview returns planHash; confirm requires the matching expectedPlanHash. No automatic retry.

> **Warning** This tool changes the account. It is absent from the tool list on the Free plan, and it previews by default: without `confirm: true` it describes the change and applies nothing.

|  |  |
| --- | --- |
| Source | [Google Ads](https://www.getmcpads.com/docs/sources/google-ads) |
| Kind | Write |
| Discovery | Reachable through `search_tools` and `run_tool` |
| Account parameter | `customerId` |
| Endpoint | https://mcp.getmcpads.com/google-ads/mcp |

## Parameters

| Name | Type | Required | Notes |
| --- | --- | --- | --- |
| `customerId` | string | Required | Selected Google Ads customer ID, not the manager account. |
| `currency` | string | Required | Actual account currency as a three-letter ISO code; verified natively before writes. |
| `loginCustomerId` | string | Optional | Optional MCC ID; defaults to the selected account's inferred manager. |
| `testAccountOnly` | boolean | Optional | Require customer.test_account=true before writing. |
| `confirm` | boolean | Optional | Apply only when true and expectedPlanHash matches the exact preview. |
| `expectedPlanHash` | string | Optional | SHA-256 planHash from the preview of this exact request, required for application. |
| `userListId` | string | Required | Numeric ID of a CONTACT_INFO Customer Match list owned by this customer. |
| `operation` | string | Optional | add uploads members; remove takes them off the list. One of: `add`, `remove`. Default: `"add"`. |
| `members` | array | Required | People who agreed to it: an email and/or an international phone each. The server normalizes and hashes them with SHA-256; raw values are never sent to Google, returned or logged. |
| `consent` | object | Required | Consent of the uploaded people, required by Google for EEA users. DENIED means Google does not use them. |

## Calling it

Through run_tool, since it is not announced

```json
{
  "name": "run_tool",
  "arguments": {
    "name": "google_ads_upload_customer_match",
    "args": {
      "customerId": "<string>",
      "currency": "<string>",
      "userListId": "<string>",
      "members": "<array>",
      "consent": "<object>"
    }
  }
}
```

- [Google Ads metrics](https://www.getmcpads.com/docs/sources/google-ads/metrics): What you can ask for.
- [Google Ads dimensions](https://www.getmcpads.com/docs/sources/google-ads/dimensions): How you can break it down.

---

This page as HTML: https://www.getmcpads.com/docs/sources/google-ads/tools/google_ads_upload_customer_match
Every page under /docs is available as Markdown: append `.md`, or send `Accept: text/markdown`.
