Get search insight
get_search_insightAnswers one common Search Console question, chosen with kind, with tested thresholds, and says how in a method block. Google keeps and returns rows ranked by clicks, up to a daily row limit, so on large sites low-click rows can be missing even when the result is not truncated, and such a row can then show as new, lost or a zombie. Data comes from the site’s connected Google Search Console property, web search only. By default the period is the last 28 days that have final data, which usually ends 2 to 3 days ago. Search Console does not separate AI Overviews or AI Mode traffic from web search. new_rankings, improving, and declining compare the period with the 28 days before it by default. The default period does not apply to zombie_pages, which has its own fixed period. Every kind takes projectId, cursor and pageSize; an input the kind does not take gives invalid_arguments. Page through with cursor and nextCursor.
top_rankings: Which pages or queries have the strongest Google visibility? The most clicks, or the most impressions with sortBy "impressions", with at least 50 impressions by default. Inputs: startDate, endDate, includeSearchOperatorQueries, rowCap, dimension, minImpressions, sortBy.
new_rankings: Which pages or queries started to appear in Google Search? At least 50 impressions in the period by default and no row in the comparison period. Most impressions first. Nothing is listed as new when the comparison read hits the row cap. Inputs: startDate, endDate, includeSearchOperatorQueries, rowCap, compareWith, dimension, minImpressions.
improving: Which pages or queries are gaining? Average position up by 1 or more, or clicks or impressions up against the property. A change in clicks or impressions counts when it beats or trails the whole property’s change by at least 20 percentage points by default, so a site-wide drop does not flag every row. Rows that moved both ways are counted in mixedRows and listed in neither. Rows need 50 impressions in both periods by default. Biggest click gain first. Inputs: startDate, endDate, includeSearchOperatorQueries, rowCap, compareWith, dimension, minImpressions, relativeDeltaPoints.
declining: Which pages or queries are losing traffic or rankings? Average position down by 1 or more, or clicks or impressions down against the property, plus rows with enough impressions before and none now (status "lost", left out when the current read hits the row cap). A change in clicks or impressions counts when it beats or trails the whole property’s change by at least 20 percentage points by default, so a site-wide drop does not flag every row. Rows that moved both ways are counted in mixedRows and listed in neither. Declined rows need 50 impressions in both periods by default, and lost rows in the comparison period. Each declined page carries a likely cause: position_loss (position worse by 2 or more), demand_loss (position stable, impressions fell against the property), ctr_loss (position and impressions stable, CTR fell) or unclear. Biggest click loss first. Inputs: startDate, endDate, includeSearchOperatorQueries, rowCap, compareWith, dimension, minImpressions, relativeDeltaPoints.
low_hanging_fruits: Which pages or queries rank just below the top results and are easiest to improve? An average position from 11 up to, not including, 21, with at least 50 impressions by default. Most impressions first. Inputs: startDate, endDate, includeSearchOperatorQueries, rowCap, dimension, minImpressions.
underperforming: Which pages or queries get fewer clicks than their position should give? At least 100 impressions by default and a CTR below 50% of the expected CTR of their position band. The bands are average positions 1, 2, 3, 4 to 5, 6 to 10, 11 to 20; a band from a to b holds positions from a up to, not including, b + 1. Expected CTR is the property's median CTR over the band's rows with 50 or more impressions; a band under 1,000 impressions, or with no such row, uses an approximate industry CTR, and method.bands gives each source. A band whose median CTR is 0 lists no rows. Most missed clicks first. Inputs: startDate, endDate, includeSearchOperatorQueries, rowCap, dimension, minImpressions.
cannibalization: Which search queries have 2 or more pages of the site competing? Groups are signals with no search intent or page-role check. Queries group by exact and close match (English rules): case, accents, punctuation (. and - split words, & is and), a possessive 's, word order, stop words, and a regular plural when the singular is also in the data; other symbols stay part of a word, as in c++. A group needs 100 impressions by default and 2 or more pages that each get 10% or more of its page impressions; Google counts an impression for each page a search shows. brandTerms leaves out every group with a brand query. Most impressions first. Inputs: startDate, endDate, includeSearchOperatorQueries, rowCap, brandTerms, minImpressions.
zombie_pages: Which pages in the submitted sitemaps got no Google impressions in the last 90 days of final data? Its period is fixed. A sitemap URL whose canonical URL is another one has no data of its own, so it shows as a zombie. Sitemap indexes are read one level deep, up to 50 sitemaps and 50,000 URLs. Pages with a sitemap lastmod in the last 30 days count as recent, not zombie; a page with no lastmod is never skipped. URLs match without scheme, www, host case, trailing slash or fragment. Rows are the zombie pages, then sitemap entries Search Console cannot report (status unmatched). counts, unreadSitemaps and pageRowsRead give the rest. The sitemaps are downloaded from the site, so they can differ from what Google last read. Inputs: none of its own.
question_queries: Which search queries are questions or long and conversational, and so show what people ask? Queries that start with an English question word (who, what, when, where, why, how, which, can, does, do, is, are, should, will) or have 6 or more words; each row says which rule it met. Words are whole words, so a query never matches because a word contains "ai". This tool does not detect AI search traffic. Most impressions first. Inputs: startDate, endDate, includeSearchOperatorQueries, rowCap.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"projectId": "<projectId>",
"kind": "<kind>"
},
"name": "get_search_insight"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | The question to answer. The description lists each kind with its rule and inputs. | |
| cursor | No | nextCursor from the previous page. Keep every other input the same; pageSize may change. Later pages come from the rows read for the first page, with no new Search Console read. A cursor expires 10 minutes after the first page was read, or earlier if those rows leave the cache or the site's Search Console property or default period changes; then start again without a cursor. | |
| rowCap | No | Most rows to read from Google for each query or page list; default 50,000, at most 200,000. The result says truncated when the cap stopped a read. | |
| sortBy | No | Rank by clicks (default) or by impressions. | |
| endDate | No | Last day, YYYY-MM-DD. Defaults to the last day with final data. A later day reads data Google still collects, and the result says so. | |
| pageSize | No | Rows per page. Default 50. | |
| dimension | No | "page" lists pages; "query" lists search queries. Required by every kind that takes it. | |
| projectId | Yes | Site to act on, from list_sites. Only its connected Search Console property is used. | |
| startDate | No | First day, YYYY-MM-DD. Defaults to 28 days ending on endDate. | |
| brandTerms | No | Leave out every query group with a query that contains every word of one of these, such as the brand name, as whole words in any order. A possessive or a regular plural of a word also matches, so Lowe's matches lowes. Close matches of a brand query leave with its group, so Bank of America also removes the group of bank america. A one-word term matches every query with that word, so give the full brand, such as On Running. | |
| compareWith | No | "previous": the period of equal length just before. "sameLastYear": the same dates one year earlier, for seasonal sites. Default "previous". | |
| minImpressions | No | Impressions a row, or a query group for cannibalization, needs. Default 50; 100 for underperforming, 100 for cannibalization. | |
| relativeDeltaPoints | No | Percentage points by which a row’s clicks or impressions change must beat or trail the whole property’s change. Default 20. | |
| includeSearchOperatorQueries | No | Keep queries with a search operator, such as site:, inurl:, intitle:, filetype: or before:, in the lists. Totals always include them. Default false. |