Performance Max reporting

As with other campaign types, you can use GoogleAdsService.SearchStream to retrieve attributes and performance metrics for Performance Max campaigns. The following table outlines the options for reporting on Performance Max campaigns organized by objective.

Measurement objective Associated resources Examples
Campaign level performance campaign All Performance Max campaign performance
Asset group level performance asset_group Asset group ad strength
Asset performance asset_group_asset Asset performance with asset_group_asset
Retail campaign performance
Campaign criterion performance location_view Location criterion performance

Campaign level performance

Viewing Performance Max campaign performance is similar to viewing the performance for any other campaign type. However, you must add a filter to include only campaigns with an advertising_channel_type equal to PERFORMANCE_MAX.

All Performance Max campaign performance

For example, the following query returns the performance for all Performance Max campaigns over the last 30 days. You can also limit the results to a single campaign by filtering on campaign.id or campaign.resource_name.

SELECT
  metrics.impressions,
  metrics.clicks,
  metrics.conversions,
  metrics.cost_micros
FROM campaign
WHERE
  campaign.advertising_channel_type = 'PERFORMANCE_MAX'
  AND segments.date DURING LAST_30_DAYS

Asset group level performance

In addition to campaign reporting, reporting is available for asset_group resources linked to your Performance Max campaigns.

Asset group ad strength

Because Performance Max campaigns dynamically generate ads for each asset group using the assets attached to that asset group, it's not possible to view individual ad performance. However, the Google Ads API exposes the asset_group.ad_strength field to evaluate the performance of ads associated with different asset_group entities.

The following query demonstrates how to view the ad strength of all asset groups. You can further filter this query on asset_group.id or asset_group.resource_name to view the ad strength of one or more specific asset groups. Alternatively, you can add a campaign filter as described previously, to compare the ad strength of different asset groups within a specified campaign.

SELECT
  asset_group.id,
  asset_group.ad_strength
FROM asset_group
WHERE asset_group.status = 'ENABLED'

Asset performance

It's possible to obtain asset level performance by using the asset_group_asset resource.

Asset performance with asset_group_asset

On the asset_group_asset resource, the performance_label field ranks the asset against other assets of the same type. For more details, see About asset reporting in Performance Max.

SELECT
  asset_group_asset.asset,
  asset_group_asset.performance_label,
  asset_group_asset.status
FROM asset_group_asset
WHERE asset_group_asset.asset_group = 'customers/CUSTOMER_ID/assetGroups/ASSET_GROUP_ID'
  AND asset_group_asset.status != 'REMOVED'

Retail campaign performance

There are a variety of ways to measure Performance Max retail campaigns based on your reporting objectives.

All retail campaigns performance

The most basic example is retrieving the performance of all Performance Max retail campaigns using the methodology of the All Performance Max campaign performance example. In order to create a Performance Max retail campaign, you must populate the shopping_setting field in your campaign with the merchant_id of your Merchant Center account. Adding the condition campaign.shopping_setting.merchant_id IS NOT NULL to the WHERE clause then filters the result set to include only retail campaigns.

SELECT
  metrics.impressions,
  metrics.clicks,
  metrics.conversions,
  metrics.cost_micros
FROM campaign
WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
  AND campaign.shopping_setting.merchant_id IS NOT NULL
  AND segments.date DURING LAST_30_DAYS

Campaign performance for a feed_label

The campaign.shopping_setting.feed_label field can be used to target specific product feeds or sales countries in your Merchant Center account. You can filter on this field to get reporting metrics for all campaigns associated with a specific product feed or sales country. For example, the following query demonstrates how to retrieve metrics for all Performance Max campaigns that target products sold in the US.

SELECT
  metrics.impressions,
  metrics.clicks,
  metrics.conversions,
  metrics.cost_micros
FROM campaign
WHERE
  campaign.advertising_channel_type = 'PERFORMANCE_MAX'
  AND campaign.shopping_setting.merchant_id IS NOT NULL
  AND campaign.shopping_setting.feed_label = 'US'
  AND segments.date DURING LAST_30_DAYS

Product performance

You can use the shopping_performance_view to retrieve product-level metrics across all of your Performance Max retail campaigns, as shown in the query below. Filtering on campaign.advertising_channel_type limits the results to Performance Max campaigns, and including segments.product_item_id automatically filters those results to include only retail campaigns because non-retail campaigns don't have any associated products.

SELECT
  segments.product_item_id,
  metrics.clicks,
  metrics.cost_micros,
  metrics.impressions,
  metrics.conversions,
  metrics.all_conversions,
  campaign.advertising_channel_type
FROM shopping_performance_view
WHERE
  campaign.advertising_channel_type = 'PERFORMANCE_MAX'
  AND segments.date DURING LAST_30_DAYS
  AND metrics.clicks > 0
ORDER BY
  metrics.all_conversions DESC,
  metrics.conversions DESC,
  metrics.clicks DESC,
  metrics.cost_micros DESC,
  metrics.impressions DESC

Campaign Performance by Asset Group and product Group

The following example demonstrates how asset_group_product_group_view can be used to retrieve performance metrics by asset_group and asset_group_listing_group_filter. The example segments the results by product partition tree node for each asset_group in the specified campaign.

SELECT
  asset_group.id,
  asset_group_listing_group_filter.id,
  metrics.impressions,
  metrics.clicks,
  metrics.conversions,
  metrics.cost_micros
FROM asset_group_product_group_view
WHERE
  campaign.id = CAMPAIGN_ID
  AND segments.date DURING LAST_30_DAYS

Asset group performance by product group

Alternatively, you can use the asset_group_product_group_view to get performance metrics by asset_group_listing_group_filter but limit the results to a single asset_group by adding an asset_group filtering condition to the WHERE clause.

SELECT
  asset_group_listing_group_filter.id,
  metrics.impressions,
  metrics.clicks,
  metrics.conversions,
  metrics.cost_micros
FROM asset_group_product_group_view
WHERE
  asset_group.id = ASSET_GROUP_ID
  AND segments.date DURING LAST_30_DAYS

Listing group filter dimension performance

Taking the previous example a step further, you can segment performance metrics by the asset_group_listing_group_filter dimension. The following example demonstrates how to retrieve performance metrics by product brand, which is done by adding asset_group_listing_group_filter.case_value.product_brand.value to the SELECT clause, which also automatically filters the results to only include asset_group_listing_group_filter entities with a product brand dimension.

You can perform a similar analysis by replacing asset_group_listing_group_filter.case_value.product_brand with a different dimension, such as asset_group_listing_group_filter.case_value.product_condition.condition.

SELECT
  asset_group_listing_group_filter.case_value.product_brand.value,
  metrics.impressions,
  metrics.clicks,
  metrics.conversions,
  metrics.cost_micros
FROM asset_group_product_group_view
WHERE
  asset_group.id = ASSET_GROUP_ID
  AND segments.date DURING LAST_30_DAYS

Campaign criterion performance

Campaign criterion reports are only populated for supported criterion types, which you can find in the create campaign criteria guide.

Location criterion performance

Here is an example of querying Performance Max location criteria data from the location_view report:

SELECT
  campaign.id,
  campaign.name,
  metrics.clicks,
  metrics.impressions,
  campaign_criterion.location.geo_target_constant
FROM location_view
WHERE campaign.status != 'REMOVED'