Mobile Apps

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

Create a mobile app extension

function createMobileApp() {
  // For full details on creating a new mobile app extension, see:
  // https://developers.google.com/google-ads/scripts/docs/reference/adsapp/adsapp_mobileappbuilder
  const newMobileApp = AdsApp.extensions().newMobileAppBuilder()
      // See https://support.google.com/google-ads/answer/2402582 for details
      // on how to obtain applications specific store id
      .withAppId('INSERT_STORE_SPECIFIC_APP_ID_HERE')     // required
      // For iOS apps, use 'iOS' here
      .withStore('Android')                               // required
      // Replace the values below with your link text, final url, and start date
      .withLinkText('Download App Here')                  // required
      .withFinalUrl('http://www.example.com/androidApp')  // required
      .withStartDate({day : 29, month : 2, year : 2024})  // optional
      .build()
      .getResult();

  // Add mobile app to a campaign
  const campaignIterator = AdsApp.campaigns()
      .withCondition('campaign.name = "INSERT_CAMPAIGN_NAME_HERE"')
      .get();
  if (campaignIterator.hasNext()) {
    const campaign = campaignIterator.next();
    campaign.addMobileApp(newMobileApp);
  }

  // Add mobile app to an ad group
  const adGroupIterator = AdsApp.adGroups()
      .withCondition('campaign.name = "INSERT_CAMPAIGN_NAME_HERE"')
      .withCondition('ad_group.name = "INSERT_AD_GROUP_NAME_HERE"')
      .get();
  if (adGroupIterator.hasNext()) {
    const adGroup = adGroupIterator.next();
    adGroup.addMobileApp(newMobileApp);
  }

  // Add mobile app to an account
  const account = AdsApp.currentAccount();
  account.addMobileApp(newMobileApp);
}

Log mobile app extensions details for a campaign

function logMobileAppDetails() {
  // Get a campaign.
  const campaignIterator = AdsApp.campaigns()
      .withCondition('campaign.name = "INSERT_CAMPAIGN_NAME_HERE"')
      .get();
  if (!campaignIterator.hasNext()) {
    throw new Error('Campaign not found.');
  }
  const campaign = campaignIterator.next();

  // Retrieve the campaign's mobile apps. Retrieving an ad group's and
  // account's mobile apps is similar.
  const mobileAppIterator = campaign.extensions().mobileApps().get();

  for (const mobileApp of mobileAppIterator) {
    // You can also request reports for pre-defined date ranges. See
    // https://developers.google.com/adwords/api/docs/guides/awql,
    // DateRangeLiteral section for possible values.
    const stats = mobileApp.getStatsFor('LAST_MONTH');

    console.log(`Mobile app id : ${ mobileApp.getAppId() }`);
    console.log(`link text : ${ mobileApp.getLinkText() }`);
    console.log(`final URL : ${ mobileApp.urls().getFinalUrl() }`);
    console.log(`clicks : ${ stats.getClicks() }`);
    console.log(`impressions : ${ stats.getImpressions() }`);
    console.log('=======');
  }

  console.log(`${mobileAppIterator.totalNumEntities()} mobile apps in the campaign`);
}

Set schedule for mobile apps in a campaign

function setMobileAppSchedule() {
  // Get a campaign.
  const campaignIterator = AdsApp.campaigns()
      .withCondition('campaign.name = "INSERT_CAMPAIGN_NAME_HERE"')
      .get();
  if (!campaignIterator.hasNext()) {
    throw new Error('Campaign not found.');
  }
  const campaign = campaignIterator.next();

  // Retrieve the campaign's mobile apps. Retrieving an ad group's and
  // account's mobile apps is similar.
  const mobileAppIterator = campaign.extensions().mobileApps().get();

  for (const mobileApp of mobileAppIterator) {
    if (mobileApp.getAppId() === 'INSERT_STORE_SPECIFIC_APP_ID_HERE') {
      // Set mobile app schedule to run only on Mondays and Tuesdays, 9 AM to
      // 6 PM.
      const monday = {
        dayOfWeek: 'MONDAY',
        startHour: 9,
        startMinute: 0,
        endHour: 18,
        endMinute: 0
      };

      const tuesday = {
        dayOfWeek: 'TUESDAY',
        startHour: 9,
        startMinute: 0,
        endHour: 18,
        endMinute: 0
      };

      mobileApp.setSchedules([monday, tuesday]);

      break;
    }
  }
}