Skip to Content
Tool referenceManage Google Ads extensions

Manage Google Ads extensions (adsap_google_manage_extension)

Platform: Google Ads · Read or write: Write · Plan: Early Access · Consumes a task: Yes · Preview supported: Yes

What it does

Manages Google Ads extensions: sitelinks, callouts, structured snippets, call, promotion and price. It creates and links new extensions to a campaign in one call, links or unlinks existing ones, or edits an existing asset. Links live at campaign level by default or at account level for every eligible campaign. Ask for a preview before creating.

When to use it

  • Use create_and_link to write new extensions and attach them in one call, up to 20 at a time. Each item in extensions carries a type and the fields for that type.
  • link and unlink work on assets that already exist. They take links, up to 20 pairs of asset_id and field_type. Find both with adsap_google_list_extensions.
  • update_asset needs asset_id, type and at least one field to change. The edit shows everywhere the asset is linked.
  • campaign_id is required at the default level, campaign. With level set to account, leave campaign_id out.
  • It supports a preview call. Each call is all or nothing: if Google rejects one item, nothing is applied.

Worked example

You ask

“Preview adding the callouts Free shipping and 30-day returns, plus a Sale sitelink, to campaign 21000000001 in Google Ads account 1234567890.”

The assistant calls adsap_google_manage_extension

{ "ad_account_id": "1234567890", "op": "create_and_link", "campaign_id": "21000000001", "extensions": [ { "type": "callout", "callout_text": "Free shipping" }, { "type": "callout", "callout_text": "30-day returns" }, { "type": "sitelink", "link_text": "Sale", "final_url": "https://www.example.com/sale" } ], "dry_run": true }

Adsap returns

The field names are the ones Adsap returns. The values are examples.

{ "ok": true, "dry_run": true, "platform": "google", "action": "assets_mutate", "op": "create_and_link", "level": "campaign", "campaign_id": "21000000001", "results": [], "count": 3, "google_validation": "passed" }

How to read it

google_validation reads passed because Google checked all three extensions and their campaign links and accepted them. count is the number of extensions in the request. results stays empty in a preview, because nothing was created. level shows where the links would live. If Google rejects the request, ok is false and an error object carries Google’s message.

The response also carries a human_readable_summary sentence, left out of this example. To create the extensions, the assistant repeats the call with dry_run set to false. results then holds one row per extension with its new asset_id.

Parameters

Descriptions are shortened from the tool schema. Your assistant sees the full text.

NameTypeRequiredDescription
ad_account_idstringYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
opone of create_and_link, link, unlink, update_assetYes
dry_runbooleanNoPreview only: the request is validated and the resolved payload returned, nothing is created or changed.
levelone of campaign, accountNoWhere the link lives: ‘campaign’ (default, requires campaign_id) or ‘account’ (no campaign_id: the extension serves with all eligible campaigns; unlink at the same level to stop it). Ignored for update_asset.
campaign_idstringNoNumeric Google Ads campaign id. Required for create_and_link / link / unlink at level ‘campaign’; must be OMITTED at level ‘account’; ignored for update_asset.
extensionsarray of objectNocreate_and_link only: 1-20 new extensions to create and link to the campaign, discriminated on type.
linksarray of objectNolink / unlink only: 1-20 existing (asset_id, field_type) pairs to attach to / detach from the campaign.
links[].asset_idstringYesExisting asset id (from adsap_google_list_extensions or adsap_google_upload_asset).
links[].field_typeone of SITELINK, CALLOUT, STRUCTURED_SNIPPET, CALL, PROMOTION, PRICE, AD_IMAGEYesThe asset’s field type: must match the asset. AD_IMAGE is allowlist-gated by Google (expect UNSUPPORTED_FIELD_TYPE on most accounts).
asset_idstringNoupdate_asset only: the existing asset to edit (from adsap_google_list_extensions).
typeone of sitelink, callout, structured_snippet, call, promotion, priceNoupdate_asset only: the asset’s extension type: selects which of the flat per-type fields below apply. Image assets are NOT updatable.
link_textstringNoupdate_asset (sitelink): new display text (1-25 chars).
final_urlstringNoupdate_asset (sitelink/promotion): new destination URL.
final_mobile_urlstringNoupdate_asset (sitelink/promotion): new mobile destination URL.
description1stringNoupdate_asset (sitelink): new first description (set BOTH descriptions or NEITHER).
description2stringNoupdate_asset (sitelink): new second description (set BOTH descriptions or NEITHER).
callout_textstringNoupdate_asset (callout): new callout text (1-25 chars).
headerone of Brands, Amenities, Styles, Types, Destinations, Services, Courses, Neighborhoods and 5 moreNoupdate_asset (structured_snippet): new header (fixed Google vocabulary).
valuesarray of stringNoupdate_asset (structured_snippet): new full set of 3-10 values (replaces the existing set).
phone_numberstringNoupdate_asset (call): new phone number.
country_codestringNoupdate_asset (call): new 2-letter country code.
promotion_targetstringNoupdate_asset (promotion): new promotion target.
percent_offnumberNoupdate_asset (promotion): new percent discount (20 = 20% off). Mutually exclusive with money_amount_off.
money_amount_offanyNoupdate_asset (promotion): new fixed discount. Mutually exclusive with percent_off.
promotion_codestringNoupdate_asset (promotion): new promo code. Mutually exclusive with orders_over_amount.
orders_over_amountanyNoupdate_asset (promotion): new minimum order value. Mutually exclusive with promotion_code.
occasionone of BACK_TO_SCHOOL, BLACK_FRIDAY, BOXING_DAY, CARNIVAL, CHINESE_NEW_YEAR, CHRISTMAS, CYBER_MONDAY, DIWALI and 29 moreNoupdate_asset (promotion): new occasion.
language_codeanyNoupdate_asset (promotion/price): new BCP 47 language tag.
start_datestringNoupdate_asset (promotion): new serving start date.
end_datestringNoupdate_asset (promotion): new serving end date.
redemption_start_datestringNoupdate_asset (promotion): new redemption window start.
redemption_end_datestringNoupdate_asset (promotion): new redemption window end.
price_typeone of BRANDS, EVENTS, LOCATIONS, NEIGHBORHOODS, PRODUCT_CATEGORIES, PRODUCT_TIERS, SERVICES, SERVICE_CATEGORIES and 1 moreNoupdate_asset (price): new price table type.
price_qualifierone of FROM, UP_TO, AVERAGENoupdate_asset (price): new qualifier (FROM / UP_TO / AVERAGE).
price_offeringsarrayNoupdate_asset (price): new FULL set of 3-8 rows (replaces the existing set).

Example prompts

  • “Add four sitelinks to my Search campaign Summer Sale: Shop Men, Shop Women, Sale, Contact.”
  • “Add the callouts ‘Free shipping’ and ‘30-day returns’ to every campaign in the account.”
  • “Change the promotion extension to 25 percent off and end it on October 31.”
  • “Stop the sitelink ‘Sale’ from showing on the Brand campaign.”

Notes

Google Ads assets cannot be deleted, so unlink is how you stop one serving. Assets are account-scoped: editing one changes it everywhere it is linked. Image extension links through the API are gated by Google and fail on most accounts.

  • adsap_google_create_ad_group: Add an ad group to an EXISTING Google Ads campaign (Search, Display or Demand Gen) in ONE atomic request: the ad group, optional keywords…
  • adsap_google_list_extensions: List the extensions (sitelinks, callouts, structured snippets, call, promotion, price, image/AD_IMAGE) linked to Google Ads campaigns AND…
  • adsap_google_list_feed_labels: List the distinct Merchant Center feed labels visible to a Google Ads account (from the products synced via its Merchant Center link).

Guide

Read Extensions for the workflow around this tool, and the Tool reference for every tool.

The Google Ads MCP server  page shows how to connect Google Ads to Claude, ChatGPT or Perplexity.

Last updated on