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

[PPC Productivity] This game-changing workflow hack saved me tons of clicks and many hours

Navigating between different clients can be a HUGE time sink. I can only imagine the countless hours I’ve devoted to tirelessly clicking between different accounts across various tools.

Here’s a quick win for all of you with little time: deeplink bookmarks for every client.

Instead of having each bookmark go to the homepage of the tool, have it deeplink directly to your client.

Right-click the bookmark folder and open all tabs in one click!

Easy win, right?

– Nils

[custom column] easily monitor the percentage of daily budget spent

Want to easily see how much of your daily budget has been spent in a given date range?

You can, using this custom column (“Perc of Daily Budget Spent”):

I use this column to quickly see if we’re reaching our daily budget or not. If we do, and performance is right, there might be room for growth -> Let’s contact the client to increase budget!

Here’s how you create the custom column

Here’s the formula for you to copy-paste:

  (Cost / report_days_count()) / Daily_Budget

Go ahead, try it. It only takes 3 mins!

– Nils

P.S. Want to create a script that automagically alerts you when your percentage of daily budget spent reaches a certain threshold? 

If so, I’ve got good news for you!

If you can read English, you can create your own Google Ads Script and automate your way to free time.

In my Google Ads Scripts for Beginners workshop, you will learn exactly what to do to get your very own script running in your account. In ONE DAY.

Places are limited. Reserve your spot now: https://nilsrooijmans.com/google-ads-scripting-workshop-for-beginners/

Hope to see you there!

P.P.S. Here’s the link to the original Reddit post with more details:
https://www.reddit.com/r/PPC/comments/13qheuz/does_anyone_know_an_automted_way_to_prevent_the/

PPC Pareto Principle

Live the PPC Pareto Principle lifestyle:

1. Campaigns. What are the few campaigns that have the most positive impact on my account? Spend more time with them.

2. Priorities. What are the few actions that have the most positive impact on my performance? Prioritize them.

3. Learning. What are the few information sources I learn the most from? Focus on them.

4. Stress. What are the few sources that cause most of the stress and friction in my life? Eliminate them.

– Nils (who is inspired by productivity hero James Clear)

P.S. Want to automate the tedious repetitive tasks that keep you from doing the stuff that matters? I’ve got good news for you!

If you can read English, you can create your own Google Ads Script and automate your way to free time.

In my Google Ads Scripts for Beginners workshop, you will learn exactly what to do to get your very own script running in your account. In ONE DAY.

Places are limited. Reserve your spot now: https://nilsrooijmans.com/google-ads-scripting-workshop-for-beginners/

Hope to see you there!

P.P.S. Here’s the link to the original Reddit post with more details:
https://www.reddit.com/r/PPC/comments/13qheuz/does_anyone_know_an_automted_way_to_prevent_the/

please do prevent this nightmare: one copy-paste mishap cost an agency big bucks

This morning, I stumbled upon a gripping post on Reddit that vividly portrays a pain so relatable, it hits you right in the gut:

“…the client noticed and was annoyed, then my director noticed and was annoyed, and now he has to tell our new boss (who will be annoyed) and in the end we’ll have to write off the cost and I’ll have lost my agency a little chunk of commision.” 

OUCH!!

In the Reddit post, OP describes how he used the Google Ads UI to copy-paste YouTube campaigns. And without him knowing, the copies had the Display Network enabled, where the original did not…

The result? Display pissed away half of his budget on random websites and apps!

Yep, Google is like that.

Bug, or feature? You tell me…

Either way, this is a great example of one of my favorite use cases for scripts — prevent manual mistakes.

To prevent mistakes likes this: you could create a script that runs every hour and uses a GAQL query to check the ‘network_settings.target_content_network’ setting for your campaigns, and send an email alert if that setting is ‘true’.

Here’s the thing: You can easily ask GPT-4 to create a script that will prevent costly mistakes like this.

Here’s the query I used:

“Create a google ads script that uses gaql to check if my campaigns have the ‘network_settings.target_content_network’ setting set to true. The script should log all the campaigns that have this setting set to true and send an email alert if there is at least one campaign that has this setting set to true.”

Go ahead, try it for yourself. It only takes 5 minutes!

– Nils

P.S. Want to learn how to create a script like this?

I’ve got good news for you!

If you can read English, you can create your own Google Ads Script and have GPT assist you.

In my Google Ads Scripts for Beginners workshop, you will learn exactly what to do to get your very own script running in your account. In ONE DAY.

Places are limited. Reserve your spot now: https://nilsrooijmans.com/google-ads-scripting-workshop-for-beginners/

Hope to see you there!

P.P.S. Here’s the link to the original Reddit post with more details:
https://www.reddit.com/r/PPC/comments/13qheuz/does_anyone_know_an_automted_way_to_prevent_the/

[Google Ads Script] Update your Google Shopping Ads every hour of the day

Do your products’ prices change more than once per day?

Or do products easily go out of stock during the day?

If so, this script might be of interest to you:

Fetch Google Shopping Feeds Every Hour of the Day

URL: https://nilsrooijmans.com/google-ads-script-increase-shopping-feed-update-frequency/

What it does: This script fetches your shopping feed every hour. This way, all the data in your Merchant Center and Shopping Ads is always up to date.

Why you care: The Google Merchant Center interface only supports once-per-day updates of the product data in your shopping feed. Because of this fetch rate limitation, your shopping campaigns may show outdated product listing ads on the Google SERP.

– Nils

a tool to easily add typos to your (negative) keywords

Here’s a handy tool I just came across: http://tools.seobook.com/spelling/keywords-typos.cgi

What it does: it creates a list with the most common typos for your (negative) keywords.

Why you’d care:

1. Negative keywords don’t do close variants; you’ll have to add each and every frequent typo to prevent your ad from showing.

2. To prevent PMax from hijacking your brand traffic, adding typos to your brand campaign and/or PMax negative keyword lists is a must.

PRO TIP: Create a script that automatically adds close variant search terms as new keywords to your branded campaign. This will prevent PMax from taking priority for these searches. In theory, at least.

– Nils

a glimpse into our AI scripting future

I just asked GPT-4 to create a Google Ads Script for me.

The script it created first pulls the performance labels for the headlines and descriptions of my RSAs.

It then calls GPT-3 to ask it a general question on how it can improve headlines and descriptions of RSAs.

The script then takes this answer from GPT-3, combines it with the current assets and their performance scores, and then asks GPT-3 to create new headlines and descriptions for the ones that had a ‘LOW’ performance score… based on what it had just learned (from itself) on how to improve headlines and descriptions.

I had to fiddle with the prompts a bit and do some tweaking of the final script to get it to work, but GPT-4 was able to almost completely write the script itself.

Also, I would say the quality of new headlines and descriptions wasn’t top notch, yet definitely good enough for most of the accounts I’ve seen in my lifetime.

I am still working on the prompts, as they are not ready for prime time yet. Stay tuned for more…

– Nils

P.S. Want to finally get started writing your own Google Ads Scripts? If so, I’ve got good news for you!

If you can read English, you can create your own Google Ads Script.

In my Google Ads Scripts for Beginners workshop, you will learn exactly what to do to get your very own script running in your account. In ONE DAY.

Places are limited. Reserve your spot now: https://nilsrooijmans.com/google-ads-scripting-workshop-for-beginners/

I hope to see (and hear) you there!

my favorite filter to reduce wasted ad spend

Here’s my favorite way to manually reduce wasted ad spend:

1. Go to the search term view at account level 
2. Create filter (clicks > 100 AND conversions < 1)
3. Save filter
4. Revisit the filter at least once every month

And there’s your list of potential negative keywords! 

Simply add the negative keywords to your account and gone are those clicks that go nowhere.

PRO TIP: have a script automatically monitor your search terms for you, and have it send an email alert every time a search term matches your filter(s).

– Nils

P.S. Have you ever thought about creating your own Google Ads Script but gave up on the idea?

I’ve got good news for you!

If you can read English, you can create your own Google Ads Script.

In my Google Ads Scripts for Beginners workshop, you will learn exactly what to do to get your very own script running in your account. In ONE DAY.

Places are limited. Reserve your spot now: https://nilsrooijmans.com/google-ads-scripting-workshop-for-beginners/

I hope to see (and hear) you there!