I want to exclude non branded keywords in my non branded campaigns with this script below. However, when I use the script, it also excludes keywords in my NB campaigns... Do you know what's going wrong?
// Copyright 2022
// Free to use or alter for everyone. A mention would be nice ;-)
//
// Created by: Tibbe van Asten
//
// Created: 14-06-2018
// Last update: 16-10-2022
//
// ABOUT THE SCRIPT
// With this script you can exclude non-branded queries
// from branded shopping campaigns. By doing this
// every day, the accountstructure will remain clean.
//
////////////////////////////////////////////////////////////////////
var config = {
LOG : true,
// Branded search query. Make sure to use quotes.
// If you only use 2 branded keywords, remove variable + row in var report
BRANDED_KEYWORDS_1 : "vacansoleil",
BRANDED_KEYWORDS_2 : "vacancesoleil",
BRANDED_KEYWORDS_3 : "vacance soleil",
// The mark for every branded campaign in the account
B_SELECTOR : "[-B-]"
}
////////////////////////////////////////////////////////////////////
function main() {
var report = AdsApp.report(
"SELECT
campaign.name,
ad_group.id,
ad_group.name, search_term_view.search_term " +
"FROM search_term_view " +
"WHERE campaign.status = 'ENABLED' AND ad_group.status = 'ENABLED' " +
"AND
campaign.name REGEXP_MATCH '(?i)(.*)?"+config.B_SELECTOR+"(.*)?' " +
"AND search_term_view.search_term NOT REGEXP_MATCH '(?i)(.*)?"+config.BRANDED_KEYWORDS_1+"(.*)?' " +
"AND search_term_view.search_term NOT REGEXP_MATCH '(?i)(.*)?"+config.BRANDED_KEYWORDS_2+"(.*)?' " +
"AND search_term_view.search_term NOT REGEXP_MATCH '(?i)(.*)?"+config.BRANDED_KEYWORDS_3+"(.*)?' " +
"AND search_term_view.status = 'NONE'"
);
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var query = trimQuery(row);
var shoppingAdGroupIterator = AdsApp
.shoppingAdGroups()
.withCondition("Id = '"+row["
ad_group.id"]+"'")
.get();
while (shoppingAdGroupIterator.hasNext()) {
var shoppingAdGroup = shoppingAdGroupIterator.next();
shoppingAdGroup.createNegativeKeyword(query);
if(config.LOG === true){
Logger.log(row["
campaign.name"]);
Logger.log(row["
ad_group.name"]);
Logger.log(query);
Logger.log(" ");
}
} // shoppingAdGroupIterator
var adGroupIterator = AdsApp
.adGroups()
.withCondition("Id = '"+row["
ad_group.id"]+"'")
.get();
while (adGroupIterator.hasNext()) {
var adGroup = adGroupIterator.next();
adGroup.createNegativeKeyword(query);
if(config.LOG === true){
Logger.log(row["
campaign.name"]);
Logger.log(row["
ad_group.name"]);
Logger.log(query);
Logger.log(" ");
}
} // adGroupIterator
} // rowIterator
Logger.log("Thanks for using this custom script by Tibbe van Asten!");
} // function main()
////////////////////////////////////////////////////////////////////
function trimQuery(row){
// When the searchquery exceeds the limit of 10 words, we will split
// the query and put max. 10 words back together as a phrasematch query
var query = "";
if (row["search_term_view.search_term"].split(" ").length < 10) {
query = "[" + row["search_term_view.search_term"] + "]";
} else {
for (var i = 0; (i < row["search_term_view.search_term"].split(" ").length) && (i < 10); i++){
query += row["search_term_view.search_term"].split(" ")[i] + " ";
}
query = '"' + query.replace(/\s+$/,'') + '"';
}
return query;
} // function trimQuery()