AI Max for Search campaigns offers several reporting views, each with a different level of
granularity and focus.

## Reporting views

The following reporting views help you analyze AI Max for Search campaigns performance:

### Dedicated view: `ai_max_search_term_ad_combination_view`

[`ai_max_search_term_ad_combination_view`](https://developers.google.com/google-ads/api/fields/v26/ai_max_search_term_ad_combination_view)
([`AiMaxSearchTermAdCombinationView`](https://developers.google.com/google-ads/api/reference/rpc/v26/AiMaxSearchTermAdCombinationView)) is the most granular
report available for AI Max for Search campaigns. It shows the exact combination of user intent
(the search term) and dynamic assets (headline and landing page) that the system
used for the expansion.

- **Key fields:**
  - `search_term`: The query the user entered.
  - `landing_page`: The specific (often dynamically selected) URL the user was sent to.
  - `headline`: The concatenated headline assets used in the ad.
  - `segments.date`: The only segment selectable when querying `ai_max_search_term_ad_combination_view` directly. (To segment vertical ad performance by `segments.ad_format_type`, `segments.vertical_ads_listing_user_rating`, or `segments.vertical_ads_listing_venue`, query `ad_group`, `campaign`, or `customer` instead.)
- **Usage:** Best for auditing the relevance of AI-driven matches and seeing which "ad recipes" are converting.

### Search term attribution: `search_term_view`

To isolate the impact of AI Max for Search campaigns, use the standard search term report
[`search_term_view`](https://developers.google.com/google-ads/api/fields/v26/search_term_view)
([`SearchTermView`](https://developers.google.com/google-ads/api/reference/rpc/v26/SearchTermView)) and filter on
`segments.search_term_match_source`.

- **`AI_MAX_KEYWORDLESS`:** Matches derived from your website content or landing pages, requiring no keyword.
- **`AI_MAX_BROAD_MATCH`:** Matches that expanded upon your existing keywords using AI-driven broad match logic.
- **`VERTICAL_ADS_DATA_FEED`:** Matches derived from a linked vertical data feed (such as Hotels, Flights, Rental Cars, or Things to Do).

### Expanded landing page view: `expanded_landing_page_view`

Use [`expanded_landing_page_view`](https://developers.google.com/google-ads/api/fields/v26/expanded_landing_page_view)
([`ExpandedLandingPageView`](https://developers.google.com/google-ads/api/reference/rpc/v26/ExpandedLandingPageView)) to identify URLs
favored by AI Max for Search campaigns expansion. While `expanded_landing_page_view` aggregates
performance by `expanded_final_url`, it does not expose an asset reference.

- **Filter:** `campaign.ai_max_setting.enable_ai_max = TRUE`
- **Field:** `expanded_landing_page_view.expanded_final_url`

### Final URL expansion asset view: `final_url_expansion_asset_view`

Use [`final_url_expansion_asset_view`](https://developers.google.com/google-ads/api/fields/v26/final_url_expansion_asset_view)
([`FinalUrlExpansionAssetView`](https://developers.google.com/google-ads/api/reference/rpc/v26/FinalUrlExpansionAssetView)) to measure
asset-level performance for text customization assets served with Final URL
expansion:

- **Filter:** Queries must filter by `=` on a single `campaign.advertising_channel_type` (`'SEARCH'`, `'PERFORMANCE_MAX'`, or `'SHOPPING'`), `ad_group`, `asset_group`, or `campaign` (filtering by `campaign` also requires filtering by `campaign.advertising_channel_type`). For Search and Shopping campaigns, only `ad_group` can be selected or filtered on (selecting `asset_group` returns `FinalUrlExpansionAssetViewError.CANNOT_SELECT_ASSET_GROUP`).
- **Key fields:** `final_url_expansion_asset_view.asset`, `field_type`, `final_url`, `status`, and `ad_group` (or `asset_group`)
- **Attributed resources:** `campaign`, `ad_group`, `asset`, and `asset_group`

### Location of interest view: `matched_location_interest_view`

Use [`matched_location_interest_view`](https://developers.google.com/google-ads/api/fields/v26/matched_location_interest_view)
([`MatchedLocationInterestView`](https://developers.google.com/google-ads/api/reference/rpc/v26/MatchedLocationInterestView)) to analyze
performance segmented by the geographical locations of interest matched by
AI Max for Search campaigns at the ad group level. Data is aggregated at the country level by
default (encoded in `matched_location_interest_view.resource_name` as
`customers/{customer_id}/matchedLocationInterestViews/{country_criterion_id}`).

- **Attributed and segmenting resources:** `customer` (attributed), `campaign` (segmenting), and `ad_group` (segmenting)
- **Supported geographical and network segments:** `segments.geo_target_airport`, `segments.geo_target_canton`, `segments.geo_target_city`, `segments.geo_target_county`, `segments.geo_target_district`, `segments.geo_target_metro`, `segments.geo_target_most_specific_location`, `segments.geo_target_postal_code`, `segments.geo_target_province`, `segments.geo_target_region`, `segments.geo_target_state`, and `segments.ad_network_type`

## How to interpret the reports

When analyzing these reports, focus on the following three signals:

- **Incremental volume (expansion efficiency):** Compare metrics for `AI_MAX_KEYWORDLESS` with `ADVERTISER_PROVIDED_KEYWORD`. If the conversion rate (CVR) for Keywordless is comparable to your keywords but at a lower Cost Per Acquisition (CPA), the AI is successfully finding cost-effective incremental reach that your manual keyword list missed.
- **Match intent versus asset relevance:** In the `ai_max_search_term_ad_combination_view`, examine the `headline` items. Because these headlines are often concatenated or selected by AI, a mismatch between the `search_term` and the `headline` indicates where you may need to provide more diverse or relevant assets to the campaign.
- **Landing page performance:** If certain `landing_page` URLs in the report have high bounce rates or low conversions, it may indicate that the AI is over-indexing on specific pages of your site that are not optimized for conversions. You can use this data to refine your site or provide exclusion rules.

### Example GAQL

This query retrieves the search term, dynamically generated headline, and
expanded landing page together from `ai_max_search_term_ad_combination_view`:

    SELECT
      campaign.id,
      campaign.name,
      ai_max_search_term_ad_combination_view.search_term,
      ai_max_search_term_ad_combination_view.headline,
      ai_max_search_term_ad_combination_view.landing_page,
      metrics.impressions,
      metrics.clicks,
      metrics.conversions
    FROM ai_max_search_term_ad_combination_view
    WHERE segments.date DURING LAST_30_DAYS

This query returns search terms specifically driven by AI Max for Search campaigns expansion:

    SELECT
      campaign.id,
      campaign.name,
      search_term_view.search_term,
      segments.search_term_match_source,
      metrics.impressions,
      metrics.clicks,
      metrics.conversions
    FROM search_term_view
    WHERE
      segments.search_term_match_source IN (
        'AI_MAX_KEYWORDLESS',
        'AI_MAX_BROAD_MATCH'
      )
      AND segments.date DURING LAST_30_DAYS

This query retrieves asset-level performance for assets served with Final URL
expansion:

    SELECT
      campaign.id,
      campaign.name,
      final_url_expansion_asset_view.asset,
      final_url_expansion_asset_view.field_type,
      final_url_expansion_asset_view.final_url,
      final_url_expansion_asset_view.status,
      metrics.impressions,
      metrics.clicks,
      metrics.conversions
    FROM final_url_expansion_asset_view
    WHERE
      campaign.advertising_channel_type = 'SEARCH'
      AND campaign.ai_max_setting.enable_ai_max = TRUE
      AND segments.date DURING LAST_30_DAYS

## How to interpret the campaign numbers

- **Why the combined sum (AI Max for Search campaigns + Broad) exceeds campaign clicks:** This
  is due to double counting.

  - **The overlap:** The `ai_max_search_term_ad_combination_view` and
    `search_term_view` are not mutually exclusive. Many search terms
    generated by AI targeting are reported in both views.

  - **Recommendation:** Never sum metrics from these two views. They
    represent different reporting dimensions for the same underlying
    traffic.

- **Why the combined sum (AI Max for Search campaigns + Broad) falls short of campaign
  clicks:** This is due to privacy thresholds and filtered match types.

  - **Privacy thresholds:** Some search terms that [do not have enough query
    activity](https://support.google.com/google-ads/answer/2472708) are omitted from the search terms report to maintain our standards on data privacy. Clicks from these "hidden" terms are included in the campaign total but are excluded from the search term reports (`search_term_view` and `ai_max_search_term_ad_combination_view`).

## How to correctly report

If you need a breakdown of performance by how traffic was targeted, use a
single query on the `search_term_view` and group by
`segments.search_term_match_source`.

Don't use the `ai_max_search_term_ad_combination_view` for reconciliation, as
it is a specialized view for ad-combination testing, not a financial
reconciliation tool.

## AI Max for Search campaigns exclusion rules

With AI Max for Search campaigns, exclusion rules restrict keyword expansion
(Broad Match/Keywordless) or landing page selection.

### Exclude search terms (negative keywords)

- **Target:** Irrelevant search terms identified in the `ai_max_search_term_ad_combination_view`.
- **Level:** Ad group or campaign.
- **Resource:** [`CampaignCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterion) or [`AdGroupCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterion)
- **Fields:** [`keyword.text`](https://developers.google.com/google-ads/api/reference/rpc/v26/KeywordInfo#text) (Negative Exact/Phrase/Broad), [`keyword.match_type`](https://developers.google.com/google-ads/api/reference/rpc/v26/KeywordInfo#match_type), and `negative = TRUE`.

### Exclude landing pages (URL exclusions)

- **Target:** Low-converting or irrelevant URLs, for example, `/blog/`, `/login/`, or `/thank-you/`.
- **Level:** Campaign (in `SEARCH_STANDARD` ad groups, negative `webpage` criteria are only permitted at the campaign level).
- **Resource:** [`CampaignCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterion)
- **Fields:** [`webpage.conditions`](https://developers.google.com/google-ads/api/reference/rpc/v26/WebpageInfo#conditions%5B%5D) (such as `URL`, `PAGE_TITLE`, `PAGE_CONTENT`, `CUSTOM_LABEL`, or `CATEGORY` [`WebpageConditionOperand`](https://developers.google.com/google-ads/api/reference/rpc/v26/WebpageConditionOperandEnum.WebpageConditionOperand)) and `negative = TRUE`.

### Campaign-level brand exclusions

- **Target:** Competitor or own brand names.
- **Level:** Campaign (negative brand lists are only supported at the campaign level; setting `negative = TRUE` on an `AdGroupCriterion` brand list fails with a [`ONLY_INCLUSION_BRAND_LIST_ALLOWED_FOR_AD_GROUPS`](https://developers.google.com/google-ads/api/reference/rpc/v26/CriterionErrorEnum.CriterionError#only_inclusion_brand_list_allowed_for_ad_groups) `CriterionError`).
- **Resource:** [`CampaignCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterion)
- **Fields:** [`brand_list.shared_set`](https://developers.google.com/google-ads/api/reference/rpc/v26/BrandListInfo#shared_set) (on [`CampaignCriterion.brand_list`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterion#brand_list), referencing a [`SharedSet`](https://developers.google.com/google-ads/api/reference/rpc/v26/SharedSet) of type [`BRANDS`](https://developers.google.com/google-ads/api/reference/rpc/v26/SharedSetTypeEnum.SharedSetType#brands)) and `negative = TRUE`. Requires AI Max for Search campaigns to be enabled on the Search campaign; otherwise, attaching the brand list fails with a [`CANNOT_ATTACH_BRAND_LIST_TO_NON_QUALIFIED_SEARCH_CAMPAIGN`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterionErrorEnum.CampaignCriterionError#cannot_attach_brand_list_to_non_qualified_search_campaign) `CampaignCriterionError`.

> [!NOTE]
> **Note:** Use `ai_max_search_term_ad_combination_view` to audit performance and identify specific `landing_page` URLs or `search_term` strings that require exclusions.

## When to use exclusions

Use the following guidance to decide which type of exclusion is best for your
situation.

### Negative keywords (search term exclusions)

**When to use:** When the user's intent (the query) is fundamentally irrelevant
or unprofitable, regardless of which page they land on.

- **Scenario A (poor intent):** Your `ai_max_search_term_ad_combination_view` shows matches for queries like `free`, `cheap`, `DIY`, or `how to` when you sell premium enterprise software.
- **Scenario B (irrelevant expansion):** The `AI_MAX_BROAD_MATCH` expansion goes too far. For example, you sell `water filters` and the AI expands to queries about `pool cleaning services`.
- **Strategy:** Apply as **Exact** match if the specific query is problematic, or **Phrase/Broad** if an entire category of queries (that is, anything containing the term `free`) needs to be blocked.

### URL exclusions (negative webpage targets)

**When to use URL exclusions:** When the AI successfully finds relevant search
terms but routes users to the wrong page on your website, or when a specific
page consistently yields a high CPA or low conversion rate.

- **Scenario A (non-commercial pages):** AI Max for Search campaigns keywordless expansion sends paid traffic to your `/careers`, `/privacy-policy`, or `/customer-support-login` pages. Exclude these URLs immediately.
- **Scenario B (repeated bounces on a single page):** You notice in the `ai_max_search_term_ad_combination_view` that dozens of different, seemingly acceptable search terms all result in bounces because they land on an outdated blog post. Instead of adding dozens of negative keywords, add **one** URL exclusion for that blog post.
- **Strategy:** Use a `WebpageConditionOperand.URL` condition for directories (for example, matching `/blog/`) or exact URL exclusions for specific problematic pages.

### Campaign-level brand exclusions

**When to use campaign-level brand exclusions:** When strict traffic
segmentation is needed to prevent AI Max for Search campaigns from cannibalizing your existing
branded Search campaigns.

- **Scenario A (protecting brand CPCs):** You already have a highly optimized Exact Match campaign for your own brand name. If you enable AI Max for Search campaigns on a generic non-brand campaign to find incremental reach, and you notice AI Max for Search campaigns is starting to bid on your brand name, apply a brand exclusion list containing your own brand to force AI Max for Search campaigns to only find net-new, generic queries.
- **Scenario B (competitor policy):** Your company has legal agreements not to bid on specific competitor brand names, and a fail-safe is needed to ensure that AI Max for Search campaigns's broad expansion never triggers ads on those terms.

#### Summary guidelines

- Bad **query** = negative keyword.
- Bad **destination** = URL exclusion.
- Bad **cannibalization** = brand exclusion.