Skip to content

Instantly share code, notes, and snippets.

@alefbetac
Created August 14, 2023 14:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alefbetac/9dac82782d105aa6991db5b7d45c6a1a to your computer and use it in GitHub Desktop.
Save alefbetac/9dac82782d105aa6991db5b7d45c6a1a to your computer and use it in GitHub Desktop.
Google Ads Performance Max - Search term insights
/******************************************
* Performance Max - Search term insight report
* @version: 1.0
* @authors: Yannis Giovanos (AdGurus) - https://www.linkedin.com/in/yannisgiovanos/
* -------------------------------
* Install this script in your Google Ads account (not an MCC account)
* to generate a Google Sheet with a sheet for each Performance Max Campaign showing
* search terms (as provided by Google).
* This includes impressions, clicks conversions and conversion value.
* --------------------------------
* For data-driven Google Ads Management - please visit adgurus.agency
******************************************/
function main() {
var ss = SpreadsheetApp.create('Performance Max Campaigns - Search Term Insights');
// Query for all enabled campaigns
var performanceMaxCampaignSelector = AdsApp.performanceMaxCampaigns()
.withCondition("Status = 'ENABLED'")
var performanceMaxCampaignIterator = performanceMaxCampaignSelector.get();
while (performanceMaxCampaignIterator.hasNext()) {
var campaign = performanceMaxCampaignIterator.next();
// Query for insights for each specific campaign
var query = AdsApp.report(
"SELECT campaign.name, campaign_search_term_insight.category_label, metrics.clicks, metrics.impressions, metrics.conversions, metrics.conversions_value " +
"FROM campaign_search_term_insight " +
"WHERE segments.date DURING LAST_30_DAYS " +
"AND campaign_search_term_insight.campaign_id = " + campaign.getId() + " " +
"ORDER BY metrics.impressions DESC"
);
var rows = query.rows();
var campaignName = rows.hasNext() ? rows.next()['campaign.name'] : 'Unnamed';
campaignName = campaignName.replace(/[\/\\?*:[\]]/g, '_');
Logger.log(campaignName);
var sheet = ss.getSheetByName(campaignName);
if (!sheet) { // If sheet does not exist, create it
sheet = ss.insertSheet(campaignName);
}
query.exportToSheet(sheet);
}
// Delete the default "Sheet1"
ss.deleteSheet(ss.getSheetByName('Sheet1'));
Logger.log('Spreadsheet created: ' + ss.getUrl()); // Log the URL of the created Spreadsheet
} // end main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment