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

“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