The Google Ads API offers several views to analyze where your ads have appeared and how
they are performing:
[`managed_placement_view`](https://developers.google.com/google-ads/api/fields/v26/managed_placement_view.md.txt),
[`group_placement_view`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt),
[`detail_placement_view`](https://developers.google.com/google-ads/api/fields/v26/detail_placement_view.md.txt), and
[`performance_max_placement_view`](https://developers.google.com/google-ads/api/fields/v26/performance_max_placement_view.md.txt). Each view provides a
different lens on your placement data.

## Managed placement view

- **What it shows:** The [`managed_placement_view`](https://developers.google.com/google-ads/api/fields/v26/managed_placement_view.md.txt) 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](https://developers.google.com/google-ads/api/fields/v26/managed_placement_view_query_builder.md.txt)

### Example query

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

```sql
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`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt) 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](https://developers.google.com/google-ads/api/fields/v26/group_placement_view_query_builder.md.txt)

### "Total: Other" row

To speed up report generation, the
[`group_placement_view`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt) and
[`detail_placement_view`](https://developers.google.com/google-ads/api/fields/v26/detail_placement_view.md.txt) 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`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt) and
[`detail_placement_view`](https://developers.google.com/google-ads/api/fields/v26/detail_placement_view.md.txt) resources might be
lower than the total metrics for the ad group or campaign. For more
information, see [About the "Where ads showed" report](https://support.google.com/google-ads/answer/13787926). For
details on how thresholds and missing metadata affect cross-view comparisons,
see [Metric differences between placement views](https://developers.google.com/google-ads/api/docs/reporting/placement-views.md.txt#metric-differences) and [Rows
with unavailable placement details](https://developers.google.com/google-ads/api/docs/reporting/placement-views#unavailable-placement-details).

### TargetingSetting options

The behavior and utility of the
[`group_placement_view`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt) are influenced by the
[`TargetingSetting`](https://developers.google.com/google-ads/api/reference/rpc/v26/TargetingSetting.md.txt) for the `PLACEMENT`
dimension at the ad group level. This setting contains a list of
[`target_restrictions`](https://developers.google.com/google-ads/api/fields/v26/ad_group.md.txt#ad_group.targeting_setting.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](https://support.google.com/google-ads/answer/7365594).

- `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`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt) largely mirrors [`managed_placement_view`](https://developers.google.com/google-ads/api/fields/v26/managed_placement_view.md.txt), 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`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt) 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`](https://developers.google.com/google-ads/api/fields/v26/detail_placement_view.md.txt) 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](https://developers.google.com/google-ads/api/fields/v26/detail_placement_view_query_builder.md.txt)
- **Important Considerations:** Similar to the [`group_placement_view`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt) resource, this view omits low-activity placements that don't meet minimum activity thresholds (see the ["Total: Other" row](https://developers.google.com/google-ads/api/docs/reporting/placement-views.md.txt#total-other-row) section).

> [!NOTE]
> **Note:** The `detail_placement_view` resource reports at a granular level (individual URLs and video IDs) and can return high-cardinality data. Always filter queries by date ranges or specific campaigns and ad groups to avoid large payload sizes and query timeouts.

### Metric differences between placement views

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

- The [`group_placement_view`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt) resource evaluates the threshold across the aggregated domain, mobile app, or YouTube channel.
- The [`detail_placement_view`](https://developers.google.com/google-ads/api/fields/v26/detail_placement_view.md.txt) resource evaluates the threshold separately for each individual page URL or YouTube video.

The [`detail_placement_view`](https://developers.google.com/google-ads/api/fields/v26/detail_placement_view.md.txt) 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`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt) or
[`detail_placement_view`](https://developers.google.com/google-ads/api/fields/v26/detail_placement_view.md.txt) 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`](https://developers.google.com/google-ads/api/reference/rpc/v26/PlacementTypeEnum.PlacementType.md.txt) 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`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt) or
[`detail_placement_view`](https://developers.google.com/google-ads/api/fields/v26/detail_placement_view.md.txt) 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

- **What it shows:** The [`performance_max_placement_view`](https://developers.google.com/google-ads/api/fields/v26/performance_max_placement_view.md.txt) resource provides impression data (`metrics.impressions`) for placements where Performance Max ads served. In **v24 and later** , you can segment `performance_max_placement_view` by [`segments.ad_network_type`](https://developers.google.com/google-ads/api/fields/v26/segments.md.txt#segments.ad_network_type) (not supported in **v23**).
- **Query Builder:** [Explore in Query Builder](https://developers.google.com/google-ads/api/fields/v26/performance_max_placement_view_query_builder.md.txt)

## Which view to use?

- Use [`managed_placement_view`](https://developers.google.com/google-ads/api/fields/v26/managed_placement_view.md.txt) to assess the performance of placements you are actively targeting and bidding on.
- Use [`group_placement_view`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt) 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`](https://developers.google.com/google-ads/api/fields/v26/detail_placement_view.md.txt) 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`](https://developers.google.com/google-ads/api/fields/v26/group_placement_view.md.txt).
- Use [`performance_max_placement_view`](https://developers.google.com/google-ads/api/fields/v26/performance_max_placement_view.md.txt) to inspect placement impressions for Performance Max campaigns.