Set Up Recurring Report for Automated Mapping Import Only

30/11/2019
  1. Go to Google Ads.
  2. From the navigation menu at the top right, click Tools.
  3. Under Bulk Actions, click Scripts.
  4. Click + to create a new script. Enter a name for the script.
  5. In the field that opens, paste the Facebook-provided script.
    • Google Ads Manager Account (MCC)
      // Comma-separated list of recipients. Comment out to not send any emails.
      var RECIPIENT_EMAIL = 'mapping++@atlas.facebook.com';
      
      function main() {
        var accountSelector = MccApp.accounts();
        accountSelector.executeInParallel("processIndividualAccount");
      }
      
      function processIndividualAccount() { 
        Logger.log('Starting search report generation for account - ' + AdWordsApp.currentAccount().getName());
        processCampaigns('search');
        processCampaigns('shopping');
      }
      
      function processCampaigns(type) {
        Logger.log('Processing ' + type + ' campaigns');
      
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
        // Headers
        var csv = 'Date, Keyword, Campaign ID, Campaign, Ad group ID, Ad group, Impressions, Clicks, Timezone';
        var report;
        var campaign_ids_map = {};
      
        if (type == 'search') { 
          // Generate report
          var report = AdWordsApp.report(
            'SELECT Criteria, CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks ' +
            'FROM KEYWORDS_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY');
          var search_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = SEARCH").get();
          while (search_campaigns.hasNext()) {
            var search_campaign = search_campaigns.next();
            campaign_ids_map[search_campaign.getName()] = search_campaign.getId();
          }
        } else if (type == 'shopping') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks ' +
            'FROM SHOPPING_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY'); 
          var shopping_campaigns = AdWordsApp.shoppingCampaigns().get();
          while (shopping_campaigns.hasNext()) {
        var shopping_campaign = shopping_campaigns.next();
        campaign_ids_map[shopping_campaign.getName()] = shopping_campaign.getId();  
          }
        }
      
        var rows = report.rows();
        var now = new Date();
        var timeZone = AdWordsApp.currentAccount().getTimeZone();
        var yesterday = Utilities.formatDate(new Date(now.getTime() - MILLIS_PER_DAY), timeZone, 'MM/dd/yyyy');
        var hasValidRows = false;
        while (rows.hasNext()) {
          var row = rows.next();
          var keyWordName = '';
          if (type == 'search') {
            keyWordName = row['Criteria'];
            keyWordName = keyWordName.replace(/,/g,'');
          }
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (campaign_ids_map[campaignName] == undefined) {
            continue; 
          }
          var adGroupId = row['AdGroupId'];
          var adGroupName = row['AdGroupName'];
          adGroupName = adGroupName.replace(/,/g,'');
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var result = [yesterday, keyWordName, campaignId, campaignName, adGroupId, adGroupName, impressions, clicks, timeZone];
          hasValidRows = true;
          csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_'+ type + '_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords search performance report', '', {attachments:compressedCSV} ); } }
    • Google Ads Account
      // Comma-separated list of recipients. Comment out to not send any emails.
      var RECIPIENT_EMAIL = 'mapping++@atlas.facebook.com';
      
      function main() { 
        Logger.log('Starting search report generation');
        processCampaigns('search');
        processCampaigns('shopping');
      }
      
      function processCampaigns(type) {
        Logger.log('Processing ' + type + ' campaigns');
      
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
        // Headers
        var csv = 'Date, Keyword, Campaign ID, Campaign, Ad group ID, Ad group, Impressions, Clicks, Timezone';
        var report;
        var campaign_ids_map = {};
      
        if (type == 'search') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT Criteria, CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks ' +
            'FROM KEYWORDS_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY');
          var search_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = SEARCH").get();
          while (search_campaigns.hasNext()) {
            var search_campaign = search_campaigns.next();
            campaign_ids_map[search_campaign.getName()] = search_campaign.getId();
          }
        } else if (type == 'shopping') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks ' +
            'FROM SHOPPING_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY'); 
          var shopping_campaigns = AdWordsApp.shoppingCampaigns().get();
          while (shopping_campaigns.hasNext()) {
             var shopping_campaign = shopping_campaigns.next();
            campaign_ids_map[shopping_campaign.getName()] = shopping_campaign.getId();
          }
        }
      
        var rows = report.rows();
        var now = new Date();
        var timeZone = AdWordsApp.currentAccount().getTimeZone();
        var yesterday = Utilities.formatDate(new Date(now.getTime() - MILLIS_PER_DAY), timeZone, 'MM/dd/yyyy');
        var hasValidRows = false;
        while (rows.hasNext()) {
          var row = rows.next();
          var keyWordName = '';
          if (type == 'search') {
            keyWordName = row['Criteria'];
            keyWordName = keyWordName.replace(/,/g,'');
          }
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (campaign_ids_map[campaignName] == undefined) {
            continue; 
          }
          var adGroupId = row['AdGroupId'];
          var adGroupName = row['AdGroupName'];
          adGroupName = adGroupName.replace(/,/g,'');
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var result = [yesterday, keyWordName, campaignId, campaignName, adGroupId, adGroupName, impressions, clicks, timeZone];
          hasValidRows = true;
          csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_'+ type + '_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords search performance report', '', {attachments:compressedCSV} ); } }
  6. Click Preview to verify that the script is valid. If you're prompted for permission to run the script, click Authorize Now.
  7. Click Save, then click Close.
  8. Hover over the Frequency column to the right of the script you created to edit the frequency.
  9. Select Daily and 6:00 AM local time. Click Save.

* Nguồn: Facebook