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. For ready-to-run Google Ads Query Language
(GAQL) and curl queries that replicate placement screens in the Google Ads UI, see
the Query cookbook.
Managed placement view
- What it shows: The
managed_placement_viewresource provides performance data aggregated by the positive placement criteria that you target in your ad groups. This view includes all five criterion types managed under Content > Placements in the Google Ads UI: websites, YouTube channels, YouTube videos, mobile apps, and mobile app categories. - UI Equivalent: Content > Placements
- Query Builder: Explore in Query Builder
Targeted placement criterion types
Each row in the managed_placement_view resource populates the
AdGroupCriterion field that matches its ad_group_criterion.type value and
leaves the other placement fields unset:
| UI placement type | ad_group_criterion.type value |
Criterion details fields | Notes |
|---|---|---|---|
| Websites | PLACEMENT |
ad_group_criterion.placement.url |
Target website or domain URL. |
| YouTube channels | YOUTUBE_CHANNEL |
ad_group_criterion.youtube_channel.channel_id |
YouTube channel ID. The ad_group_criterion.display_name field returns the channel name. |
| YouTube videos | YOUTUBE_VIDEO |
ad_group_criterion.youtube_video.video_id |
YouTube video ID. The ad_group_criterion.display_name field returns the video title. |
| Apps | MOBILE_APPLICATION |
ad_group_criterion.mobile_application.app_id, ad_group_criterion.mobile_application.name |
App ID in {platform}-{platform_native_id} format (1- for iOS, 2- for Android) and app name. |
| App categories | MOBILE_APP_CATEGORY |
ad_group_criterion.mobile_app_category.mobile_app_category_constant |
Resource name in mobileAppCategoryConstants/{mobile_app_category_id} format. See Mobile app category names and hierarchy. |
Example query
To fetch performance metrics across all targeted placement types over the last
30 days, select the ad_group_criterion.type field alongside the type-specific
fields:
SELECT
campaign.id,
ad_group.id,
managed_placement_view.resource_name,
ad_group_criterion.criterion_id,
ad_group_criterion.type,
ad_group_criterion.display_name,
ad_group_criterion.placement.url,
ad_group_criterion.youtube_channel.channel_id,
ad_group_criterion.youtube_video.video_id,
ad_group_criterion.mobile_application.app_id,
ad_group_criterion.mobile_application.name,
ad_group_criterion.mobile_app_category.mobile_app_category_constant,
metrics.impressions,
metrics.clicks,
metrics.cost_micros
FROM managed_placement_view
WHERE segments.date DURING LAST_30_DAYS
Mobile app category names and hierarchy
In the Google Ads UI, targeted mobile app categories display their full store path, such as App categories > Apple App Store > Education. When querying the Google Ads API, keep the following behaviors in mind:
- Attributing mobile app category constants: The
mobile_app_category_constantresource isn't an attributed resource of themanaged_placement_viewresource. Select thead_group_criterion.mobile_app_category.mobile_app_category_constantfield instead (for example,mobileAppCategoryConstants/60503), or query thead_group_criterionresource when you don't need metrics. - Leaf-only display names: Both the
ad_group_criterion.display_nameandmobile_app_category_constant.namefields return only the leaf category name, such as"Education"or"Games". Neither field includes the parent app store path. - Resolving the app store path: Google Play and the Apple App Store share
leaf category names across distinct criterion IDs. For example, criterion
IDs
60005(/All Apps/Google Play/Education),60060(/All Apps/Google Play/Family/Education), and60503(/All Apps/Apple App Store/Education) all return"Education"in thenameanddisplay_namefields. Extract the{mobile_app_category_id}suffix from the resource name and look up its full hierarchy path in the Mobile app categories table or CSV file.
Group placement view
- What it shows: The
group_placement_viewresource 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
Example query
The following query fetches performance metrics for domains, mobile apps, and YouTube channels where ads showed over the last 30 days:
SELECT
campaign.id,
ad_group.id,
group_placement_view.display_name,
group_placement_view.target_url,
group_placement_view.placement_type,
metrics.impressions,
metrics.clicks,
metrics.cost_micros
FROM group_placement_view
WHERE segments.date DURING LAST_30_DAYS
"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.placementordetail_placement_view.placementfield 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.
Placement targeting settings
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_viewlargely mirrorsmanaged_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_viewis 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_viewresource 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_viewresource, this view omits low-activity placements that don't meet minimum activity thresholds (see the "Total: Other" row section).
Example query
To limit result volume, the following query fetches URL-level and video-level
placement metrics over a 7-day window. For large accounts, filter further by
the campaign.id or ad_group.id field:
SELECT
campaign.id,
ad_group.id,
detail_placement_view.display_name,
detail_placement_view.target_url,
detail_placement_view.group_placement_target_url,
detail_placement_view.placement_type,
metrics.impressions,
metrics.clicks,
metrics.cost_micros
FROM detail_placement_view
WHERE segments.date DURING LAST_7_DAYS
To exclude rows where placement metadata is unavailable, add AND
detail_placement_view.target_url IS NOT NULL (see Rows with unavailable
placement details). When you don't need
returned resource_name fields, append the PARAMETERS
omit_unselected_resource_names = true clause.
Metric differences between placement views
The minimum activity threshold is evaluated independently at each level of granularity:
- The
group_placement_viewresource evaluates the threshold across the aggregated domain, mobile app, or YouTube channel. - The
detail_placement_viewresource 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_nameorplacementstring 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, andtarget_urlfields unset. - Synthesized resource names: The
{base64_placement}suffix in theresource_namefield is Base64-encoded from{type_id}_{placement}, where{type_id}is an internal placement type identifier rather than thePlacementTypeenum number. When theplacement_typefield isWEBSITE(internal ID14) and theplacementfield is unset, the string"14_"encodes toMTRf(similarly,MOBILE_APPLICATIONencodes"55_"toNTVf,YOUTUBE_VIDEOencodes"89_"toODlf, andYOUTUBE_CHANNELencodes"90_"toOTBf). Multiple placements of the same type with unavailable metadata in the same ad group therefore share the sameresource_namevalue 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 GAQL, filter on the target_url
or display_name field, because the placement and resource_name fields
aren't filterable. For example, use WHERE group_placement_view.target_url IS
NOT NULL or WHERE detail_placement_view.target_url IS NOT NULL.
Performance Max placement view
- What it shows: The
performance_max_placement_viewresource provides impression data (metrics.impressions) for placements where Performance Max ads served. In v24 and later, you can segmentperformance_max_placement_viewbysegments.ad_network_type(not supported in v23). - UI Equivalent: Insights and reports > Report editor > Performance Max campaigns placement
- Query Builder: Explore in Query Builder
Example query
The following query fetches placement impressions segmented by ad network type for Performance Max campaigns over the last 30 days:
SELECT
campaign.id,
performance_max_placement_view.display_name,
performance_max_placement_view.target_url,
performance_max_placement_view.placement_type,
segments.ad_network_type,
metrics.impressions
FROM performance_max_placement_view
WHERE segments.date DURING LAST_30_DAYS
Choose a placement view
- Use
managed_placement_viewto assess the performance of placements you are actively targeting and bidding on. - Use
group_placement_viewto 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_viewto 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 thegroup_placement_view. - Use
performance_max_placement_viewto inspect placement impressions for Performance Max campaigns.