Skip to main content
Glama

Manage Google Ads Targeting

adsap_google_manage_targeting

Manage a Google Ads campaign or ad group's targeting AFTER creation: GEO, LANGUAGE and AUDIENCES. op 'add' at campaign level (default): up to 100 locations (negative: true = exclude) and/or 50 languages, OR up to 50 audiences (audiences cannot combine with geo/languages in one call — separate calls). op 'add' at ad-group level (level: 'ad_group' + ad_group_id): audiences only. AUDIENCES: pass user_list_id items (audience segments from adsap_google_list_audiences) — campaign-level TARGETING works on Search/Shopping only; campaign-level EXCLUSION (negative: true) also on Display/Performance Max; ad-group level (target or exclude) on Search/Display/Shopping. DEMAND GEN is different: pass audience_id items (Audience resources) on the AD GROUP — nothing at campaign level. Video supports no audience edits. The same user list cannot be attached at BOTH campaign and ad-group level. 'mode' ('targeting' = narrow delivery to the audiences | 'observation' = full reach, bid adjustments only) sets the audience targeting setting — combinable with the audience add or standalone; Google's default with NO mode set is TARGETING, so pass mode: 'observation' for Search/Shopping unless the user explicitly wants to narrow reach. op 'remove': remove ONE criterion by composite id ":" (level 'campaign' → campaign criterion, 'ad_group' → ad-group criterion). Geo/language criterion ids EQUAL their constant ids (France on campaign 123 = "123:2250"); AUDIENCE criterion ids are Google-internal — capture them from the add response (created_criteria[].entity_id). Criteria are immutable: to change one, remove it and add the replacement. Always dry_run: true first. For campaign negative KEYWORDS use adsap_google_manage_keywords op 'add_negative'.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
opYes
modeNoAudience targeting setting: 'targeting' narrows delivery to the attached audiences; 'observation' keeps full reach (bid adjustments only). Combinable with an audience add, or standalone.
levelNoWhere the criteria live. Default 'campaign'. 'ad_group' = audience adds on an ad group (pass ad_group_id), or removes of ad-group criteria.
dry_runNo
audiencesNoop 'add': audiences to attach or exclude. Cannot be combined with geo_targets/languages in the same call.
languagesNoop 'add': language constant ids (e.g. 1000 = English, 1002 = French). No language criteria on a campaign = all languages. NOT for Search campaigns: Google removes Search language targeting in late September 2026 (Google rejects the add with OPERATION_NOT_PERMITTED_FOR_CONTEXT; Search ads match on the language of the ad itself). Still valid on Display and Performance Max (non-Search channels).
ad_group_idNoop 'add' with level 'ad_group': the EXISTING ad group to attach audiences to.
campaign_idNoop 'add' at campaign level: the EXISTING campaign to add targeting to.
geo_targetsNoop 'add': locations to target (or exclude via negative: true). Resolve names to ids with adsap_google_search_geo_targets first.
criterion_idNoop 'remove' only: the criterion as "<parent_id>:<criterion_id>" — campaign id for level 'campaign', ad group id for level 'ad_group'. Geo/language/audience criteria only — campaign negative keywords are removed via adsap_google_manage_keywords.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and succeeds. It reveals critical behavioral traits: criteria are immutable and must be removed then re-added, geo/language criterion ids equal constant ids while audience criterion ids must be captured from the add response, Google's default mode is targeting when no mode is set, and dry_run should always be true first. These go far beyond any schema and fully inform the agent of side effects and response expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but information-dense with no filler. Every sentence adds a distinct constraint, example, or routing rule. The most important scoping statement is front-loaded, and dense clauses like 'GEO, LANGUAGE and AUDIENCES' are immediately followed by operation-specific rules. This is justified complexity for an 11-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with no output schema, the description covers all invocation-critical aspects: ops, levels, combination constraints, product-type restrictions, Demand Gen exceptions, removal id mechanics, immutability, dry-run guidance, and sibling routing. It even references the add response field created_criteria[].entity_id, giving the agent the information needed to capture audience criterion ids for later removes. Nothing necessary for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema description coverage is high (82%), the description adds substantial meaning beyond the schema: the difference between user_list_id and audience_id (Demand Gen), the composite criterion_id format '<parent_id>:<criterion_id>', the rule that audiences cannot combine with geo/languages in one call, and the fix for search-language targeting deprecation. It also ties parameters to sibling tools like adsap_google_list_audiences and adsap_google_search_geo_targets, making parameter values reliably discoverable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair ('Manage a Google Ads campaign or ad group's targeting AFTER creation') and names the exact scope: GEO, LANGUAGE, and AUDIENCES. It clearly distinguishes itself from the sibling adsap_google_manage_keywords by explicitly routing campaign negative keywords to that tool, so an agent can select the right tool without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: after campaign creation, for add/remove of geo/language/audience criteria, and with channel-specific rules (Search/Shopping, Display, Performance Max, Demand Gen, Video). It also provides an explicit when-not-to-use by stating 'Video supports no audience edits' and directing campaign negative keyword removal to adsap_google_manage_keywords op 'add_negative'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources