Performance Max

  • Code snippets demonstrate how to retrieve all Performance Max campaigns or a specific campaign by name using AdsApp.performanceMaxCampaigns().

  • Function examples show how to access details of a specific Performance Max campaign, including name, status, bidding strategy, and dates.

  • Instructions are provided for retrieving statistics for a Performance Max campaign, specifically showing how to get stats for the last month.

  • Code illustrates how to pause both a Performance Max campaign and an asset group within a campaign.

  • Examples show how to retrieve, add, and remove video assets from an asset group using the video's YouTube ID.

Retrieve all performance max campaigns

function getAllPerformanceMaxCampaigns() {  // AdsApp.performanceMaxCampaigns() will return all campaigns that are not  // removed by default.  const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns().get();  console.log(`Total campaigns found : ${performanceMaxCampaignIterator.totalNumEntities()}`);  return performanceMaxCampaignIterator; }

Retrieve a performance max campaign by its name

function getPerformanceMaxCampaignByName(campaignName) {  const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns()  .withCondition(`campaign.name = "${campaignName}"`)  .get();  if (!performanceMaxCampaignIterator.hasNext()) {  throw new Error(`No performance max campaign with name ${campaignName} found.`);  }  const performanceMaxCampaign = performanceMaxCampaignIterator.next();  console.log(`Campaign Name: ${performanceMaxCampaign.getName()}`);  console.log(`Enabled: ${performanceMaxCampaign.isEnabled()}`);  console.log(`Bidding strategy: ${performanceMaxCampaign.getBiddingStrategyType()}`);  console.log(`Ad rotation: ${performanceMaxCampaign.getAdRotationType()}`);  console.log(`Start date: ${formatDate(performanceMaxCampaign.getStartDate())}`);  console.log(`End date: ${formatDate(performanceMaxCampaign.getEndDate())}`);  return performanceMaxCampaign; } 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 performance max campaign's stats

function getPerformanceMaxCampaignStats(campaignName) {  const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns()  .withCondition(`campaign.name = "${campaignName}"`)  .get();  if (!performanceMaxCampaignIterator.hasNext()) {  throw new Error(`No performance max campaign with name ${campaignName} found.`);  }  const performanceMaxCampaign = performanceMaxCampaignIterator.next();  // Fetch stats for the last month. See the DateRangeLiteral section at  // https://developers.google.com/adwords/api/docs/guides/awql#formal_grammar  // for a list of all supported pre-defined date ranges.  // 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 = performanceMaxCampaign.getStatsFor('LAST_MONTH');  console.log(`${performanceMaxCampaign.getName()}, ${stats.getImpressions()} impressions, ` +  `${stats.getViews()} views`);  return stats; }

Pause a performance max campaign

function pausePerformanceMaxCampaign(campaignName) {  const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns()  .withCondition(`campaign.name = "${campaignName}"`)  .get();  if (performanceMaxCampaignIterator.hasNext()) {  const performanceMaxCampaign = performanceMaxCampaignIterator.next();  performanceMaxCampaign.pause();  } }

Retrieve an asset group by its name

function getAssetGroupByName(campaignName, assetGroupName) {  // Defined above  const performanceMaxCampaign = getPerformanceMaxCampaignByName(campaignName);  if (performanceMaxCampaign == null) {  return null;  }  const assetGroupIterator = performanceMaxCampaign.assetGroups()  .withCondition(`asset_group.name = "${assetGroupName}"`)  .get();  if (!assetGroupIterator.hasNext()) {  throw new Error(`No asset group found with name ${assetGroupName}.`);  }  return assetGroupIterator.next(); }

Pause an asset group

function pausePerformanceMaxAssetGroup(campaignName, assetGroupName) {  // Defined above  const assetGroup = getAssetGroupByName(campaignName, assetGroupName);  assetGroup.pause();  console.log(`AssetGroup with name: ${assetGroup.getName()} ` +  `has paused status: ${assetGroup.isPaused()}`); }

Retrieve a specific video for use in an asset group

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 a specific video to an asset group

function addVideoToAssetGroup(youTubeVideoId, campaignName, assetGroupName) {  // Defined above  const video = getVideoByYouTubeId(youTubeVideoId);  const assetGroup = getAssetGroupByName(campaignName, assetGroupName);  assetGroup.addAsset(video, 'YOUTUBE_VIDEO'); }

Remove a specific video from an asset group

function removeVideoFromAssetGroup(youTubeVideoId, campaignName, assetGroupName) {  // Defined above  const video = getVideoByYouTubeId(youTubeVideoId);  const assetGroup = getAssetGroupByName(campaignName, assetGroupName);  assetGroup.removeAsset(video, 'YOUTUBE_VIDEO'); }