Google simply cannot be trusted!

“Google simply cannot be trusted!”

There. I said it. 

And I will say it again.

Back in 2019, I was invited to the Great Day event to speak about this issue.

In my presentation titled “Keeping an Eye on Google’s AI using Scripts“,  I spoke about my methodology and scripts to monitor and analyze the impact of Google’s AI, mitigate some of the risks, and regain control.

The first slides talk about the different stakeholders in the Google Ads game, and how their goals aren’t aligned.

Recent revelations in the US antitrust trial against Google stress the importance of the matter.

Don’t believe me?

Read this: 

Bloomberg’s Leah Nylen has the details of Google ads executive Jerry Dischler’s testimony, where he describes statements he made under oath in 2020. 

Dischler says Google tweaks its auction process in ways that may have raised prices in the past by 5 percent for the typical advertiser and could potentially have raised them by 10 percent for some queries. 

The parties buying the ads would have been unaware of these “tunings” of prices; “we tend not to tell advertisers about pricing changes,” Dischler said.

Source: https://www.theverge.com/2023/9/19/23880275/google-search-ads-competition-auction-prices-doj-trial-antitrust

I hate to say it again, but you simply cannot trust Google to spend your ad budget in a way that benefits you the most.

Keep an eye on Google’s AI.

– Nils

easy tools to create simple scripts

Here’s a nice little tool I came across today: https://by-edoardo.com/google-ads-script-generator

It helps you create a very simple script that automatically generates a Google Sheet with your campaign stats.

1. Select the fields, metrics, and date range
2. Hit “Get Your Script”
3. Copy to clipboard
4. Paste in your Google Ads Script editor (for more instructions, visit my “How to install and run your first script” guide)
5. Create a Google Sheet and add the URL to the script (follow the instructions in the top section of the code)
6. Authorize, Preview
7. Schedule to run daily/weekly/monthly
8. PRO TIP: Ask ChatGPT to add some code to send you an email with a link to the sheet every time the report has been generated

– Nils

PS: 

Want to learn how to create your own scripts via ChatGPT? Join my “5-Day ChatGPT and Scripts Challenge”.

More details: https://nilsrooijmans.com/5-day-chatgpt-and-google-ads-scripts-challenge/

sneak preview

I am on my way to Berlin for my session at the SMX Advanced event.

During the event, I will release my Google Ads Script to connect to the GPT API.

It’s not out in the open yet, but since you are on my list…

Here’s a sneak preview: https://nilsrooijmans.com/gpt-api-example-script.txt

Expect more details and example use cases soon!

– Nils

PS: I will also be announcing the “5-Day ChatGPT and Scripts Challenge”! More details here: https://nilsrooijmans.com/5-day-chatgpt-and-google-ads-scripts-challenge/

Closer than Close

“Never fails that you inspire, uncontrollable desire” 

Rosie Gaines taught us some 30 years ago: “close” is what we desire.

Ed Leake and I are no different. 

We like to be close.

Not literally, him and me.

Ed likes to live as a solitary Hebride on rainy Scottish islands so I doubt we’ll ever meet.

BUT…

Close to clicks? Yes.

Close to conversions? Even better.

I’ll let Ed explain:

– Nils

PS:

Ed actually has 22 more pillars of great ad copy to get more clicks and conversions. They are part of GTS.

If you want to simplify account management, take back control, and improve results (or get your money back) -> sign up for Ed’s God Tier Ads

Use my discount code “NILS100” at checkout for $100 off. Pay once, get lifetime access to everything.

I’d still share these tips without the kickback… Ed’s pro tips have made me way more money than I’ll ever see from commissions, but a few extra bucks is nice!

Here’s the link again: https://app.godtierads.com/gta-bonus-bundle/apnnu

n-gram analysis pro tip

Here’s a pro tip from fellow Google Ads Scripter Stefan Neefischer:

“Add soft conversion events to your ads account, e.g. engaged user (not bouncing after some seconds), and use this for making the n-gram analysis. You will identify a lot of totally off-topic patterns thanks to Google’s changes in the match types / close variants”

I agree and can confirm. N-gram analysis based on micro conversions allow you to reduce wasted ad spend much quicker.

Watch how the Shopping, DSA, and Broad-match algorithms match your products, pages, and keywords to user queries.

A great example of how you can use scripts to “Keep an Eye on Google’s AI“!

– Nils

PS: Here’s the link to my updated version of Brainlabs’ N-gram analysis script: https://nilsrooijmans.com/updated-google-ads-script-brainlabs-search-query-mining-for-n-gram-analysis/

ChatGPT + ADA -> sharing my latest creation

“Is there a trend in the number of impressions for my top 5 search terms this year?”

This question popped up while analyzing some Google Ads data today.

“Well, why not ask ChatGPT?”

And so I did.

I downloaded my search term data, opened up ChatGPT, enabled Advanced Data Analysis (formerly known as Code Interpreter), and…

Two prompts and five minutes later, this is what I got:

TWO prompts. FIVE minutes.

Thank you ChatGPT!

– Nils

Google Analytics 4 (GA4) – Dimensions and Metrics Cheatsheet

Are you creating custom or recommended events for tracking via GA4?

This cheat sheet is a goldmine for understanding event parameters, key dimensions, and metrics in GA4.

I really love the interactive interface and the details of the information.

Example use case: click on a metric or dimension and it will tell you if it’s available in Looker Studio, if it’s calculated, etc. At the top of the page you can also choose “Data Studio” in the dropdown and it will filter to show all available metrics/dimensions.

Here’s the link: https://data.ga4spy.com/

Quick, precise, and as far as I can tell, very up to date.

Enjoy your PPC day!

– Nils

Use ChatGPT on your own PPC data with Code Interpreter 

If you aren’t using Code Interpreter in ChatGPT yet: You Should.

Here’s a 20 min video that will, without any doubt, convince you to start playing with this super-tool: https://www.youtube.com/watch?v=O8GUH0_htRM

It is REALLY worth the watch.

Code Interpreter is the next best thing to a cold beer on a hot and sunny afternoon.

I already use it on a lot of my PPC data.

Today I created this n-gram analysis graph, in 5 mins:

Here’s the thing: Normally, creating this graph would easily take HOURS. Thanks to Code Interpreter I created it in 5 MINS!

This is only the top of the iceberg of what is possible with the combination of ChatGPT and Code Interpreter. 

– Nils

Landing Page Checklist

Last two years I’ve been lucky enough to be part of God Tier Ads, hosted by Ed Leake.

Ed and I share a passion for sharing the knowledge of PPC professionals. 

We both agreed, PPC Pros look beyond what is visible in the Google Ads interface.

So we decided I should share some of Ed’s insights on landing page design with you.

Here’s Ed:

Questions to ask yourself before creating your page:

  • Who is my ideal customer?
  • What problem do they have?
  • Without your product/service what would they be doing?
  • How is your product/service unique?
  • What do you want them to do on your landing page?


Page Structure (above the fold)

  • Headline focused on benefits
  • Product/service example in image(s)
  • Fears addressed so visitors don’t just leave
  • Call to action
  • Social proof such as a testimonial or rating


Copywriting

  • Plain simple language (no buzzwords)
  • Speak the language your prospects use
  • Highlight pain – the current way, or before vs after
  • Focus on the why and your USP
  • Show benefits first, features come after


Call to action

  • Focus on one goal
  • CTA is clear and contrasts with the page
  • Optional: secondary CTA for those not yet ready to act
  • Repeat primary CTA before site footer
  • Optional: CTA in sticky-header menu so it’s always visible
  • Use sub-text to address doubts near your CTA


Sign-up form 

  • Try to reduce form fields (ask for the bare minimum)
  • For larger forms retarget people who part-complete sign up
  • If your form is larger, consider 2-steps
  • Ask low threat questions first, not contact details


 Performance 


That’s it!

Is this the most extensive checklist you’re going to find?

Not at all.

What I like about it, and what discriminates Ed’s work from the rest, is that it gets you _thinking_ about what is _really_ important. Who is my ideal customer? What problem do they have? Without your product/service, what would they be doing?

The list is concise, concrete, and actionable. Another thing Ed and I both appreciate. 

Here’s my advice: next time you open your Google Ads interface, navigate to Landing Pages, sort by Cost desc, open the top landing page, and work your way through this checklist!

– Nils

PS:

Ed actually has 7 more checks to level up your landing page. They are part of his GTA course. If you’re really serious about upping your PPC skills and want to get more PPC nuggets like this, sign up for Ed’s God Tier Ads.

Use my discount code “NILS100” at checkout for $100 off. Pay once, get lifetime access to everything.

I’d still share these tips without the kickback… Ed’s pro tips have made me way more money than I’ll ever see from commissions, but a few extra bucks is nice!

Here’s the link again: https://app.godtierads.com/gta-bonus-bundle/apnnu

[Custom column] Increased Competition Detector

Here’s a creative use case for custom columns in your Google Ads UI: the Increased Competition Detector.

This custom column looks at decreases in click-through rate (>10%) and increases in CPC (>10%) to gauge potential market competition and activity. 

It is extremely helpful for monitoring activity on brand keywords (e.g., competitor poaching), but it’s valuable information for key non-brand terms as well.

Here’s what it looks like:

Here’s how to create it:

And here’s the formula for easy copy-pasting:

if(and((Avg_CPC.between_dates(report_range_end, report_range_end) / Avg_CPC.between_dates(report_range_start, report_range_start)- 1 ) > 0.1, (CTR.between_dates(report_range_end, report_range_end)/CTR.between_dates(report_range_start, report_range_start)-1  ) < -0.1 ), "incr comp", "-")

Go ahead, add it to your custom column set, it only takes 3 mintues!

Hat tip to Laura Schiele for sharing this on SEL earlier this year.

– Nils

[Google Ads Script] PMax Trending Search Categories

Performance Max is a black box. Extremely little data about its performance is shared with us via the Google Ads interface.

Yet, we all crave this data. 

In fact, if I had to choose between a Google Sheet with yesterday’s PPC stats and my morning coffee… well, my Harrar French press would win.

BUT, the thing is:

We are PPC professionals. We want to optimize based on performance data. Reduce wasted ad spend in areas with low click value. Increase clicks from targets that show great results.

Yet Google is making it harder to do our jobs each and every day by hiding valuable data in the interface.

Luckily for us, the Google Ads API allows us to pull some more data from the Google Ads platform.

And we can use a script to do some nice things with this data!

Imagine having a Google Sheet at your fingertips that shows what search categories are trending in your Performance Max campaigns.

–> Easily see how the PMax algorithm is changing, and matching your assets to new user queries.
–> Quickly see what types of searches these newly inserted products are being matched to.
–> Promptly respond to downward trends in search terms that showed great conversion value in the past.

And there’s more.

You can use the insights to:

– Add trending search categories as new (broad) keywords to your standard search campaigns 
– Tailor your creatives based on trends
– Add popular search categories to your landing pages and Merchant Center feed descriptions to boost performance

I will take any additional insight I can get since Google gives so little on PMax. That’s why I created this script.

Here’s a script to monitor how Performance Max is matching your assets to user queries, and what is changing in the search behavior of your audience.

The script creates a report in Google Sheets. The report lists the search categories that show a significant increase or drop in impressions. It compares last week’s data to the week before.

LINK: https://nilsrooijmans.com/google-ads-script-pmax-trending-search-categories/

– Nils

What PPC Tools I use

Here’s a question I get asked a lot: “What PPC tools do you use?”

I like to test many, but stick to the bare essentials.

Here’s what PPC tools I actually _use_ on a daily/weekly basis.  

From the Google stack:  
– Google Tag Manager  
– Google Analytics (GA4)  
– Google Merchant Center
– Google Ads  
– Google Ads Editor  
– Google Ads Scripts (I use them A LOT!)  
– Google Sheets  
– Google Docs
– Google Looker Studio 
– Google Big Query (for the bigger accounts with loads of data)
– Google Lighthouse

Feed management:
– Channable

Chrome extensions:
– page load times
– keywords everywhere
– keyword modifier
– tag assistant
– analytics debugger
– toggle case

What PPC tools that you can’t live without did I forget?

– Nils

error: 403 response code

Here’s a common issue when you’re running the famous link checker script: the script reports response code 403 for a number of URLs.

The site loads fine, and checking the same URLs with your browser, FireBug, Screaming Frog or any other tool does not return any error. Yet still, the link checker script reports these damned 403 error(s).

A 403 Forbidden response code typically indicates that the server understands the request but refuses to authorize it; it doesn’t give access to the requested resource.

There can be loads of reasons for this annoying issue.

Here’s the top 4:

1. User-Agent Header:

Some servers check the User-Agent header to identify the client making the request. If the User-Agent header sent by UrlFetchApp is different from a standard browser’s, the server might block it. You could try setting the User-Agent header to mimic a common browser in your UrlFetchApp request.

Fix: If the server is configured to block requests from non-browser User-Agent strings, you can modify the User-Agent string in your UrlFetchApp request to mimic a common browser. (More details in the link below.)

2. IP Whitelisting:

Some servers allow requests only from specific IP addresses or ranges. If the server’s configuration is set to allow requests only from certain IPs (like your own), requests from other sources (like Google’s servers) might be blocked. The web host is blocking Google in their firewall.

Fix: make sure to whitelist all IP addresses used by the UrlFetchApp service. Here’s the list of IP addresses: https://www.gstatic.com/ipranges/goog.txt

3. Authentication:

If your website requires some form of authentication (like cookies or tokens), the request from UrlFetchApp may lack these credentials, leading to a 403 error.

Fix: Make sure that any required authentication headers or cookies are included in the UrlFetchApp request.

4. Rate Limiting:

If the server has rate limiting in place and UrlFetchApp is making requests too frequently, it might trigger a 403 response. This might not be an issue with your browser if you’re not hitting those rate limits (your browsing behavior typically will not hit these limits, whereas an automated process will).

Fix: decrease the frequency and volume of the requests to your server, or change the server settings to allow for higher limits.

Because of the frequency of this 403 error, I’ve added an answer with some more causes and details to my Google Ads Scripts FAQ.

So, next time any of your team members gets this error message, simply send them this link:

https://nilsrooijmans.com/google-ads-scripts-faq/error-403-response-code/

Haven’t installed any link checker solutions yet? C’mon. It’s a no-brainer and only takes 5 minutes! Here’s the link: https://nilsrooijmans.com/the-best-adwords-script-i-have-ever-used/

– Nils

Five truths (?) about Google Ads AI

Five truths (?) about Google Ads AI:

1. It is true that the Google Ads AI, with broad match, smart bidding, and PMax allows advertisers to get access to ad inventory that was previously hard to target in a profitable manner.

2. It is true that, with enough time and money, the Google Ads AI will be able to learn and predict the conversion value of the clicks from this additional inventory.

3. It is true that this learning requires data, and that data costs money. Our money. (We pay for the trial-and-error that is part of the machine learning.)

4. It is also true that this cost is hidden in the reported averages in the Google Ads interface.

5. It is also true that Google doesn’t want you to prevent this cost.  It’s becoming harder and harder to limit our ad impressions to targets that have proven conversion value.

We are forced to target Google’s unsold inventory. Inventory that is bursting at the seems with low quality clicks. We are forced to pay for the machine to learn how to weed out these low quality clicks. We are forced to continue doing so, because that’s the area where Google’s ad revenue has the most growth potential.

Please tell me I am wrong.

– Nils

Stop Dynamic Search Ads showing “out of stock” products

In the last two years, I’ve been lucky enough to be part of God Tier Ads, hosted by Ed Leake. It’s pretty unique. Unlike other tools or resources I’ve used in the past, this one is actually kept up to date AND it doesn’t just shill the same old stuff that Google does.

The thing I like most is that Ed continuously shares practical methods and techniques that can be applied immediately to produce observable outcomes. That perfectly fits my mission: to help you improve your career and your PPC results by spreading knowledge on PPC automation.

So, we decided I should share some of Ed’s PPC nuggets of gold with you. Here’s the first: “Stop Dynamic Search Ads showing ‘out of stock’ products”

DSAs are great. I use them to automatically target relevant user queries for which my standard search campaigns do not have keywords yet. This way, I can start advertising less popular products without all the work of creating separate keywords, ad groups, etc.

One downside though: Google’s DSAs don’t really care whether or not your product is still available. They will send the click anyway.

So, how do you prevent this wasted ad spend?

1. Navigate to your “Negative dynamic ad targets”
2. Click the blue plus icon and select Add to “Campaign”
3. Select “Create rules to target web page” and select “Page content” contains. Enter your text for products that are out of stock (e.g., “Out of stock”), as found on the website.
4. Click “Add”
5. And finally, remember to hit Save.

– Nils

PS:

If you’re really serious about upping your PPC skills and still don’t have access to Ed’s God Tier Ads, consider using my referral link.

Use my discount code “NILS100” at checkout for $100 off. Pay once, get lifetime access to everything.

I’d still share these tips without the kickback. Ed’s pro tips have made me way more money than I’ll ever see from commissions, but a few extra bucks is nice!

Here’s the link again: https://app.godtierads.com/gta-bonus-bundle/apnnu

[PPC theory] Click share

A PPC friend asked an interesting question today.

If you’re a PPC nerd like me, the answer might interest you.

I am going to paraphrase the question a bit to make it more concise:

“Could you explain to me why I have a 50% Impression Share and only a 35% Click Share in this campaign?  I don’t understand how there can be such a significant difference.

My answer:

Here’s my understanding: let’s say Google gets 100 user queries for which your campaign is eligible (meaning, you entered the auction). IS of 50% means that your ad shows 50 times. BUT your ad is not the only ad. Your competitors also show. Click share of 35% means that you get 35% of all the clicks on all the ads in all 100 auctions that you entered.

So let’s say these 100 SERPs generated 60 clicks on ads total for Google, and you got 20 clicks out of your 50 impressions, your click share would be 20/60 = 33.3%.

Some more theory with links to resources:

Impression share includes all auctions where your ad showed (impressions), and all auctions where your ad is competitive enough to enter the auction (total eligible impressions). Impression share (IS) is the percentage of impressions that your ads receive compared to the total number of impressions that your ads could get.

Impression share = impressions (50) / total eligible impressions (100), thus IS = 50%

Click share includes all auctions where your ad showed or where your ad was competitive in the auction but did not show. (total eligible impressions)

Let’s say that, during the day, all auctions where your ad is competitive enough to enter the auction generate a total of 60 clicks on the ads (note every single SERP view can generate 0 or more ad clicks). And let’s say you got 20 of those clicks.

Now you have:

Click share = 20/60 , thus 33.3%

More details:
https://support.google.com/google-ads/answer/6299696?hl=en
https://support.google.com/google-ads/answer/2497703?hl=en

– Nils