“What’s your process for building and testing a script?”

Last week, a PPC Redditor asked a great question:

“What’s your process for building and testing a script?”

The key word here is ‘process.’ You need to have a process first before you can start automating the (sub)tasks.  

So, the first step would be to think deeply about the task you want to automate, and to document every step in the process.  

Let’s say you want to make sure all ad groups have live ads. In this case, ask yourself:  
1. Why do I want this?  
2. What do I need for this?  
3. How can I get the things I need?  

Potential answers (simplified):  
1. I don’t want disapprovals or manual mistakes (e.g., accidentally pausing entities) to stop me from showing ads.
2. I need to continuously make sure all my ad groups have at least one enabled keyword and one enabled ad (that is eligible to run).  
3. For every enabled ad group, I need to check the status of my keywords and the status of my ads, and be in the know when an enabled ad group has zero enabled keywords or zero enabled ads. This check needs to happen all the time.  

The second step would be to start writing functions to automate the parts of the process you have described.  

In our example, you would create a function to check if an ad group has at least one enabled keyword. You would also create a function to check if an ad group has at least one enabled (eligible) ad running.  Then, you would write a function that goes over all enabled ad groups, and uses these functions to check keywords and ads.  You would also have another function to alert you (i.e., via email). That function would get called if one of your checks failed.  

The third step would be to test the different functions and then preview the script. For the testing, I always recommend testing them individually first and then using the Logger.log function to see intermediate results. Then, previewing instead of ‘running’ the script already will make sure the script does not make any changes in your account, so you are sure the script does not F things up.  

After previewing, if you are happy with the results, you can then schedule the script to run hourly.  

Google Ads Scripting all starts with your process.

Think hard about your current PPC tasks that take up most of your time or are error-prone. Write them down. Be very specific in your documentation. Divide tasks into subtasks. Then, start scripting.

– Nils

1,2,3 ad copy

Every now and then I stumble across some old PPC blog posts with amazing evergreen PPC tips. Here’s another beauty that popped up in my browser today. Can you see which ad copy sticks out?

If you can’t spot it immediately, here it is:

As you can see, they have a number at the start of their headline which draws your attention, and gives you a clear expectation of what happens when you click.

Here’s the thing: Few advertisers take the time to experiment with strategies and patterns that the eye is drawn to. If you do, you get the click.

Source: https://davidmelamed.com/2015/02/10/clever-ppc-advertisement-2015-far/

– Nils

[Custom Column] Conversion value per thousand impressions

Custom columns are great! This nifty feature allows you to display non-standard data in the Google Ads interface and Reports.

In the coming months, I will be sharing some of my favorites.

Here is a first: Conversion value per thousand impressions

This metric allows me to rank campaigns, ad groups, and ads on the value per impression.

At the campaign or ad group level: relatively low scores tell me there might be something wrong with the targeting of the campaign or ad group (e.g., not strict enough).

At the level of the ads: relatively low scores tell me the ad and/or lander needs work.

– Nils

Query Migration Tool

Last week, I was in Berlin to attend and present at the SMX Advanced event.

Several people joined my workshop on the Google Ads Query Language.

We discussed many aspects of this new way of getting reports from the new Google Ads script environment. You know, this new environment we all need to migrate to before the end of this month.

One of the more challenging parts of migrating your current scripts to the new environment is the migration of AWQL queries to GAQL.

Here is a tool that might be of help if you get stuck: https://developers.google.com/google-ads/api/docs/migration/query-migration-tool

– Nils

PS: Having trouble migrating your scripts? I’m currently offering 1-hour migration support sessions. Email me at nils@nilsrooijmans.com to get on the list for that.

On performance measurement and improvement

Where performance is measured, performance improves.

Where performance isn’t measured, performance will not improve.

Now read the above sentences again, with machine learning in mind.

Moral of the story: be sure to track all of your conversions.

– Nils

PS: Here are two quick links to help you track more conversions:
https://support.google.com/google-ads/answer/2998031?hl=en
https://support.google.com/google-ads/answer/9888656?hl=en

Teaching AI to scale

Optimizing for conversions doesn’t just increase conversions or revenue. It also increases the total data input volume that machine learning can use to do its job well. The more conversion data, the better the algorithm can optimize for conversions.

This is how you teach the AI to scale.

Ask yourself:

1. Why does this person click this ad?
2. Where does the click go?
3. How can this be improved?

– Nils

[Performance Max] Support in Google Ads Scripts

Some great news came out today: Performance Max campaigns are now finally (partly) supported in Google Ads Scripts!

Here’s Google’s announcement, including some links to more details: https://ads-developers.googleblog.com/2022/09/performance-max-support-in-google-ads.html

Here are some initial “script-automated optimizations for PMax” that came to my mind:

  • Automatically exclude locations that don’t work
  • Automatically pause PMax campaigns when they hit your daily/weekly/monthly budget target
  • Automatically pause underperforming assets/asset groups
  • Automate the stair-step approach to scale PMax performance 

These are the first few ideas that came up for me based on what’s possible according to the documentation.

– Nils

PS: I’m curious, what PMax-related task(s) would you like to automate? You can email me about them at nils@nilsrooijmans.com.

Google’s policy is always changing… here’s the latest

ICYMI: Google Ads is implementing a new policy for the landing pages of your ads. This new policy requires landing pages to meet the “better ads standards” as the Coalition For Better Ads laid out.

Here’s the thing: If an ad leads to a page that doesn’t comply with the better ad standards, Google will disapprove the ad.

Google will begin enforcing the policy update in October 2022.

“In October 2022, the Destination requirements policy will be updated to include a new policy requiring ad experiences on destinations to conform to the Coalition for Better Ads’ Better Ads Standards.

Destinations containing ad experiences that do not conform to the Better Ads Standards will be informed via the Ad Experience Report, and any ads that lead to such destinations will be disapproved.”

SOURCE: https://support.google.com/adspolicy/answer/12406603?hl=en

Note that newsletter pop-ups, or any other pop-ups for that matter, might cause your lander to not meet the “better ads standards.” Here’s a good rule of thumb — if an ad on your landing page interrupts a visitor’s browsing experience, it’s almost certainly against the better ads standards, and your ads will probably get disapproved.

You can check if your website has pages that don’t meet the “better ads standards” via the ‘Ad Experience Report’ in Google Search Console. See details: https://www.google.com/webmasters/tools/ad-experience-unverified

PRO TIP: Prevent getting surprised (and losing tons of revenue) by implementing this script to immediately alert you of any disapproved ads -> https://nilsrooijmans.com/google-ads-script-disapproved-ads-alerts/ 

– Nils

firefighters and fire marshals 

The problem is NOT that you are too busy.

You will always be too busy, and that will never change.

There will always be Google Reps to shut up, negative keywords to add, 404 pages to fix, mobile app placements to exclude, derailed bidding strategies to correct course, disapproved ads to fix, out of stock items to pause, depleted budgets to hide, clients to report to, and managers to tell to go F themselves.

The problem is that you’re acting like a firefighter instead of a fire marshal. You’re constantly rushing from one fire to the next, never slowing down to install smoke detectors. 

The problem is that few fires need to become dangerous, and you’re not taking the time to prevent them from doing so.

Most fires start with an innocent little flame. A flashing spark that brings light and fuels your creativity. But you are not paying attention. And that little flame just gets bigger. And bigger. Until you can show your firefighting skills again, experience the thrill, and feel busy. 

Installing smoke detectors may sound boring, and even require some new skills, but it will make you feel less busy.

Don’t get addicted to fighting fires.

– Nils

PS: Looking for some good smoke detectors? Check out the Alert category in my list of 400+ Google Ads Scripts.

We all love to track conversions, don’t we?

We all love to track conversions, don’t we?

I sure do.

Here’s your PPC Pro tip for today: track your clicks from free product listings in Google Shopping.

Earlier this year, Google enabled auto-tagging for free product listings through Google Merchant Center.

This feature allows for improved tracking of your free clicks from Google Shopping by adding a tracking parameter (‘srsltid’) to your URLs. When enabled, you final URL will look something like this: www.yourwebshop.com/?srsltid=1x2y3z.

In Google Analytics, I use this feature to separate traffic from free product listings from the overall Google organic traffic, and analyse conversion data. Read on to learn how.

NOTE: This feature is not enabled by default. To turn it on, follow these steps:

  1. In your Merchant Center account, click the gear icon and then click on “Conversion Settings” under “Settings”
  2. Toggle the Auto-tagging button to be “ON”

And here’s how you view traffic from free listings in Google Analytics:

  • For Google Analytics 4 properties, the traffic source is “Shopping free listings”. This makes life easy.
  • For Universal Analytics properties, free listing traffic is reported with all other organic traffic sources from Google (with “google” as the traffic source and “organic” as the medium).

This means we have to do some extra work to view the results from this traffic. Follow these steps:

  1. Navigate to Acquisitions > All Traffic > Source/Medium
  2. Choose ‘Landing Page’ as your secondary dimension
  3. Click on the advanced filtering and include landing page containing ‘srsltid’

In the example below, you can see conversions from free shopping listings in the transactions column.

Or, even better, you can create a custom segment with traffic from free shopping listings:

NB: Some websites may break with the tracking parameter. So, first check with your developer if this feature works on your website. Or, check yourself by going to a popular product landing page and appending the tracking parameter to your url: ?srsltid=1x2y3z

Do not enable auto-tagging in Google Merchant Center if you get an error.

– Nils

[Performance Max] TIP: Create a PMax segment in Google Analytics for better reporting

Performance Max campaigns are about as transparent as a window painted over with chalkboard paint.

The Google Ads interface gives us little to nothing when you want to analyze the results from your PMax campaign.

Luckily, we can use Analytics to do some more analysis on the audience PMax attracts and its post-click behavior on our website.

You can create a segment of users for whom the acquisition campaign name contains Performance Max, or whichever naming convention you use (see image 1 below).

Now, you can use this segment (and compare it to other segments) to see how these users are interacting with your website (see images 2 and 3 below).

For example, you can use this new segment on the Landing Page Report to see what landing pages your PMax campaign is sending traffic to, and whether you need to add URL exclusions or turn off URL expansion in PMax.

Or, you can go to the Geo Location report to have a look at the geo-locations from where your audience is originating, and decide whether or not you should exclude some based on the behavior on your website.

Or, compare the Mobile devices your PMax audience is using compared to other users.

Or …

Happy analyzing!

– Nils

(Below are the images, you can click them to enlarge.)

Testing Responsive Search Ads In Display Campaigns 

Visiting /r/PPC on Reddit is part of my daily routines. It helps me stay in touch with what is buzzing in the PPC community. Every now and then, a crazy hack pops up. Here’s today’s catch:

This might have limited use for a lot of you on the sub but hear me out.

From time to time you will come across a client who has a legacy expanded text ad running in a display ad group that is performing very well. In fact, it can’t be defeated.

Even if you create a Responsive Display Ad that uses the exact same headline and description, for whatever reason, the new inventory that opens up due to it being an RDA seems to make the ad unprofitable. Or maybe it is the fact that Google forces you to add an image which makes it look too much “like an ad” to some people… who knows the reason.

The issue here? Google retired ETAs and doesn’t let you create them anymore, so if that ad gets disapproved for whatever reason, you are out of luck.

Thankfully I found this little hack in Google that let’s you add Responsive Search Ads into your Display ad groups.

If you try to copy a responsive search ad from a search campaign and paste it into a display campaign using the Google Ads interface, you will get an error message saying something along the lines of ‘this ad type is not supported’.

However, if you do it from the Google Ads Editor, it lets you post the ad without any issues.
 And you can even use dynamic location and countdown features! How cool is that? Being able to call out someone’s location within the ad on the display network!?

Hopefully this helps some of you that have come across this same issue.

SOURCE: https://www.reddit.com/r/PPC/comments/wwli01/ppc_pro_tip_of_the_day_testing_responsive_search/

It is loopholes like these that give you a (temporary?) unfair advantage so you can beat competition on GDN.

Let’s test?

– Nils

short titles

Every now and then, I forget things that shouldn’t be forgotten. 

Like a 50 euro bill in the small pocket of my jeans.

But then, there is at least the surprise of discovering it again!

Last week, I had a similar experience, while going through some open tabs. One tab had a link to a Google support doc that I didn’t have a look at for… well, a long time.

Back in February this year, Google Merchant Center had added support to Google shopping feeds for a short title attribute. The benefit of the short title is that you can control what is included in your titles before they’re truncated on the smaller display areas of the Google ad network (i.e., mobile displays).

Google has a new help document on short titles that goes over the requirements and best practices for these. Some of them include:

– Use a relevant short title that clearly describes your product.
– Be concise. While the title [title] attribute is used to match a consumer’s search to your products, the short title [short_title] is intended to show your product more concisely in browser experiences.
– Limit your short titles to 65 or fewer characters. Users usually only see the first 65 characters of a short title, depending on their screen size.

SOURCE: https://support.google.com/merchants/answer/11551083?hl=en

We just recently started experimenting with this new attribute. Personally, I like to structure my short titles with product name + product nouns + brand. For example: “EVO 4.2 Bookshelf Speaker – Wharfedale” 

How about you? Do you already have some learnings on this topic that you can share? I’d love to learn. You can share them with me via email at nils@nilsrooijmans.com.

– Nils

PS: Here’s a track I’m currently listening to on my Wharfedale speakers -> https://www.youtube.com/watch?v=CUYboWbVe0A