Manage Google Ads Targeting
adsap_google_manage_targetingManage 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
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| mode | No | Audience targeting setting: 'targeting' narrows delivery to the attached audiences; 'observation' keeps full reach (bid adjustments only). Combinable with an audience add, or standalone. | |
| level | No | Where the criteria live. Default 'campaign'. 'ad_group' = audience adds on an ad group (pass ad_group_id), or removes of ad-group criteria. | |
| dry_run | No | ||
| audiences | No | op 'add': audiences to attach or exclude. Cannot be combined with geo_targets/languages in the same call. | |
| languages | No | op '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_id | No | op 'add' with level 'ad_group': the EXISTING ad group to attach audiences to. | |
| campaign_id | No | op 'add' at campaign level: the EXISTING campaign to add targeting to. | |
| geo_targets | No | op 'add': locations to target (or exclude via negative: true). Resolve names to ids with adsap_google_search_geo_targets first. | |
| criterion_id | No | op '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_id | Yes | Bare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix. |