Merken in uitsluitingslijst

Voeg alle merken uit de productfeed toe aan een lijst voor uitsluitingswoorden. Deze worden automatisch up-to-date gehouden.

Start nu!
Merken in Uitsluitingslijst
Merken Get started!

Een veranderend aanbod in een webshop met veel producten en merken, zorgt ervoor dat je met regelmaat uitsluitingen na moet lopen in de non-branded campagnes. Gebruik dan dit script om ervoor te zorgen dat alle merken die in je shop staan, automatisch uitgesloten worden in non-branded campagnes. Het script doorloopt alle merken in de feed en controleert of deze in de lijst met uitsluitingswoorden staan. Als dat niet het geval is, wordt deze als zinsdeel toegevoegd.

Instellingen

  • LOG: Geef aan of het script de tussenstappen moet rapporteren, door de waarde aan te passen naar 'true'.
  • LIST_NAME: Definieer de naam van de lijst met uitsluitingswoorden
  • PRODUCT_FEED_URL: De URL van de productfeed. Dit betreft de XML-feed die je ook voor Google Shopping gebruikt.
The script
// Copyright 2019. Increase BV. All Rights Reserved.
//
// Created By: Tibbe van Asten
// for Increase B.V.
// 
// Created: 05-06-2019
// Last update: 18-06-2019
//
// ABOUT THE SCRIPT
// This script will check the feed, collect all brandnames and add
// them to a negative keyword list. 
//
////////////////////////////////////////////////////////////////////

var config = {
 
  LOG : true,
  
  // The name of the Negative Keyword List
  LIST_NAME : "Brands",
  
  // To make use of this script, we connect the productfeed
  PRODUCT_FEED_URL : "PRODUCT_FEED_URL.xml",

}

////////////////////////////////////////////////////////////////////

function main(){
  
  var brands = connectFeed();
  
  // Get negative keyword lists with LIST_NAME
  var negativeKeywordListIterator = AdsApp
  	.negativeKeywordLists()
  	.withCondition("Name CONTAINS '" + config.LIST_NAME + "'")
  	.get();
  
  while(negativeKeywordListIterator.hasNext()){
    var negativeKeywordList = negativeKeywordListIterator.next();
    var negativeKeywords = collectNegativeKeywords(negativeKeywordList);
    
    // Remove brackets and quotationmarks from the keywords
    // to match them to brandnames in the feed
    var negativeKeywordsStripped = [];
    
    	if(config.LOG === true){
          Logger.log("List: " + negativeKeywordList.getName());
          Logger.log("Negatives: " + negativeKeywords);
          Logger.log("Brands: " + brands);
          Logger.log(" ");
        }
    
    // Create stripped list of brandnames
    for(var x = 0;x < negativeKeywords.length;x++){      
      var negativeKeyword = negativeKeywords[x].getText().replace(/\[/g,"").replace(/\]/g,"");
      negativeKeywordsStripped.push(negativeKeyword);     
    } // negativeKeywords iterator
    
    // Add brands when not in the negative keyword list
    for(var y = 0;y < brands.length;y++){
      
      if(negativeKeywordsStripped.indexOf('"' + brands[y] + '"') < 0){
        negativeKeywordList.addNegativeKeyword('"' + brands[y] + '"'); 

        if(config.LOG === true){
          Logger.log("Added " + brands[y] + " to " + negativeKeywordList.getName());
        }
      }

    } // queryIterator 
    
    Logger.log(" ");    
    
  } // negativeKeywordListIterator  
  
} // function main

////////////////////////////////////////////////////////////////////

function connectFeed(){
  
  var brands = [];
  
    if(config.PRODUCT_FEED_URL == "PRODUCT_FEED_URL.xml"){
      throw error("Update your productfeed URL in the config");
    }
  
  // Connect to the feed with the URL from the config
  var xml = UrlFetchApp.fetch(config.PRODUCT_FEED_URL).getContentText();
  var document = XmlService.parse(xml);
  var entries = document.getRootElement().getChild('channel').getChildren('item');
  var atom = XmlService.getNamespace('http://base.google.com/ns/1.0');  
  
  for (var i = 1; i < entries.length; i++) { 
    
    // When the brandname is not in the list already, we'll add it
	if(brands.indexOf(entries[i].getChild('brand', atom).getValue().toLowerCase()) < 0){
    	brands.push(entries[i].getChild('brand', atom).getValue().toLowerCase());
    }
      
  } // for statement
  
  return brands;
  
} // function connectFeed()
  
////////////////////////////////////////////////////////////////////

function collectNegativeKeywords(negativeKeywordList){
  
  var negativeKeywords = [];
  
  var negativeKeywordIterator = negativeKeywordList
    .negativeKeywords()
    .get();

  while(negativeKeywordIterator.hasNext()){
    negativeKeywords.push(negativeKeywordIterator.next());
  } // negativeKeywordIterator
  
  return negativeKeywords;
  
} // collectNegativeKeywords
Show whole script!
Loading Comments
The Experts
Tibbe van Asten Team Lead Performance Marketing
Nils Rooijmans Water Cooler Topics
Martijn Kraan Freelance PPC Specialist
Bas Baudoin Teamlead SEA @ Happy Leads
Jermaya Leijen Digital Marketing Strategist
Krzysztof Bycina PPC Specialist from Poland
How about you? JOIN US!
Sharing Knowledge
Caring

Adsscripts.com staat voor het delen van kennis. In de huidige markt houden SEA-specialisten de kennis en ervaring graag voor zich. Wij zijn er van overtuigd dat het delen van kennis ervoor kan zorgen dat iedereen beter wordt in haar of zijn werk. Daarom lopen wij hier graag in voorop, door onze kennis over scripts te delen met iedereen.

Wil jij ook graag een bijdrage leveren? Wij staan open voor nieuwe ideeën en feedback op alles wat je op Adsscripts.com vindt.

Neem contact op

Training &
Workshop
Neem contact op!
Adsscripts Training & Workshop