“If it wasn’t for scripts, I wouldn’t have clients and ex-clients referring clients to me.”

A few weeks ago I sent out an email listing the top 5 benefits for agency owners when it comes to using scripts. (Here’s a copy of it, for your convenience: https://nilsrooijmans.com/daily/why-agency-owners-love-scripts)

Good friend of the list Sanja Jovanovic (name shared with permission) replied with a lovely message that clearly illustrates one of the advantages :

If it wasn’t for scripts, I wouldn’t have clients and ex-clients referring clients to me.

One of my fav clients had to cut the budget for external agencies so we’re not working together anymore, though I still have access to their account.

I use the new search term alert script and emailed them today to check in and say they are paying $700 per click for a competitor search term and they should look into expanding their negative keyword lists.

The feedback was greatly appreciated. I firmly believe they will be back as soon as they get more funding.

Question for other agency owners: have you experienced similar benefits from using scripts lately?

Oh, and here’s the link to the script Sanja mentioned:

https://nilsrooijmans.com/google-ads-script-trending-search-terms/

– Nils

Optimized targeting and audience expansion — some thoughts and settings

FYI: Last week, similar segments have been fully removed from all ad groups and campaigns in Google Ads.

Display, Discovery, and Video action campaigns that are still using similar audience segments after August 1, 2023 will be opted into optimized targeting.

Video campaigns with “Product and brand consideration” or “Brand awareness and reach” objectives will be opted into audience expansion.

If you have Display, Discovery or Video campaigns that had similar audiences (aka “similar segments”) running, beware: optimized targeting may stop your campaign from serving on a specific audience. This can happen when Google thinks the specific audience has poor performance.

Google also says:

If you’ve been using similar segments on Search or Shopping campaigns and are not using Smart Bidding, you should use Smart Bidding with your campaigns. If you’re using Smart Bidding already, or running Performance Max campaigns, you don’t need to take any action, since Performance Max campaigns leverage signals from your first-party data.

My take: this is another great example of how PPC is changing. It is not up to us anymore to define the targets we want our ads to show for. The machine will explore the targeting options, and zoom in on what “works”.

On the one hand, this is great news: we can automagically grow the account beyond our limited knowledge of what audiences will convert (the ones we target). The bad news is that exploring these new opportunities costs money. Our money.

And it is not obvious where that money is being spent. 

With the removal of more strict targeting capabilities, Google is forcing us to pay for the trial and error that is fundamental to machine learning. AND it is hiding this cost in the reported averages…

Here’s the thing: Always keep an eye on Google’s AI.

Monitor the performance of this kind of change like a hawk!

If you do not like the feature, you can turn off the ‘Optimized targeting and audience expansion’ setting at the account level, in the audience manager.

NOTE: If you leave this on at the account level, be sure to turn it off in your remarketing campaigns/ad groups, as Google will target non-remarketing audiences when Optimized Targeting is enabled.

More info: https://support.google.com/google-ads/answer/12463119?hl=en

-Nils

PS:  

What is the difference between audience expansion and optimized targeting? Here’s Google’s answer: 

Audience expansion looks for additional conversions by expanding to audience segments that look like your manually-selected audience segments. Optimized targeting looks for additional conversions by targeting people most likely to convert (based on real-time campaign conversion data, like what people who convert recently searched for). With optimized targeting, your manually-selected audience segments influence the model by providing an informed starting point.

For example, Jiaying wants to attract people to the upcoming launch of a new running shoe. In the campaign’s targeting, Jiaying uses two audience types: a custom segment based on top performing keywords from her Search campaigns (for example, “running shoe sale”), and the “Athletic Footwear” in-market segment. Here’s how audience expansion and optimized targeting may handle Jiaying’s campaign:

Audience expansion: In addition to Jiaying’s manually-selected audience segments, audience expansion includes similar segments like the “trainers sale” custom segment and the “Sporting Goods” in-market segment.

Optimized targeting: Optimized targeting expands to users that are likely to convert by creating a profile of what a converter looks like based on real-time conversion data. For example, that data could include Google searches for specific running shoe brands or clicks to a popular sportswear website. While Jiaying’s manually-selected audience segments provide a starting point, optimized targeting looks for conversions outside of her selected segments.

ad copy inspiration

Need inspiration for your ad copy on product X?

Try this:

1. Go to Google
2. Type ‘site:reddit.com [product_name]’
3. Scan the SERP
4. Click any that stand out and research the language in the post and comments

Here’s the thing: people respond best when you speak _their_ language.

Researching your audience in the wild (i.e., on Reddit) will teach you their language.

– Nils

Redirects — don’t let them hurt you


Did you know that redirects hurt your account’s performance?

Here’s why:

  1. Page load times are an important factor. Using 301/302 redirects slows things down which can impact your conversion rates and Quality Score and thus overall performance.
  2. Redirects often drop URL parameters necessary for proper conversion tracking, resulting in incomplete data and under-reporting of conversions. This is especially bad when you are running smart bidding.
  3. Cross-domain redirects are terrible for analytics.

Luckily for us, there’s a nice Chrome extension that makes it very easy to spot redirects during campaign setups, and/or landing page analyses. It’s called “Redirect Path,” and here’s a link to it:

https://chrome.google.com/webstore/detail/redirect-path/aomidfkchockcldhbkggjokdkkebmdll?hl=en

Now, unfortunately, links that do not redirect at the time of setup might do so in the future. Here are some possible reasons:

  • Changes in URL structure: Your SEO colleagues or web developers might have decided it was time to change the URL structure of the website, redirecting visitors all over the place.
  • CMS updates: The CMS might have been updated, adding or removing trailing slashes to all URLs for some reason.
  • Protocol shifts: Your client might have just shifted from HTTP to HTTPS (yes, I know, it’s 2023 already!).

All sorts of things can result in your Final URLs not working properly anymore.

That’s why I created my Redirect Checker script.

It checks for URLs with redirects, reports them in a Google Sheet, and sends an email if there’s at least one redirect. You can access the script here:

https://nilsrooijmans.com/google-ads-script-check-for-redirects/

Happy scripting!

-Nils

an unusual lunch

Some 2 years ago I had an unusual lunch.

My good PPC friend and PPC hero Wijnand Meijer and I sat down right next to the Amsterdam canals, at Café de Jaren.

For those of you who don’t know Wijnand: he’s a champion in the PPC arena, working on the best PPC Audit tool -> TrueClicks.

Wijnand is about as thorough as anyone can be when it comes to PPC research. He’s the author of a sublime blog post series on Adwords audits on Brad Geddes’ blog. (Yes, Adwords… a bit outdated now, but still very worth the read). 

He’s given many talks and presentations at diverse international PPC events. Each and every one of them packed with too much references to deep PPC knowledge for any of us to consume in a lifetime.

Fair to say, Wijnand knows his shit. 

So when Wijnand speaks, I listen.

This time was different.

Wijnand: “Last week I studied this new Google Ads framework I discovered. GTA.”

Me: “Lol. So, you drank the gamification cool aid, right? You’re trying to get TrueClicks customers hooked to your tool by implementing some manipulative game mechanics. You sneaky bastard.”

Wijnand: “No, no. It’s not that. It’s called God Tier Ads. Sort of an advanced course for Google Ads.”

Me (confused): “Huh? What do you mean? Another one of those self-proclaimed gurus refurbishing the standard PPC shit that’s already out there on each and every blog? And FFS, what’s up with that name? _GOD_ tier ads?? Christ!”

Wijnand: “Nope. This one is different. It’s Ed Leake. Ed is the real deal.”

Me: “Never heard of.”

Wijnand: “Well, you should.”

Me (arrogant prick): “Oh come on! Last time I learned something new from buying an online course on Google Ads was when BMM still had to be invented.”

Wijnand: “This one is different.”

Me: “How so?”

Wijnand: “Ed has been over the river and through the woods. Maybe even more experience than you and I.”

Me (even more arrogant): “Sure.”

Wijnand: “He’s funny too.”

Me: “Haha, so not German, right?” 
[Sorry to all my German friends who can laugh about this bad joke.]

Wijnand: “British. Crazy accent.”

Me: “Well anyways. I am not buying. I’ve spent thousands on courses I never finish. Done with it.”

Wijnand: “Your loss. Trust me. You’ll like it.”

Me: “Right. So, I’ve heard they serve great whites to go with the salmon here.”

Two hours and one bicycle ride later I got back to my senses. It was Wijnand recommending, after all. (I blame the wine).

Swiped the credit card, and dove in.

Fast forward 2 years.

Not a single regret.

GTA _is_ the real deal. Packed with extremely handy checklists that catapulted my workflows to remarkable improvements, unique actionable insights that sparked dozens of new experiments, and extremely valuable videos for educating new team members. 

Ed keeps the content up-to-date, every month, for free, for life! And if you’re lucky, you’ll even get a smile or two watching his pretty face presenting his nuggets of gold.

So, today, I am telling you. It’s worth it.

If you are serious about your Google Ads Skills and want to build some more PPC muscle, GO GET THE GTA FRAMEWORK.

Trust me, you’ll thank me later.

So this is me thanking Wijnand. And Ed.

Here’s the link: 

https://app.godtierads.com/gta-bonus-bundle/apnnu (*)

Pay once, get everything.

Use my discount code “NILS100” at checkout to get $100 off. 

– Nils

(*) Yes, that’s an affiliate link. Normally I don’t do this. Ed is the exception. Says enough, right?

interesting mail

This landed in my inbox today…

I’ve been working as a fake PPC marketeer for 3 years by randomly changing manual bids in an account I inhereted.

Now my boss decided he wants to go along with Google’s advice and switch to Performance Max.
I want to learn PPC properly and become a real Google Ads specialist. What should I do?

Please help me respond.

– Nils

How To Ensure A Keyword Is Included In All Search Terms

Interesting question on Reddit today:

I am running a relatively small ad campaign for a local EV Charger installer. The PPC focus is for Commercial enquiries only.

I am targeting phrase match keywords such as “Commercial EV Charging” and “Commercial EV Charger Installations” among others.

The problem is these keywords are pulling in search terms like “EV Charger Installations” as an exact match (close variant). They are removing the commercial element from my keywords.

I am stumped. Even if I change to exact match, these search terms will still show as they are a close enough variant. Is there anything I can do? Can I instruct Google to strictly include the word “commercial” in all search terms?

I’d be reluctant to turn these keywords off, as they have by far the best search volume.

All help much appreciated.

You gotta love close variants, right?

Here’s my response:

Tricky B2B challenge here. Not uncommon though. Here’s what I would do:

1. Use a script to auto-negate all but your exact keywords (so every search term that pops up in the SQR is auto-negated unless it exactly matches your exact match keywords)

2. Try to pre-qualify the click via ad copy, i.e., add headline “for Commercial Enquiries Only” (be sure to pin the headlines/descriptions!)

3. Target specific B2B audiences and exclude typical B2C audiences

– Nils

Enhanced version of Google Ads Script: Negative Keywords Conflicts

One of my favorite use cases for scripts is managing negative keywords. I use scripts to:

  • suggest negative keywords candidates
  • allow for easy management of negatives via Google Sheets
  • do n-gram analyses to discover potential negative candidates
  • keep exact match keywords exact (super handy for brand campaigns to prevent non-brand from matching your brand keyword)
  • auto-negate converting search terms in HIGH prio Shopping campaigns, so that the queries get funneled into higher bid MED prio campaigns
  • automatically add positive keywords to a negative keyword list that is attached to my DSA campaigns to prevent cannibalization
  • …and a ton of other things.

Occasionally, I or my team members make the unfortunate mistake of accidentally adding a negative keyword that blocks one or more positive keywords. Not good. So, I use another script to alert me when that happens: the Negative Keyword Conflicts script.

The original script is developed by Google, but it has a major drawback: it also looks at keywords in campaigns that have ended (i.e., ended experiment campaigns). This results in a lot of false alerts, making you want to ignore them altogether.

To fix this issue, I decide to change the script to only look at campaigns that are still serving. This fix was easy. The only thing I need to add was the condition to only look at campaigns with serving_status = ‘SERVING’.

In the code, that means one extra condition in the GAQL query (extra condition emphasized):

WHERE campaign.status = "ENABLED" AND campaign.serving_status = "SERVING" AND ad_group.status = "ENABLED" +

Here’s the enhanced version of the Google Ads Script for Negative Keywords Conflicts:

https://nilsrooijmans.com/negative-keyword-conflicts-alert-script-update/

What the script does:

It sends out an email alert if an account has positive keywords which are blocked by negative keywords. The script saves all such conflicts to a spreadsheet and sends out the email alert.

Why this matters:

Negative keywords are intended to prevent ads from showing on irrelevant search queries, but they may inadvertently block normal keywords from matching relevant search queries, making your campaigns less effective.

Happy scripting!

-Nils

Why agency owners love scripts

I recently had the pleasure of talking with my PPC friend Ed Leake, who runs a great community of PPC agency owners over at The Forge. During our discussion, we talked about the many benefits of using Google Ads Scripts for agency owners.

Here are the top 5 benefits they can provide agency owners:

1. Improved Positioning

Agencies that use scripts (and AI) can position themselves as innovative leaders who use state-of-the-art technology.

Think: “We are {insert brandname}. We optimize Google Ads campaigns for {insert target audience}. Unlike our competitors, we use custom automation to reduce wasted ad spend and increase profits.”

2. Easier Scaling

Thanks to scripts, agencies can take on more clients without having to hire more staff to handle the workload.

Think: scripts that automate the setup of new accounts, scripts that decimate the work required for negative keyword management, scripts that automate budget management and pacing, scripts that create reports, and so on.

3. Enhanced Quality Assurance

Thanks to scripts, agency owners can delegate a lot of the work to less skilled team members and still sleep well.

Think: scripts that detect (and alert for) anomalies in performance, scripts that spot little mistakes by team members (e.g., campaign settings like ‘advanced location targeting’ and ‘url expansion’), scripts that alert you when conversion tracking is down or when payment issues occur.

4. Better Hiring Opportunities

Believe it or not, some PPC pros that have been in the field for a long time actually LOVE to gain a new superpower. Learning how to use scripts for client-specific optimizations feels just like that.

5. Impressing and Retaining Clients

Google Ads data contains a ton of insights about the audience of your clients. Proactively sharing new insights is a trust builder like no other.

Think: scripts that automatically share changes in the search behavior of the audience (*), scripts that detect and share new interests (trending in-market audiences), scripts that visualize change in geographic areas, etc.

(*) hey, that sounds like my Trending Search Terms report!

Happy scripting,

-Nils

Total ROI is not just initial revenue

When your clients are evaluating their ROI on Google Ads, they’re probably considering a lot more than just the initial revenue. They may also consider things like:

  • How many new customers did we get last month?
  • How much revenue do we expect from these new customers in the next 12 months?
  • Did we beat the competition?
  • Did we reach our new target audience?
  • Can we show numbers that indicate growth that will satisfy our investors?

Here’s the thing: Big budget decisions are often much more complex than meets the eye.

“Value” is often vaguely defined.

The better you understand what’s really going through your clients’ minds, the better you can optimize your PPC campaigns to satisfy their goals.

-Nils

new feature – HUGE improvement in Google Ads Scripts 

Last week, Google announced support for new generic mutate functionality in Google Ads scripts. It’s already available, and it is a HUGE expansion of our scripting superpowers!

From now on, most operations that can be performed from GoogleAdsService.mutate can also be performed in Google Ads scripts. This includes creating and managing campaigns, creating new conversion actions, assets, feeds, etc.

Here’s some more info: https://developers.google.com/google-ads/scripts/docs/features/mutate

I’ve yet to start playing with this new feature and will keep you updated on my progress.

Let me know if you are already playing around with this exciting new capability.

– Nils

Universal Analytics dashboard for GA4

Just came across this post on LinkedIn today:

If you’re like me, and finally getting up to speed with setting up GA4 dashboards for your clients, this might be of interest.

Here’s the link: https://lookerstudio.google.com/u/0/reporting/70357074-40fe-41b1-9766-045a5da7e660/page/LLwSD

– Nils

PS: If you don’t know Martin, you should. Follow him and watch his talks. A treasure trove of awe-inspiring strategic and tactical tips for mastering PPC management.

Go get that one extra character in your descriptions

Here’s a small little hack to end your PPC week.

Did you know?

Google will automatically put a full stop at the end of your description, whether you add the full stop yourself or not.

This means that if you remove that period at the end, you gain an extra character.

Here’s what that looks like…

Image 1: My original description with the full stop punctuation at the end of my description. (Notice the 90/90 character limit)

Image 2: Same description without the full stop. (Notice the 89/90 character limit)

Image 3: NiceR description. (Notice both the R and period in the final ad that is being displayed)

Now it’s time for me to take my little boat out on the canals because it’s blue skies and over 25 (Celsius) in Amsterdam!

– Nils

[Google Ads Script] New converting search terms alert

Fellow Dutch PPC friend Geert Groot showed absolute magic in a post on LinkedIn yesterday. Without any scripting knowledge, he was able to use ChatGPT to create this script for us.

[Google Ads Script] Alerts for new converting search terms

URLhttps://gist.github.com/Xyborg/9cdcaf4d3980ec559bcc27c442e1c4b2

What it does: This script looks at the search term report and sends an email with converting search terms that aren’t yet added as keywords in your account.

Why you care: Adding converting search terms as keywords to your account allows for…

  1. higher CTR and improved quality score (especially when you are using Dynamic Keyword Insertion)
  2. higher quality clicks from your broad match keywords (because broad matching takes other keywords in the ad group into account)
  3. more relevant impressions, more converting clicks

Back in the days when Hagakure was a thing in account structures, I created sort of a similar script. My script automatically adds the converting search terms to the most relevant ad group before it sends a report. I still use it today, with great success, for many of my setups. 

If you’re interested in adding that functionality, just ask ChatGPT to assist you. 🙂

Happy scripting!

– Nils

Turned off “search partners” but the option is toggling back on by itself? Here’s what to do.

Here’s a post from /r/PPC today:

“I have on multiple occasions turned off the Google search partners option, but the next day somehow the option keeps turning back on. Eating up my entire budget with useless Leads. Any ideas on why this might be happening and how I can fix it?”

Turns out it was an auto apply recommendation setting…

Easy fix: check the recommendations tab and the auto apply settings.

But here’s the thing: You CANNOT sit back and simply trust Google to apply automations that will benefit _your_ objectives.

Don’t trust, verify! Verify by testing. Use scripts to continuously monitor the test data for you.

Here’s one of my favorite examples: https://nilsrooijmans.com/google-ads-script-search-partner-alerts/

This script compares the performance of the Search Partners to the Google Search Network. In case of a significant difference in CPA/ROAS performance, the issue is logged in a sheet and an alert is sent via email. That way, you’ll know when Search Partners aren’t performing, and you can opt out of the Search Partner network for these campaigns.

Happy scripting!

– Nils

Google Ads Scripts does not support GA4. Here’s a workaround.

Two days ago, July 1st, good old Universal Analytics has stopped aggregating data. We all need to move to the new GA4 solution.

This is bad news for us scripters: currently, Google Ads Scripts does not support GA4. Under “Advanced APIs” there is only one Analytics and that is the old UA version. GA4 is not (yet) supported.

Here’s the workaround:

1. Use an App script within a Google Sheet that connects to the new Google Analytics Data API, and from there, fetch the data from GA4 into the Google Sheet.
2. Next, use a Google Ads Script that reads the GA4 data from the Google Sheet.

I am considering hosting a short webinar on this topic if there is enough interest. Let me know if you’re interested.

– Nils

[Google Ads Script] Pause Campaigns for Potential Invalid Activity

This is my last working day before my motorcycle road trip in California. For the next two weeks, the MV Agusta Brutale will be my best friend. Before I’m off to the canyons, here’s my latest find:

[Google Ads Script] Pause Campaigns for Potential Invalid Activity

URLhttps://github.com/hoofay/autoPauseCampaignsInvalidClicks/blob/master/autoPauseCampaignsInvalidClicks.txt

What it does: This script pauses campaigns that have >30% invalid click rate (and >20 clicks) during the day.

Why you care: Click fraud is a rampant issue on Google’s Display Network. Google Shopping ads also see a lot of click fraud activity. Although Google does a great job in detecting click fraud, fraudulent clicks _will_ pass their filters unnoticed. And _you_ will be paying for them. So, if your ads are being targeted by invalid click activity, you might want to pause them.

Note: The script does require some minor changes to make it work for you (i.e., add email address, change thresholds, and optionally add functions to pause shopping and PMax campaigns). 

If you’re interested in the latter, just ask ChatGPT to assist you, or email me and I’ll see what I can do when I get back from the twisty roads.

See you in two weeks, happy scripting!

– Nils

A hidden setting you probably want to change

Here’s your PPC Tip for today: turn off (most) automated assets.

A while ago I had a client asking me why their ads said they were established in 2001 — their year of birth was 2011!

The answer?

Automated Dynamic Callout Extension.

These days they are called “automated assets,” and Google takes a lot of liberty in coming up with their content.

Turning them off has become a serious pain in the ass, but here you go.

To turn off account-level automated assets, follow these steps:

  1. In your Google Ads account, go to the Campaigns view
  2. Click the Assets drop-down in the section menu.
  3. Click Assets.
  4. Select Association from the “Table view” drop-down menu.
  5. Click the three-dot menu on the right, then select Account level automated assets.
  6. Click the three-dot menu on the right again, then select Advanced options.
  7. Select Turn off specific automated assets, then choose which asset to turn off.
  8. Select your reason for turning off the asset and add additional comments.
  9. Click Turn off.

I know, it’s a horrible nuisance that takes waaay too many clicks.

BUT, it only takes 5 minutes.

AND, trust me, you’ll thank me later.

-Nils

no more mismatched values 

Last night, one of my client’s best-selling products got disapproved.

No more impressions. No more clicks. No more sales.

I did get more emails, though… from an unhappy client.

The issue?

“Mismatched value (page crawl) [price]”

However, the website clearly showed the actual price, matching the feed:

So I thought: WTF?! Do I really need to dive into this website code to figure out why the Google crawler cannot recognize the discounted price?

Turns out, the answer is No. There’s an easy tool for that.

Here’s Google’s Rich Results Tool: https://search.google.com/test/rich-results

It’s a quick and easy way to verify that you have correctly implemented the structured data markup for price [price] on your product landing pages. 

Thank you, Google.

I hope you appreciate it as much as I do.

– Nils

PS: Here’s more info on how to fix structured data issues like these: https://developers.google.com/search/docs/appearance/structured-data/product