Well, sometimes you want exact match to be exact. You know, so that you can show ads to people that are really really keen on seeing your ad, rather than sort of keen. It can make a real difference to CTR and CPC, so why wouldn’t you want this option to still be there??
How does it work?
It looks at the “close variant” search queries in active campaigns from the last 30 days. If a query doesn’t precisely match the exact keyword, that query is added as an ad group negative. You can get an email with a list of the new negatives as well.
Unlike with the older version, you can have more than one keyword per ad group. If particular keywords aren’t set to exact match, the script won’t add those negatives. And if there are multiple exact keywords, the script makes sure the query is different from all of them before excluding it.
There’s also the option to schedule the script to analyze the campaigns without automatically making changes. Then you can just manually review the list of suggested negatives and create them when you’re happy with them.
There are a number of caveats:
- It will only work on smallish accounts (I’d estimate up to 10,000 keywords). If your account is bigger or you have lots of accounts, then you need to do this via the API. If you can’t do that yourself, you might look to a partner.
- It only adds negative keywords in retrospect, i.e., the similar variation has to appear and be identified before it can be excluded. So you’ll rack up some spend while this process occurs.
- You may run into negative keyword limits in a large account.
- If you want to be proactive about cross-contamination, there are technological ways to accomplish this. (For example, we have a module in the Brainlabs Tech Stack for this purpose, but it relies on a clean structure that separates exact and broad keywords, either at the campaign or AdGroup level).
How do I use it?
Now that we’ve covered the caveats, let’s get to the script. To take back control of your exact keywords, make a new Script in Google Ads and copy in the code below. Then, modify the settings below as appropriate for your situation:
- campaignNameContains is used to filter the campaigns the script looks at. If you only want the script to look at campaigns that have certain words or phrases in the names, put those words or phrases in the square brackets, in double quotes and separated with commas. For example, if campaignNameContains is [“Brand”, “Generic”] then only campaigns with names containing “brand” or “generic” are included.
- campaignNameDoesNotContain is the same, but for words or phrases in the names of campaigns you want the script to ignore. For example if campaignNameDoesNotContain is [“Misspellings”, “Competitor”] then any campaigns with names containing “misspellings” or “competitor” are ignored.
- campaignNameContains and campaignNameDoesNotContain are not case-sensitive.
- Leave them blank, , to cover all campaigns.
- If you need to put a double quote into the text of the campaign name for either variable, put a backslash before it.
- If makeChanges is true, then the script will create the negatives for you. If you’d rather just check through the negatives before making changes, you can set it to false.
- emailAddresses is where you put your email address, if you want to be sent a CSV of the new negatives (or the negatives that would be made, if makeChanges is false).
- If you don’t want an email, leave this as “”.
Once you have done a preview run and are happy, you can put the script on a schedule to run weekly or monthly—and keep your account exactly as you want.