Performance Max campaigns are Google’s fully automated campaign type — and one of the hardest to track correctly in GA4. PMax traffic shows up fragmented across multiple channels, conversion data is delayed, and campaign-level reporting inside Google Ads doesn’t map neatly to GA4’s session model. Here’s how to track PMax effectively and reconcile the numbers.
Why PMax Looks Fragmented in GA4
PMax runs across Search, Display, YouTube, Gmail, Maps, and Shopping simultaneously. In GA4 these appear as different sources: google/cpc for Search placements, google/display for Display, youtube.com/referral for YouTube clicks. There’s no single “Performance Max” channel in GA4 — you’re looking at the same campaign spread across multiple rows.
Auto-Tagging Is Essential for PMax
Ensure auto-tagging is enabled in Google Ads: Account Settings → Auto-tagging → On. PMax requires auto-tagging to pass gclid parameters. Manual UTM tagging on PMax asset URLs doesn’t work reliably because Google dynamically builds URLs for many placements. With auto-tagging, GA4 receives gclid and pulls campaign data from the Google Ads link.
Consolidating PMax in GA4 Reports
// GA4 Custom Channel Group rule for PMax consolidation // Admin → Data Display → Channel Groups → Create // Rule: Session campaign name contains "PMax" OR "Performance Max" // Assign to channel: "Performance Max" // This consolidates all PMax traffic under one label in GA4 reports
Conversion Tracking for PMax: Use GA4 Import
PMax’s Smart Bidding depends heavily on conversion signal quality. Google strongly recommends GA4-imported conversions because cross-device conversions are included, modeled conversions from Consent Mode fill iOS/privacy gaps, and value-based bidding works better with GA4’s revenue data. Set conversion window to 30 days minimum — PMax’s YouTube and Display placements have longer consideration windows than Search.

BigQuery: PMax Attribution Analysis
-- PMax sessions and conversions across all placements
SELECT
(SELECT value.string_value FROM UNNEST(event_params) WHERE key='campaign') AS campaign,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key='medium') AS medium,
COUNT(DISTINCT CONCAT(user_pseudo_id,'_',
CAST((SELECT value.int_value FROM UNNEST(event_params) WHERE key='ga_session_id') AS STRING)
)) AS sessions,
COUNTIF(event_name='purchase') AS purchases
FROM `project.analytics_XXXXXXXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20260401' AND '20260430'
AND (SELECT value.string_value FROM UNNEST(event_params) WHERE key='campaign') LIKE '%PMax%'
GROUP BY 1,2 ORDER BY sessions DESC;
PMax GA4 Tracking Checklist
- ☐ Auto-tagging enabled in Google Ads account settings
- ☐ GA4 linked to Google Ads (Admin → Google Ads Links)
- ☐ Purchase event imported as conversion with 30-day window
- ☐ Custom Channel Group created for PMax consolidation
- ☐ Enhanced Conversions enabled for better cross-device matching
- ☐ Consent Mode V2 implemented for EU traffic modeling
Related: GA4 Import vs Tag-Based Conversions, GA4 Channel Grouping.
