As with other campaign types, you can use GoogleAdsService.SearchStream
to retrieve attributes and
performance metrics for Performance Max campaigns. See the Google Ads API reporting
guide to learn about reporting more generally with
the Google Ads API. The following table outlines the options for reporting on
Performance Max campaigns organized by objective.
Measurement objective | Associated resources | Examples |
---|---|---|
Campaign level performance and placements | ||
Asset group level performance | asset_group |
|
Asset performance | ||
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
. This
corresponds to the Performance Max channel asset
Reporting in the Google Ads
UI.
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
Performance Max campaign placements
The performance_max_placement_view
exposes placement impression metrics for Performance Max campaigns to gain
insights into where a campaign's ads were shown. The following query
demonstrates how to retrieve impressions by placement for a specific Performance
Max campaign during the last 30 days.
SELECT
performance_max_placement_view.display_name,
performance_max_placement_view.placement,
performance_max_placement_view.placement_type,
performance_max_placement_view.target_url,
metrics.impressions,
campaign.id
FROM performance_max_placement_view
WHERE
campaign.id = CAMPAIGN_ID
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 how well the associated asset_group
entities are set up for
optimal ad performance. Learn
more about Performance Max ad
strength.
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'
Recommendations to improve asset group strength
The Google Ads API provides a recommendation type,
IMPROVE_PERFORMANCE_MAX_AD_STRENGTH
,
which highlights asset groups that should be improved to reach an "Excellent"
strength rating. This feature is especially useful for third-party advertisers
that enable users to create and manage asset groups.
For more information, visit the Optimization score and recommendations guide.
Asset group performance
The asset_group
resource exposes a variety of metrics
to measure individual asset group performance. This sample query demonstrates how
to retrieve the performance metrics for each asset_group
in a specified
campaign during the last 7 days.
SELECT
asset_group.id,
asset_group.name,
asset_group.primary_status,
metrics.conversions,
metrics.conversions_value,
metrics.cost_micros,
metrics.clicks,
metrics.impressions
FROM asset_group
WHERE campaign.id = CAMPAIGN_ID
AND segments.date DURING LAST_7_DAYS
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.id = ASSET_GROUP_ID
AND asset_group_asset.status != 'REMOVED'
Top asset combinations
The
asset_group_top_combination_view
resource can be used to query the top performing combinations of assets in asset
groups. This corresponds to the Combinations
report in the
Google Ads UI. For example, the following query produces a list of the top asset
combinations in a specified asset_group
. Each row in the response contains a
list of asset_group_top_combination_view.asset_group_top_combinations
messages
of type
AssetGroupAssetCombinationData
.
Each item in that list contains a list of the assets in the respective
combination represented as an AssetUsage
message.
SELECT asset_group_top_combination_view.asset_group_top_combinations
FROM asset_group_top_combination_view
WHERE asset_group.id = ASSET_GROUP_ID
Taking this a step further, you can adjust this query to generate insights that
help with asset selection and better optimize Performance Max campaign
performance. The query below produces the top asset combinations by asset group
in a single campaign but limits the results to asset groups that have an
asset_group.ad_strength
of
GOOD
or EXCELLENT
. The resulting asset combinations represent the top asset
combinations in the best performing asset groups in the campaign.
SELECT
asset_group_top_combination_view.asset_group_top_combinations,
asset_group.ad_strength,
asset_group.id
FROM asset_group_top_combination_view
WHERE asset_group.ad_strength IN ('GOOD', 'EXCELLENT')
AND campaign.id = CAMPAIGN_ID
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. 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 in your Merchant Center
account. You can filter on this field to get reporting metrics for all campaigns
associated with a specific product feed. For example, the following query
demonstrates how to retrieve metrics for all Performance Max campaigns that
target products intended to be promoted during the winter season.
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 = 'WINTER-PRODUCTS'
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
Product performance with cart data
Retail advertisers can access relevant sales and profit metrics such as Revenue, Gross Profit, Gross Profit Margin, and Units sold. These metrics are available to all advertisers who implement Conversions with cart data across Performance Max campaigns and are compatible with the following reports.
asset_group_product_group_view
campaign
customer
(Aggregated for all campaigns)shopping_performance_view
The following cart data metrics can be used in reports, such as the
shopping_performance_view
, for
Performance Max for retail campaigns.
metrics.average_cart_size
metrics.average_order_value_micros
metrics.cost_of_goods_sold_micros
metrics.cross_sell_cost_of_goods_sold_micros
metrics.cross_sell_gross_profit_micros
metrics.cross_sell_revenue_micros
metrics.cross_sell_units_sold
metrics.gross_profit_margin
metrics.gross_profit_micros
metrics.lead_cost_of_goods_sold_micros
metrics.lead_gross_profit_micros
metrics.lead_revenue_micros
metrics.lead_units_sold
metrics.orders
metrics.revenue_micros
metrics.units_sold
The following example demonstrates how these cart data metrics can be used to understand product level performance for Performance Max campaigns in the last 30 days.
SELECT
segments.product_item_id,
segments.product_title,
metrics.average_cart_size,
metrics.average_order_value_micros,
metrics.conversions,
metrics.conversions_value,
metrics.gross_profit_micros,
metrics.gross_profit_margin,
metrics.revenue_micros,
metrics.units_sold,
campaign.advertising_channel_type
FROM shopping_performance_view
WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
AND segments.date DURING LAST_30_DAYS
AND metrics.conversions > 0
ORDER BY
metrics.gross_profit_margin DESC,
metrics.revenue_micros DESC,
metrics.conversions_value DESC
Campaign performance with cart data
Cart data metrics can be used at the campaign level and can be combined with other performance metrics such as impressions, clicks, and cost.
SELECT
campaign.id,
campaign.name,
campaign.advertising_channel_type,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.cost_micros,
metrics.average_order_value_micros,
metrics.gross_profit_micros,
metrics.gross_profit_margin
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
ORDER BY
metrics.gross_profit_margin DESC,
metrics.average_order_value_micros DESC,
metrics.cost_micros DESC,
metrics.conversions DESC,
metrics.clicks 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'
Identify market opportunities
One of the main use cases for Performance Max reporting is to identify market opportunities which you can use to the benefit of your ad campaigns and your business. Watch the following video for some examples and guidance around PMax reporting to identify market opportunities.
Best practices
We recommend these best practices when reporting on your Performance Max campaigns in the Google Ads API. These include:
Using the API efficiently.
Using Recommendations to optimize your campaigns.
Looking at real-time data and not just historic reporting data.
Adding as many assets as possible up to the limit for each asset type, and then waiting and letting Google Ads optimize for you.
Watch the following video for more detail about each of these best practices.