Page Summary
-
Video campaigns can be retrieved individually by name or all together using AdsApp.videoCampaigns().
-
Ad groups within video campaigns can be added, updated, retrieved, and paused.
-
Specific videos can be retrieved by their YouTube ID or by iterating through all available YouTube videos in the account.
-
Different types of video ads, such as in-stream and in-feed, can be added to video ad groups.
-
Audience targeting, such as adding in-market audiences, can be applied to video ad groups.
Retrieve all video campaigns
function getAllVideoCampaigns () { // AdsApp . videoCampaigns () will return all campaigns that are not // removed by default . const videoCampaignIterator = AdsApp . videoCampaigns () . get (); console . log ( ` Total campaigns found : $ { videoCampaignIterator . totalNumEntities ()} ` ); return videoCampaignIterator ; }
Retrieve a video campaign by its name
function getVideoCampaignByName ( campaignName ) { const videoCampaignIterator = AdsApp . videoCampaigns () . withCondition ( ` campaign . name = "${campaignName}" ` ) . get (); if ( ! videoCampaignIterator . hasNext ()) { throw new Error ( ` No video campaign with name $ { campaignName } found . ` ); } const videoCampaign = videoCampaignIterator . next (); console . log ( ` Campaign Name : $ { videoCampaign . getName ()} ` ); console . log ( ` Enabled : $ { videoCampaign . isEnabled ()} ` ); console . log ( ` Bidding strategy : $ { videoCampaign . getBiddingStrategyType ()} ` ); console . log ( ` Ad rotation : $ { videoCampaign . getAdRotationType ()} ` ); console . log ( ` Start date : $ { formatDate ( videoCampaign . getStartDate ())} ` ); console . log ( ` End date : $ { formatDate ( videoCampaign . getEndDate ())} ` ); return videoCampaign ; } function formatDate ( date ) { function zeroPad ( number ) { return Utilities . formatString ( ' %02d ' , number ); } return ( date == null ) ? 'None' : zeroPad ( date . year ) + zeroPad ( date . month ) + zeroPad ( date . day ); }
Retrieve a video campaign's stats
function getVideoCampaignStats ( campaignName ) { const videoCampaignIterator = AdsApp . videoCampaigns () . withCondition ( ` campaign . name = "${campaignName}" ` ) . get (); if ( ! videoCampaignIterator . hasNext ()) { throw new Error ( ` No video campaign with name $ { campaignName } found . ` ); } const videoCampaign = videoCampaignIterator . next (); // Fetch stats for the last month . See the DateRangeLiteral section at // https : // developers . google . com / google - ads / api / docs / query / date - ranges #predefined_date_range // for possible values . // Note : Reports can also be used to fetch stats . See // https : // developers . google . com / google - ads / scripts / docs / features / reports // for more information . var stats = videoCampaign . getStatsFor ( 'LAST_MONTH' ); console . log ( ` $ { videoCampaign . getName ()}, $ { stats . getImpressions ()} impressions , ` + ` $ { stats . getViews ()} views ` ); return stats ; }
Pause a video campaign
function pauseVideoCampaign ( campaignName ) { const videoCampaignIterator = AdsApp . videoCampaigns () . withCondition ( ` campaign . name = "${campaignName}" ` ) . get (); if ( videoCampaignIterator . hasNext ()) { const videoCampaign = videoCampaignIterator . next (); videoCampaign . pause (); } }
Add a video ad group
function addVideoAdGroup ( campaignName , adGroupName ) { const videoCampaignIterator = AdsApp . videoCampaigns () . withCondition ( ` campaign . name = "${campaignName}" ` ) . get (); if ( videoCampaignIterator . hasNext ()) { const videoCampaign = videoCampaignIterator . next (); const videoAdGroupOperation = videoCampaign . newVideoAdGroupBuilder () . withName ( adGroupName ) // This can also be : // * VIDEO_BUMPER // * VIDEO_EFFICIENT_REACH // * VIDEO_NON_SKIPPABLE_IN_STREAM // * VIDEO_RESPONSIVE // * VIDEO_TRUE_VIEW_IN_DISPLAY // * YOUTUBE_AUDIO // Some types may only be usable in specific ad group types . . withAdGroupType ( 'VIDEO_TRUE_VIEW_IN_STREAM' ) . withCpv ( 1.2 ) . build (); } }
Update a video ad group
function updateAdGroup ( adGroupName ) { const videoAdGroupIterator = AdsApp . videoAdGroups () . withCondition ( ` ad_group . name = "${adGroupName}" ` ) . get (); if ( videoAdGroupIterator . hasNext ()) { const videoAdGroup = videoAdGroupIterator . next (); videoAdGroup . bidding () . setCpv ( 1.2 ); // update other properties as required here } }
Retrieve all video ad groups
function getAllVideoAdGroups () { // AdsApp . videoAdGroups () will return all ad groups that are not removed by // default . const videoAdGroupIterator = AdsApp . videoAdGroups () . get (); console . log ( ` Total adGroups found : $ { videoAdGroupIterator . totalNumEntities ()} ` ); return videoAdGroupIterator ; }
Retrieve a video ad group by name
function getVideoAdGroupByName ( adGroupName ) { const videoAdGroupIterator = AdsApp . videoAdGroups () . withCondition ( ` ad_group . name = "${adGroupName}" ` ) . get (); if ( ! videoAdGroupIterator . hasNext ()) { throw new Error ( ` No video ad group found with name $ { adGroupName } . ` ); } const videoAdGroup = videoAdGroupIterator . next (); console . log ( 'AdGroup Name: ' + videoAdGroup . getName ()); console . log ( 'AdGroup Type: ' + videoAdGroup . getAdGroupType ()); console . log ( 'Enabled: ' + videoAdGroup . isEnabled ()); return videoAdGroup ; }
Retrieve a video ad group's stats
function getVideoAdGroupStats ( adGroupName ) { const videoAdGroupIterator = AdsApp . videoAdGroups () . withCondition ( ` ad_group . name = "${adGroupName}" ` ) . get (); if ( ! videoAdGroupIterator . hasNext ()) { throw new Error ( ` No video ad group found with name $ { adGroupName } . ` ); } const videoAdGroup = videoAdGroupIterator . next (); // You can also request reports for pre - defined date ranges . See // https : // developers . google . com / google - ads / api / docs / query / date - ranges #predefined_date_range // for possible values . const stats = videoAdGroup . getStatsFor ( 'LAST_MONTH' ); console . log ( ` $ { videoAdGroup . getName ()}, $ { stats . getImpressions ()}, $ { stats . getViews ()} ` ); return stats ; }
Pause a video ad group
function pauseVideoAdGroup ( adGroupName ) { const videoAdGroupIterator = AdsApp . videoAdGroups () . withCondition ( ` ad_group . name = "${adGroupName}" ` ) . get (); if ( ! videoAdGroupIterator . hasNext ()) { throw new Error ( ` No video ad group found with name $ { adGroupName } . ` ); } const videoAdGroup = videoAdGroupIterator . next (); videoAdGroup . pause (); console . log ( ` AdGroup with name : $ { videoAdGroup . getName ()} ` + ` has paused status : $ { videoAdGroup . isPaused ()} ` ); }
Retrieve any video for use in an ad
function getVideo () { // This will just get the first valid YouTube video in the account . // It demonstrates how to filter to see if a video is valid for video ads . const videos = AdsApp . adAssets () . assets () . withCondition ( "asset.type = YOUTUBE_VIDEO" ) . get (); for ( const video of videos ) { // You have to use a YouTube video for True View ads , so only return if // the YouTubeVideoId exists . if ( video . getYouTubeVideoId ()) { return video ; } } return null ; }
Retrieve a specific video for use in an ad
function getVideoByYouTubeId ( youTubeVideoId ) { // You can filter on the YouTubeVideoId if you already have that video in // your account to fetch the exact one you want right away . const videos = AdsApp . adAssets () . assets () . withCondition ( ` asset . type = YOUTUBE_VIDEO AND ` + ` asset . youtube_video_asset . youtube_video_id = '${youTubeVideoId}' ` ) . get (); if ( videos . hasNext ()) { return videos . next (); } return null ; }
Add an in-stream video ad
function addInStreamVideoAd ( adGroupName ) { // If you have multiple adGroups with the same name , this snippet will // pick an arbitrary matching ad group each time . In such cases , just // filter on the campaign name as well : // // AdsApp . videoAdGroups () // . withCondition ( 'Name = "INSERT_ADGROUP_NAME_HERE"' ) // . withCondition ( 'CampaignName = "INSERT_CAMPAIGN_NAME_HERE"' ) const videoAdGroupIterator = AdsApp . videoAdGroups () . withCondition ( ` ad_group . name = "${adGroupName}" ` ) . get (); const video = getVideo (); // Defined above if ( videoAdGroupIterator . hasNext ()) { const videoAdGroup = videoAdGroupIterator . next (); videoAdGroup . newVideoAd () . inStreamAdBuilder () . withAdName ( "In Stream Ad" ) . withDisplayUrl ( "http://www.example.com" ) . withFinalUrl ( "http://www.example.com" ) . withVideo ( video ) . build (); } }
Add an in-feed video ad
function addInFeedVideoAd ( adGroupName ) { const videoAdGroupIterator = AdsApp . videoAdGroups () . withCondition ( ` ad_group . name = "${adGroupName}" ` ) . get (); const video = getVideo (); // Defined above if ( videoAdGroupIterator . hasNext ()) { const videoAdGroup = videoAdGroupIterator . next (); videoAdGroup . newVideoAd () . inFeedAdBuilder () . withAdName ( "In-Feed Video Ad" ) . withDescription1 ( "Description line 1" ) . withDescription2 ( "Description line 2" ) . withHeadline ( "Headline" ) . withThumbnail ( "DEFAULT_THUMBNAIL" ) . withVideo ( video ) . build (); } }
Pause video ads in video ad group
function pauseVideoAdsInVideoAdGroup ( adGroupName ) { const videoAdGroupIterator = AdsApp . videoAdGroups () . withCondition ( ` ad_group . name = "${adGroupName}" ` ) . get (); if ( videoAdGroupIterator . hasNext ()) { const videoAdGroup = videoAdGroupIterator . next (); const videoAdsIterator = videoAdGroup . videoAds () . get (); for ( const videoAd of videoAdsIterator ) { videoAd . pause (); } } }
Retrieve video ads in video ad group
function getInStreamAdsInVideoAdGroup(adGroupName) { const videoAdGroupIterator = AdsApp.videoAdGroups() .withCondition(`ad_group.name = "${adGroupName}"`) .get(); if (!videoAdGroupIterator.hasNext()) { throw new Error(`No video ad group found with name ${adGroupName}.`); } const videoAdGroup = videoAdGroupIterator.next(); const videoAdsIterator = videoAdGroup.videoAds() .withCondition('Type="TRUE_VIEW_IN_STREAM_VIDEO_AD"').get(); console.log(`Total ads found : ${videoAdsIterator.totalNumEntities()}`); return videoAdsIterator; } function logVideoAd(videoAd) { // Note that not all fields are populated for both video ad types. console.log('Video ID : ' + videoAd.getVideoId()); console.log('Headline : ' + videoAd.getHeadline()); console.log('Line1 : ' + videoAd.getDescription1()); console.log('Line2 : ' + videoAd.getDescription2()); console.log('Final URL : ' + videoAd.urls().getFinalUrl()); console.log('Display URL : ' + videoAd.getDisplayUrl()); console.log('Destination Page : ' + videoAd.getDestinationPage()); console.log('Approval Status : ' + videoAd.getApprovalStatus()); console.log('Enabled : ' + videoAd.isEnabled()); }
Retrieve ad stats from a video ad group
function getVideoAdGroupAdStats ( adGroupName ) { let statsList = []; const videoAdGroupIterator = AdsApp . videoAdGroups () . withCondition ( ` ad_group . name = "${adGroupName}" ` ) . get (); if ( videoAdGroupIterator . hasNext ()) { const videoAdGroup = videoAdGroupIterator . next (); const videoAdsIterator = videoAdGroup . videoAds () . get (); for ( const videoAd of videoAdsIterator ) { // You can also request reports for pre - defined date ranges . See // https : // developers . google . com / google - ads / api / docs / query / date - ranges #predefined_date_range // for possible values . const stats = videoAd . getStatsFor ( 'LAST_MONTH' ); console . log ( ` $ { videoAdGroup . getName ()}, $ { stats . getViews ()}, $ { stats . getImpressions ()} ` ); statsList . push ( stats ); } } return statsList ; }
Add in-market audience to a video ad group
function addInMarketAudienceToVideoAdGroup () { const ag = AdsApp . videoAdGroups () . withCondition ( 'campaign.status != REMOVED' ) . get () . next (); console . log ( ` AdGroup ID $ { ag . getId ()}, Campaign ID $ { ag . getVideoCampaign () . getId ()} ` ); // Get the audience ID from the list here : // https : // developers . google . com / google - ads / api / reference / data / codes - formats #in-market-categories const audience = ag . videoTargeting () . newAudienceBuilder () . withAudienceId ( 80428 ) . withAudienceType ( 'USER_INTEREST' ) . build (); console . log ( 'Added Audience ID %s ' , audience . getResult () . getId () . toString ()); const audiences = ag . videoTargeting () . audiences () . get (); for ( const aud of audiences ) { console . log ( 'Retrieved Audience ID %s ' , aud . getId () . toString ()); } }

