Search Console: Query Clusters and AI Visibility

Management Summary
Grouping search terms by topic turns Google Search Console data into a clearer picture of demand, such as interest in prices, product connections or comparisons. This helps website teams understand which subjects attract attention and how that interest changes. Visibility in Google’s AI answers adds another perspective, but overlaps with general search reporting and cannot reliably be assigned to these topic groups. A decline in clicks alone therefore does not establish that AI caused the loss.
Contents
Query clusters group search terms by topic, such as pricing or integrations. Regex filters use text patterns to identify matching terms; Search Console already supports groups built with these filters. A dashboard adds reusable categories and several trends in one view. This tutorial combines query clusters from the Search Analytics API or the native connector with a separate view of Google’s generative AI impressions.
The two data sets answer different questions: query clusters describe reported search demand; the Generative AI performance report shows impressions in AI Overviews and AI Mode. A fall in clicks alone does not measure AI visibility.

1. Choose the data source and aggregation
The interface exports at most 1,000 table rows. The API returns up to 25,000 rows per request and exposes at most 50,000 per day and search type, sorted by clicks. Pagination does not recover every rare query. For recurring exports, requests for individual completed days keep the daily boundary clear.
The request below is an example body for one day, not a complete export program. An OAuth access token with access to the property is required; a read-only scope is sufficient. The property identifier must match Search Console, for example a URL-prefix property or sc-domain:example.com. The API dates use Pacific Time. A production job needs pagination, retries, an explicit property/date/search-type key and replacement of previously imported days to avoid duplicates.
POST https://www.googleapis.com/webmasters/v3/sites/https%3A%2F%2Fexample.com%2F/searchAnalytics/query
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
{
"startDate": "2026-07-01",
"endDate": "2026-07-01",
"dimensions": [
"query"
],
"type": "web",
"dataState": "final",
"rowLimit": 25000,
"startRow": 0
}For the next page, the same request keeps its date and filters and increases startRow by 25,000. Fewer than 25,000 returned rows ends that day’s retrieval; a full last page requires one further request, which can be empty. This completes only the rows exposed by the API, not the hidden or truncated search history.
The native Search Console connector is an alternative to an API job. Site Impression groups data by property; URL Impression supports page-level analysis, including query and landing page. These aggregation levels can produce different totals. Comparing both requires separate data sources with matching dates, search type and filters.
2. Define and test regex rules
Search Console and Looker Studio use RE2 syntax. Lookahead and lookbehind are not supported. In the API, an excludingRegex filter excludes a pattern; an includingRegex filter includes it. Two filters in the same and group can combine inclusion and exclusion.
REGEXP_MATCH matches the complete field value. Wildcards are needed for a substring match. The example deliberately uses letter boundaries: a bare api would also match capital. These boundaries suit the sample vocabulary and need language-specific tests.
CASE
WHEN REGEXP_MATCH(Query, '(?i).*(^|[^a-ząćęłńóśźżäöüß])(acme|acmecorp|acme corp|acme app)([^a-ząćęłńóśźżäöüß]|$).*') THEN 'Brand'
ELSE 'Non-brand'
END(?i) explicitly enables case-insensitive matching. Brand aliases and product names belong in a maintained list; overly broad names can also classify unrelated searches as brand traffic. Classification describes search terms, not whether a visit was earned through content or advertising.
3. Build query clusters
The first matching CASE branch wins. This example gives brand priority over topics, then pricing over integrations and comparisons. An alternative policy is possible, but the priority must be documented and tested on queries matching several topics.
CASE
WHEN REGEXP_MATCH(Query, '(?i).*(^|[^a-ząćęłńóśźżäöüß])(acme|acmecorp|acme corp|acme app)([^a-ząćęłńóśźżäöüß]|$).*') THEN 'Brand'
WHEN REGEXP_MATCH(Query, '(?i).*(^|[^a-ząćęłńóśźżäöüß])(pricing|cost|how much)([^a-ząćęłńóśźżäöüß]|$).*') THEN 'Pricing'
WHEN REGEXP_MATCH(Query, '(?i).*(^|[^a-ząćęłńóśźżäöüß])(integration[a-z]*|api|webhooks?|sync)([^a-ząćęłńóśźżäöüß]|$).*') THEN 'Integrations'
WHEN REGEXP_MATCH(Query, '(?i).*(^|[^a-ząćęłńóśźżäöüß])(vs|alternative[a-z]*|compare)([^a-ząćęłńóśźżäöüß]|$).*') THEN 'Comparison'
ELSE 'Unmatched'
ENDUnmatched means that none of the configured patterns matched. Sorting these rows by impressions helps find missing terms and irrelevant matches. The categories are a reporting convention, not an exhaustive description of search intent.
4. Calculate comparable metrics
Useful charts include impressions and clicks by cluster over time, a cluster table and unmatched queries. Cluster CTR is SUM(Clicks) / SUM(Impressions), with no value when impressions are zero. CTR is the proportion of impressions that lead to a click. Averaging row CTRs gives a row with 10 impressions the same weight as one with 10,000 impressions, which can distort the result. Changes in taxonomy should be versioned, or historical comparisons may reflect changed rules.
Separate brand and non-brand trends can reveal changes hidden in a combined total. Brand traffic can vary with campaigns, seasonality and awareness, but higher conversion rates are not guaranteed. Search Console clicks are not the same as analytics sessions or completed purchases.
5. Add the separate generative AI report
As of 31 August 2026, Google documents a worldwide Generative AI performance report for Search, covering AI Overviews and AI Mode impressions. Its documented breakdowns include pages, countries, dates and devices, not query clusters. Report exports can supply a separately labelled dashboard table. The documented Search Analytics API and native connector do not establish an equivalent generative-AI dimension; the API example here does not fetch this report.
The generative report overlaps with Web performance data: adding its impressions to Web totals double-counts overlapping observations. A falling cluster CTR remains a diagnostic clue, not proof of AI displacement. Snippets, device mix and changing queries can also explain it. An AI-impression table cannot safely be joined to query clusters when its source has no query dimension.
6. Document data limits
Privacy filtering hides some query text, and row limits omit additional data. Query-filtered totals can therefore be smaller than unfiltered totals. Cluster shares describe the retrieved rows under the selected filters; the missing share cannot be assigned to a topic. The difference is not always solely anonymization.
The normal performance history covers 16 months. Longer comparisons require data stored before expiry; starting an export now does not recover expired history. Average position can be combined with impression weights only across compatible, non-overlapping rows: SUM(Position * Impressions) / SUM(Impressions). A plain average of row positions is unsuitable.
Questions and answers
How can brand terms be included while competitors are excluded?
Separate filters or ordered categories express compound conditions without lookahead. The choice depends on whether competitor queries should be removed or reported in a separate category.
A competitor branch before the brand branch places a query containing both names in the competitor category. A separate competitor exclusion filter removes the query entirely. These operations answer different questions and should not be treated as interchangeable.
The API can combine brand includingRegex and competitor excludingRegex in one and group. A chart can likewise combine inclusion and exclusion filters. These filters also change the population used for shares and comparisons.
The field description should record pattern version, language coverage and priority. Sample queries should cover brand plus topic, unrelated words containing short keywords, capitalization and unmatched values. Neither a passing regex test nor a complete page of API rows proves that all search demand was captured.
Sources
- Search Analytics API: request, authentication and limits
- Daily extraction and row limits
- Privacy filtering and aggregation
- Site Impression and URL Impression
- RE2 and full-field matching
- Search Console filters and comparisons
- Generative AI performance report
- Worldwide rollout, 31 August 2026
- History and diagnostic comparisons