Cross-Campaign Reach in Google Ads
Why metrics.unique_users cannot be combined across campaigns, and what your options are.
The Problem
A common question when analyzing Google Ads campaigns: you query metrics.unique_users for several campaigns and get per-campaign counts. Can you add them together to get the total number of unique people who saw your ads?
No. If the same person saw ads from Campaign A and Campaign B, they are counted once in each campaign's number. Adding them together counts that person twice. The Google Ads web UI shows a deduplicated "Total: Filtered campaigns" row when you select multiple campaigns, but the API does not offer an equivalent.
This is a limitation of the Google Ads API, not specific to Pipeboard or any other tool that uses it.
What Works and What Does Not
Works: per-campaign unique users
SELECT campaign.id, campaign.name, metrics.unique_users
FROM campaign
WHERE campaign.id IN (111, 222, 333)
AND segments.date BETWEEN '2026-03-01' AND '2026-03-31'Returns a separate unique user count for each campaign. These counts are accurate per campaign but overlap across campaigns.
Does not work: customer-level aggregation
SELECT customer.id, metrics.unique_users
FROM customer
WHERE segments.date BETWEEN '2026-03-01' AND '2026-03-31'
-- Error: PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSEThe API explicitly prohibits selecting metrics.unique_users from the customer resource. This would require server-side deduplication that Google does not expose via the public API.
Also does not work: summing per-campaign values
Campaign A unique users: 340,000
Campaign B unique users: 350,000
Campaign C unique users: 115,000
Sum: 805,000 <-- WRONG (double-counts overlapping users)
Actual deduplicated reach: unknown via APIThe sum will always overcount. The amount of overlap depends on how similar the targeting and audiences are across campaigns. Campaigns with very different audiences will overlap less, but you cannot know the exact overlap from the API.
Why This Happens
The metrics.unique_users field is documented by Google as a metric that "cannot be aggregated." It is only available at the campaign resource level, and only for Display, Video, Discovery (Demand Gen), and App campaigns. It is not available for Search, Shopping, or Performance Max campaigns.
Cross-campaign deduplication requires matching individual user impressions across campaigns. This is computationally expensive and raises privacy considerations. Google performs this internally for the web UI but does not expose it through the public API.
Related metrics like metrics.average_impression_frequency_per_user have the same limitation. The newer metrics.unique_users_two_plus through metrics.unique_users_ten_plus frequency threshold metrics (added in API v23.2) are also campaign-level only.
Your Options
Use per-campaign unique users with caveats
Report unique users per campaign and note that the total is an upper bound. For campaigns with very different audiences (e.g., different geographies or demographics), the overlap is often small and the sum provides a reasonable estimate. For campaigns targeting similar audiences, the actual deduplicated reach could be significantly lower.
Export from the Google Ads UI
The Google Ads web interface can show deduplicated reach when you filter to a set of campaigns. Look for the "Total: Filtered campaigns" row in the statistics table. This requires manual export but gives you the exact number.
Google Ads Data Hub (enterprise)
Google Ads Data Hub (ADH) is the enterprise-grade solution for this problem. It provides BigQuery-based access to event-level Google Ads data, where you can write custom SQL queries that deduplicate users across campaign boundaries.
ADH requires a Google Marketing Platform contract and is not available to standard Google Ads API users. It enforces privacy thresholds (results below a minimum user count are suppressed). If your organization already uses Google Marketing Platform, ADH is the definitive way to get cross-campaign deduplicated reach.
ReachPlanService does not help here
The Google Ads API includes a ReachPlanService, but it is designed for forecasting the reach of future campaigns, not for reporting on historical data. It generates projected reach curves based on a hypothetical budget and targeting, and does not accept campaign IDs or report actual performance. It also requires allowlisting by a Google representative and a data licensing agreement.
What You Can Do Today in Pipeboard
Pipeboard surfaces all the reach data that the Google Ads API makes available. When you query unique users via GAQL, Pipeboard will include a note reminding you that these values are per-campaign and cannot be meaningfully combined.
Quick Reference
| Approach | Cross-Campaign Dedup | Availability |
|---|---|---|
metrics.unique_users via GAQL | No (per-campaign only) | Standard Google Ads API |
| Google Ads UI manual export | Yes | Any Google Ads account |
| Google Ads Data Hub | Yes (custom SQL) | Enterprise (Google Marketing Platform) |
| ReachPlanService | No (forecasting only) | Requires allowlisting |
| Sum per-campaign values | No (overcounts overlap) | N/A |