Connect your AI Agents to Google Ads in minutes

Merge lets you securely connect your agents to Google Ads and thousands of tools instantly

Available tools

list_account_links

List a Google Ads account's third-party product links (e.g. app analytics providers). Use this to find accountlinkid before calling updateaccountlink.

create_account_link

Link a Google Ads account to a third-party mobile app analytics provider (e.g. AppsFlyer, Adjust) for conversion tracking. Use listaccountlinks first to check for an existing link to the same app.

update_account_link

Change the status of an existing account link (e.g. set to REMOVED to disable it). Use listaccountlinks to find the accountlinkid first.

create_ad_group_audience_criteria

Target or exclude audiences on an ad group: user interests, remarketing lists, or custom audiences. Batch operation. Use listuserlists for USERLIST resource names and searchgoogleads (FROM userinterest / FROM custom_audience) for the others. The audience a criterion points to is fixed at creation.

update_ad_group_audience_criterion

Change the status or bid modifier of an existing ad group audience criterion. The audience it targets cannot be changed - remove it and create a new one instead. Use searchgoogleads (FROM adgroupcriterion) to find criterion_id.

remove_ad_group_audience_criterion

Permanently remove an audience criterion from an ad group. Use searchgoogleads (FROM adgroupcriterion) to find criterion_id first.

create_ad_group_placement_criteria

Target or exclude placements on an ad group: websites, YouTube videos and channels, mobile apps, mobile app categories, or topics. Batch operation. Use searchgoogleads (FROM topicconstant / FROM mobileappcategoryconstant) for resource names. Content-label exclusions are account-wide only - use createcustomernegative_criteria.

remove_ad_group_placement_criterion

Permanently remove a placement, YouTube, mobile-app, or topic criterion from an ad group. Use searchgoogleads (FROM adgroupcriterion) to find criterion_id first.

create_ad_group_demographics

Target or exclude demographics on an ad group: age ranges, genders, parental statuses, and household income ranges. Batch operation across all four dimensions. Demographic criteria apply to Display, Video, and Demand Gen ad groups; Search ad groups support a narrower set and the API will reject unsupported combinations.

remove_ad_group_demographic_criterion

Permanently remove an age-range, gender, parental-status, or income-range criterion from an ad group. Use searchgoogleads (FROM adgroupcriterion) to find criterion_id first.

list_ad_groups

List ad groups for a customer with optional filtering by campaign and status. Use getadgroup to retrieve a specific ad group.

get_ad_group

Get details of a specific ad group.

create_ad_group

Create a new ad group within a campaign. Required: customerid, campaignid (from listcampaigns), name. Use listcampaigns to find a valid campaign_id.

update_ad_group

Update an ad group: name, status, CPC bid, tCPA/tROAS overrides, AI Max Search Term Matching, Targeting-vs-Observation modes, or tracking/URL settings. status=REMOVED deletes (not combinable with other fields). Omitted fields stay untouched; empty string/list clears. Call getadgroup first for the current targetingsetting, which is replaced wholesale. IDs: listad_groups.

list_ads

List ads for a customer with optional filtering by ad group and status. Use get_ad to retrieve a specific ad.

get_ad

Get details of a specific ad.

create_ad

Create a Responsive Search Ad. Headlines: 3-15 required (max 30 chars each). Descriptions: 2-4 required (max 90 chars each). Final URLs: at least 1. Each headline/description may be a bare string or an object with pinnedfield to pin it to a position. Use listadgroups to find adgroupid. Edit the creative afterwards with updateresponsivesearchad.

update_ad

Update an ad's status within its ad group (pause, enable, or set REMOVED to delete). This tool changes status only - to edit a responsive search ad's headlines, descriptions, pinning, or URLs use updateresponsivesearchad, which calls AdService instead. Use listads to find adid and adgroup_id.

create_responsive_display_ad

Create a Responsive Display Ad in a Display ad group. Needs at least one landscape and one square image asset - create them with createmediaasset or find them with list_assets. Defaults to PAUSED. Ad content cannot be edited after creation; create a new ad to change it.

update_responsive_search_ad

Edit a responsive search ad's creative in place: headlines and descriptions (with pinning), URL paths, final/mobile URLs, tracking template, final URL suffix, or custom parameters. List fields are REPLACED wholesale, so call getad first and send the complete list. validateonly=true policy-checks without applying. Use updatead for status. IDs: listads.

remove_automatically_created_assets

Remove specific Google-automatically-created assets (e.g. auto-generated sitelinks or callouts) from a Responsive Search Ad. Use searchgoogleads (FROM adgroupadassetview) to find which assets on an ad were automatically created before calling.

create_asset_group

Create a Performance Max asset group, the creative bundle a PMax campaign serves from. A PMax campaign cannot serve without one. Follow this with attachassetgroupasset for headlines, descriptions, images, and a logo; getassetgroupminimum_requirements lists what Google requires.

update_asset_group

Change an asset group's name, landing page URLs, display paths, or status. Its parent campaign is fixed at creation and cannot be changed. Set status=REMOVED to delete it. Use listassetgroups to find the ID.

list_asset_groups

List Performance Max asset groups, optionally filtered to one campaign or one status. Use this to find an assetgroupid for attachassetgroupasset, createassetgroupsignal, or createlistinggroup_filter.

get_asset_group

Read one Performance Max asset group, including Google's ad strength rating for it. Use listassetgroups to browse and find an assetgroupid.

attach_asset_group_asset

Attach an asset to a Performance Max asset group in a creative role such as HEADLINE, MARKETINGIMAGE, or LOGO. Create assets with createtextasset or createmediaasset. For sitelinks, callouts, and other non-PMax roles use attachasset instead.

remove_asset_group_asset

Detach an asset from a Performance Max asset group. The asset itself is not deleted. Removing an asset can drop the group below Google's required counts and stop it serving; check getassetgroupminimumrequirements first.

list_asset_group_assets

List the assets attached to a Performance Max asset group and the role each fills, optionally filtered to one role. Compare the counts against getassetgroupminimumrequirements to check the group is servable.

get_asset_group_minimum_requirements

Return Google's documented asset counts a Performance Max asset group needs to serve, per creative role. Reference data only, no API call. Compare against listassetgroup_assets to see what an asset group is still missing.

create_asset_group_signal

Add an audience or search-theme signal to a Performance Max asset group, hinting at who to reach. Signals guide Google's targeting rather than restricting it. Signals cannot be edited - remove and recreate to change one.

remove_asset_group_signal

Permanently remove an audience or search-theme signal from a Performance Max asset group. Use searchgoogleads (FROM assetgroupsignal) to find the criterion ID first.

create_listing_group_filter

Add one node to a Performance Max asset group's product filter tree, deciding which products the campaign advertises. Build trees one node per call, parent first, passing the parent's returned resource name as parentresourcename. A retail asset group needs a root node to serve.

list_listing_group_filters

List the product filter tree nodes on a Performance Max asset group, including each node's parent, so the tree's shape can be read back. Use listassetgroups to find the assetgroupid.

create_asset_set

Create an asset set (a named group of assets, e.g. a Performance Max page feed). Create the assets first with createtextasset or createmediaasset, then use addassettoset to add them and linkasset_set to attach the set to a campaign or ad group.

add_asset_to_set

Add an existing asset to an asset set. Use createassetset to create the set first, createtextasset (assettype=PAGEFEED) to create a page feed asset, and listassets to find an assetid.

link_asset_set

Link an asset set to a campaign or ad group, making its assets eligible to serve. Use createassetset to create the set first.

unlink_asset_set

Remove a campaign or ad group's link to an asset set. The asset set and its assets are not deleted, only the association.

create_text_asset

Create a reusable text asset: a sitelink, callout, structured snippet, call, plain text, or page feed URL. Attach it with attachasset, or add it to a page feed with addassettoset. Lead form, promotion, and price assets are not supported.

create_media_asset

Create an image asset from base64-encoded bytes, or reference a YouTube video as an asset. Attach it with attach_asset. Logos are images too: upload here, then attach with the LOGO role on a Performance Max asset group.

list_assets

List assets on an account, optionally filtered by type. Use this to find an assetid for attachasset, addassettoset, or createresponsivedisplayad. Use get_asset to read one asset by ID.

get_asset

Read one asset by ID. Use listassets to browse assets and find an assetid.

attach_asset

Attach an existing asset to an account, campaign, or ad group so it can serve, e.g. adding a sitelink or callout. Use createtextasset/createmediaasset/listassets for assetid. Performance Max asset-group roles attach with a different tool.

detach_asset

Permanently detach an asset from an account, campaign, or ad group so it stops serving there. The asset itself is not deleted. Supply the same scope, assetid, and fieldtype used to attach it.

list_audiences

List reusable audiences (AudienceService) for a customer, with their dimensions and exclusions. These are the modern audience objects campaigns and ad groups target. For keyword/URL interest audiences use listcustomaudiences, and for Customer Match lists use listuserlists.

create_audience

Create a reusable audience from positive dimensions (age, gender, household income, parental status, or segments) plus optional user-list exclusions. Segment values are resource names you must look up first: listuserlists, listcustomaudiences, or searchgoogleads (FROM userinterest / lifeevent / detailed_demographic). Name must be unique in the account.

update_audience

Update an audience's name, description, dimensions, or user-list exclusions. Dimensions and exclusions are REPLACED wholesale, so call listaudiences first and send the complete desired set. Omitted fields stay untouched. Use listaudiences to find audience_id.

list_custom_audiences

List custom audiences (CustomAudienceService) - keyword, URL, app and place-category interest-and-intent audiences - with their members. Use listaudiences for the reusable AudienceService objects, and listcustominterests for the older CUSTOMAFFINITY/CUSTOM_INTENT audiences.

create_custom_audience

Create a custom audience from keywords, URLs, apps, or place-category IDs. Leave type as AUTO unless you need to pin how Google interprets the members. The result's resource name can be used as a customaudience segment in createaudience. Names must be unique across BOTH custom audiences and custom interests, so check listcustomaudiences and listcustominterests first.

update_custom_audience

Update a custom audience's name, description, type, or members. Members are REPLACED wholesale, so call listcustomaudiences first and send the complete desired list. Omitted fields stay untouched. Use listcustomaudiences to find customaudienceid.

remove_custom_audience

Permanently remove a custom audience. Any audience or campaign referencing it as a segment loses it, and this cannot be undone. Custom audiences and custom interests share an id space, so this also removes a custom interest by its id - the only deletion path for one. Use listcustomaudiences or listcustominterests to find the id.

list_custom_interests

List custom interests (CustomInterestService) - the CUSTOMAFFINITY and CUSTOMINTENT audiences - with their keyword and URL members. For newer keyword/URL intent audiences use listcustomaudiences, and for reusable audience objects use list_audiences.

create_custom_interest

Create a custom interest audience from keywords and URLs. CUSTOMAFFINITY targets long-term interests, CUSTOMINTENT targets in-market intent. The name must be free across BOTH custom interests and custom audiences (one shared namespace), so check both list tools first. This service has no remove - removecustomaudience with the id is the only known deletion path.

update_custom_interest

Update a custom interest's name, description, type, or members. Members are REPLACED wholesale, so call listcustominterests first and send the complete list. The API offers no delete or retire for this resource, so there is no way to remove one. Use listcustominterests to find custominterestid.

create_batch_job

Create a new empty batch job for bulk asynchronous mutations. Follow with addbatchjoboperations to add operations, runbatchjob to execute it, getbatchjob to poll status, and listbatchjobresults once DONE. Use for large operation counts or operations that reference each other's temporary resource names within the same request.

add_batch_job_operations

Add raw mutate operations to a batch job created by createbatchjob. Call runbatchjob afterward to execute them. Can be called multiple times with the sequence_token from the previous response to append more operations before running.

run_batch_job

Execute a batch job's queued operations asynchronously. Poll getbatchjob until status=DONE, then call listbatchjob_results to see per-operation outcomes.

get_batch_job

Get the status and progress of a batch job (PENDING, RUNNING, or DONE), including how many of its operations have executed. Use createbatchjob's result to find batchjobid.

list_batch_job_results

List per-operation results for a completed batch job (status=DONE from getbatchjob), showing which operations succeeded (with their new resource names) and which failed (with error details).

update_campaign_bid_modifier

Change a campaign-level bid modifier's multiplier (the call bid adjustment on search campaigns). This adjusts bids, not base bids. Use searchgoogleads (FROM campaignbidmodifier) to find criterion_id. Campaign bid modifiers cannot be created through this connector; Google Ads creates the call adjustment with the call asset.

remove_campaign_bid_modifier

Permanently remove a campaign-level bid modifier, so bids return to the unadjusted base bid. Use searchgoogleads (FROM campaignbidmodifier) to find criterion_id first.

create_ad_group_bid_modifier

Raise or lower an ad group's bids for a device or a hotel booking criterion, without changing the base bid. Use listadgroups to find adgroupid. To stop serving on a device entirely rather than bidding less, use createcampaigndevice_exclusion.

update_ad_group_bid_modifier

Change an ad group bid modifier's multiplier. The criterion it applies to is fixed at creation - remove it and create a new one to change that. Use searchgoogleads (FROM adgroupbidmodifier) to find criterionid.

remove_ad_group_bid_modifier

Permanently remove an ad group bid modifier, so bids return to the unadjusted base bid. Use searchgoogleads (FROM adgroupbidmodifier) to find criterionid first.

list_bidding_data_exclusions

List Smart Bidding data exclusions on an account, optionally filtered to a date range. Use this to find a dataexclusionid before updating or removing one.

create_bidding_data_exclusion

Tell Smart Bidding to ignore a window's conversion data entirely, for example after a tracking outage made the numbers meaningless. Scope it account-wide, to campaigns from listcampaigns, or to channel types. To keep the data but expect a different rate, use createbiddingseasonalityadjustment.

update_bidding_data_exclusion

Change a data exclusion's name, window, or scoping lists. Omitted fields are left untouched; a supplied list replaces the existing one. Use listbiddingdata_exclusions to find the ID.

remove_bidding_data_exclusion

Permanently remove a Smart Bidding data exclusion, so its window's conversion data counts again. Use listbiddingdata_exclusions to find the ID first.

list_bidding_seasonality_adjustments

List Smart Bidding seasonality adjustments on an account, optionally filtered to a date range. Use this to find a seasonalityadjustmentid before updating or removing one.

create_bidding_seasonality_adjustment

Tell Smart Bidding to expect a different conversion rate over a short window, such as a flash sale. Scope it account-wide, to campaigns from listcampaigns, or to channel types. For a window whose data should be ignored entirely instead, use createbiddingdataexclusion.

update_bidding_seasonality_adjustment

Change a seasonality adjustment's name, window, conversion-rate multiplier, or scoping lists. Omitted fields are left untouched; a supplied list replaces the existing one. Use listbiddingseasonality_adjustments to find the ID.

remove_bidding_seasonality_adjustment

Permanently remove a Smart Bidding seasonality adjustment, so bidding stops expecting the adjusted conversion rate. Use listbiddingseasonality_adjustments to find the ID first.

list_bidding_strategies

List portfolio (shareable) bidding strategies for a customer. Use createbiddingstrategy to create one, then update_campaign to attach it to a campaign.

create_bidding_strategy

Create a portfolio (shareable) bidding strategy. Types: TARGETCPA, TARGETROAS, TARGETSPEND, MAXIMIZECONVERSIONVALUE, MAXIMIZECONVERSIONS, TARGETIMPRESSIONSHARE. Use update_campaign to attach it to a campaign afterward.

update_bidding_strategy

Update a portfolio bidding strategy's name or target value. The strategy's type cannot be changed after creation. Use listbiddingstrategies to find biddingstrategyid.

remove_bidding_strategy

Permanently remove a portfolio bidding strategy. Use listbiddingstrategies to find biddingstrategyid. Google Ads rejects removing a strategy still attached to a campaign.

list_billing_setups

List billing setups (payments account associations) for a Google Ads account. Use this to find billingsetupid/resource name before calling cancelbillingsetup or createaccountbudget_proposal.

create_billing_setup

Create a billing setup associating a payments account with a Google Ads account. Provide paymentsaccountid to reuse an existing payments account, or paymentsaccountname + paymentsprofileid to link a new one. Use listbillingsetups first to check for an existing setup.

cancel_billing_setup

Cancel a pending or approved billing setup. Use listbillingsetups to find the exact billingsetupid first.

list_account_budget_proposals

List account budget proposals for a Google Ads account. Use this to find accountbudgetproposalid before calling cancelaccountbudgetproposal.

create_account_budget_proposal

Propose a new account-level spending budget against a billing setup, or propose changes to an existing one (UPDATE/END/REMOVE with accountbudget set). Use listbillingsetups to find billingsetup and listaccountbudgetproposals to find an existing accountbudget to modify.

cancel_account_budget_proposal

Cancel a pending account budget proposal before it's approved. Use listaccountbudgetproposals to find the exact accountbudgetproposalid first.

list_campaign_budgets

List campaign budgets for a customer. Budgets are required when creating campaigns. Use this to discover available budgets before calling create_campaign.

create_campaign_budget

Create a new campaign budget. The budget resource name returned here is required when creating campaigns. Use listcampaignbudgets to find existing budgets.

update_campaign_budget

Update a campaign budget's name, amount, delivery method, or shared state. Use listcampaignbudgets to find campaignbudgetid. Google Ads rejects unsharing a budget still attached to multiple campaigns.

remove_campaign_budget

Permanently remove a campaign budget. Use listcampaignbudgets to find campaignbudgetid. Google Ads rejects removing a budget still attached to a non-removed campaign - remove or detach the campaign first.

create_campaign_negative_keywords

Exclude one or more keywords from triggering ads on a campaign (campaign-level negative keywords). Batch operation. Use listadgroups/listcampaigns to confirm the campaign first; use removecampaignnegativekeyword to undo.

remove_campaign_negative_keyword

Permanently remove a campaign-level negative keyword. Use searchgoogleads to find criterion_id first.

create_brand_exclusion

Exclude an existing brand list from a campaign (brand exclusion). Use searchgoogleads (FROM brandlist) to find sharedbrandlistresourcename; use removebrand_exclusion to undo.

remove_brand_exclusion

Permanently remove a brand exclusion from a campaign. Use searchgoogleads to find criterion_id first.

create_campaign_geo_targeting

Target or exclude locations on a campaign: resolved geo targets (use suggestgeotargetconstants first) or proximity (radius around an address). Batch operation. Use removecampaigngeotargeting_criterion to undo.

remove_campaign_geo_targeting_criterion

Permanently remove a campaign geo-targeting (location or proximity) criterion. Use searchgoogleads to find criterion_id first.

create_campaign_language_targeting

Target one or more languages on a campaign. Batch operation. Google Ads doesn't support negative (excluded) language targeting. Use searchgoogleads (FROM languageconstant) to find languageconstants; use removecampaignlanguage_targeting to undo.

remove_campaign_language_targeting

Permanently remove a campaign language-targeting criterion. Use searchgoogleads to find criterion_id first.

create_campaign_ad_schedule

Restrict a campaign to specific days and times (ad scheduling / day-parting), optionally with a per-window bid modifier. Batch operation. Once any schedule exists, the campaign only runs inside the windows you add. Use removecampaignad_schedule to undo.

remove_campaign_ad_schedule

Permanently remove an ad-schedule (day-part) criterion from a campaign. Use searchgoogleads to find criterion_id first.

create_campaign_device_exclusion

Stop a campaign showing ads on specific devices. Batch operation. Device criteria are exclusion-only - campaigns target every device by default, so there is no include variant. To raise or lower bids by device instead of excluding it, use createadgroupbidmodifier.

remove_campaign_device_exclusion

Undo a device exclusion on a campaign, so ads can serve on that device again. Use searchgoogleads to find criterion_id first.

create_campaign_demographics

Target or exclude demographics on a campaign: age ranges, genders, parental statuses, and household income ranges. Batch operation across all four dimensions. Demographic criteria apply to Display, Video, and Demand Gen campaigns; the API rejects unsupported combinations on Search.

remove_campaign_demographic_criterion

Permanently remove an age-range, gender, parental-status, or income-range criterion from a campaign. Use searchgoogleads to find criterion_id first.

create_campaign_user_list_exclusion

Exclude one or more audience (remarketing) lists from a campaign, so its members never see these ads. Batch operation. Use listuserlists to find user list resource names. Positive campaign-level audience targeting is done at ad group scope with createadgroupaudiencecriteria.

remove_campaign_user_list_exclusion

Permanently remove an audience-list exclusion from a campaign, so its members can see these ads again. Use searchgoogleads to find criterion_id first.

exclude_webpage_criterion

Stop a campaign advertising pages matching a URL, title, content, or custom-label rule. Used with Performance Max and dynamic search campaigns to keep specific pages out. This is an exclusion, distinct from a page feed's positive URL list built with createassetset.

create_app_campaign

Create an App campaign promoting a mobile app across Search, Play, YouTube and Display. appid, appstore and the sub type are IMMUTABLE, so set them here. The bidding scheme is derived from biddingstrategygoaltype: *TARGET*COST goals need targetcpamicros, the ROAS goal needs targetroas, *WITHOUTTARGET* goals take neither. Defaults to PAUSED.

create_app_ad

Create an App ad in an App campaign's ad group. Google assembles the creative from the headlines, descriptions and optional image, video and HTML5 assets you supply. Ads carry no final URL - the destination is the app itself. Use createmediaasset for asset IDs and listadgroups for adgroupid. WARNING: created ENABLED and serves at once; Google rejects a paused App ad, so there is no draft.

create_demand_gen_campaign

Create a Demand Gen campaign, which runs image and video creative across YouTube, Discover and Gmail. upgradedtargeting is IMMUTABLE and moves location and language targeting to the ad group level, so decide it here. Add creative with createdemandgenmultiassetad or createdemandgencarouselad. Defaults to PAUSED.

create_demand_gen_multi_asset_ad

Create a Demand Gen multi-asset ad from images, headlines and descriptions. Needs landscape or square marketing images (at least one of the two), and images are capped at 20 across all orientations combined. businessname is a plain string here, unlike the video ad types. Use createmedia_asset for asset IDs. Defaults to PAUSED.

create_demand_gen_carousel_ad

Create a Demand Gen carousel ad from 2-10 carousel cards, a logo, one headline and one description. The cards must be DEMANDGENCAROUSELCARD assets, which no tool here creates: find existing ones with listassets, or make them in the Google Ads UI. createdemandgenmultiasset_ad takes plain images instead. Defaults to PAUSED.

create_demand_gen_video_responsive_ad

Create a responsive video ad in a Demand Gen campaign - the supported way to run video creative through the API, since VIDEO-channel campaigns cannot be mutated at all. Requires a name, a YOUTUBEVIDEO asset, a logo and a business name; businessname is a text asset here and the call to action is an asset, not a string. Defaults to PAUSED.

list_campaign_groups

List campaign groups for a customer, optionally filtered by status. Use this to find campaigngroupid before calling updatecampaigngroup.

create_campaign_group

Create a campaign group to track aggregate performance across multiple campaigns with a shared goal. Follow with updatecampaign to set each campaign's campaigngroup field.

update_campaign_group

Update a campaign group's name or status. Set status=REMOVED to delete it. Use listcampaigngroups to find the campaigngroupid first.

list_campaigns

List campaigns for a customer with optional filtering by status, channel type, and name. Use get_campaign to retrieve a specific campaign.

get_campaign

Get details of a specific campaign.

create_campaign

Create a new campaign. Required parameters: customerid, name, advertisingchanneltype, campaignbudget (from listcampaignbudgets), biddingstrategytype. Use listcampaignbudgets to find a valid campaign_budget resource name.

update_campaign

Update a campaign: name, status, budget, bidding (inline scheme + tCPA/tROAS, or a portfolio strategy), AI Max, Targeting-vs-Observation modes, dates, tracking/URL settings, networks, or frequency caps. status=REMOVED deletes. Omitted fields stay untouched; empty string/list clears. Call getcampaign first for the current biddingstrategytype and targetingsetting. IDs: list_campaigns.

create_performance_max_campaign

Create a Performance Max campaign. Requires a budget from createcampaignbudget and a conversion-based bidding strategy. Defaults to PAUSED because a PMax campaign cannot serve until it has an asset group - createassetgroup is a mandatory next step, not an optional one.

update_campaign_asset_automation

Opt a campaign into or out of Google's automatically generated assets, including the final-URL-expansion text automation. The list replaces the campaign's existing settings, so include every automation you want to keep. Opting into one automation can enable related ones, so read the campaign back afterwards.

enable_pmax_brand_guidelines

Turn on brand guidelines for a Performance Max campaign so its ads use consistent brand assets. The campaign's asset groups must already carry a BUSINESSNAME asset and a LOGO or LANDSCAPELOGO asset - attach them with attachassetgroupasset first, and check with listassetgroupassets.

list_conversion_actions

List conversion actions for a customer with optional filtering by status and category. Conversion actions must exist before uploading offline conversions - use createconversionaction to add one.

get_conversion_action

Get details of a specific conversion action. Use listconversionactions to find conversionactionid.

create_conversion_action

Create a new conversion action to track conversions. Required before uploading offline conversions (use type=UPLOADCLICKS with uploadclickconversions, or type=UPLOADCALLS with uploadcallconversions) or before enhanced/website conversion tracking (type=WEBPAGE). Use listconversionactions to check for an existing action of the right type before creating a duplicate.

update_conversion_action

Update a conversion action. Set status=REMOVED to delete. Use listconversionactions to find conversionactionid.

upload_conversion_adjustments

Retract, restate, or enhance previously reported conversions. Use RETRACTION to cancel a conversion, RESTATEMENT to correct its value (requires adjustedvalue), or ENHANCEMENT to attach user identifiers. Identify the original conversion by orderid or gclid+conversiondatetime. Use listconversionactions to find conversion_action resource names.

list_customer_conversion_goals

List the account's default conversion goals and whether Smart Bidding currently optimizes toward each. Read this before flipping one with updatecustomerconversion_goal - every category and origin combination always exists, so there is nothing to create.

update_customer_conversion_goal

Turn an account-level conversion goal on or off for Smart Bidding. Goals are keyed by category and origin and always exist, so this only flips biddable. Use listcustomerconversiongoals to see current state, and updatecampaignconversiongoal to override one campaign.

list_campaign_conversion_goals

List campaign-level conversion goals and whether each is biddable, optionally for one campaign. Campaign goals only take effect when the campaign's config is set to CAMPAIGN level - check that with getconversiongoalcampaignconfig.

update_campaign_conversion_goal

Turn a conversion goal on or off for one campaign. Only takes effect once that campaign's config is set to CAMPAIGN level with updateconversiongoalcampaignconfig; otherwise the campaign follows the account defaults. Use listcampaignconversion_goals to see current state.

get_conversion_goal_campaign_config

Read whether a campaign follows the account's default conversion goals or uses its own, and which custom conversion goal drives it. Every campaign always has exactly one config. Change it with updateconversiongoalcampaignconfig.

update_conversion_goal_campaign_config

Switch a campaign between the account's default conversion goals and its own, and optionally point it at a custom conversion goal. This is how a custom goal from createcustomconversiongoal actually gets attached to a campaign. Read the current state with getconversiongoalcampaign_config.

list_custom_conversion_goals

List custom conversion goals on an account and the conversion actions each covers. Use this to find a customconversiongoalid for updatecustomconversiongoal, or a resource name for updateconversiongoalcampaignconfig.

create_custom_conversion_goal

Create a named custom conversion goal from a set of conversion actions. Call listconversionactions first to get the conversion action resource names. Attach the new goal to a campaign with updateconversiongoalcampaignconfig; creating it alone changes nothing.

update_custom_conversion_goal

Rename a custom conversion goal, replace which conversion actions it covers, or set status=REMOVED to delete it. A supplied conversionactions list replaces the existing membership rather than adding to it. Use listcustomconversiongoals to find the ID.

upload_click_conversions

Upload offline click conversions (gclid/gbraid/wbraid based) for import into Google Ads. Use createconversionaction (type=UPLOADCLICKS) first to get a valid conversionaction resource name. Never log the gclid/gbraid/wbraid values returned - treat them as sensitive per-user data.

upload_call_conversions

Upload offline call conversions (phone call tracking) for import into Google Ads. Use createconversionaction (type=UPLOADCALLS) first to get a valid conversionaction resource name. Never log the caller_id values returned - treat them as sensitive per-user data.

list_conversion_value_rules

List conversion value rules on an account, optionally filtered by status. Use this to find the value rule resource names createconversionvalueruleset needs, or an ID for updateconversionvalue_rule.

create_conversion_value_rule

Create a rule that adjusts reported conversion value when a geo, device, or audience condition matches. At least one condition is required. The rule does nothing until it belongs to a rule set - follow this with createconversionvalueruleset. Use suggestgeotargetconstants and listuser_lists for condition values.

update_conversion_value_rule

Change a value rule's adjustment, its conditions, or its status. Supply actionoperation and actionvalue together. A supplied condition list replaces the existing one. Set status=REMOVED to delete the rule. Use listconversionvalue_rules to find the ID.

remove_conversion_value_rule

Permanently remove a conversion value rule, so it stops adjusting reported conversion value. Use listconversionvaluerules to find the ID first. To stop a rule applying without deleting it, use updateconversionvaluerule with status=PAUSED.

list_conversion_value_rule_sets

List conversion value rule sets on an account, showing which rules each contains and whether it is attached account-wide or to a campaign. Use this to find an ID for updateconversionvalueruleset or removeconversionvalueruleset.

create_conversion_value_rule_set

Group conversion value rules into a set and attach it account-wide or to one campaign, which is what makes the rules take effect. Create the rules first with createconversionvaluerule. dimensions must cover the conditions those rules use. attachmenttype is fixed at creation.

update_conversion_value_rule_set

Replace which value rules a set contains, in priority order, or which condition dimensions it declares. A supplied list replaces the existing one entirely. The set's attachment cannot be changed after creation. Use listconversionvaluerulesets to find the ID.

remove_conversion_value_rule_set

Permanently remove a conversion value rule set, so its rules stop adjusting reported conversion value. The rules themselves survive and can be reused in another set. Use listconversionvaluerulesets to find the ID first.

create_customer_client_link

From a manager (MCC) account, invite an existing Google Ads account to become a managed client. Creates a PENDING link that the client account owner must accept via updatecustomermanagerlink. Use listaccessiblecustomers to find the managercustomer_id.

update_customer_client_link

From a manager (MCC) account, change the status of an existing manager-client link (e.g. CANCELED to withdraw a pending invite, INACTIVE to end an active relationship). This changes account access - use searchgoogleads (FROM customerclientlink) to find the exact managerlinkid first.

update_customer_manager_link

From a client account, accept, refuse, or terminate a manager (MCC) account's access to it. Setting status=ACTIVE grants the manager full control of this account; INACTIVE immediately revokes it. Use searchgoogleads (FROM customermanagerlink) on the client account to find the exact managerlinkid before calling - no fuzzy matching is performed.

create_customer_client

Create a new Google Ads client account under a manager (MCC) account, or invite an existing email to accept ownership of one. Requires managercustomerid (from listaccessiblecustomers), descriptivename, currencycode, and time_zone. The new account inherits test status from the manager: creating under a test manager yields a test account, under a production manager a real billable one.

update_customer

Update account-level settings for a Google Ads customer (display name, tracking URL template, final URL suffix, auto-tagging). Use get_customer to see current values first.

create_customer_negative_criteria

Create account-wide (customer-level) negative criteria that apply across every campaign: placement exclusions (criteriontype=PLACEMENT), app exclusions (MOBILEAPPLICATION), app-category exclusions (MOBILEAPPCATEGORY), or content-label exclusions (CONTENTLABEL). Batch operation. Use searchgoogleads to find criterionid for removal.

remove_customer_negative_criterion

Permanently remove an account-wide (customer-level) negative criterion. Use searchgoogleads to find criterion_id first.

list_accessible_customers

List all Google Ads customer account IDs accessible with the current credentials. Use the customer_id from this result when calling other tools.

get_customer

Get details of a specific Google Ads customer account (ID, name, currency, timezone).

list_customizer_attributes

List customizer attribute definitions (dynamic ad copy placeholders) for a Google Ads account. Use this to find customizerattributeid before calling setcustomizervalue or removecustomizerattribute.

create_customizer_attribute

Create a customizer attribute definition that ad copy can reference as {CUSTOMIZER.name} for dynamic per-entity substitution. Follow with setcustomizervalue to bind an actual value at the customer, campaign, or ad group level.

remove_customizer_attribute

Delete a customizer attribute definition and all its bound values. Use listcustomizerattributes to find the exact customizerattributeid first.

list_customizer_values

List customizer values bound at the customer, campaign, or ad group level. Use this to find an existing binding before calling removecustomizervalue.

set_customizer_value

Bind a customizer value to a customer, campaign, or ad group so ad copy referencing {CUSTOMIZER.name} substitutes it for that entity. Use listcustomizerattributes to find customizerattributeid first.

remove_customizer_value

Remove a customizer value binding from a customer, campaign, or ad group. Use listcustomizervalues to find the exact binding first.

create_ad_parameter

Set a dynamic numeric/price ad parameter for a keyword, substituted into ad text via {param1:} or {param2:} placeholders. Use listkeywords to find the criterionid first.

update_ad_parameter

Update the substituted text of an existing ad parameter.

remove_ad_parameter

Remove an ad parameter from a keyword.

list_data_links

List a Google Ads account's YouTube video/channel data links. Requires allow-listed access to DataLinkService. Use this to find the resourcename before calling updatedatalink or removedata_link.

create_data_link

Link a Google Ads account to a specific YouTube video for creator collaboration campaigns. Requires allow-listed access to DataLinkService; the requesting account's name and ID are shared with the video's channel owner.

update_data_link

Change the status of an existing YouTube data link. Use listdatalinks to find the exact resource_name first.

remove_data_link

Remove an existing YouTube data link. Use listdatalinks to find the exact resource_name first.

create_experiment

Create an experiment shell to A/B test campaign changes. It does nothing until you add a control arm and a treatment arm with addexperimentarm, then start it with schedule_experiment.

add_experiment_arm

Add a control or treatment arm to an experiment. The control arm names the existing live campaigns; Google generates the treatment's draft campaigns from them. An experiment needs one control and at least one treatment, with traffic splits totalling 100, before schedule_experiment will start it.

schedule_experiment

Start an experiment, which begins serving the treatment arm and spending budget. This starts an async operation rather than finishing immediately: poll getexperiment for the status moving SETUP to INITIATED to ENABLED. Add both arms with addexperiment_arm first.

promote_experiment

Apply the treatment arm's changes to the original campaign and end the experiment. Irreversible: the original campaign is permanently overwritten, so confirm must be true. To keep the treatment as a separate campaign instead, use graduateexperiment; to discard it, use endexperiment.

graduate_experiment

Turn an experiment's treatment into a permanent standalone campaign, leaving the original untouched. Each in-design campaign needs its own budget, so confirm must be true. Use listexperimentarms for the campaigns and listcampaignbudgets for the budgets.

end_experiment

End an experiment without keeping its treatment, discarding the treatment arm's changes. Irreversible, so confirm must be true. To keep the changes instead, use promoteexperiment or graduateexperiment before ending.

list_experiments

List experiments on an account, optionally filtered by status or type. Use this to find an experiment_id, or to see which experiments are still in SETUP and which are running.

get_experiment

Read one experiment, including its current status. This is how you poll a scheduleexperiment or promoteexperiment operation: watch status move SETUP to INITIATED to ENABLED, or on to PROMOTED, GRADUATED, or HALTED.

list_experiment_arms

List an experiment's arms, their traffic splits, and the campaigns each covers. A treatment arm's indesigncampaigns are the draft campaigns graduate_experiment needs to map to budgets.

discover_gaql_fields

Look up GAQL field/resource metadata (data type, selectable/filterable/sortable) before building a query for searchgoogleads or searchgoogleadsstream. Use names for exact lookups or namecontains to browse a resource's fields. Lean field set by default - set includedetails=True for selectablewith/metrics/segments/enumvalues. Paginate with limit and pagetoken.

list_invoices

List invoices issued for a Google Ads account's billing setup in a specific month. Requires billingsetup (from listbillingsetups), issueyear, and issue_month. Only available for accounts on monthly invoicing.

list_payments_accounts

List payments accounts accessible to a Google Ads account. Use this to find paymentsaccountid before calling createbillingsetup.

list_keyword_plans

List saved keyword plans for a customer. Use createkeywordplan to start a new one, or getkeywordplan for details of a specific plan.

get_keyword_plan

Get details of a specific keyword plan. Use listkeywordplans to find keywordplanid.

create_keyword_plan

Create a new saved keyword plan. Follow with createkeywordplancampaign, createkeywordplanadgroup, and addkeywordplankeywords to build out the plan as a reusable account resource. For performance estimates use generatekeywordforecast_metrics, which forecasts keywords directly and does not read a saved plan.

create_keyword_plan_campaign

Create a campaign within a keyword plan, defining the network, geo targets, and languages to forecast against. Use createkeywordplan first to get keywordplanid, suggestgeotargetconstants to find geotargetconstantids, and searchgoogleads (FROM languageconstant) to find languageconstant_ids.

create_keyword_plan_ad_group

Create an ad group within a keyword plan campaign, to group keywords for forecasting. Use createkeywordplancampaign first to get keywordplancampaignid.

add_keyword_plan_keywords

Add keywords to a keyword plan ad group for forecasting. Use createkeywordplanadgroup first to get keywordplanadgroupid.

add_keyword_plan_campaign_keywords

Add campaign-level negative keywords to a keyword plan, excluding them from every ad group's forecast. These are always negative - use addkeywordplankeywords for keywords to forecast on. Use createkeywordplancampaign first to get keywordplancampaign_id.

generate_keyword_forecast_metrics

Forecast clicks, cost, average CPC, conversions, and average CPA for a set of keywords under a given bidding strategy. Forecasts a hypothetical campaign directly - it does not read a saved keyword plan, so no createkeywordplan setup is needed. Provide exactly one bidding strategy. Note the API returns no impressions or CTR.

generate_keyword_ideas

Suggest new keywords from seed keywords, a page URL, or a whole site, with search volume and bid estimates. This is keyword research for keywords you do not have yet; use listkeywords for keywords already in an ad group. Use suggestgeotargetconstants and searchgoogleads (FROM language_constant) for the scoping fields.

get_keyword_historical_metrics

Look up search volume, competition, and bid estimates for keywords you already have, optionally over a specific month range. Returns the whole batch in one response with no pagination. To discover new keywords instead, use generatekeywordideas.

list_keywords

List keywords (ad group criteria) for a customer with optional filtering by ad group, status, and negative (excluded) flag.

create_keywords

Create one or more keywords in an ad group, positive or negative (excluded). Batch operation: create multiple keywords efficiently in a single call. Use listadgroups to find adgroupid.

update_keyword

Update a keyword's status (ENABLED/PAUSED) or CPC bid. Use listkeywords to find criterionid. To delete a keyword use remove_keyword.

remove_keyword

Permanently remove a keyword from an ad group. Use listkeywords to find criterionid.

list_labels

List labels for a customer with optional filtering by status. Use createlabel to add a new label, or the add*label tools (addcampaignlabel, addadgrouplabel, addadlabel, addkeywordlabel, addcustomerlabel) to apply a label to an entity.

create_label

Create a new label that can be applied to campaigns, ad groups, ads, keywords, or the customer account. Use the add*label tools afterward to apply it to entities.

update_label

Update a label's name, background color, or description. Use listlabels to find labelid. Use remove_label to delete the label entirely.

remove_label

Permanently remove a label. This also removes it from every entity it is applied to. Use listlabels to find labelid.

add_campaign_label

Apply a label to a campaign. Use listcampaigns to find campaignid and listlabels (or createlabel) to find label_id.

remove_campaign_label

Remove a label from a campaign. Use listcampaigns to find campaignid and listlabels to find labelid.

add_ad_group_label

Apply a label to an ad group. Use listadgroups to find adgroupid and listlabels (or createlabel) to find label_id.

remove_ad_group_label

Remove a label from an ad group. Use listadgroups to find adgroupid and listlabels to find labelid.

add_ad_label

Apply a label to an ad. Use listads to find adid and listlabels (or createlabel) to find label_id.

remove_ad_label

Remove a label from an ad. Use listads to find adid and listlabels to find labelid.

add_keyword_label

Apply a label to a keyword. Use listkeywords to find criterionid and listlabels (or createlabel) to find label_id.

remove_keyword_label

Remove a label from a keyword. Use listkeywords to find criterionid and listlabels to find labelid.

add_customer_label

Apply a label to the customer (account) itself. Account labels are a manager (MCC) feature: the label must be owned by a manager account of this customer, so pass managercustomerid when the label lives on the manager. Use listlabels (or createlabel) to find label_id.

remove_customer_label

Remove a label from the customer (account). Use listlabels to find labelid.

mutate_google_ads

Execute multiple create/update/remove operations across resource types in one synchronous request. Use when operations depend on each other's temporary resource names (e.g. a budget plus the campaign using it). For large batches use createbatchjob instead. Requires exact field names - confirm them with discovergaqlfields first.

list_product_links

List a Google Ads account's links to other Google products (Merchant Center, another Google Ads account, or a data partner). Use this to find productlinkid before calling removeproductlink.

create_product_link

Link a Google Ads account to Merchant Center, another Google Ads account, or a data partner. Requires linktype plus the matching ID field (datapartnerid, linkedcustomerid, or merchantcenterid). Use listproduct_links first to check for an existing link.

remove_product_link

Remove an existing product link (Merchant Center, linked Google Ads account, or data partner). Use listproductlinks to find the exact productlinkid first.

list_product_link_invitations

List pending, accepted, or rejected product link invitations for a Google Ads account (e.g. a Merchant Center account inviting this account to link). Use this to find productlinkinvitationid before calling updateproductlinkinvitation.

update_product_link_invitation

Accept, reject, or revoke a pending product link invitation (e.g. from a Merchant Center account). Use listproductlinkinvitations to find the exact productlinkinvitationid first.

list_plannable_locations

list_plannable_products

list_plannable_user_lists

list_plannable_user_interests

generate_conversion_rates

generate_reach_forecast

list_recommendation_subscriptions

List which recommendation types this account auto-applies, with each subscription's status and timestamps. Call this before createrecommendationsubscription to avoid duplicating a type, and to find the subscriptiontype that updaterecommendation_subscription takes.

create_recommendation_subscription

Subscribe the account to auto-applying one recommendation type, so Google applies matching recommendations as it produces them instead of you polling. The type is immutable once created. Google restricts which types are subscribable and rejects the rest. Use listrecommendationsubscriptions first to avoid duplicating a type.

update_recommendation_subscription

Pause or resume auto-applying one recommendation type. PAUSED stops it without deleting the subscription, which is the only way to stop it - the service has no remove operation. Status is the only mutable field; the type is fixed at creation. Use listrecommendationsubscriptions to find the subscription_type.

apply_recommendations

Apply one or more Google Ads recommendations (e.g. budget increases, keyword additions, bid adjustments). Use searchgoogleads (SELECT recommendation.resourcename, recommendation.type FROM recommendation) to find resourcenames first, and check the recommendation's type-specific fields for any required apply parameters.

dismiss_recommendations

Dismiss one or more Google Ads recommendations so they stop being surfaced. Use searchgoogleads (SELECT recommendation.resourcename FROM recommendation) to find resourcenames first.

generate_recommendations

Ask Google what it WOULD recommend for a campaign shape, without a stored recommendation existing. Advisory only: results carry no resource name, so they cannot be passed to applyrecommendations - use searchgoogleads (FROM recommendation) for applicable ones. Ten types, SEARCH or PERFORMANCEMAX only. CAMPAIGNBUDGET additionally needs biddinginfo, countrycodes and languagecodes.

list_remarketing_actions

List remarketing actions with their tag snippets - the global site tag and event snippet JavaScript to install on the advertiser's site. Call this after createremarketingaction to retrieve the snippets, which the create call does not return.

create_remarketing_action

Create a remarketing action, which generates the site tag used to collect remarketing data. The tag snippets are not returned here - call listremarketingactions afterwards to read them. There is no remove operation for this resource.

update_remarketing_action

Rename a remarketing action. Name is the only writable field - the tag snippets are generated by Google and cannot be edited. Use listremarketingactions to find remarketingactionid.

search_google_ads

Run a custom GAQL (Google Ads Query Language) query to retrieve arbitrary resource data and metrics. Use this for custom reports, performance metrics, or any data not available through structured tools. Example: SELECT campaign.name, metrics.clicks, metrics.impressions FROM campaign WHERE campaign.status = ENABLED

search_google_ads_stream

Run a custom GAQL query using server-side streaming for large result sets, instead of page-by-page retrieval like searchgoogleads. Use this when you expect a very large number of rows (e.g. account-wide keyword or ad performance reports) and want them all in one call rather than paginating through searchgoogleads with page_token.

get_identity_verification

Read the account's identity verification state: which programs apply, their start and completion deadlines, the current status, and the actionurl the advertiser must visit to finish. Call this before startidentity_verification to check whether verification is needed, and after it to collect the link. An empty list means none is required.

start_identity_verification

Start advertiser identity verification for the account. This begins a real compliance process and cannot be undone or cancelled through the API, and it does NOT complete verification: a human must then visit the actionurl that getidentityverification returns. Check getidentity_verification first to confirm it is actually required.

generate_shareable_previews

Generate public, time-limited preview links for Performance Max asset groups or ads. Each preview needs a previewtype: UIPREVIEW for a Google Ads UI link, or YOUTUBELIVEPREVIEW for YouTube links - which is the only type that accepts an ad rather than an asset group. Anyone holding a link can view unpublished creative until it expires, so treat the URLs as secrets.

update_skadnetwork_conversion_schema

Update the SKAdNetwork conversion value schema that maps iOS postback values to conversion values. UPDATE-only: the schema exists per linked app and cannot be created or removed here. Set validateonly=true to check a schema first, and enablewarnings=true for non-blocking issues. Find customerlinkid with searchgoogleads.

append_lead_conversation

Append messages to Local Services leads, so a provider's replies are recorded against the lead. Batch operation: several conversations in one call, each naming its lead. Find lead resource names with searchgoogleads (FROM localserviceslead).

provide_lead_feedback

Submit a satisfaction survey for a Local Services lead, which can earn a bonus credit for a poor lead. A reason is required and must match the answer's polarity; the OTHER* reasons also need a comment. NEUTRAL takes neither - the API has nowhere to carry them. An issued credit becomes usable in about two months. Find lead IDs with searchgoogleads (FROM localservices_lead).

list_shared_sets

List shared sets (e.g. shared negative-keyword lists) for a customer. Use createsharedset to create one, addsharedcriteria to add keywords to it, and linkcampaignshared_set to attach it to a campaign.

create_shared_set

Create a shared set (e.g. a shared negative-keyword list usable across multiple campaigns). Use addsharedcriteria to populate it and linkcampaignshared_set to attach it to a campaign.

update_shared_set

Rename a shared set. Use listsharedsets to find sharedsetid.

remove_shared_set

Permanently remove a shared set. Use listsharedsets to find sharedsetid. Google Ads rejects removing a shared set still attached to a campaign - unlink it with unlinkcampaignshared_set first.

list_shared_criteria

List the keyword criteria inside a shared set. Use addsharedcriteria to add more, removesharedcriterion to remove one.

add_shared_criteria

Add one or more keywords to a shared set (e.g. a shared negative-keyword list). Batch operation. Use createsharedset first to create the set, and linkcampaignshared_set to attach it to a campaign.

remove_shared_criterion

Remove a keyword from a shared set. Use listsharedcriteria to find criterion_id.

list_campaign_shared_sets

List which shared sets are attached to which campaigns. Use linkcampaignsharedset / unlinkcampaignsharedset to change attachments.

link_campaign_shared_set

Attach a shared set (e.g. a shared negative-keyword list) to a campaign, applying it to that campaign. Use createsharedset to create the set first.

unlink_campaign_shared_set

Remove a campaign's link to a shared set. The shared set and its criteria are not deleted, only the attachment to this campaign.

create_shopping_campaign

Create a Shopping campaign advertising a Merchant Center feed. merchantid is required and immutable, and the Merchant Center account must already be linked to this customer. campaignpriority (0-2) is required too. Build the product partition tree with createlistinggroupsubdivision and createlistinggroupunit. Defaults to PAUSED.

create_shopping_product_ad

Create a Shopping product ad. It takes no creative at all - headlines, images and prices come from the Merchant Center feed, so the only inputs are the ad group and a status. Which products it covers is set by the product partition tree, not here. Create the ad group with createadgroup type=SHOPPINGPRODUCTADS. Defaults to PAUSED.

list_listing_groups

List the product partition tree of a Shopping ad group, with each node's type, case value, parent and bid. Call this to find the criterionid values that createlistinggroupsubdivision, createlistinggroupunit and removelisting_group take, and to see which subdivisions still lack an 'everything else' unit.

create_listing_group_subdivision

Create a SUBDIVISION node in a Shopping ad group's product partition tree - a branch that splits products along a dimension without bidding itself. Omit parentcriterionid to create the tree's single root, which takes no dimension. Then add bidding leaves with createlistinggroup_unit, including an 'everything else' unit or Google rejects the tree.

create_listing_group_unit

Create a UNIT node in a Shopping ad group's product partition tree - a leaf that sets the bid for the products it matches, or excludes them with negative=true. Every subdivision must also get an 'everything else' unit: the same dimension with an EMPTY value. Use listlistinggroups for parentcriterionid.

remove_listing_group

Remove a node from a Shopping ad group's product partition tree. Removing a subdivision removes everything beneath it, and removing a unit can leave its parent subdivision incomplete, which Google rejects on the next edit - so re-check the tree with listlistinggroups afterwards.

suggest_smart_campaign_budget_options

Get low, recommended and high daily budget suggestions for a Smart campaign, each with its forecast daily click range. Pass an existing campaign resource name, or suggestion_info to plan one that does not exist yet - exactly one of the two. Read-only, so it is safe to call before committing to a campaign.

suggest_smart_campaign_ad

Get suggested ad copy - headlines and descriptions - for a Smart campaign, derived from the business description. Supply finalurl, languagecode and keywordthemes in suggestioninfo for a useful result; get themes from suggestsmartcampaignkeywordthemes first. Read-only.

suggest_smart_campaign_keyword_themes

Get suggested keyword themes for a Smart campaign from the business description. Supply finalurl, languagecode and a geo target in suggestioninfo. Results are either keyword theme constants or free-form themes, and feed straight back into the other suggest tools' keywordthemes. Read-only.

list_smart_campaign_settings

List Smart campaign settings in the account: landing page, business name or Business Profile location, advertising language and phone number. Use this to find the campaignid that updatesmartcampaignsetting and getsmartcampaign_status take.

update_smart_campaign_setting

Update a Smart campaign's landing page, business identity, advertising language or phone number. The service is UPDATE-only: settings are created with the campaign and cannot be added or removed here. The landing page is either finalurl or an ads-optimized Business Profile, not both. Use listsmartcampaignsettings for campaign_id.

get_smart_campaign_status

Get a Smart campaign's serving status and why it is in that state - whether it is eligible, pending review, or failing specific eligibility checks. Use this to diagnose a Smart campaign that is not serving. Use listsmartcampaignsettings for campaignid.

suggest_geo_target_constants

Resolve location names (e.g. 'New York', 'France') or existing geo target constant IDs to Google Ads geo target constants for use in geographic targeting. This is a global lookup, not scoped to a customer account.

suggest_keyword_theme_constants

Suggest Smart Campaign keyword themes matching a business description (e.g. 'plumber'). This is a global lookup, not scoped to a customer account.

suggest_brands

Suggest brands matching a name prefix, for brand exclusion or brand safety targeting. Use selectedbrandids to exclude brands already chosen.

create_hotel_campaign

Create a Hotel campaign advertising a Hotel Center feed. hotelcenterid is required, and the Hotel Center account must already be linked to this customer or the create is rejected. PERCENT_CPC bids a fraction of the room price; COMMISSION pays per completed stay. Hotel ads carry no creative - add an ad group and let Google build from the feed. Defaults to PAUSED.

create_travel_campaign

Create a Travel campaign advertising a Travel account's activities feed. travelaccountid is required and IMMUTABLE, so it can only be set here, and the account must already be linked or the create is rejected. Travel ads carry no creative; use suggesttravelassets for text and image assets. Defaults to PAUSED.

suggest_travel_assets

Get Google's suggested text and image assets for travel places, keyed by Google Places ID. Use it to populate a Travel campaign's creative rather than writing hotel copy by hand. Read-only, and place_ids may be omitted to let Google choose places from the linked Travel account.

list_customer_users

List users with existing access to a Google Ads account, including their userid, email, and accessrole. Call this before updatecustomeruseraccess or removecustomeruseraccess to find the exact user_id.

invite_customer_user

Invite a new user to access a Google Ads account by email. The user must accept the invitation before gaining access. Use listcustomerusers first to check whether the user already has access.

list_customer_user_invitations

List pending, accepted, or expired user access invitations for a Google Ads account. Call this before cancelcustomeruserinvitation to find the exact invitationid.

cancel_customer_user_invitation

Cancel a pending user access invitation, preventing the invited email from gaining access. Requires the exact invitationid from listcustomeruserinvitations - no fuzzy matching is performed.

update_customer_user_access

Change an existing user's access role on a Google Ads account (e.g. from STANDARD to ADMIN). This changes what the user can do - requires the exact userid from listcustomer_users, no fuzzy matching is performed.

remove_customer_user_access

Revoke a user's access to a Google Ads account entirely. This immediately blocks the user from accessing this account. Requires the exact userid from listcustomer_users - no fuzzy matching is performed. Cannot remove the account's last remaining admin.

list_user_lists

List user lists (audiences) for a customer, optionally filtered by type. Use createuserlist to create a new Customer Match list. Populating a list with hashed first-party data is done through Google's Data Manager API, not this connector.

create_user_list

Create a new Customer Match (CRM-based) user list. Members are uploaded through Google's Data Manager API, not this connector - this tool creates the empty list and returns its resource name. Use listuserlists to check for an existing list before creating a duplicate.

update_user_list

Update a user list of any type: name, description, membership status (CLOSED stops accepting new members without deleting), membership lifespan, or integration code. Omitted fields stay untouched. To stop using a list but keep its members, set membershipstatus=CLOSED rather than removing it. Use listuserlists to find userlist_id.

remove_user_list

Permanently remove a user list. This cannot be undone and any campaign or ad group targeting the list loses it. To stop adding members while keeping the list and its audience, use updateuserlist with membershipstatus=CLOSED instead. Use listuserlists to find userlist_id.

validate_credential

Validate Google Ads OAuth2 credentials and developer token by listing accessible customer accounts.

View all tools by creating a free accountSee more tools

How to set up Merge Agent Handler

In an mcp.json file, add the configuration below, and restart Cursor.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5      "headers": {
6        "Authorization": "Bearer yMt*****"
7      }
8    }
9  }
10}
11
Copy Code

Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.

Make sure Claude is using the Node v20+.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "command": "npx",
5      "args": [
6        "-y",
7        "mcp-remote@latest",
8        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9        "--header",
10        "Authorization: Bearer ${AUTH_TOKEN}"
11      ],
12      "env": {
13        "AUTH_TOKEN": "yMt*****"
14      }
15    }
16  }
17}
Copy Code
Copied!

Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.

Learn more in the official documentation ↗

1{
2    "mcpServers": {
3      "agent-handler": {
4        "command": "npx",
5        "args": [
6          "-y",
7          "mcp-remote@latest",
8          "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9          "--header",
10          "Authorization: Bearer ${AUTH_TOKEN}"
11        ],
12        "env": {
13          "AUTH_TOKEN": "<ah-production-access-key>"
14        }
15      }
16    }
17  }
Copy Code

In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".

You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.

Learn more in the official documentation ↗

1{
2  "inputs": [
3    {
4      "type": "promptString",
5      "id": "agent-handler-auth",
6      "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7      "password": true
8    }
9  ],
10  "servers": {
11    "agent-handler": {
12      "type": "stdio",
13      "command": "npx",
14      "args": [
15        "-y",
16        "mcp-remote@latest",
17        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18        "--header",
19        "Authorization: Bearer ${input:agent-handler-auth}"
20      ]
21    }
22  }
23}
Copy Code

FAQs on using Merge's Google Ads  MCP server

FAQs on using Merge's Google Ads  MCP server

Explore other MCP servers built and managed by Merge

exa
Exa
expensify
Expensify
figma
Figma
firecrawl
Firecrawl
fireflies
Fireflies
firehydrant
FireHydrant
foursquare
Foursquare
frameio
Frame.io
freshbooks
FreshBooks
freshdesk
Freshdesk
freshservice
Freshservice
front
Front
gamma
Gamma
github
GitHub
gitlab
GitLab
gmail
Gmail
goldcast
Goldcast
gong
Gong
google_analytics
Google Analytics
google_bigquery
Google BigQuery
google_calendar
Google Calendar
google_docs
Google Docs
google_drive
Google Drive
google_maps
Google Maps

Ready to try it out?

Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now