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. For more information, see How method signatures are determined .

Sample code

The sample code below uses version 2 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.

To report issues and find other support, see the YouTube API support guide .

Create report

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

advanced/youtubeAnalytics.gs
 /** 
 * 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. 
  
 const 
  
 channels 
  
 = 
  
 YouTube 
 . 
 Channels 
 . 
 list 
 ( 
 'id,contentDetails' 
 , 
  
 { 
  
 mine 
 : 
  
 true 
  
 }); 
  
 const 
  
 channelId 
  
 = 
  
 channels 
 . 
 items 
 [ 
 0 
 ]. 
 id 
 ; 
  
 // Retrieve analytics report for the channel. 
  
 const 
  
 oneMonthInMillis 
  
 = 
  
 1000 
  
 * 
  
 60 
  
 * 
  
 60 
  
 * 
  
 24 
  
 * 
  
 30 
 ; 
  
 const 
  
 today 
  
 = 
  
 new 
  
 Date 
 (); 
  
 const 
  
 lastMonth 
  
 = 
  
 new 
  
 Date 
 ( 
 today 
 . 
 getTime 
 () 
  
 - 
  
 oneMonthInMillis 
 ); 
  
 const 
  
 metrics 
  
 = 
  
 [ 
  
 'views' 
 , 
  
 'estimatedMinutesWatched' 
 , 
  
 'averageViewDuration' 
 , 
  
 'subscribersGained' 
  
 ]; 
  
 const 
  
 result 
  
 = 
  
 YouTubeAnalytics 
 . 
 Reports 
 . 
 query 
 ({ 
  
 ids 
 : 
  
 'channel==' 
  
 + 
  
 channelId 
 , 
  
 startDate 
 : 
  
 formatDateString 
 ( 
 lastMonth 
 ), 
  
 endDate 
 : 
  
 formatDateString 
 ( 
 today 
 ), 
  
 metrics 
 : 
  
 metrics 
 . 
 join 
 ( 
 ',' 
 ), 
  
 dimensions 
 : 
  
 'day' 
 , 
  
 sort 
 : 
  
 'day' 
  
 }); 
  
 if 
  
 ( 
 ! 
 result 
 . 
 rows 
 ) 
  
 { 
  
 console 
 . 
 log 
 ( 
 'No rows returned.' 
 ); 
  
 return 
 ; 
  
 } 
  
 const 
  
 spreadsheet 
  
 = 
  
 SpreadsheetApp 
 . 
 create 
 ( 
 'YouTube Analytics Report' 
 ); 
  
 const 
  
 sheet 
  
 = 
  
 spreadsheet 
 . 
 getActiveSheet 
 (); 
  
 // Append the headers. 
  
 const 
  
 headers 
  
 = 
  
 result 
 . 
 columnHeaders 
 . 
 map 
 (( 
 columnHeader 
 ) 
 = 
>  
 { 
  
 return 
  
 formatColumnName 
 ( 
 columnHeader 
 . 
 name 
 ); 
  
 }); 
  
 sheet 
 . 
 appendRow 
 ( 
 headers 
 ); 
  
 // Append the results. 
  
 sheet 
 . 
 getRange 
 ( 
 2 
 , 
  
 1 
 , 
  
 result 
 . 
 rows 
 . 
 length 
 , 
  
 headers 
 . 
 length 
 ) 
  
 . 
 setValues 
 ( 
 result 
 . 
 rows 
 ); 
  
 console 
 . 
 log 
 ( 
 'Report spreadsheet created: %s' 
 , 
  
 spreadsheet 
 . 
 getUrl 
 ()); 
 } 
 /** 
 * Converts a Date object into a YYYY-MM-DD string. 
 * @param {Date} date The date to convert to a string. 
 * @return {string} The formatted date. 
 */ 
 function 
  
 formatDateString 
 ( 
 date 
 ) 
  
 { 
  
 return 
  
 Utilities 
 . 
 formatDate 
 ( 
 date 
 , 
  
 Session 
 . 
 getScriptTimeZone 
 (), 
  
 'yyyy-MM-dd' 
 ); 
 } 
 /** 
 * Formats a column name into a more human-friendly name. 
 * @param {string} columnName The unprocessed name of the column. 
 * @return {string} The formatted column name. 
 * @example "averageViewPercentage" becomes "Average View Percentage". 
 */ 
 function 
  
 formatColumnName 
 ( 
 columnName 
 ) 
  
 { 
  
 let 
  
 name 
  
 = 
  
 columnName 
 . 
 replace 
 ( 
 /([a-z])([A-Z])/g 
 , 
  
 '$1 $2' 
 ); 
  
 name 
  
 = 
  
 name 
 . 
 slice 
 ( 
 0 
 , 
  
 1 
 ). 
 toUpperCase 
 () 
  
 + 
  
 name 
 . 
 slice 
 ( 
 1 
 ); 
  
 return 
  
 name 
 ; 
 } 
Design a Mobile Site
View Site in Mobile | Classic
Share by: