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

# Audience readiness

> Read live Google Ads audience lists, eligibility and campaign attachments without changing campaigns or spend

Read audience evidence from the connected Google Ads account:

```bash theme={null}
erdo paid-media audiences --provider google_ads --customer-id 1234567890 --json
```

The equivalent REST request is:

```http theme={null}
GET /v1/paid-media/audiences?provider=google_ads&customer_id=1234567890
Authorization: Bearer <api-key>
X-Organization-ID: <organization-id>
```

MCP exposes `erdo_list_paid_media_audiences` with `provider` and `customer_id`.
The native Google Ads action is `get_google_ads_audience_readiness` with
`customer_id`. Omit the customer ID to use the connection's selected operating
account. A manager connection requires an accessible client customer ID.
`google_ads` is the default and currently the only supported provider.

All surfaces use the same provider reader. They do not create audiences,
attach lists, change targeting, enable campaigns or increase spend.

## Reading the result

| Field | Meaning |
| - | - |
| `status` | `complete`: all four supported resource reads succeeded; `partial`: some failed or were withheld; `unavailable`: none succeeded. This is read coverage, not campaign readiness. |
| `list_presence` | `present` or `missing` after a successful list read; `unknown` if the read failed or tenancy prevents it. |
| `attachment_state` | `targeting` if an enabled positive USER\_LIST criterion uses targeting; otherwise `observation` if one uses observation; `inactive` when only paused, removed or negative links were returned; `none` when both attachment reads returned no links; `unknown` if either read failed. |
| `lists` | IDs, names, list types, membership status/lifespan, estimated Search/Display sizes, per-network eligibility, access reason and prepopulation state. |
| `attachments` | Campaign/ad-group IDs and names, their enabled states, criterion status, negative flag, list resource name, `TARGETING`/`OBSERVATION`, and effective `enabled`. `delivery_verified` is always false. |
| `reads` | One entry each for `user_list`, `campaign_criterion`, `ad_group_criterion`, and `recommendation`: `available`, `unavailable`, or `failed`, with the reason in `error`. |
| `recommendation_types` | Distinct types of undismissed Google recommendations. Their presence is advice, not proof of Customer Match eligibility; absence is not proof of readiness. |
| `customer_match` | `status: unavailable` and an explanation of the account-setting visibility gap. |
| `facts` | A concise explanation of coverage and the evidence's limits. |

Sizes, lifespan and eligibility can be `null`: an unknown estimate is not zero,
and unknown eligibility is not false. `population_state` is `collecting` when
Google reports prepopulation `REQUESTED`, `populated` when either reported size
is positive, `open_empty` when both are zero on an open list, `closed` for a
closed list, and `unknown` otherwise. An open empty list does not establish that
new visits are reaching it. Membership lifespan is the provider field; rule-based
list membership also depends on its rules.

A GA4 tag on a page does not prove that a Google Ads retargeting list exists or
is receiving visitors. Observation does not restrict reach to the audience.
Even an enabled targeting attachment does not prove impressions were delivered:
list eligibility, campaign configuration and actual delivery are separate facts.
This read does not apply a universal audience-size serving threshold.

The attachment inventory covers campaign and ad-group `USER_LIST` criteria,
including exclusions. It does not inventory Performance Max audience signals,
combined audiences or other criterion types. `none` is scoped to this inventory.

The entire read has a 45-second budget, with at most 10 seconds per provider
resource read. Partial failures remain in the response instead of turning into
an empty successful inventory. Connection or account-resolution failures return
an API error; inspect both the HTTP result and the response's `status`/`reads`.

## Shared-account privacy

The selected connection still controls which Google Ads customers can be read.
Within a shared customer account, attachment queries are restricted to this
organization's owned campaigns. Account-wide user lists and recommendations
are withheld because Erdo cannot prove audience ownership there. The result
reports `list_presence: unknown`, never `missing`. List references on owned
campaigns can be returned, but other tenants' list names, sizes and eligibility
are not fetched.

## Customer Match capabilities

Google Ads v25 does not expose a customer field for the conversion-based
customer-list opt-in or general Customer Match eligibility. Accepted customer
data terms and per-list eligibility are different facts. This read cannot enable
or verify the opt-in. Google documents the setting in the Google Ads interface:
Admin → Account settings → Customer match → Conversion-based customer lists.
See [Google's setup instructions](https://support.google.com/google-ads/answer/13471685)
and the [v25 customer field reference](https://developers.google.com/google-ads/api/fields/v25/customer).

Google recommends Data Manager API for new Customer Match integrations. Its
`accountTypes.accounts.userLists.create` creates the list, and
`audienceMembers.ingest` uploads members to the destination list. These are
separate operations, requiring the Data Manager OAuth scope and appropriate
account access. Contact-based lists use `ingestedUserListInfo` with
`uploadKeyTypes: ["CONTACT_ID"]` and first-party `contactIdInfo`; uploads carry consent, accepted Customer Match terms and correctly
normalized/hashed identifiers.
See [Google's recommendation](https://support.google.com/google-ads/answer/10550383),
[list creation](https://developers.google.com/data-manager/api/reference/rest/v1/accountTypes.accounts.userLists/create),
[member ingestion](https://developers.google.com/data-manager/api/reference/rest/v1/audienceMembers/ingest),
and [Customer Match field mappings](https://developers.google.com/data-manager/api/devguides/audiences/google-ads/customer-match/upgrade/field-mappings).

Erdo's existing native audience creator builds rule-based website lists. Its
Data Manager integration handles conversion events, not Customer Match list
creation or member ingestion. Those two approval-governed capabilities are
not implemented by this read endpoint. There is no automatic opt-in toggle,
Customer Match upload or audience attachment hidden in the readiness call.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.