Track ad placement and performance

The Google Ads API offers several views to analyze where your ads have appeared and how they are performing: managed_placement_view, group_placement_view, detail_placement_view, and performance_max_placement_view. Each view provides a different lens on your placement data.

Managed placement view

  • What it shows: The managed_placement_view resource provides performance data aggregated by the placements you are explicitly targeting (managed placements). It reflects the performance of your Placement criteria.
  • UI Equivalent: Content > Placements
  • Query Builder: Explore in Query Builder

Example query

To fetch performance metrics for managed placements over the last 30 days:

SELECT
  campaign.id,
  ad_group.id,
  managed_placement_view.resource_name,
  ad_group_criterion.placement.url,
  metrics.impressions,
  metrics.clicks,
  metrics.cost_micros
FROM managed_placement_view
WHERE segments.date DURING LAST_30_DAYS

Group placement view

  • What it shows: The group_placement_view resource shows where your ads actually served on the Display Network and YouTube, regardless of whether the placements were explicitly targeted or discovered automatically by Google's system. This can include websites, YouTube channels or videos, and apps.
  • UI Equivalent: Content > Where ads showed
  • Query Builder: Explore in Query Builder

"Total: Other" row

To speed up report generation, the group_placement_view and detail_placement_view resources exclude individual placements that don't meet a minimum activity threshold of impressions or interactions.

  • In the Google Ads UI: The UI aggregates placements that don't meet this activity threshold into a summary row labeled Total: Other.
  • In the Google Ads API: The API omits placements that don't meet the activity threshold from report results and doesn't return a summary row where the group_placement_view.placement or detail_placement_view.placement field has the value "Other".

As a result, the sum of individual placement rows in the group_placement_view and detail_placement_view resources might be lower than the total metrics for the ad group or campaign. For more information, see About the "Where ads showed" report. For details on how thresholds and missing metadata affect cross-view comparisons, see Metric differences between placement views and Rows with unavailable placement details.

TargetingSetting options

The behavior and utility of the group_placement_view are influenced by the TargetingSetting for the PLACEMENT dimension at the ad group level. This setting contains a list of target_restrictions, each with a bid_only boolean field that dictates whether your ads show only on targeted placements or on other placements as well. See About "Targeting" and "Observation" settings.

  • bid_only = false: This value corresponds to Targeting in the Google Ads UI for placements. If your ad group is set to "Targeting", your ads only show on the placements you've explicitly added as criteria. You can choose to apply bid adjustments to these placements. In this scenario, group_placement_view largely mirrors managed_placement_view, but is still subject to minimum activity thresholds.
  • bid_only = true: This value corresponds to Observation in the Google Ads UI for placements. If your ad group is set to "Observation", your ads can show on any eligible placement on the Display Network and YouTube. You can also apply bid adjustments to any placements you have targeted. In this case, group_placement_view is crucial for discovering new placements where your ads are showing, which you might then choose to add as managed placements or exclusions.

Detail placement view

  • What it shows: The detail_placement_view resource provides a more granular breakdown of placements, offering details beyond the domain or channel level. For example, it can show specific URLs or YouTube video IDs where your ads appeared.
  • UI Equivalent: Equivalent to selecting rows in Content > Where ads showed, then clicking View details.
  • Query Builder: Explore in Query Builder
  • Important Considerations: Similar to the group_placement_view resource, this view omits low-activity placements that don't meet minimum activity thresholds (see the "Total: Other" row section).

Metric differences between placement views

The minimum activity threshold is evaluated independently at each level of granularity:

  • The group_placement_view resource evaluates the threshold across the aggregated domain, mobile app, or YouTube channel.
  • The detail_placement_view resource evaluates the threshold separately for each individual page URL or YouTube video.

The detail_placement_view resource omits individual page URLs or YouTube videos that don't meet the threshold. As a result, summing detail_placement_view rows for a domain or YouTube channel (filtered by the detail_placement_view.group_placement_target_url field) can return fewer impressions than the corresponding group_placement_view row.

Rows with unavailable placement details

A query against the group_placement_view or detail_placement_view resource can return multiple rows in the same ad group with unset placement, display_name, and target_url fields and an identical resource_name value (for example, ending in ~MTRf).

This behavior occurs for the following reasons:

  • Internal placement grouping: Both views group performance metrics by a unique internal placement identifier rather than by the resource_name or placement string fields.
  • Unavailable placement metadata: In the Google Ads UI, placements without metadata in backend lookup tables appear as Unknown, Channel no longer available, or Video no longer available. In the API, each distinct placement identifier still returns a metrics row, with the placement, display_name, and target_url fields unset.
  • Synthesized resource names: The {base64_placement} suffix in the resource_name field is Base64-encoded from {type_id}_{placement}, where {type_id} is an internal placement type identifier rather than the PlacementType enum number. When the placement_type field is WEBSITE (internal ID 14) and the placement field is unset, the string "14_" encodes to MTRf (similarly, MOBILE_APPLICATION encodes "55_" to NTVf, YOUTUBE_VIDEO encodes "89_" to ODlf, and YOUTUBE_CHANNEL encodes "90_" to OTBf). Multiple placements of the same type with unavailable metadata in the same ad group therefore share the same resource_name value while reporting separate metrics rows.

When processing group_placement_view or detail_placement_view results in client code, don't deduplicate rows solely by the resource_name field, because doing so can overwrite metrics across distinct placements with unavailable metadata. To exclude rows with unavailable metadata in Google Ads Query Language, filter on the target_url or display_name field (for example, WHERE detail_placement_view.target_url IS NOT NULL), because the placement and resource_name fields aren't filterable.

Performance Max placement view

Which view to use?

  • Use managed_placement_view to assess the performance of placements you are actively targeting and bidding on.
  • Use group_placement_view to understand the full scope of where your ads are appearing, especially when using the "Observation" setting, to discover new targeting opportunities or exclusions.
  • Use detail_placement_view to get the most granular details about specific URLs or videos where your ads showed, often used after identifying a domain or channel of interest in the group_placement_view.
  • Use performance_max_placement_view to inspect placement impressions for Performance Max campaigns.