Skip to main content
Glama
Google Ads MCP Server

Google Ads MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoAlternative bind port for HTTP transports; also works instead of MCP_PORT.
MCP_HOSTNoBind address for HTTP transports.127.0.0.1
MCP_PORTNoBind port for HTTP transports.8000
MCP_TRANSPORTNoTransport to use: stdio, streamable-http, or sse.stdio
MCP_ALLOWED_HOSTSNoComma-separated public domain(s) for Host-header checks.
MCP_RATE_LIMIT_MAXNoRequests per window per client IP.120
MCP_HTTP_BEARER_TOKENNoRequired Authorization: Bearer token on /mcp. Mandatory to bind a non-local address.
GOOGLE_ADS_CUSTOMER_IDNoDefault Google Ads account ID when a tool call omits customer_id.
GOOGLE_ADS_MAX_CPC_BIDNoMaximum allowed ad-group or keyword max-CPC bid.
MCP_ALLOW_UNAUTHENTICATEDNoAllow unauthenticated access; only behind a proxy that already authenticates users.false
GOOGLE_ADS_DEVELOPER_TOKENYesGoogle Ads developer token from the API Center in your Google Ads manager account.
GOOGLE_ADS_MAX_DAILY_BUDGETNoMaximum allowed daily budget; no budget, campaign, or Performance Max campaign above this amount.
GOOGLE_ADS_LOGIN_CUSTOMER_IDNoYour manager (MCC) account ID. Required only when using an MCC account.
GOOGLE_ADS_IMPERSONATED_EMAILNoUser to impersonate with domain-wide delegation. Workspace only.
MCP_RATE_LIMIT_WINDOW_SECONDSNoRate-limit window in seconds.60
GOOGLE_ADS_SERVICE_ACCOUNT_PATHYesPath to the service-account JSON key.
GOOGLE_ADS_MAX_BUDGET_INCREASE_PCTNoMaximum allowed single budget increase percentage.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

Google Ads management with 47 tools for campaigns, ad groups, ads, keywords, Performance Max, budgets and reporting. SAFETY: any tool that can start or raise spend, or remove something, first returns a preview with confirmation_required=true and changes nothing. Show that preview to the user, and only call the tool again with confirm=true after the user explicitly approves. Pausing is never gated. Spend limits may refuse a request even when confirmed; report that to the user instead of retrying.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_accessible_accountsB

List all Google Ads accounts accessible via current credentials.

Returns accounts accessible through the authenticated MCC or direct account.

get_account_infoB

Get details for a Google Ads account (name, currency, timezone, etc.).

Args:
    customer_id: Google Ads customer ID (e.g., '123-456-7890' or '1234567890').
get_account_hierarchyB

Get the MCC account hierarchy tree.

Lists all child accounts under the given MCC account.

Args:
    customer_id: MCC customer ID. Uses default if not provided.
list_ad_groupsA

List ad groups in a campaign.

Args:
    customer_id: Google Ads customer ID.
    campaign_id: Campaign ID to list ad groups for.
    status_filter: Optional -- 'ENABLED', 'PAUSED', or 'REMOVED'.
    limit: Max ad groups to return (default 100).
get_ad_groupC

Get details for a single ad group.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID.
create_ad_groupA

Create a new ad group in a campaign.

Safety: creating an ENABLED ad group or setting a bid returns a preview
first; call again with confirm=True. A PAUSED ad group with no bid is
created immediately. Refused if cpc_bid is above GOOGLE_ADS_MAX_CPC_BID.

Args:
    customer_id: Google Ads customer ID.
    campaign_id: Campaign ID to create the ad group in.
    name: Ad group name.
    cpc_bid: Max CPC bid in currency (e.g., 2.50 for $2.50).
    target_cpa: Target CPA in currency (overrides campaign-level if set).
    ad_group_type: Ad group type -- 'SEARCH_STANDARD', 'DISPLAY_STANDARD',
        'VIDEO_TRUE_VIEW_IN_STREAM', 'VIDEO_BUMPER', etc.
    status: Initial status -- 'ENABLED' (default) or 'PAUSED'.
    confirm: Must be True to create an ENABLED ad group or one with bids.
update_ad_groupA

Update an existing ad group.

Only provided fields will be updated.

Safety: bid changes, enabling and removing return a preview first; call
again with confirm=True. Renaming and pausing apply immediately. Refused if
cpc_bid is above GOOGLE_ADS_MAX_CPC_BID.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID to update.
    name: New ad group name.
    cpc_bid: New max CPC bid in currency.
    target_cpa: New target CPA in currency.
    status: New status -- 'ENABLED', 'PAUSED', or 'REMOVED'.
    confirm: Must be True to apply a gated change.
set_ad_group_statusA

Set an ad group's status (enable, pause, or remove).

Safety: PAUSED applies immediately; ENABLED and REMOVED return a preview
first and need confirm=True.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID.
    status: New status -- 'ENABLED', 'PAUSED', or 'REMOVED'.
    confirm: Must be True to enable or remove.
list_adsA

List ads in an ad group with approval status.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID.
    status_filter: Optional -- 'ENABLED', 'PAUSED', or 'REMOVED'.
    limit: Max ads to return (default 50).
create_responsive_search_adA

Create a Responsive Search Ad (RSA) for Search campaigns.

Google will automatically test combinations of headlines and descriptions.

Safety: an ENABLED ad returns a preview first; call again with confirm=True.
A PAUSED ad is created immediately.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID (must be in a Search campaign).
    headlines: 3-15 headline strings (max 30 chars each).
    descriptions: 2-4 description strings (max 90 chars each).
    final_urls: List of landing page URLs (at least one required).
    path1: Optional display URL path 1 (max 15 chars).
    path2: Optional display URL path 2 (max 15 chars, requires path1).
    status: Ad status -- 'ENABLED' (default) or 'PAUSED'.
create_responsive_display_adA

Create a Responsive Display Ad for Display campaigns.

Safety: an ENABLED ad returns a preview first; call again with confirm=True.
A PAUSED ad is created immediately.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID (must be in a Display campaign).
    headlines: 1-5 short headlines (max 30 chars each).
    long_headline: Long headline (max 90 chars).
    descriptions: 1-5 descriptions (max 90 chars each).
    marketing_images: List of landscape image asset resource names (1200x628).
    square_marketing_images: List of square image asset resource names (1200x1200).
    logo_images: List of logo asset resource names.
    business_name: Business name (max 25 chars).
    final_urls: Landing page URLs.
    call_to_action_text: Optional CTA text.
    status: Ad status -- 'ENABLED' (default) or 'PAUSED'.
create_video_adA

Create a Video ad for Video campaigns (YouTube).

Safety: an ENABLED ad returns a preview first; call again with confirm=True.
A PAUSED ad is created immediately.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID (must be in a Video campaign).
    youtube_video_id: YouTube video ID (e.g., 'dQw4w9WgXcQ').
    final_urls: Landing page URLs.
    headline: Optional headline for the ad.
    description: Optional description.
    call_to_action_text: CTA button text (e.g., 'Learn More', 'Shop Now').
    ad_format: Video ad format -- 'IN_STREAM' (skippable), 'BUMPER' (6-sec non-skip),
        'IN_FEED' (discovery/in-feed).
    companion_banner_asset: Optional companion banner image asset resource name.
    status: Ad status -- 'ENABLED' (default) or 'PAUSED'.
create_demand_gen_adA

Create a Demand Gen ad (serves on YouTube, Gmail, Discover).

Safety: an ENABLED ad returns a preview first; call again with confirm=True.
A PAUSED ad is created immediately.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID (must be in a Demand Gen campaign).
    headlines: 1-5 headlines (max 40 chars each).
    descriptions: 1-5 descriptions (max 90 chars each).
    marketing_images: Landscape image asset resource names.
    logo_images: Logo asset resource names.
    final_urls: Landing page URLs.
    business_name: Business name.
    call_to_action_text: Optional CTA text.
    status: Ad status -- 'ENABLED' (default) or 'PAUSED'.
set_ad_statusA

Set an ad's status (enable, pause, or remove).

Safety: PAUSED applies immediately; ENABLED and REMOVED return a preview
first and need confirm=True.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID containing the ad.
    ad_id: Ad ID.
    status: New status -- 'ENABLED', 'PAUSED', or 'REMOVED'.
get_ad_detailsB

Get full details of an ad (headlines, descriptions, URLs, assets).

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID containing the ad.
    ad_id: Ad ID.
list_budgetsC

List campaign budgets in the account.

Args:
    customer_id: Google Ads customer ID.
    limit: Max budgets to return (default 100).
create_budgetA

Create a new campaign budget.

Safety: returns a preview first. Call again with confirm=True to create it.
Refused if the amount is above GOOGLE_ADS_MAX_DAILY_BUDGET.

Args:
    customer_id: Google Ads customer ID.
    name: Budget name.
    amount: Daily budget amount in currency (e.g., 50.00 for $50/day).
    delivery_method: 'STANDARD' (spread evenly) or 'ACCELERATED'.
    explicitly_shared: If True, budget can be shared across multiple campaigns.
    confirm: Must be True to actually create the budget (after reviewing the preview).
update_budgetA

Update an existing campaign budget.

Safety: changing the amount or delivery method returns a preview first
(current vs new amount); call again with confirm=True to apply. Renaming
only is applied immediately. Refused if the new amount breaks
GOOGLE_ADS_MAX_DAILY_BUDGET or GOOGLE_ADS_MAX_BUDGET_INCREASE_PCT.

Args:
    customer_id: Google Ads customer ID.
    budget_id: Budget ID to update.
    amount: New daily budget amount in currency.
    name: New budget name.
    delivery_method: New delivery method -- 'STANDARD' or 'ACCELERATED'.
    confirm: Must be True to apply an amount or delivery change.
get_budget_utilizationB

Get budget vs actual spend for campaigns.

Shows how much of each campaign's budget has been utilized.

Args:
    customer_id: Google Ads customer ID.
    date_range: Date range (predefined or 'YYYY-MM-DD,YYYY-MM-DD').
    campaign_id: Optional -- filter to a single campaign.
list_campaignsA

List campaigns in a Google Ads account.

Args:
    customer_id: Google Ads customer ID.
    status_filter: Optional filter -- 'ENABLED', 'PAUSED', or 'REMOVED'.
    limit: Max campaigns to return (default 100).
get_campaignC

Get details for a single campaign.

Args:
    customer_id: Google Ads customer ID.
    campaign_id: The campaign ID.
create_campaignA

Create a new campaign with a budget.

Creates both the campaign budget and campaign in a single atomic operation.
Campaign is created as PAUSED by default for safety.

Safety: returns a preview first; call again with confirm=True to create it.
Refused if budget_amount is above GOOGLE_ADS_MAX_DAILY_BUDGET.

Args:
    customer_id: Google Ads customer ID.
    name: Campaign name.
    budget_amount: Daily budget in currency (e.g., 50.00 for $50/day).
    channel_type: Campaign type -- 'SEARCH', 'DISPLAY', 'VIDEO', 'DEMAND_GEN', 'SHOPPING'.
    bidding_strategy: Bidding strategy -- 'MAXIMIZE_CONVERSIONS', 'MAXIMIZE_CONVERSION_VALUE',
        'MAXIMIZE_CLICKS', 'TARGET_SPEND', 'MANUAL_CPC', 'TARGET_CPA', 'TARGET_ROAS'.
    target_cpa: Target CPA in currency (required if bidding_strategy is TARGET_CPA).
    target_roas: Target ROAS as a decimal (e.g., 3.0 for 300% ROAS).
    network_settings: Optional dict with keys: target_google_search, target_search_network,
        target_content_network (all bool).
    start_date: Campaign start date (YYYY-MM-DD). Defaults to today.
    end_date: Optional campaign end date (YYYY-MM-DD).
    status: Initial status -- 'PAUSED' (default, recommended) or 'ENABLED'.
    confirm: Must be True to actually create the campaign (after reviewing the preview).
update_campaignA

Update an existing campaign's properties.

Only provided fields will be updated.

Safety: enabling or removing the campaign, or changing bidding targets or
dates, returns a preview first; call again with confirm=True to apply.
Renaming and pausing are applied immediately.

Args:
    customer_id: Google Ads customer ID.
    campaign_id: Campaign ID to update.
    name: New campaign name.
    status: New status -- 'ENABLED', 'PAUSED'.
    target_cpa: New target CPA (for maximize_conversions with target).
    target_roas: New target ROAS (for maximize_conversion_value with target).
    start_date: New start date (YYYY-MM-DD).
    end_date: New end date (YYYY-MM-DD).
    confirm: Must be True to apply a gated change.
set_campaign_statusA

Set a campaign's status (enable, pause, or remove).

Safety: PAUSED is applied immediately (it stops spend). ENABLED and REMOVED
return a preview first; call again with confirm=True to apply.

Args:
    customer_id: Google Ads customer ID.
    campaign_id: Campaign ID.
    status: New status -- 'ENABLED', 'PAUSED', or 'REMOVED'.
    confirm: Must be True to enable or remove.
remove_campaignA

Soft-delete (remove) a campaign.

This is a destructive operation. The campaign will be set to REMOVED status.
Safety: returns a preview first; call again with confirm=True to remove.

Args:
    customer_id: Google Ads customer ID.
    campaign_id: Campaign ID to remove.
    confirm_removal: Older name for confirm; either one set to True proceeds.
    confirm: Must be True to proceed (after reviewing the preview).
list_keywordsA

List keywords in an ad group.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID.
    status_filter: Optional -- 'ENABLED', 'PAUSED', or 'REMOVED'.
    limit: Max keywords to return (default 200).
add_keywordsA

Add keywords to an ad group (batch operation).

Safety: new keywords are live immediately in an enabled ad group, so this
returns a preview first; call again with confirm=True. Refused if any
cpc_bid is above GOOGLE_ADS_MAX_CPC_BID.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID to add keywords to.
    keywords: List of keyword dicts, each with:
        - text (str): The keyword text.
        - match_type (str): 'EXACT', 'PHRASE', or 'BROAD'.
        - cpc_bid (float, optional): Max CPC bid in currency.

Example:
    keywords=[
        {"text": "buy shoes online", "match_type": "PHRASE", "cpc_bid": 1.50},
        {"text": "running shoes", "match_type": "BROAD"},
        {"text": "[red running shoes]", "match_type": "EXACT", "cpc_bid": 2.00},
    ]
remove_keywordA

Remove a keyword from an ad group.

Safety: returns a preview first; call again with confirm=True to remove.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID containing the keyword.
    criterion_id: Keyword criterion ID to remove.
    confirm_removal: Older name for confirm; either one set to True proceeds.
    confirm: Must be True to proceed (after reviewing the preview).
update_keyword_bidA

Update the CPC bid for a keyword.

Safety: returns a preview first; call again with confirm=True. Refused if
cpc_bid is above GOOGLE_ADS_MAX_CPC_BID.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID containing the keyword.
    criterion_id: Keyword criterion ID to update.
    cpc_bid: New max CPC bid in currency (e.g., 2.50 for $2.50).
    confirm: Must be True to apply the new bid.
get_keyword_performanceB

Get keyword performance metrics for an ad group.

Args:
    customer_id: Google Ads customer ID.
    ad_group_id: Ad group ID.
    date_range: Date range (predefined or 'YYYY-MM-DD,YYYY-MM-DD').
    limit: Max rows (default 100).
create_performance_max_campaignA

Create a complete Performance Max campaign with budget, campaign, and asset group.

Creates everything in a single atomic batch operation using temporary IDs.
Campaign is created as PAUSED by default for safety.

Safety: returns a preview first; call again with confirm=True to create it.
Refused if budget_amount is above GOOGLE_ADS_MAX_DAILY_BUDGET.

PMax minimum requirements:
- 3+ headlines (max 30 chars each)
- 1+ long headlines (max 90 chars)
- 2+ descriptions (max 90 chars each)
- 1 business name
- Final URLs
- Image assets should be pre-uploaded (use asset resource names)

Args:
    customer_id: Google Ads customer ID.
    campaign_name: Campaign name.
    budget_amount: Daily budget in currency.
    asset_group_name: Name for the asset group.
    final_urls: Landing page URLs.
    headlines: 3-15 headlines (max 30 chars each).
    long_headlines: 1-5 long headlines (max 90 chars each).
    descriptions: 2-5 descriptions (max 90 chars each).
    business_name: Business name for the asset group.
    marketing_image_assets: Landscape image asset resource names (1200x628).
    square_image_assets: Square image asset resource names (1200x1200).
    logo_assets: Logo image asset resource names.
    youtube_video_assets: YouTube video asset resource names.
    bidding_strategy: 'MAXIMIZE_CONVERSIONS' or 'MAXIMIZE_CONVERSION_VALUE'.
    target_cpa: Target CPA (for maximize_conversions with target).
    target_roas: Target ROAS (for maximize_conversion_value with target).
    status: Initial status -- 'PAUSED' (default) or 'ENABLED'.
    confirm: Must be True to actually create the campaign (after reviewing the preview).
list_asset_groupsC

List asset groups in a Performance Max campaign.

Args:
    customer_id: Google Ads customer ID.
    campaign_id: PMax campaign ID.
get_asset_group_detailsB

Get full details of an asset group including linked assets and signals.

Args:
    customer_id: Google Ads customer ID.
    asset_group_id: Asset group ID.
add_assets_to_groupA

Add assets to an existing asset group (batch link operation).

Args:
    customer_id: Google Ads customer ID.
    asset_group_id: Asset group ID.
    assets: List of asset dicts, each with:
        - asset_resource_name (str): Full asset resource name.
        - field_type (str): Asset field type -- 'HEADLINE', 'LONG_HEADLINE',
          'DESCRIPTION', 'BUSINESS_NAME', 'MARKETING_IMAGE',
          'SQUARE_MARKETING_IMAGE', 'LOGO', 'YOUTUBE_VIDEO', 'CALL_TO_ACTION_SELECTION'.

Example:
    assets=[
        {"asset_resource_name": "customers/123/assets/456", "field_type": "HEADLINE"},
        {"asset_resource_name": "customers/123/assets/789", "field_type": "MARKETING_IMAGE"},
    ]
remove_asset_from_groupA

Remove an asset from an asset group.

Safety: returns a preview first; call again with confirm=True to remove.

Args:
    customer_id: Google Ads customer ID.
    asset_group_id: Asset group ID.
    asset_resource_name: Full resource name of the asset to unlink.
    field_type: The field type of the asset link (e.g., 'HEADLINE', 'MARKETING_IMAGE').
    confirm_removal: Older name for confirm; either one set to True proceeds.
    confirm: Must be True to proceed (after reviewing the preview).
add_audience_signalA

Add audience or search theme signals to a PMax asset group.

Audience signals help Google's AI find the right customers. They're suggestions,
not hard targeting constraints.

Args:
    customer_id: Google Ads customer ID.
    asset_group_id: Asset group ID.
    audience_resource_name: Audience resource name (from audience manager).
    search_themes: List of search theme strings (keywords that describe your ideal customer).
get_asset_performanceB

Get asset-level performance labels (BEST, GOOD, LOW, etc.) for PMax.

Args:
    customer_id: Google Ads customer ID.
    campaign_id: Optional -- filter to a specific campaign.
    asset_group_id: Optional -- filter to a specific asset group.
get_pmax_placement_performanceA

Get PMax placement performance breakdown (Search, YouTube, Display, Discover, Gmail).

Args:
    customer_id: Google Ads customer ID.
    campaign_id: PMax campaign ID.
    date_range: Date range (predefined or 'YYYY-MM-DD,YYYY-MM-DD').
execute_gaqlA

Execute an arbitrary GAQL (Google Ads Query Language) query.

This is the most flexible tool -- use it for any read query not covered by other tools.
GAQL reference: https://developers.google.com/google-ads/api/docs/query/overview

Args:
    customer_id: Google Ads customer ID.
    query: Full GAQL query string (SELECT ... FROM ... WHERE ...).
get_campaign_performanceA

Get campaign performance metrics over a date range.

Args:
    customer_id: Google Ads customer ID.
    date_range: Date range -- use predefined (LAST_7_DAYS, LAST_30_DAYS, THIS_MONTH,
        LAST_MONTH, etc.) or custom 'YYYY-MM-DD,YYYY-MM-DD'.
    campaign_id: Optional -- filter to a single campaign.
    status_filter: Optional -- filter by status (ENABLED, PAUSED, REMOVED).
    limit: Max rows to return (default 50).
get_ad_group_performanceC

Get ad group performance metrics.

Args:
    customer_id: Google Ads customer ID.
    campaign_id: Optional -- filter to ad groups in this campaign.
    date_range: Date range (predefined or 'YYYY-MM-DD,YYYY-MM-DD').
    limit: Max rows (default 50).
get_search_terms_reportC

Get search terms that triggered your ads.

Args:
    customer_id: Google Ads customer ID.
    campaign_id: Optional campaign filter.
    ad_group_id: Optional ad group filter.
    date_range: Date range (predefined or 'YYYY-MM-DD,YYYY-MM-DD').
    limit: Max rows (default 100).
get_keyword_performance_reportB

Get keyword-level performance metrics.

Args:
    customer_id: Google Ads customer ID.
    campaign_id: Optional campaign filter.
    ad_group_id: Optional ad group filter.
    date_range: Date range (predefined or 'YYYY-MM-DD,YYYY-MM-DD').
    limit: Max rows (default 100).
get_account_performance_summaryC

Get account-level daily performance summary.

Args:
    customer_id: Google Ads customer ID.
    date_range: Date range (predefined or 'YYYY-MM-DD,YYYY-MM-DD').
list_gaql_resourcesA

List available GAQL FROM-clause resources for use with execute_gaql.

Returns commonly used resource names that can be queried via GAQL.
get_field_metadataA

Get selectable, filterable, and sortable fields for a GAQL resource.

Args:
    resource_type: Resource name (e.g., 'campaign', 'ad_group', 'ad_group_ad').
    customer_id: Customer ID (uses default if not provided).
convert_microsA

Convert between micros and currency amounts.

Google Ads uses micros for monetary values: $1.00 = 1,000,000 micros.

Args:
    value: The value to convert.
    direction: 'to_micros' (currency to micros) or 'from_micros' (micros to currency).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.3/5.0

Scored across 47 tools

Disambiguation3/5

Most tools target distinct resources and actions, but several boundaries blur: get_keyword_performance overlaps heavily with get_keyword_performance_report, and status changes can be done via set_*_status, update_*, or remove_campaign. execute_gaql intentionally overlaps every read tool as a fallback, which is reasonable but adds selection ambiguity.

Naming Consistency5/5

Tool names consistently use snake_case verb_noun conventions such as list_budgets, create_campaign, update_ad_group, and set_ad_status. Minor singular/plural and _report suffix differences do not break the overall predictable pattern.

Tool Count2/5

At 47 tools, the surface is well above the typical 3-15 sweet spot and includes overlapping helpers and duplicate reporting paths. Google Ads is a broad domain, but this set would benefit from consolidation and fewer near-duplicate status/performance tools.

Completeness3/5

Core campaign, ad group, ad, keyword, budget, PMax, and reporting workflows are covered, and execute_gaql helps fill read gaps. However, notable gaps remain, especially no asset upload/management tool despite display and PMax ad creation requiring pre-uploaded asset resource names, plus limited targeting, conversion, and ad-content update support.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues