[Performance Max] Compare product clicks from PMax vs Shopping… in 2 minutes

Did you know you can easily compare product clicks from PMax vs Standard Shopping? You can do so in only 2 minutes!

Here’s how:
1. Open Google Ads UI
2. Navigate to Reports
3. Click ‘Custom’ to create a custom report
4. Add ‘MC ID’ (merchant center ID) to Row data
5. Add ‘Campaign type’ to Row data
6. Add metrics as Columns 

Here’s what this report will look like (click image to enlarge):

NOTE: Not all product clicks from PMax campaigns are clicks from Google Shopping Product Listing Ads. PMax may also show your products in dynamic remarketing or other exotic locations it is hiding from us.

– Nils

Please don’t make this tracking mistake

Here’s a truth in computer science: garbage in, garbage out.

Let me rephrase that in the Google Ads Smart Bidding context: incorrect or poor-quality conversion tracking will produce faulty bids.

Faulty bids tank results. Not good. Yet, this is what happened to one of my accounts recently. The number of tracked conversions was artificially inflated.

Here’s what happened:

1. We forgot to add unique transaction IDs to the tracking.
2. For some reason unknown to us, a large portion of people who finished the purchase visited the thank you page a second time.
3. So, the same transaction was being tracked twice.
4. The result: a repeat rate of 1.50 for transactions that in reality only happened once.

“Repeat rate” is the average number of conversions you receive based on interactions that led to at least one conversion. This is reported in the Conversion view in the Google Ads UI (note that you may need to add the ‘repeat rate’ column):

To avoid over-counting, add an order ID to your conversion tag.

Here’s more info on how to minimize duplicate conversions:
https://support.google.com/google-ads/answer/6386790

– Nils

PS: A track I’m currently listening to, to point myself in the right direction for 2023: https://www.youtube.com/watch?v=kkZ_vKWF8e8

podcast predictions for 2023

Fellow list member Albert Roig Martin invited me to his PPC podcast to share my thoughts on “PPC in the new year.”

Here’s a transcript of my thoughts:

As we’ve seen, Google has been pushing AI automation a lot further in 2022. Examples include the complete switch to RSAs, the push for Performance Max, and for instance dynamic asset creation with Google automatically adding images from your landing page as an ad extension.

In 2023, Google is going to continue on this road with more automations coming our way, and less strict targeting capabilities for us. The reason Google is doing this is it wants to see more advertisers competing for inventory that is more “up in the funnel.” 

Traditionally, Google Ads advertisers have been competing for high-intent clicks in the bottom of the funnel; clicks from the search result page for keywords with high intent.

Most advertisers were reluctant to spend significant budget more up in the funnel because more up in the funnel it is much more difficult to discriminate between clicks that convert and those that do not. If we were to do so, the short term returns would be much lower and that kept us from expanding the Google budget.

Now, Google is training its AI to learn what upper funnel clicks will convert, and thus allow many advertisers to start spending budget on inventory that it couldn’t monetize in the past. 

I think that’s the main reason for Google to move to more automation in 2023 and less control for us — because it allows the Google AI to learn what works and what doesn’t. For many advertisers, this is a good thing… after _a while_ the machine has learned to discriminate between clicks with high probability to convert and clicks with low conversion probability.

However, machine learning goes by trial and error. And Google is making the advertiser pay for the errors. This is where the role of us PPC experts comes into play, and this role is only going to be more important in 2023.

I think savvy advertisers will increase automations, and layer them on top of Google’s AI to make sure the AI stays within the boundaries of what we as advertisers accept. Concrete examples of this would include: 

– proactively negating search terms and excluding display placements before they’ve accrued a lot of unnecessary ad spend
– using scripts to regain control over the exploration versus exploitation balance that dictates the speed of learning and the fee we are willing to pay for the algorithms to learn
– using scripts to alert us if Google is making any unwanted automated changes in our account (remember the move to DDA in 2022?)

These examples are especially relevant with respect to the upcoming recession, because it allows PPC professionals to weather the storm by regaining some control and rebalance short term profitability over long term growth.

Here’s a link to the podcast episode, with my segment starting at 01:16:40 (initially in Spanish): https://ppccast.com/podcast/126-repasamos-2022-y-pensamos-en-2023-con-la-comunidad/

Want more thoughts on 2023? Let me know.

– Nils

Welcome, 2023

Happy New Year!

I hope you had a great 2022 and are excited for an even better 2023  🙂

Thanks for welcoming me into your inbox every day — I sincerely appreciate it.

This year, we celebrated New Year’s Eve at the famous “pontjesbrug” in Curaçao.

It’s a great place to meet a lot of interesting people.

A fellow entrepreneur in the digital marketing space asked me a question.

Him: “Got any resolutions for the new year?” 
Me: “Yep.”
Me: “To buy 23% less clicks for my clients.” 

Cheers to a year of improved returns!

– Nils

people don’t generally buy what they click

Here’s a fact: over 40% of people don’t buy what (shopping ad) they click.

Don’t believe me? As per retail guru Andreas Reiffen’s research: “only 34 percent (of conversions) bought the product that was clicked.” (More info at: https://searchengineland.com/can-manage-inventory-google-shopping-247541)

Here’s a quick way to see similar data for yourself in your Analytics data:

Step 1: Go to Conversions > Ecommerce > Product Performance
Step 2: Add Secondary dimension ‘Campaign’
Step 3: Add filter to only show a shopping campaign that targets a specific (set of) product(s)
Step 4: Have a look at the products that are actually bought after the click

(You can click the image to enlarge it)

In most of my Ecommerce accounts, a huge chunk of the products sold are products that are not targeted in the filtered campaigns.

You can use this Analytics view to see what products are bought via your PMax campaigns as well. Just filter on your PMax campaign.

Go ahead, it only takes 5 minutes.

So, what products does your audience buy after they click your product listing ad?

What do you think this report tells you about ROAS targets?

– Nils

[Performance Max] Script to delete automatically-created YouTube videos

I’m not really sure what to think of this script, so I’m curious to learn your thoughts.

Background: When you don’t provide your own video in a PMax Asset Group, Google will automatically create one for you. This allows Google to show ads on YouTube for your PMax campaigns.

Problem: These auto-generated videos are mostly of soul-destroying quality and/or generate clicks with little value. Also, some of us don’t want to run ads on YouTube at all. Unfortunately, PMax does not currently provide a way to opt-out of video ads.

Solution: Last week, long-time list member and Google Ads Scripts fan Lyubomir Popov shared a script for removing auto-generated videos from your PMax campaigns.

Here’s the link: https://docs.google.com/document/d/11EnTsOHNlctimmD5HUPiFBr-2GOzlvBwiWD-5xVAtiM/view

The script basically checks for automatically-created YouTube videos and removes them. That’s it. 

Is it really that easy, though? Won’t Google simply regenerate new ones after you’ve deleted them?

I like the idea behind the script because it is a great example of how we can leverage the power of scripts to regain some control in the era of automation. At the same time, I am not sure this is the best way we could be fighting the machine.

What are your thoughts on this? I’d love to learn about them, and you can share them with me via email at nils@nilsrooijmans.com.

– Nils

A quick and easy way to test your GAQL queries

Here’s a scenario you might recognize. Google Ads script in the old script environment: works like a charm. Same script in the new environment: throwing errors all over the place, and/or simply timing out.

In these cases, there’s a big chance the issue is caused by some old AWQL queries that need to be migrated to the new GAQL format.

Migrating these queries takes some trial and error, and testing GAQL queries from within your code might just feel too cumbersome.

If you recognize what I am talking about, you might want to check out this (free) tool by our PPC friends at TrueClicks: https://gaql.app/

The tool allows you to perform GAQL queries on live Google Ads accounts that you have access to. Within seconds, you’ll see a table with the results of your query, which you can also export as an Excel file.

NOTE: The tool does require access to your account data.

Happy querying!

– Nils

annual reminder

Remember that agency/freelancer who did an audit on your account a year ago? 

That person just might still be able to access your data.

Annual reminder: Go check on all the people who have access to your Google Ads account(s)!

Here’s your how-to guide:
https://support.google.com/google-ads/answer/6372672?hl=en#:~:text=Sign%20in%20to%20your%20Google,then%20enter%20their%20email%20address

PRO TIP: Schedule this task as as a yearly “Custom recurrence” event in your calendar.

– Nils

trick to prevent Google from overspending/wasting budget that is ‘left on the table’

Last January, we talked about what happens to your monthly spend when you change your daily budget. (Link provided below for your convenience.)

Today, I came across an excellent post on LinkedIn by Google Ads legend Mike Rhodes. He shares a great little trick to prevent Google from overspending/wasting budget that is ‘left on the table’:

Link to post: https://www.linkedin.com/posts/websavvy_googleads-ppc-adwords-activity-7004553961143775232-Up2m

– Nils

PS: Here’s the link to what I wrote earlier this year, as promised: https://nilsrooijmans.com/daily/what-happens-when-you-change-your-daily-budget

zoom in and out periodically

To miss the forest for the trees is a problem.

However, it’s just as problematic to miss the trees for the forest.

Being stuck in one mode or the other reflects a rigidity of focus.

If you don’t zoom in and out periodically to maintain an accurate perspective on your account(s), your thinking will be either:

1. too small to make a meaningful impact (i.e., tinkering with headlines for ads that get little impressions), or
2. too abstract to be effective in the real world (i.e., dumping all your products with different margins in a single asset group PMax campaign).

To my analytical, detail-oriented friends: maybe devote one day a month to zooming out by imagining the impact you’d like to have on the bigger marketing picture or what new audiences you could potentially reach with different campaign (types).

And to my big thinking, corner-cutting friends: maybe devote one day a month to zooming in by quietly listening to the nitty-gritty data folks who disagree with your approach in hopes of understanding the nuances of their insights.

Whichever one you need to do, I’d be willing to bet that doing so would make you more effective at reaching bigger goals, better ROIs.

– Nils

[Performance Max] ValueTrack and Custom parameters for improved tracking

Do you want to track Performance Max clicks at the Asset group level?

Fellow list member Felipe Martins sent in this question (shared with permission, slightly edited for clarity):

“Since I’ve started with PMax campaigns I need to track more properly, since we are using auto-tagging and seeing NULL values in the utm_content for these campaigns.

Do you know anything about ValueTrack and Asset Groups? I mean, if you know any kind of template we could use to track “asset group name” or “asset group id”?

Great question.

I’ve tested ValueTrack parameters in my PMax campaigns by adding the following Tracking template to multiple campaigns:

'{lpurl}?matchtype={matchtype}&extensionid={extensionid}&targetid={targetid}&network={network}&gsn={ifsearch:1}&gdn={ifcontent:1}&keyword={keyword}&placement={placement}&adposition={adposition}' 

Unfortunately, NONE, of the parameters get any value assigned. There’s an occasional exception for the network parameter; sometimes the value for ‘network’ is set to ‘x’. I think ‘x’ stands for ‘crossnetwork’, not sure why this happens only occasionally.

The same happens when you add the tracking parameters as Final URL Suffix; no values are assigned.

What you can do though, is add your Custom parameters at the PMax campaign level: https://support.google.com/google-ads/answer/6325879?ctx=tltp. You can do this manually, or use a script to automatically set the parameters for you.

Another thing you can do is adding some tracking variables to your Asset groups!

As far as I know, Google does not allow you to add a tracking template or custom parameters at the asset group level.

What you can do, is use a script to automatically set the Final URL of your PMax asset groups to contain your custom parameters.
That is, you can add the Name and Id of the asset group by hardcoding them in your Final URL:

'?utm_source='google'&utm_medium='cpc'&utm_campaign={PmaxCampaignName}&utm_content={PmaxAssetGroupName}&utm_id={PmaxAssetGroupId}'

Here are two links to help you get started:

Happy scripting!

– Nils

PS: If you want me to create the script for you, send me an email at nils@nilsrooijmans.com.

Automagically adding radius targeting in bulk

Imagine having to spend 2 hours per day adding radius targeting to your campaigns:

1. Grab a coffee while the Google Ads interface loads your campaign view
2. Click Campaign Settings
3. Stare at the screen in full awe, not understanding why it takes ages to load
4. Click Locations
5. Click Advanced Search
6. Lookup target
7. Set radius
8. Click Save
9. Navigate to the next campaign
10. Wait for at least 5 seconds (seconds that feel like forever) for the page to load
11. Click Locations, click Advanced Search, lookup target, set radius, click Save
12. Rinse and repeat

All the above. For two hours. Every day.

Yesterday, one of my clients complained about this horror show and asked me if we could automate this process using scripts.

He was looking for a solution that automagically adds radius targets based on location names (i.e., cities) in the campaign name.

Good news: you can use scripts to add radius targets in bulk!

Here’s a code snippet to help you get started: https://developers.google.com/google-ads/scripts/docs/examples/proximity

If you want to automate your radius targets too and have me create your script for you, send me an email at nils@nilsrooijmans.com.

– Nils

A question I always say yes to

Every now and then, an email lands in my inbox that requires only one word in the reply.

The one word is “Yes.”

The email usually goes something like this:

“Hey Nils, I just thought of X, should I test this?” (*)

And then I go: 

“Yes!”

X can be anything.

“I want to add dashes at the start of my headlines to stand out, should I test this?” 

Yes.

“My colleague suggested we add custom sitelinks to our top ad groups to increase clicks. Should we test this?”

Yes.

“You suggested adding converting search terms as keywords to our ad groups. Sounds like a lot of work. Should we really test this?”

Yes (and use a script to do so).

“Google suggested changing our keywords to broad. Should I test this?”

Yes.

“Should we test Max Conversions bidding on our competitor campaign?”

Yes.

The answer is yes.

Always Be Testing.

– Nils

(*) By the way, I love emails like these! So, if you are testing things now, or are considering testing something, please share by sending me an email at nils@nilsrooijmans.com.

“It’s so much better to have everything in GAQL”

Long-time list member Vincent Hsu sent in this response below to one of my latest emails, shared with permission. (A URL to my original email’s contents is provided below for your convenience.)

“Justed checking in to tell you that this Newsletter is great 🙂 Just what I needed to update to GAQL today !
AWQL still silently converts to GAQL silently in the background so things continue to work in most cases, but it’s so much better to have everything in GAQL isn’t it :-)”

I love responses like this! It is this kind of replies that make writing my emails all worth the effort 🙂

More importantly, Vincent is right. Google is trying hard to make the new Google Ads environment backward compatible with the old scripts. 

Still, it’s better to migrate your scripts to the new environment and upgrade your code. This includes migrating AWQL to GAQL.

Here’s why:

1. The code that Google uses to provide backward compatibility is (still) buggy. This means not all code from the old environment will work properly in the new environment. (Just head over to the Google Ads Script forum and you will see what I am talking about.)

 2. The code that Google uses to provide backward compatibility is slowing down your scripts. Running legacy scripts in the new environment unnecessarily slows things down. This means you may reach the execution limit of 30 minutes and your script will simply stop.

So, start migrating your scripts!

Any scripts left unmigrated will be automatically migrated and may be paused next week, on October 31, when legacy scripts sunset.

– Nils

PS: Here’s a link to what I wrote in my original email -> https://nilsrooijmans.com/daily/query-migration-tool