We’re experiencing data inconsistency between the Google Ads UI / API and our BigQuery integration. Specifically, when querying metrics like impressions and clicks for a Performance Max (PMAX) campaign from the CampaignStats table in BigQuery, the values appear higher than those shown in the Google Ads Dashboard or returned by the API.
We’ve already enabled the PMAX-specific tables in the BQ integration.
Please advise:
Which data source (BQ or API/UI) is considered accurate for PMAX metrics?
Should we use a different table to retrieve PMAX data correctly?
Is there any known delay or duplication issue that might explain this discrepancy?
Let us know how we can ensure consistent and correct reporting of PMAX metrics across platforms.
Please see my answers inline with your questions below:
1.Which data source (BQ or API/UI) is considered accurate for PMAX metrics?
For the most accurate PMAX metrics, it’s best to use the Google Ads UI and API. BigQuery only serves as a data warehouse which stores a copy of your Google Ads data.
2. Should we use a different table to retrieve PMAX data correctly?
Yes, it’s best to explore other tables and consult Google Ads Reports to identify the exact tables and columns transferred to BigQuery. It is also helpful to review the Google Ads API’s Performance Max Reporting documentation, as it explains how to retrieve PMAX attributes using filtering.
3. Is there any known delay or duplication issue that might explain this discrepancy?
Both delay and duplication issues are common potential culprits for discrepancies in BigQuery. There are also delays happening in Google Ads itself before the data is fully reflected, you may refer to Google Ads data freshness for more insights. If the issue persists, I suggest reaching out to Google Cloud Support with detailed information. This will assist them in diagnosing and resolving your issue more efficiently.
Was this helpful? If so, please accept this answer as “Solution”. If you need additional assistance, reply here within 2 business days and I’ll be happy to help.
Totally been there. PMAX reporting is kinda wild sometimes, especially when pulling into BigQuery.
We ran into the same issue where BQ showed more impressions/clicks than the UI/API. Drove us nuts trying to figure out what was “right.”
Short version: go with the API/UI for final numbers. BigQuery’s CampaignStats table can include deduplicated and “interim” data. Especially with PMAX, there’s often a lag or some extra noise in BQ that smooths out later in the UI.
What helped us was filtering for ad_network_type = “SEARCH” or “DISPLAY” just to compare apples to apples. And avoid summing grouped rows too early, PMAX can mess with joins.
Here’s a snippet that gave us more reliable numbers in BQ:
SELECT
campaign_id,
date,
impressions,
clicks
FROM
ads.google_ads_campaign_stats
WHERE
campaign_type = “PERFORMANCE_MAX”
AND date >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
But honestly, for anything client-facing, we cross-check with the API just to be safe. PMAX data stabilizes after ~48 hours, too. Hang in there, it’s messy but fixable.
You can also consider ELT tools to integrate Google Ads with BigQuery to maintain data consistency. One such option is Windsor, which gives you access to over 300 data sources that you can connect with BigQuery.