This is the legacy documentation for Google Ads scripts. Go to the current docs.

YouTube

Stay organized with collections Save and categorize content based on your preferences.

Update video's details

function updateYouTubeVideo() {
  // 1. Fetch all the channels owned by active user.
  var myChannels = YouTube.Channels.list('contentDetails', {mine: true});

  // 2. Iterate through the channels and get the uploads playlist ID.
  for (var i = 0; i < myChannels.items.length; i++) {
    var item = myChannels.items[i];
    var uploadsPlaylistId = item.contentDetails.relatedPlaylists.uploads;

    var playlistResponse = YouTube.PlaylistItems.list('snippet', {
      playlistId: uploadsPlaylistId,
      maxResults: 1
    });

    // Get the ID of the first video in the list.
    var video = playlistResponse.items[0];
    var originalDescription = video.snippet.description;
    var updatedDescription = originalDescription +
        ' Description updated via Google Apps Script';

    video.snippet.description = updatedDescription;

    var resource = {
      snippet: {
        title: video.snippet.title,
        description: updatedDescription,
        categoryId: '22'
      },
      id: video.snippet.resourceId.videoId
    };
    YouTube.Videos.update(resource, 'id,snippet');

    Logger.log('Video with ID = %s and Title = %s was successfully updated.',
        video.snippet.resourceId.videoId, video.snippet.title);
  }
}

Create a channel bulletin

function postChannelBulletin() {
  var message = 'Thanks for subscribing to my channel!  This posting is ' +
                'from Google Apps Script';

  var videoId = 'INSERT_VIDEO_ID_HERE';
  var resource = {
    snippet: {
      description: message
    },
    contentDetails: {
      bulletin: {
        resourceId: {
          kind: 'youtube#video',
          videoId: videoId
        }
      }
    }
  };

  var response = YouTube.Activities.insert(resource, 'snippet,contentDetails');
  Logger.log('Posted to channel bulletin successfully.');
}

Retrieve video uploads

function retrieveVideoUploads() {
  var results = YouTube.Channels.list('contentDetails', {mine: true});
  for (var i in results.items) {
    var item = results.items[i];
    // Get the playlist ID, which is nested in contentDetails, as described in
    // the Channel resource:
    // https://developers.google.com/youtube/v3/docs/channels
    var playlistId = item.contentDetails.relatedPlaylists.uploads;

    var nextPageToken = '';

    // This loop retrieves a set of playlist items and checks the nextPageToken
    // in the response to determine whether the list contains additional items.
    // It repeats that process until it has retrieved all of the items in the
    // list.
    while (nextPageToken != null) {
      var playlistResponse = YouTube.PlaylistItems.list('snippet', {
        playlistId: playlistId,
        maxResults: 25,
        pageToken: nextPageToken
      });

      for (var j = 0; j < playlistResponse.items.length; j++) {
        var playlistItem = playlistResponse.items[j];
        Logger.log('[%s] Title: %s',
                   playlistItem.snippet.resourceId.videoId,
                   playlistItem.snippet.title);

      }
      nextPageToken = playlistResponse.nextPageToken;
    }
  }
}

Search videos by keyword

function searchVideosByKeyword() {
  var results = YouTube.Search.list('id,snippet', {q: 'dogs', maxResults: 25});
  for (var i in results.items) {
    var item = results.items[i];
    Logger.log('[%s] Title: %s', item.id.videoId, item.snippet.title);
  }
}

Search videos by topics

function searchVideosByFreebaseTopic() {
  // See https://developers.google.com/youtube/v3/guides/searching_by_topic
  // for more details.

  // Insert Your Freebase topic ID here. The Freebase ID used in this example
  // corresponds to the Freebase entry for Google. See
  // http://www.freebase.com/m/045c7b for more details.
  var mid = '/m/045c7b';
  var results = YouTube.Search.list('id,snippet',
      {topicId: mid, maxResults: 25});
  for (var i in results.items) {
    var item = results.items[i];
    Logger.log('[%s] Title: %s', item.id.videoId, item.snippet.title);
  }
}

Subscribe to a channel

function subscribeToChannel() {
  // Replace this channel ID with the channel ID you want to subscribe to.

  var channelId = 'INSERT_YOUTUBE_CHANNEL_ID_HERE';
  var resource = {
    snippet: {
      resourceId: {
        kind: 'youtube#channel',
        channelId: channelId
      }
    }
  };

  try {
    var response = YouTube.Subscriptions.insert(resource, 'snippet');

    Logger.log('Subscribed to channel ID %s successfully.', channelId);
  } catch (e) {
    if (e.message.match('subscriptionDuplicate')) {
      Logger.log('Cannot subscribe; already subscribed to channel: ' +
          channelId);
    } else {
      Logger.log('Error adding subscription: ' + e.message);
    }
  }
}