> ## 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.

# Negative keyword coverage

> Read live Google Ads negative coverage for Search campaigns without adding or removing keywords

Read which negatives are actually on a Search campaign in the connected Google Ads account:

```bash theme={null}
erdo paid-media negative-coverage --provider google_ads --customer-id 1234567890 --campaign-id 24211932164 --json
```

The equivalent REST request is:

```http theme={null}
POST /v1/paid-media/negative-coverage
Authorization: Bearer <api-key>
X-Organization-ID: <organization-id>
Content-Type: application/json

{"provider":"google_ads","customer_id":"1234567890","campaign_id":"24211932164"}
```

MCP exposes `erdo_audit_paid_media_negative_coverage` in the `ads` toolset. Add `X-Erdo-MCP-Toolsets: ads`, or `?toolsets=ads` on the MCP URL. Calling the native action name `audit_google_ads_negative_coverage` on the MCP gateway returns unknown tool. Use this tool, or `run_integration_action` inside an Erdo agent run.

Omit `campaign_id` to read Search campaigns in the account. The read stops at 25 campaigns and sets `truncated`. One `offer_context` applies to every campaign in the call, so mixed offers need separate calls. Without `offer_context` the result inventories the live scopes and does not call a term missing.

The read uses the connected account. It leaves keywords, shared lists, bids, budgets, goals, and campaign status as they are. Adding missing negatives stays on the approval-gated reconcile action inside an Erdo agent run.

## Reading the result

| Field | Meaning |
| - | - |
| `customer_id` | The account that was read. |
| `truncated` | True when more than 25 Search campaigns were in scope. |
| `read_note` | Coverage comes from the live API. A failed scope is unknown, not empty. |
| `campaigns[].coverage` | `context_required` when no `offer_context` was supplied: the scopes are the live inventory and no term is called missing. `missing` when a required term is absent from campaign criteria, account negatives, and an attached shared list. `unknown` when a scope that could hide the term could not be read. Ad-group negatives alone do not cover the campaign. |
| `campaigns[].scopes` | `campaign_criteria`, `ad_group_criteria`, `customer_negatives`, `shared_sets`, `shared_set_attachments`, and `shared_set_members`, each with its own status. |
| `campaigns[].missing` | Terms the offer still needs. Empty when no offer was supplied. |
| `campaigns[].detached_shared_sets` | Class lists that exist in the account and are not attached to this campaign. |
| `campaigns[].removes` | Always empty. This read has no removal list. |


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