PMax API Reporting: Asset vs. Ad Data

Performance Max and Google Ads API data

Hello,

I have been doing some searching around the web and throughout this subreddit, but am not finding much of the information that I need.

For some context, I work on the data engineering and analytics side of our company, so please excuse my lack of knowledge specific to Google Ads and their setup. Our digital marketing team currently uses a vendor, who manages all of our Google, Facebook, etc. campaigns and has established a system of “campaign codes” that they use in the URLs for our various campaigns and should be unique to the ads they are running. Our legacy system then collects this code from the UTM Campaign variable and retains it with every digital lead that we receive.

Current tech stack:

Fivetran – using Google Ads connector

Snowflake – data warehousing, fed by Fivetran

HubSpot – CRM for our form submissions, also connected via Fivetran to Snowflake

Tableau – reporting

The issue that we are having is with Performance Max campaigns and their lack of a final URL (even though it’s setup in GA) and being able to report on clicks, spend, etc. at the ad level. Fivetran is currently pulling about a dozen tables through the Google Ads API, as well as doing their standard transformations for Campaign report, Ad Group report, Ad report, URL report, etc. When comparing the campaign report to the ad report or URL report, we noticed that we can see total spend for our account at the campaign level but any performance max spend is not accounted for in the deeper level reporting. For example, the URL report will contain the UTM variables, including our custom campaign codes, and their relevant clicks, spend, etc. at the day level. We have this data for our other campaigns running in Google Ads, but nothing related to performance max. According to Fivetran, this is due to the lack of a Final URL and the way that performance max campaigns work.

Are we missing something in our setup? Is ad level reporting just not possible for performance max? How are you guys reporting on these campaigns?

We know which codes are assigned to the performance max campaigns, and it’s included in the ‘Final URL’ section of the asset setup, but we can’t get them to show up in the data from the API for us to connect our leads back to. Are we essentially limited to data at the campaign level and tying back a group of codes from our leads?

I appreciate any help you guys are able to offer!

The short answer is:

Why is ad-level reporting not available for Performance Max campaigns in the Google Ads API?

Performance Max (PMax) campaigns are designed to automate and obscure some ad-level data, which is why you’re having trouble getting granular reporting via the Google Ads API and Fivetran.

The issue lies in PMax’s use of automatically generated final URLs and their inability to guarantee that your manually appended UTM parameters – including your unique campaign codes – will always be in the final URL used for reporting, despite being in the asset group’s Final URL suffix.

The solution involves shifting the focus from reporting based on the click URL data in the API to reporting based on server-side tagging that captures the campaign code upon a lead conversion and sends it directly to HubSpot or an intermediary data store.

This bypasses the API data gaps entirely.

The long answer is:

Your challenge is a common pain point with PMax.

The Google Ads API – and consequently Fivetran – relies on structured data fields.

For PMax, the ad report and URL report are often sparse because PMax uses a single Final URL in the asset group primarily for landing page designation, but then generates numerous dynamic ad variations and final URLs itself, which may not consistently expose the granular UTM data, like your campaign codes, in the detailed reporting tables you are querying.

You are right to suspect that you are largely limited to data at the campaign level through the standard reports.

To fix this, you need to implement a server-side tracking solution.

This is where Google Tag Manager (GTM) along with a server-side solution like Stape or a custom setup using Google Cloud Platform comes in.

Here is the flow:

A user clicks a PMax ad.

The campaign code in the ad’s tracking template or Final URL suffix is on the landing page URL.

The user fills out a form, creating a lead in HubSpot.

You need a system that captures the campaign code from the landing page URL (using JavaScript or GTM) before the lead is created.

GTM is configured to fire a server-side tag.

This tag sends a payload that includes key lead information and the captured campaign code to a server-side endpoint (hosted on Stape or Google Cloud Platform).

This is where the magic happens – you are creating your own, reliable data stream.

The server-side container then processes this data and forwards it as a Standard Event – like Purchase or a custom lead event – not just to Google Ads for conversion tracking, but also to a webhook or API endpoint designed to update your HubSpot lead record or send the data directly to your data warehouse in Snowflake.

You can use the HubSpot API/webhooks to update the specific lead record with the campaign code or a Snowflake SQL API/webhook to insert the data directly.

The Snowflake table is now enriched with the reliable, captured campaign code tied directly to the lead.

This approach is excellent and cheap because you are leveraging existing tools or affordable services: GTM is free.

Stape is inexpensive, offering a dedicated, fast server for your tags without the complexity of managing a full Google Cloud Platform server yourself, though Google Cloud Platform offers free tiers for initial setup too.

Fivetran, Snowflake, and Tableau remain essential but now you are connecting the missing link – the reliable campaign code – directly to the lead record.

You use the Google Ads API data for high-level campaign spend, and your new server-side data stream for granular lead attribution.

Tableau then simply joins the enriched lead data in Snowflake with the campaign-level spend data to give you the comprehensive reporting you need, bypassing the PMax reporting gap entirely.

You are no longer waiting for the Google Ads API to correctly report the UTMs – you are collecting them yourself at the point of conversion.

About The Author