menu-cancel-iconMENU SK / EN

The form was successfully submitted

Thank you.

Some pages have been temporarily removed. Find out more

Download the list of all Websites AND YouTube channels we do not recommend for advertising

Download the list of Websites we do not recommend for advertising

Download the list of all YouTube channels we do not recommend for advertising

Instructions

These instructions deal with how to eliminate high-risk websites and YouTube channels from your Google Ads campaigns. If you are using other ad networks as well, please consult your agency on how to proceed. We offer you an excellent script for Google Ads that not only excludes the websites but also regularly and automatically updates the list. If you do not wish to use our automated solution, please refer to manual exclusion instructions. Thank you for using our list.

 

 

Manual exclusion

1

Download this file which includes the list of websites and YouTube channels we do not recommend for advertising.

 

2

Log in to your Google Ads account and click on “Placement exclusion lists" in the “Tools & Settings” section.

 

 

3

Click on the blue rounded + button and choose "Upload a list".

4

Name the list, choose a source "Upload a file" and select downloaded file. Confirm the selection with button “Apply”.

5

After successful upload refresh the page and click on the list name to open it.

 

6

On the very end of list, click on the button “Apply to Campaigns”.

7

Select the campaigns where you want to add your placement exclusion list and click "Done“. (Note: Negative YouTube placements will apply only to video campaigns.)

Automated exclusion

The following script must be entered to Google Ads. If necessary, see the more detailed instructions below.

function main() {
  var spreadsheetURL = 'https://docs.google.com/spreadsheets/d/1Axn4wvJi9fa8BT6e70K-ZLcg8l9rpjXYOQboShQJlEM/edit?usp=sharing';
  var sheet          = SpreadsheetApp.openByUrl(spreadsheetURL).getSheets()[0];

  var track = function(campaign_id) {
    // no sensitive data are pushed to 3rd party server
    // only md
    var sha = function(input_string) {
      // compute md5 of input string
      return Utilities.base64Encode(
        Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, input_string)
      );
    }

    var customer_hash = sha(AdWordsApp.currentAccount().getCustomerId());
    var track_url = 'http://konspiratori.sk/skript/v2/?c='+customer_hash;
    if(campaign_id){
      var campaign_hash = sha(campaign_id);
      track_url += '&cc='+campaign_hash;
    }
    UrlFetchApp.fetch(track_url, {muteHttpExceptions: true});
  }

  // track script run, no sensitive data collected
  track();

  // name exclusion list
  var placementListName = 'KONSPIRATORI.sk';

  var placements = [];
  var youtubePlacements = [];
  var row_index = 1;
  var youtube_row_index = 1;

  // Load URL placement exclusions
  while(true) {
    var range = sheet.getRange('A'+row_index+':A'+row_index).getValues();
    if(range[0][0] == '') {
      break;
    }

    placements.push(range[0][0]);
    row_index++;
  }

  // Load YouTube placement exclusions
  while(true) {
      var range = sheet.getRange('B'+youtube_row_index+':B'+youtube_row_index).getValues();
      if(range[0][0] == '') {
        break;
      }

      youtubePlacements.push(range[0][0]);
      youtube_row_index++;
    }

  Logger.log('Exclusion URLs loaded: ', placements);
  var sharedExcludedPlacementSelector = AdWordsApp.excludedPlacementLists().orderBy("SharedSetId DESC");

  var sharedExcludedPlacementIterator = sharedExcludedPlacementSelector.get();
  var placementList = null;

  while (sharedExcludedPlacementIterator.hasNext()) {
    var sharedExcludedPlacement = sharedExcludedPlacementIterator.next();
    if(sharedExcludedPlacement.getName() == placementListName) {
      placementList = sharedExcludedPlacement;
      break;
    }
  }

  if(!placementList) {
    var placementListOperation = AdWordsApp.newExcludedPlacementListBuilder().withName(placementListName).build();
    if(placementListOperation.isSuccessful()) {
      Logger.log('Placements list build success');
    }
    var placementList = placementListOperation.getResult();
  }

  placementList.addExcludedPlacements(placements);
  var sharedExcludedPlacementIterator = placementList.excludedPlacements().get();
  while (sharedExcludedPlacementIterator.hasNext()) {
    var placement = sharedExcludedPlacementIterator.next();
    Logger.log(placement.getUrl());
    if(placements.indexOf(placement.getUrl()) == -1) {
      placement.remove();
    }
  }

  // iterate over all available campaigns
  var campaignIterator = AdWordsApp.campaigns().get();

  while (campaignIterator.hasNext()) {
    var campaign = campaignIterator.next();
    track(campaign.getId()); // just for statistics, no sensitive data collected
    campaign.addExcludedPlacementList(placementList);
  }

  // iterate over all video campaigns
  var videoCampaignIterator = AdWordsApp.videoCampaigns().get();

  while (videoCampaignIterator.hasNext()) {
    var tmpExcludedChannels = youtubePlacements;
    var videoCampaign = videoCampaignIterator.next();
    var excludedYoutubeChannelIterator = videoCampaign.videoTargeting().excludedYouTubeChannels().get();

    while (excludedYoutubeChannelIterator.hasNext()) {
      var excludedYouTubeChannel = excludedYoutubeChannelIterator.next();
      if (tmpExcludedChannels.indexOf(excludedYouTubeChannel.getChannelId()) !== -1) {
        delete tmpExcludedChannels[tmpExcludedChannels.indexOf(excludedYouTubeChannel.getChannelId())];
      }
    }

    tmpExcludedChannels = tmpExcludedChannels.filter((item) => typeof item === 'string');
    // Exclude all YouTube channels in batch from campaign
    for (i=0; i<tmpExcludedChannels.length; i++){
      videoCampaign.videoTargeting().newYouTubeChannelBuilder().withChannelId(tmpExcludedChannels[i]).exclude();
    }
  }
}

1

Log in to your Google Ads account and click on “Scripts” in the “Tools & Settings” section.

2

Click on the blue rounded + button and then select "New script"

3

Name your script and copy and paste the above text into the text box. Authorize it by clicking the “Authorize” button.

4

The script needs rights to edit your campaigns, as it will automatically add a list of sites and YouTube channels to your campaigns.

5

Run the script without previewing. If needed, enable repeated script verification.

6

Remember to set the frequency at which the script should be running.

 

Automated exclusion for agency account

The following script must be entered to Google Ads. If necessary, you may find further instructions on how to enter a script in the Automatic exclusion section.

function main() {
  var spreadsheetURL = 'https://docs.google.com/spreadsheets/d/1Axn4wvJi9fa8BT6e70K-ZLcg8l9rpjXYOQboShQJlEM/edit?usp=sharing';
  var sheet          = SpreadsheetApp.openByUrl(spreadsheetURL).getSheets()[0];

  var placements = [];
  var youtubePlacements = [];
  var row_index = 1;
  var youtube_row_index = 1;

  // Load URL placement exclusions
  while(true) {
    var range = sheet.getRange('A'+row_index+':A'+row_index).getValues();
    if(range[0][0] == '') {
      break;
    }

    placements.push(range[0][0]);
    row_index++;
  }

  // Load YouTube placement exclusions
  while(true) {
      var range = sheet.getRange('B'+youtube_row_index+':B'+youtube_row_index).getValues();
      if(range[0][0] == '') {
        break;
      }

      youtubePlacements.push(range[0][0]);
      youtube_row_index++;
  }

  Logger.log('Exclusion URLs loaded: ');
  Logger.log(placements);

  accountIterator = MccApp.accounts().get();
  while(accountIterator.hasNext()) {
    MccApp.select(accountIterator.next());
    processClientAccount(placements, youtubePlacements);
  }
}


function processClientAccount(placements, youtubePlacements) {
  Logger.log("Processing account: " + AdWordsApp.currentAccount().getName());

  var track = function(campaign_id) {
    // no sensitive data are pushed to 3rd party server
    var sha = function(input_string) {
      // compute md5 of input string
      return Utilities.base64Encode(
        Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, input_string)
      );
    }

    var customer_hash = sha(AdWordsApp.currentAccount().getCustomerId());
    var track_url = 'http://konspiratori.sk/skript/v2/?c='+customer_hash;
    if(campaign_id){
      var campaign_hash = sha(campaign_id);
      track_url += '&cc='+campaign_hash;
    }
    UrlFetchApp.fetch(track_url, {muteHttpExceptions: true});
  }

  // track script run, no sensitive data collected
  track();

  // name exclusion list
  var placementListName = 'KONSPIRATORI.sk';

  var sharedExcludedPlacementSelector = AdWordsApp.excludedPlacementLists().orderBy("SharedSetId DESC");

  var sharedExcludedPlacementIterator = sharedExcludedPlacementSelector.get();
  var placementList = null;

  while (sharedExcludedPlacementIterator.hasNext()) {
    var sharedExcludedPlacement = sharedExcludedPlacementIterator.next();
    if(sharedExcludedPlacement.getName() == placementListName) {
      placementList = sharedExcludedPlacement;
      break;
    }
  }

  if(!placementList) {
    var placementListOperation = AdWordsApp.newExcludedPlacementListBuilder().withName(placementListName).build();
    if(placementListOperation.isSuccessful()) {
      Logger.log('Placements list build success');
    }
    var placementList = placementListOperation.getResult();
  }

  placementList.addExcludedPlacements(placements);
  var sharedExcludedPlacementIterator = placementList.excludedPlacements().get();
  while (sharedExcludedPlacementIterator.hasNext()) {
    var placement = sharedExcludedPlacementIterator.next();
    Logger.log(placement.getUrl());
    if(placements.indexOf(placement.getUrl()) == -1) {
      placement.remove();
    }
  }

  // iterate over all available campaigns
  var campaignIterator = AdWordsApp.campaigns().get();

  while (campaignIterator.hasNext()) {
    var campaign = campaignIterator.next();
    track(campaign.getId()); // just for statistics, no sensitive data collected
    campaign.addExcludedPlacementList(placementList);
  }

  // iterate over all video campaigns
  var videoCampaignIterator = AdWordsApp.videoCampaigns().get();

  while (videoCampaignIterator.hasNext()) {
    var tmpExcludedChannels = youtubePlacements;
    var videoCampaign = videoCampaignIterator.next();
    var excludedYoutubeChannelIterator = videoCampaign.videoTargeting().excludedYouTubeChannels().get();

    while (excludedYoutubeChannelIterator.hasNext()) {
      var excludedYouTubeChannel = excludedYoutubeChannelIterator.next();
      if (tmpExcludedChannels.indexOf(excludedYouTubeChannel.getChannelId()) !== -1) {
        delete tmpExcludedChannels[tmpExcludedChannels.indexOf(excludedYouTubeChannel.getChannelId())];
      }
    }

    tmpExcludedChannels = tmpExcludedChannels.filter((item) => typeof item === 'string');
    // Exclude all YouTube channels in batch from campaign
    for (i=0; i<tmpExcludedChannels.length; i++){
      videoCampaign.videoTargeting().newYouTubeChannelBuilder().withChannelId(tmpExcludedChannels[i]).exclude();
    }
  }
}

 

Autor Google Ads skriptov
 

"Good reputation can be easily damaged by unintended placement of advertisement on websites with inappropriate, dubious, or deceptive content. Having campaigns under control in a digital world is difficult, but not impossible. That is why we joined the konspiratori.sk project. We protect the reputation of our clients and prevent their brands being associated with any controversial content."
Vlado Vanek, Managing Director