Last chance: 20% OFF my “21 Must-Have Google Ads Scripts” eBook (ends tonight)

Yesterday, 53 of your fellow PPC specialists secured their copy of my “21 Must-Have Google Ads Scripts” eBook. Smart move — they’re now automating critical tasks, spotting hidden issues, and protecting ad budgets.

Here’s why Ana Kostic considers it essential:

“Precise, concise, and fluff-free. It saves time and instantly boosts productivity, especially if you manage multiple accounts.”

The good news: The 20% discount is still available.

The bad news: The discount ends tonight at midnight.

This curated collection of scripts can save you hours of work each month and help you deliver significantly better results for your clients or team.

👉 Get Your Copy » 

LIMITED TIME OFFER (ends at midnight):
Get 20% off using this discount code -> 21SCRIPTS

Get Your Discount » 

Don’t leave performance (or profit) on the table.

Just script it,
Nils

P.S. Alex van de Pol highlights:

“If you’re spending anything on Google Ads, do yourself a favour and get on board with scripts — and trust that Nils is a great driver!”

NEW eBook: 21 Scripts every PPC Pro MUST Have (20% discount next 24 hours)

Ever felt overwhelmed by the sheer number of Google Ads scripts out there?

I’ve been asked over and over by fellow PPC pros:

What’s the 20% of scripts that’ll get me 80% of the results?”

Great question. I’ve done the digging, so you don’t have to.

Here I am, introducing my brand new eBook:

👉 21 Must-Have Scripts to Automate & Optimize Your Google Ads

These aren’t random picks; they’re battle-tested scripts I’ve personally used to:

✓ Spot costly anomalies before they tank results
✓ Catch broken links that silently burn ad budgets
✓ Quickly alert me when conversions unexpectedly drop
✓ And much more…

Whether you’re managing a single account or juggling multiple clients, these 21 scripts have your back, just like I’ve got yours.

No coding needed — simply copy-paste.

Here’s what Ana Kostic, a PPC professional, has to say:

21 Must-Have Scripts is an incredibly useful resource. Precise, concise, and fluff-free — it saves time and boosts productivity, especially for those managing multiple accounts. It’s a fantastic resource I keep close in my day-to-day work.”

And here’s Tina Arnoldi’s perspective, who’s been in PPC since 2011:

Nils is one of my go-to sources for creating and modifying scripts. He doesn’t just provide scripts, he provides a use case for why you want to use them.”

Ready to save hours, avoid headaches, and impress your clients (and your boss)?

Get Your Copy »

LIMITED TIME OFFER: In the next 24 hours, you can get 20% off using the discount code 21SCRIPTS.

Get Your Discount »

P.S. Implement just 3 scripts today. See the immediate impact. Then watch your performance skyrocket.

As PPC Pro Martin Snowdon says:

“Works like a dream!”

– Nils

ouch… (second time) – please, don’t be like me

Roughly three years ago, I made a mistake.

Here’s what I wrote in my daily email from January 26, 2022:

Due to my elite auditing skills, I figured out how to save 30 PERCENT of ad spend without reducing conversion value.

Here’s some optimization tips:

1. End the broad match campaign experiment you added a month ago and forgot about
…”

Today, I discovered I made the same mistake again.

I guess I should take my own writing more seriously. (*)

– Nils

(*) Or stop excluding campaign experiments from my monitoring scripts.

[Google Ads Script] Conversion Drop Alerts and a BIG thank you  

Last week, I was in the Italian Alps for skiing.

Standing at the top of the Matterhorn, Europe’s highest ski-lift mountain, is thrilling.

But hearing the news of being voted #1 PPC influencer by fellow PPC’ers from up here? Now that’s next-level altitude sickness!

I’m humbled by the incredible support of fellow PPC’ers who voted me #1 in the community vote of this year’s Top 50 PPC Influencers — and thrilled to land at #5 in the overall standings.

Thanks to all of you who voted for me! 

“Influence” to me means using my voice to make PPC life easier, more performant, and more fun for others. 

That’s why scripting is such a passion of mine: a good Google Ads Script doesn’t just automate tasks — it increases performance and opens doors for the fun parts of PPC: creativity and strategy. 

I’m celebrating today by giving back: sharing one of my favorite scripts that I haven’t shared publicly before.

It’s a script that saved me from dropping off a cliff many times:

[Google Ads Script] Conversion Drop Alerts

URL: https://nilsrooijmans.com/scripts/Conversion-Drop-Alert.txt

What it does:
This script runs daily and checks if yesterday’s conversion performance is significantly lower than the historical average for the same day of the week, based on standard deviation. If a significant drop is detected, an alert will be sent via email.

Why you’d care:
Unintended dramatic decreases in conversions are nightmare fuel for any PPC specialist. They will probably upset your client, might hurt your smart bidding strategies, and look bad in your reports. There can be many issues causing big drops in conversions, not among the least are technical issues with your conversion tracking setup. Other potential causes include payment/budget issues, website issues, inventory issues, manual mistakes inside the account, etc. When this happens, you want to be the first to know.

How I use it:
The single-account version of this script is free. I use the (paid) MCC version in my manager account that allows me to monitor all my clients and also receive alerts via SMS and WhatsApp for unexpected ZERO conversion events.

Thanks again for your appreciation. I hope you like the script and vote for me again next year 🙂 

Happy scripting!

– Nils

Get My New eBook “21 Must-Have Google Ads Scripts” – FREE (Beta Offer) for 20 Readers 

I’m wrapping up my new eBook “21 Must-Have Google Ads Scripts,” packed with free, ready-to-use, time-saving scripts for any PPC pro.

Before it goes live, I’m offering a free beta version to the first 20 responders who are willing to:

1. Read the eBook with the first 10 scripts (10 mins)
2. Install and test at least 3 scripts mentioned in the book (15 mins)
3. Provide feedback on the eBook (3 mins)
4. Give me a short testimonial (2 mins)

As a thank-you for the 30 minutes of your time and for your feedback, you’ll also get 80% off the final version.

Interested? Email me at nils@nilsrooijmans.com and say “Let’s test!” 🙂

Cheers,
Nils

is it time to negotiate your raise in 2025, or start looking for a new job?

Last month, I sent out an email requesting you to participate in this year’s PPC Salary Survey.

If you participated in the survey, on behalf of Duane (the driving force behind the initiative) and myself: a big Thank You!

Special thanks to all you Dutch PPC folks on my list who participated. The Netherlands cracked the top 3 countries for responses this year for the first time! 

Salary transparency is so important to make things fair for everyone. Data like this gives us PPC peepz some bargaining power!

You can (re)negotiate salary for your current role (or a new one) at your employer, or use it in negotiations with a new employer.

This week, Duane shared the results. Here you go:

Final Report: PPC Salary Survey 2025
https://www.reddit.com/r/PPC/comments/1je1p92/ppc_salary_survey_2025_final_report_10th_year/

– Nils

Nolan’s Law

Nolan’s Law is an aphorism often attributed to Atari founder Nolan Bushnell, on the subject of video game design:

“All the best games are easy to learn and difficult to master. They should reward the first quarter and the hundredth.”

The same goes for Google Ads Scripts.

Getting started with scripts is easy to learn. And rewarding.

Writing advanced scripts from scratch (even with the help of AI) is hard to master. And rewarding.

Here’s the thing: the journey of scripts is rewarding every step of the way.

Start small. Install one or two “simple” scripts to get a feel of what is possible.

Increase complexity. Make some minor changes to the code and see what happens.

Challenge yourself. Create a very basic script yourself (with the help of ChatGPT).

Go play and have some fun.

Here’s a link to get you started on your journey:
https://nilsrooijmans.com/sitemap/

Happy scripting!

– Nils

[Google Ads Script] Disapproved Ads Alerts & Google’s Review Process

Google is clarifying its Google Ads review process to explain how it detects policy violations. See details here: https://support.google.com/adspolicy/answer/7187501 

TL;DR:
The review process combines Google’s AI and human evaluation (and is constantly changing). Google disapproves ads, assets, destinations, accounts, and other content that violate Google policies.

In determining whether an advertiser or destination is violating their policies, Google reviews information from a variety of sources, including:

  • ads
  • accounts
  • websites
  • content
  • user complaints
  • consumer reviews
  • regulatory warnings and rulings
  • other third-party sources

Google’s enforcement technologies use Google’s AI, modeled on human reviewers’ decisions. The policy-violating content is either blocked from serving by Google’s automated models or by manual review. Where a more nuanced determination is required, content is flagged for further review by trained operators and analysts who conduct content evaluations that might be difficult for algorithms to perform alone (for example, because an understanding of the context of the ad and account is required). The results of these manual reviews are then used to help build training data to improve the machine-learning models.

Here’s the thing:
These automated procedures often make mistakes (AI generates “false positives“). Google often disapproves your ads for faulty reasons. You need to apply for a review when that happens — otherwise, your ads won’t show!

Luckily, I have a script which can help you detect when Google disapproves your ads. (Note that not all disapprovals get reported via notifications in the Google Ads UI.)

[Google Ads Script] Disapproved Ads Alerts

URL: https://nilsrooijmans.com/google-ads-script-disapproved-ads-alerts/

What it does:
This script checks all enabled ads in your enabled ad groups and campaigns and sends an email alert if any of the ads are disapproved. It will add the alert to a Google Sheet so you’ll have a clear overview of the issues.

Why you’d care: 
Ads get disapproved for numerous reasons, and not all disapprovals get your attention. Google uses its AI to review your ads, and this AI often makes mistakes and often disapproves ads that have been running for months without problems. When this happens, you want to be in the know. This script assures that you are.

– Nils

5 steps for finding the time to learn how to automate your PPC tasks

Here’s how to FIND the time to learn how to CREATE more time:

  1. Decide the right time for automation of your PPC tasks is NOW.
  2. Open your calendar application.
  3. Create a recurring weekly appointment on Thursdays called SCRIPTING from 9am to noon.
  4. Install/change/create at least one Google Ads Script (use my list and starting guide for inspiration).
  5. There is no step 5.

Just try it.

Just Script It.

Once you get started, it’s easier than you think.

– Nils

[ad copy] heartbreaking

“For Sale: Baby Shoes, Never Worn”



Pause.



Read that headline above again.

There are two types of reactions to this headline: 

  • Type 1 – I am crying. The baby never made it to the point where the shoes would fit. My heart is broken.
  • Type 2 – Baby feet grow fast. They must have bought the wrong size. Let’s have ’em.

If your reaction was in camp 1, consider the power of the emotion it raised.

Can you write headlines that do the same?

– Nils

[e-commerce] Do you want to decrease return rates and increase profits?

Recognize this?

“Nils, our biggest orders have the highest return rates.”

Ouch! 

Yeah, I recognize that.

For fashion retailers, this is the single biggest pain when it comes to scaling their business.

Orders grow big not so much because people want to buy a lot of stuff. Orders grow big because people want to try a lot of stuff.

A lot of people order multiple variants of the same product (think: different sizes, different colors), with the intention to only buy one variant. The other variants simply get returned.

Now, here’s the thing: if you are tracking the total order value inside Google Ads and you are running Smart Bidding, then Smart Bidding will optimize towards the bigger orders with multiple variants of the same item, simply because they show higher order value.

Thus, here’s your problem: if you track the total order value (and don’t adjust conversion value based on returns), Google’s Smart Bidding will optimize for high return rate orders, thus increasing your cost of returns, and LOWERING your profits!

Here’s your solution: instead of tracking the total value of an order, try re-adjusting that value at the time of purchase by subtracting the expected/predicted cost of returns.

How?

A first simple way to do so is by implementing this little trick:

  1. Use the ‘item_group_id’ in your product feed to group all the variants (sizes, colors, materials) of the same product. (See details: https://support.google.com/merchants/answer/6324507)
  2. At the time of purchase, check to see if the order contains multiple items with the same item_group_id (e.g., the same jacket in size XS and S).
  3. If the order holds multiple items with the same item_group_id, only count one when you compute the conversion value that you send to Google Ads conversion tracking

Gone are these inflated conversion values for orders that are guaranteed to increase your cost of returns. And gone is the incentive for Google’s Smart Bidding to go after these types of cost-inflating clicks.

Fewer returns, and more profit!

– Nils

Let’s talk landing pages and how to decrease your CPA in high CPC lead gen

Want to decrease your CPA in high CPC lead gen campaigns?

I bet that your biggest opportunity right now is not adding more keywords, not adding more negatives, and not changing your bids either. Heck, not even improving your ad copy.

It’s your landing page. 

If you can increase the click-to-lead conversion rate by only 20%, look at what that would do to your CPA!

How? 

The basic setup for high conversion rate lead gen landing pages is mostly the same:

  1. Make sure all the technical stuff is taken care of: page is mobile-friendly, page load times under 3 secs, page functions on all browsers
  2. Place a hero image that shows the promise of the offering above the fold, highlight benefits (not features)
  3. Put a prominent CTA (left-aligned) that visually stands out (contrasting colors)
  4. Put a call-now button/contact form (right-aligned)
  5. Place the “about the company” section below the above
  6. Add more photos, videos, and details of the offering
  7. Add reviews, ratings, and testimonials that communicate trust and overcome objections (highlight key quotes)
  8. Add an FAQ that addresses common concerns, objections, or uncertainties
  9. End the page with a recap of the core benefits and the CTA
  10. Between each section, add a call-now button or CTA button that takes the user back to the form 

But those are just the basics!

If you are serious about beating the competition, you’ve got to take it two (maybe three) steps further to really decrease your CPA.

That’s where Ed Leake’s God Tier Landing Page Optimisation Checklist comes into play.

It’s a comprehensive 93-step checklist for your landing pages that will squeeze even the last 0.X% increase in conversion rate out of your landers. (Don’t worry, there’s an 80/20 filter for priorities – you don’t have to tackle all the steps at once.)

Here’s a sample:

NOTE: This checklist is a free update inside God Tier Ads. Free updates are a hallmark of God Tier Ads, and Ed will continue to provide them on a regular basis.

– Nils

PS:

If you’re 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

Want to get paid what you’re worth in 2025?

Today, I am sharing a request from our PPC friend and long-time member of the community Duane Brown:

Wow. 10 year mark. I don’t even know what to say as I just launched this as an off-the-wall idea 10 years ago. Thank you for making this possible. 

Companies make salaries a black box affair because they want to pay everyone as little as possible. I’ve been told more than a few times not to discuss what I made with others.

Learning what the industry pays your colleague or that new junior hire means that none of us are leaving money on the table. 

Even now as someone who runs an agency, I strongly believe this to be true.

Last year, we got 1,060 responses. Survey Closes Feb 28th, 2025 midnight PST.

Let’s give Duane a hand: fill out the PPC Salary Survey. 

Here’s the link:
https://docs.google.com/forms/d/e/1FAIpQLSex4uhXPCA18aaMDQ22b6XyFEhZWRv6uPPMMx5JBRByPgNtpw/viewform

Results will launch by March 22nd, 2025.

– Nils

questions about scripts — here’s how to get them answered

A fellow member of the list, John Turnbull (name shared with permission), wrote in with a good question today:

Hi Nils,

Love what you’ve been doing for the PPC heads.

Quick question: I have negative keyword lists in my PMAX and Standard Shopping campaigns. 

Would your Negative Keyword Conflicts script tell me if there are any negative keyword conflicts within my Negative Keyword Lists for either of these campaign types? Or only for Search campaigns?

Keep up the good work! We appreciate you.

Thanks,

– JT

First: Thanks for the kind words, JT, and thank you for the question! I love helping out the PPC community, especially when it comes to scripts. So, please keep sending questions like these.

Second: The answer is No.

Third: I’ll let ChatGPT explain 🙂

JT’s question is not unique. I get questions like these frequently. 

Normally, I simply reply with a quick answer.

BUT, with ChatGPT releasing its “o3-mini-high” model that is really good at code, I decided to forward the question to see what it would come up with. I copy-pasted the script and the question.

Here’s the response:

“The script is designed to detect conflicts between positive keywords (the ones you’re bidding on) and negative keywords. 

It gathers the positive keywords from the keyword view (which is typically available only for Search campaigns), and then compares them to negatives (including those from negative keyword lists).

Because PMAX (Performance Max) and Standard Shopping campaigns do not operate with the same keyword targeting (in fact, they don’t have “positives” in the same sense as Search campaigns), the script will not find any conflicts in those campaign types—even if you attach negative keyword lists to them.

In short, the script is effectively only useful for Search campaigns where you have actual positive keyword criteria that could potentially be blocked by a negative.

So, if you run this script on an account that only has PMAX and Standard Shopping campaigns, 
it won’t report any conflicts because there are no positive keywords to conflict with your negatives.”

That’s a correct answer, and it only took 1 minute.

Quite impressive, if you ask me.

Here’s the thing: even if JavaScript is like ancient Greek to you and the sight of code makes you want to run for the hills, you can use AI tools like ChatGPT to understand exactly what a Google Ads Script does. In minutes!

All it takes is a simple question and the copy-pasting of some code.

Happy scripting 🙂

– Nils

Frustrated with ChatGPT not delivering your perfect Google Ads Script?

Are you struggling to get ChatGPT to whip up that perfect Google Ads Script for you?

I’m prepping my next online workshop and offering you my help in return for your questions/challenges.

If you have a great script idea and have had a hard time getting ChatGPT to create it, answer these questions below and I will try my best to help you (for free).

1. What is your script idea? (The more detail, the better.)
2. What prompt(s) did you use to get ChatGPT to create it for you?
3. Where and how did you get stuck? (Again, the more detail, the better.)

I cannot promise that I will completely solve your challenge, but I can promise a response that will get you at least one step closer to script victory!

– Nils

Tag Assistant No Longer Deprecated

I completely missed this one, and I think it is worth a mention:

I am a big fan of Google Tag Assistant, the Chrome extension to easily troubleshoot and resolve issues with Google Tag Manager and Google Tag implementations.

But then, Google did what Google does: the extension was marked as deprecated! It was replaced by the far less intuitive Tag Assistant Companion.

Oh no! The horror!

It haunted my nights. Sleep became a distant memory thanks to this.

Nah… not really.

There are lots of other ways to check my tags. 

But still, I loved the ease of using the Tag Assistant.

Luckily and surprisingly(?): Google has listened to user feedback and combined Tag Assistant Legacy and Tag Assistant Companion into a single, unified extension.

Yep, Tag Assistant FTW. 

You can quickly and easily test your tags with a single click on that lovely icon at the top of your browser.

All you have to do is UNINSTALL Tag Assistant Companion and re-install the Tag Assistant extension.

Here’s the link: https://chromewebstore.google.com/detail/tag-assistant/kejbdjndbnbjgmefkgdddjlbokphdefk

– Nils

This script saved my ass this weekend — and it could save yours too!

What ranks top of the list of your worst PPC nightmares?

Next to calls from Google Reps, my guess is “account down during the weekend” also makes it to the top 10 of your list.

That’s exactly what almost happened to me last weekend.

Last Friday afternoon, Google Ads stopped showing ads for one of my clients.

The reason: “overdue account balance.”

The result: ZERO impressions, ZERO clicks, and ZERO conversions.

Extra stress factor: this client sells a highly seasonal product (ski clothing). With winter in full swing, it is PEAK SEASON. So, NOW is the time to pull in profits like a magnet in a scrapyard.

Luckily for me, I got saved by a script. My ‘account down alert’ script, to be precise.

Without it, I wouldn’t have caught the issue until my client called me on Monday, fuming about plummeting revenue.

PHEW…

THE SCRIPT: 
Account Down Alerts for both individual Client Accounts and Google Ads Manager (MCC) Accounts 

WHAT IT DOES:
The script checks your account(s) every hour, and if an account is down, it will send you an alert via email, SMS, and WhatsApp to alert you. You can configure the amount of alerts per account you want to receive per day.

The script normally sells for $270.

As a thank you for being a loyal subscriber, I am offering an exclusive $100 discount for the first 20 buyers of the script. Be among the first to grab this deal before it’s gone!

Click here to secure your discount:
https://nilsrooijmans.gumroad.com/l/account-down-alerts

Use this DISCOUNT CODE: 1of20

Don’t wait — this deal won’t last long.

Happy scripting,

– Nils

‘mobileappcategory::69500’

Last week, I shared a little tactic to quickly and easily exclude all mobile apps from your PMax campaigns. You can find the details here: https://nilsrooijmans.com/excluding-all-mobile-app-placements-the-quicker-and-easier-way/

A long-time member of the list, Hana Kobzová (name shared with permission), sent a question that was asked often on LinkedIn and Reddit:

“Why do you recommend adding all those values from your list? Doesn’t ‘mobileappcategory::69500’ already cover everything?”

Great question! I also use ‘mobileappcategory::69500’ a lot for Display campaigns. It’s a quick way to easily add all mobile app categories to the placement exclusions in Display.

However, here’s the thing: Performance Max campaigns DO NOT have the option to exclude placement at the campaign level.

To exclude placements from PMax, you need to add the exclusion at the account level.

Also, the little trick of entering ‘mobileappcategory::69500’ in your placement exclusions does not work at the account level. Currently, the Google Ads UI throws this message when you try to save the exclusion: “An error occurred. Please try again or check your targeting options.”

So, as far as I know, copy-pasting all the Mobile App Placement Exclusions from this list and adding them at the account level is the quickest way to exclude all mobile apps from your PMax campaigns.

– Nils

PS: Want to always be in the know when Performance Max campaigns are showing your ads on bad placements?  Check out my Google Ads Script for PMax Placement Exclusions.

how to add Google Ads ad schedules in bulk

Have you ever wanted to add the same ad schedule to tens of campaigns?

I did. Today.

And trust me, the Google Ads UI makes it very hard to do this without you wanting to send your mouse on a one-way trip to the wall! You literally have to click each and every individual campaign, and add the ad schedules for each individual campaign… over and over again.

Luckily, there’s a quicker way: using Google Ads Editor.

Here’s how you do it:

1) Create your desired ad schedule in one campaign
2) Open Google Ads Editor
3) Download your campaigns
4) Select “Campaigns” in the type list
5) Select the campaign with the ad schedule you want to copy
6) Select “Edit” > “Copy shell”
7) Select all the campaigns where you want to paste the schedule
8) Click the Paste icon in the edit panel next to “Ad schedule”

That’s it. This saved my mouse from its funeral today.

– Nils