YouTube Analytics Service

The YouTube Analytics service allows you to use the YouTube Analytics API in Apps Script. This API gives users the ability to retrieve viewing statistics, popularity metrics, and demographic information for YouTube videos and channels.

Reference

For detailed information on this service, see the reference documentation for the YouTube Analytics API. Like all advanced services in Apps Script, the YouTube Analytics service uses the same objects, methods, and parameters as the public API.

Sample code

The sample code below uses version 1 of the YouTube Analytics API, as well as version 3 of the YouTube Data API, which you can access through the YouTube service in Apps Script.

Open code in new window

Create report

This function creates a spreadsheet containing daily view counts, watch-time metrics, and new-subscriber counts for a channel's videos.

function createReport() {
  // Retrieve info about the user's YouTube channel.
  var channels = YouTube.Channels.list('id,contentDetails', {
    mine: true
  });
  var channelId = channels.items[0].id;

  // Retrieve analytics report for the channel.
  var oneMonthInMillis = 1000 * 60 * 60 * 24 * 30;
  var today = new Date();
  var lastMonth = new Date(today.getTime() - oneMonthInMillis);

  var metrics = [
    'views',
    'estimatedMinutesWatched',
    'averageViewDuration',
    'averageViewPercentage',
    'subscribersGained'
  ];
  var options = {
    dimensions: 'day',
    sort: 'day'
  };
  var result = YouTubeAnalytics.Reports.query('channel==' + channelId,
      formatDateString(lastMonth),
      formatDateString(today),
      metrics.join(','),
      options);

  if (result.rows) {
    var spreadsheet = SpreadsheetApp.create('YouTube Analytics Report');
    var sheet = spreadsheet.getActiveSheet();

    // Append the headers.
    var headers = result.columnHeaders.map(function(columnHeader) {
      return formatColumnName(columnHeader.name);
    });
    sheet.appendRow(headers);

    // Append the results.
    sheet.getRange(2, 1, result.rows.length, headers.length)
        .setValues(result.rows);

    Logger.log('Report spreadsheet created: %s',
        spreadsheet.getUrl());
  } else {
    Logger.log('No rows returned.');
  }
}

/*
 * Converts a Date object into a YYYY-MM-DD string.
 */
function formatDateString(date) {
  return Utilities.formatDate(date, Session.getTimeZone(), 'yyyy-MM-dd');
}

/*
 * Formats a column name into a more human-friendly name. For example
 * "averageViewPercentage" becomes "Average View Percentage".
 */
function formatColumnName(columnName) {
  var name = columnName.replace(/([a-z])([A-Z])/g, '$1 $2');
  name = name.slice(0, 1).toUpperCase() + name.slice(1);
  return name;
}

Authentication required

You need to be signed in with Google+ to do that.

Signing you in...

Google Developers needs your permission to do that.