UPDATED Adwords Script: auto add negative keywords to DSA

Automagically add negative keywords to dynamic campaigns

Do you use Dynamic Search Ads? I do. To be honest I used to hate them but they really are getting better. Right now I try to use them for most of my clients, even with small websites. The main advantage is that your ads will be triggered on searches you probably never thought about (remember that every day, 16% of the searches that occur are ones that Google has never seen before). The problem here is that you don't want to trigger the dynamic ad with a keyword that is sitting in another (keyword-targeted) campaign already (keyword-cannibalization), because that causes issues with relevancy, analysis etc. This script takes care of that problem.

Receive an alert when there is a new version, subscribe by leaving a comment below

Update 17-09-15

  • Our previous script does not work any more because Google changed their API. Please install this new version! To receive updates once we update the script, please leave a comment below and we'll let you once there is a new version.
  • Google finally made negative keywords lists available in the API, so we've enhanced the script to take advantage of this. This means the script will put all keywords in list(s) and connect the list(s) to the DSA campaign.
  • A list can contain max 5.000 keywords, so in order to cope with accounts with more keywords, we first download all keywords and than build multiple lists (max 10 by default) to split the keywords in. Example: with 10 lists, we can handle 50.000 keywords. Note that an account has a limit of 20 lists. So in theory (if you don't use lists) this scripts handles up to 100.000 keywords.
  • When used on MCC-level, you can now select which accounts to include (excluding all other accounts), you can do this usings labels on accounts (var account_label). Usefull if you have more than 50 accounts in your MCC (otherwise Google might possibly 'scan' 50 accounts which you don't even want scanned).
  • You can now exclude certain campaigns to extract keywords from (var exclude_label)

Update 26-05-15

  • This is now a Hybrid script, which means you can use it at either MCC-level or account-level. It simply searches through all accounts in an MCC and tries to find campaigns with the right label on it (as defined in the script, see below). Note that Adwords Scripts has a limit of 50 accounts, so if you have more than 50 accounts in your MCC, you should use var account_label to define which accounts you want to work on.

So we build a simple Adwords-script. This script downloads all active keywords from your active Search campaigns and ad groups in your Adwords-account and adds these as negative to a list which gets attached to the Dynamic Search campaign. Fancy huh? This way, you know for certain that Google will never trigger your dynamic ad on a keyword that is targeted somewhere else in your account (avoiding keyword-cannibalisation). Pretty simple, but highly effective. There is an option to delete all negatives before adding new ones. This is useful if you need to make sure your negatives (in the dynamic campaign) and your target keywords (in the regular campaigns) are completely in sync. I find that essential. 

There are just a few things you need to do:

  • Label your dynamic campaign and put the label in the script (var label) - make sure this is a unique label that you don't use on other campaigns
  • Optional: On MCC-level, label the accounts you want to run this script for and put the label in the script (var account_label) (see update 17-09-15)
  • Optional: set clear_list to FALSE, if you don't want to delete all negatives in the campaign prior to adding new ones (however we recommend setting this to TRUE in order to always have fresh negatives)
  • Optional: set keep_type to FALSE, if you want only exact negative keywords
  • Schedule the script (we run it every hour - just because we can)

One more thing to know:

  • We've tried sorting keywords on impressions to filter for most relevant keywords, but we haven’t found a way that would still allow the script to run within the 30 min. time limit. So unfortunately at this time the script won't work on account with more than 100.000 keywords.

So now you're one small step closer to spending your time better.

This script in developed is collaboration with pdds.