Hi,I work for agency who manage multiple account in a MCC. I have been using the script below to export campaign-level data to a google sheet, then combine with Google Data Studio to create a template report for our client.function main() {var SPREADSHEET_URL = "****";var account = AdWordsApp.currentAccount();var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);var report = AdWordsApp.report('SELECT CampaignName, AdNetworkType1, Labels, Date ,Impressions, Clicks , Conversions, Cost FROM CAMPAIGN_PERFORMANCE_REPORT ' +'WHERE Impressions > 0 '+ 'DURING LAST_30_DAYS',{apiVersion: 'v201710'});report.exportToSheet(spreadsheet.getActiveSheet());Logger.log("Exporting successful");}
The scripts work fine but the problem is that I have to create & run the script for every child account in MCC account, and the data from each account will be exported to different Google spreadsheet.Would there be a script that run in MCC-level account that can export all campaign data (maybe with filtering impressions>0) from all account into single sheet only. I has been searching on the internet but cannot find the solution.Many Thanks,
function main() {
var accountIterator = MccApp.accounts().get(); // selects all child accounts under this MCC account
var SPREADSHEET_URL = "YOUR_SPREADSHEET_URL_HERE";
// var account = AdWordsApp.currentAccount(); // This line is not necessary as you are already using MccApp to select the current account
var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
var accountCounter = 0;
while (accountIterator.hasNext()) {
var account = accountIterator.next();
MccApp.select(account); // selects the current account to generate report from
var report = AdWordsApp.report(
'SELECT CampaignName, AdNetworkType1, Labels, Date ,Impressions, Clicks , Conversions, Cost FROM CAMPAIGN_PERFORMANCE_REPORT ' +
'WHERE Impressions > 0 ' + 'DURING LAST_30_DAYS', {
apiVersion: 'v201710'
});
if (accountCounter == 0) { // if first account, use the default active sheet
spreadsheet.renameActiveSheet(account.getName()) // renames the default active sheet to the child account's name (You may rename sheets based on your requirement)
report.exportToSheet(spreadsheet.getActiveSheet());
} else {
report.exportToSheet(spreadsheet.insertSheet(account.getName())); // adds a new sheet with the account's name as sheet name (You may rename sheets based on your requirement)
}
Logger.log(account.getName() + ": Exporting successful");
accountCounter++; // increment counter
}
}function main() {
var accountIterator = MccApp.accounts().get(); // selects all child accounts under this MCC account
var SPREADSHEET_URL = "YOUR_SPREADSHEET_URL_HERE";
// var account = AdWordsApp.currentAccount(); // This line is not necessary as you are already using MccApp to select the current account
var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
var sheet = spreadsheet.getActiveSheet(); // gets the default active sheet
while (accountIterator.hasNext()) {
var account = accountIterator.next();
MccApp.select(account); // selects the current account to generate report from
var report = AdWordsApp.report(
'SELECT AccountDescriptiveName, CampaignName, AdNetworkType1, Labels, Date ,Impressions, Clicks, Conversions, Cost FROM CAMPAIGN_PERFORMANCE_REPORT ' + 'WHERE Impressions > 0 ' + 'DURING LAST_30_DAYS', {
apiVersion: 'v201710'
}); // adds the field AccountDescriptiveName in your query to get child account name
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
sheet.appendRow([row['AccountDescriptiveName'],
row['CampaignName']],
row['AdNetworkType1'],
row['Labels'],
row['Date'],
row['Impressions'],
row['Clicks'],
row['Conversions'],
row['Cost']); // append rows from current account's generated Campaign Performance Report
}
}
}Cannot find method appendRow(object,string,string,string,string,string,string,string). (line 24) |
sheet.appendRow([row['AccountDescriptiveName'],
row['CampaignName'],
row['AdNetworkType1'],
row['Labels'],
row['Date'],
row['Impressions'],
row['Clicks'],
row['Conversions'],
row['Cost']]); // append rows from current account's generated Campaign Performance Reportfunction clearSheetAndAddHeader(sheet) {
sheet.clearContents(); // clears content of sheet
sheet.appendRow(['AccountDescriptiveName', 'CampaignName', 'Impressions']) // appends column headers, you may add more fields based on your requirement
}function main() { var accountSelector = MccApp.accounts() var accountIterator = accountSelector.get(); var SPREADSHEET_URL = ""; var account = AdWordsApp.currentAccount(); // This line is not necessary as you are already using MccApp to select the current account var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
var sheet = spreadsheet.getActiveSheet(); // gets the default active sheet
sheet.clearContents(); // clears content of sheet sheet.appendRow(['AccountDescriptiveName', 'CampaignName', 'AdNetworkType1', 'Labels', 'Date' ,'Impressions', 'Clicks', 'Conversions', 'Cost'] ) while (accountIterator.hasNext()) { var account = accountIterator.next();
MccApp.select(account); // selects the current account to generate report from var report = AdWordsApp.report(
'SELECT AccountDescriptiveName, CampaignName, AdNetworkType1, Labels, Date ,Impressions, Clicks, Conversions, Cost FROM CAMPAIGN_PERFORMANCE_REPORT ' + 'WHERE Impressions > 0 ' + 'DURING 20180101,20201231', { apiVersion: 'v201710'
}); // adds the field AccountDescriptiveName in your query to get child account name var rows = report.rows(); while (rows.hasNext()) { var row = rows.next();
sheet.appendRow([row['AccountDescriptiveName'], row['CampaignName'], row['AdNetworkType1'], row['Labels'], row['Date'], row['Impressions'], row['Clicks'], row['Conversions'], row['Cost']]); // append rows from current account's generated Campaign Performance Report } }}