Scriptlytics
  • Introduction
    • Welcome to the community
  • Account level scripts
    • Account overview (all time)
    • Account performance (date range)
    • Account performance (daily export)
    • Account performance (last 90 days)
    • Account search query optimizer
    • Account search query optimizer (yesterday)
    • Call asset scheduling
    • Account keyword optimizer (date range)
    • Account keyword optimizer (last 90 days)
    • Match type report (last 360 days)
    • Negative keyword list
  • Campaign level scripts
    • Campaign performance (date range)
    • Campaign performance (daily export)
    • Campaign performance (last 90 days)
    • Multiple campaign performance (last 90 days)
    • Ad groups (date range)
    • Ad groups (last 30 days)
    • Keyword optimizer (date range)
    • Keyword optimizer (last 30 days)
    • Impressions heatmap (date range)
    • Impressions heatmap (last 30 days)
    • Clicks heatmap (date range)
    • Clicks heatmap (last 30 days)
    • CTR heatmap (date range)
    • CTR heatmap (last 30 days)
    • Conversions heatmap (last 30 days)
    • Conversions heatmap (date range)
    • Conversion rate heatmap (last 30 days)
    • Conversion rate heatmap (date range)
    • CPC heatmap (last 30 days)
    • CPC heatmap (date range)
  • pmax scripts
    • Pmax segmentation
    • Pmax search query optimizer
    • Pmax search query optimizer (all time)
  • Call reports
    • Call report (date range)
    • Call report (evergreen)
  • Bulk edit and actions
    • Bulk upload template
    • Swap Base URL's
    • Copy campaign and swap base URL's
  • Alerts and notifications
    • Zero spend alert
  • MCC scripts
    • MCC account performance export
    • Revised MCC account performance export
  • Search ads
    • Keyword match optimizer
  • Google sheets
    • Remove the following keywords
    • Remove keywords that don't contain
    • Remove keywords that don't contain and create negative keyword list
  • Product title modification
Powered by GitBook
On this page
  1. Account level scripts

Negative keyword list

function main() {
  // Replace with your Google Spreadsheet URL
  const SPREADSHEET_URL = 'YOUR_SPREADSHEET_URL';
  const SHEET_NAME = 'Negative keyword list'; // Define the sheet name
  
  // Open the spreadsheet and get the sheet
  const spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
  let sheet = spreadsheet.getSheetByName(SHEET_NAME);
  
  // If the sheet doesn't exist, create it
  if (!sheet) {
    sheet = spreadsheet.insertSheet(SHEET_NAME);
  } else {
    // Clear existing data if the sheet already exists
    sheet.clear();
  }
  
  // Set headers
  sheet.getRange(1, 1).setValue('Campaign Name');
  sheet.getRange(1, 2).setValue('Ad Group Name');
  sheet.getRange(1, 3).setValue('Negative Keyword');
  sheet.getRange(1, 4).setValue('Match Type');
  
  let row = 2; // Start from the second row to write data
  
  // Get all negative keyword lists at the campaign level
  const campaignIterator = AdsApp.campaigns().get();
  while (campaignIterator.hasNext()) {
    const campaign = campaignIterator.next();
    const negativeKeywords = campaign.negativeKeywords().get();
    
    while (negativeKeywords.hasNext()) {
      const negativeKeyword = negativeKeywords.next();
      sheet.getRange(row, 1).setValue(campaign.getName());
      sheet.getRange(row, 2).setValue('N/A'); // No specific ad group at campaign level
      sheet.getRange(row, 3).setValue(negativeKeyword.getText());
      sheet.getRange(row, 4).setValue(negativeKeyword.getMatchType());
      row++;
    }
  }
  
  // Get all negative keyword lists at the ad group level
  const adGroupIterator = AdsApp.adGroups().get();
  while (adGroupIterator.hasNext()) {
    const adGroup = adGroupIterator.next();
    const negativeKeywords = adGroup.negativeKeywords().get();
    
    while (negativeKeywords.hasNext()) {
      const negativeKeyword = negativeKeywords.next();
      sheet.getRange(row, 1).setValue(adGroup.getCampaign().getName());
      sheet.getRange(row, 2).setValue(adGroup.getName());
      sheet.getRange(row, 3).setValue(negativeKeyword.getText());
      sheet.getRange(row, 4).setValue(negativeKeyword.getMatchType());
      row++;
    }
  }
  
  Logger.log(`Export complete. Data has been written to the sheet: ${SHEET_NAME}`);
}
PreviousMatch type report (last 360 days)NextCampaign performance (date range)

Last updated 4 months ago