google_ads_get_search_terms_report

Get Google Ads Search Terms Report

Google

Description

Get actual search queries that triggered ads, with performance metrics and keyword match status. Google may not disclose all terms for privacy. Supports segments parameter (e.g., ad_network_type) for channel-level breakdown — use to compare Search vs Search Partners per search term. Always fetches fresh data. Conversion breakdown (keyed by search term) and landing page lookups are opt-in to control response size. Passing conversion_action_name in segments auto-enables conversion breakdown. If a breakdown query fails, that breakdown comes back empty and \

Read-onlyIdempotentOpen-world

Usage

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "google_ads_get_search_terms_report",
    "arguments": {
      "customer_id": "1234567890",
      "date_preset": "LAST_7_DAYS",
      "reason": "Search term analysis"
    }
  }
}

Parameters

NameTypeRequiredDescription
customer_id string Required The Google Ads Customer ID (10 digits, with or without dashes)maxLength: 20, pattern: ^[\d-]+$
reason string Required Why this tool call is neededminLength: 1, maxLength: 500
Optional parameters (15)
NameTypeRequiredDescription
login_customer_id string Optional MCC (Manager) Customer ID; required for managed accountsmaxLength: 20, pattern: ^[\d-]+$
date_preset string Optional Predefined date range: TODAY, YESTERDAY, LAST_7_DAYS, LAST_30_DAYS, THIS_MONTH, LAST_MONTH. LAST_7_DAYS / LAST_30_DAYS are the 7 / 30 complete days ending yesterday (account time zone), as in Google Ads; THIS_MONTH runs through today.
TODAY YESTERDAY LAST_7_DAYS LAST_30_DAYS THIS_MONTH LAST_MONTH
date_range object Optional Custom date range {start_date, end_date} in YYYY-MM-DD
campaign_id string Optional Filter to a specific campaign IDmaxLength: 20, pattern: ^\d+$
ad_group_id string Optional Filter to a specific ad group IDmaxLength: 20, pattern: ^\d+$
search_term_status array Optional Filter by search term status: ADDED, EXCLUDED, ADDED_EXCLUDED, NONE
limit integer Optional Page size: rows per page (1-1000, default 40). `count` in the response is the total across all pages; when more rows remain, the response includes a top-level `nextCursor`. To get more rows, follow `nextCursor` rather than raising `limit`: the default keeps a page (about 1,000 characters per row) inside what MCP clients accept.min: 1, max: 1000
cursor string Optional Opaque pagination cursor: the `nextCursor` value from the previous response. Pass it back unchanged, with the same filters, segments and order_by, to fetch the next page. Omit for the first page.
order_by string Optional Sort by metric (descending): impressions, clicks, cost, conversions, ctr. Rows that tie on the metric keep a fixed order across pages. Every page re-reads live data, so metrics that change between page requests (a window that includes today, conversions still being reported, or a date_preset that rolls over at midnight in the account time zone) can move a row across a page boundary; for an exact walk of every row, use a date_range that ended before today.
impressions clicks cost conversions ctr
include_all_conversions boolean Optional When true, includes an additional all-conversions breakdown (metrics.all_conversions, all_conversions_value, value_per_all_conversions) segmented by conversion_action_name. This captures ALL conversion actions including those not marked "Include in Conversions".
include_conversion_breakdown boolean Optional When true, includes a conversion breakdown by conversion action for the returned search terms (keyed by search term text; a term that ran in several of the returned ad groups is summed across them). The breakdown on each page covers only the rows on that page, so breakdowns from successive pages add up without counting a conversion twice. Adds significant response size — omit when response size is a concern. Default: false.
include_landing_pages boolean Optional When true, runs a parallel query against ad_group_ad to fetch final_urls for each ad group in the results. Returns landing_pages_by_ad_group map keyed by ad_group_id. Default: false.
pmax_search_categories boolean Optional When true, queries campaign_search_term_insight for PMax search category data (grouped themes, not individual queries). ad_group_id and search_term_status are ignored in this mode. Default: false.
segments array Optional Segments to break down by (e.g., ad_network_type, device). Use ad_network_type to split search term metrics by channel (SEARCH vs SEARCH_PARTNERS). If conversion_action or conversion_action_name is included, it is automatically stripped from the main query and a parallel conversion breakdown query runs instead. Ignored when pmax_search_categories is true.
connection_id string Optional Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs.

Examples

Top search terms

{
  "customer_id": "1234567890",
  "date_preset": "LAST_7_DAYS",
  "reason": "Search term analysis"
}

hopkin google search-terms-report get --customer-id 1234567890 --date-preset LAST_7_DAYS

New terms only

{
  "customer_id": "1234567890",
  "date_preset": "LAST_7_DAYS",
  "search_term_status": [
    "NONE"
  ],
  "order_by": "conversions",
  "reason": "Find new converting search terms"
}

hopkin google search-terms-report get --customer-id 1234567890 --date-preset LAST_7_DAYS --search-term-status NONE --order-by conversions

With landing pages

{
  "customer_id": "1234567890",
  "date_preset": "LAST_7_DAYS",
  "include_landing_pages": true,
  "reason": "Find which landing pages top search terms go to"
}

hopkin google search-terms-report get --customer-id 1234567890 --date-preset LAST_7_DAYS --include-landing-pages true

PMax search categories

{
  "customer_id": "1234567890",
  "campaign_id": "5555555555",
  "date_preset": "LAST_30_DAYS",
  "pmax_search_categories": true,
  "reason": "PMax search category analysis"
}

hopkin google search-terms-report get --customer-id 1234567890 --campaign 5555555555 --date-preset LAST_30_DAYS --pmax-search-categories true

By network channel

{
  "customer_id": "1234567890",
  "date_preset": "LAST_30_DAYS",
  "segments": [
    "ad_network_type"
  ],
  "reason": "Search terms by ad network"
}

hopkin google search-terms-report get --customer-id 1234567890 --date-preset LAST_30_DAYS --segments ad_network_type

Next page

{
  "customer_id": "1234567890",
  "date_preset": "LAST_30_DAYS",
  "cursor": "eyJvZmZzZXQiOjQwfQ==",
  "reason": "Fetch the next page of search terms using nextCursor from the previous response"
}

hopkin google search-terms-report get --customer-id 1234567890 --date-preset LAST_30_DAYS --cursor eyJvZmZzZXQiOjQwfQ==