Author Archives: Google Ads Developer Advisor

Google Ads Ad Groups Start Pausing March 11 due to Low Activity

Starting March 11, 2024 we are rolling out a permanent change that automatically pauses ad groups that were created at least 13 months ago and have not had impressions in the past 13 months. The rollout is expected to be complete for all production Google Ads accounts by April 30, 2024. This is being done to improve Google Ads experience for advertisers.

Advertisers who are affected by this change will be able to unpause ad groups if they still need them. However, we recommend that advertisers review their ad groups and only unpause the ones you expect to get impressions in the coming weeks. Unpaused ad groups will be automatically paused again if they don’t receive any impressions over the next 3 months.

What do I need to change?

No code changes are necessary, but Google Ads API developers can make changes to improve the transparency to their advertisers as to why the ad_group.status is set to PAUSED. If you keep local copies of Google Ads information in your database, you can keep them in sync by querying change history.

You can query the change event to see if the ad group status has changed with the following query for all API versions. If the change_event.changed_fields contains status, then this is an ad group that Google paused. Make sure to replace INSERT_YYYY-MMM-DD with your own date range.

SELECT ad_group.status, ad_group.resource_name, ad_group.name, 
ad_group.id, change_event.change_date_time, 
change_event.new_resource, change_event.old_resource, 
change_event.changed_fields, change_event.change_resource_type, 
change_event.client_type, change_event.user_email, change_event.ad_group 
FROM change_event 
WHERE change_event.client_type = 'OTHER' 
AND change_event.user_email = 'Low activity system bulk change'  
AND change_event.change_resource_type = 'AD_GROUP' 
AND ad_group.status = 'PAUSED' 
AND change_event.change_date_time >= 'INSERT_YYYY-MMM-DD' 
AND change_event.change_date_time <= 'INSERT_YYYY-MMM-DD' 
ORDER BY change_event.change_date_time DESC LIMIT 50

An example of a change event where the ad group has been paused by Google would look similar to:

{
      "adGroup": {
        "resourceName": "customers/1234567890/adGroups/5432154321",
        "status": "PAUSED",
        "id": "5432154321",
        "name": "Your ad group name"
      },
      "changeEvent": {
        "resourceName": "customers/1234567890/changeEvents/1708648783892610~5~0",
        "changeDateTime": "2024-02-22 16:39:43.89261",
        "changeResourceType": "AD_GROUP",
        "clientType": "OTHER",
        "userEmail": "Low activity system bulk change",
        "oldResource": {
          "adGroup": {
            "status": "ENABLED"
          }
        },
        "newResource": {
          "adGroup": {
            "status": "PAUSED"
          }
        },
        "changedFields": "status",
        "adGroup": "customers/1234567890/adGroups/5432154321"
      }
    }

Starting with v16, the API returns the reason as to why the ad group was paused with new fields. You can adjust the change history query to include these fields.

API Version Query Ad Group Changes
v16.1+ Starting in v16.1, the ad_group.primary_status_reasons will contain AD_GROUP_PAUSED_DUE_TO_LOW_ACTIVITY if ad_group.primary_status is set to PAUSED by Google.
v16 Starting in v16, the ad_group.primary_status_reasons will contain AD_GROUP_PAUSED if ad_group.primary_status is set to PAUSED by Google.

You will still be able to update your ad groups and make changes while they are in a paused state.

Where can I get support?

If you have questions, please reach out to us on the support form or at [email protected].

February 2024 update to Display & Video 360 API

Today we’re announcing the February 2024 update to the Display & Video 360 API. This update includes the following features:

More details about this update can be found in the Display & Video 360 API release notes. Before using these new features, make sure to update your client library to the latest version.

If you need help with these new features, please contact us using our support contact form.

Google Ads scripts updates for v15

In April 2024, we are releasing a new version of Google Ads scripts that is updated to use Google Ads API v15.

Note: Our generic search and mutate methods allow for new API features as soon as they become available, and have been supporting Google Ads API v15 since its release.

As a result of this change, several features that were removed from v15 of the Google Ads API will no longer be available in Google Ads scripts:
  • AdsApp.adMedia() will throw a sunset error. Media is no longer supported. Assets are used instead.
  • ResponsiveDisplayAd would previously return a Media when fetching its marketing image or logo image. Instead, this will now return null.
  • ImageAd.getImage() previously returned a Media. It will now return an Asset instead. This will be a breaking change if you depend on this method.
In addition to these changes, we will be increasing the default reporting version to v15 if you don't manually specify a version.
If you have any questions or concerns, you can reach out to us on our forum.

Announcing v16 of the Google Ads API

Today, we’re announcing the v16 release of the Google Ads API. To use some of the v16 features, you will need to upgrade your client libraries and client code. The updated client libraries and code examples will be published next week.
Here are the highlights: Where can I learn more?
The following resources can help you get started: If you have any questions or need additional help, contact us via the forum.

Important information for Performance Max campaigns using page feeds with text asset automation opted out

Note: You can ignore this if you are not using Google Ads Performance Max with page feeds and text asset automation

What’s happened?

In October 2023, as part of Google Ads API v15, we launched the ability to configure your campaign to automatically generate text assets. Assets such as dynamic headlines or descriptions that match your landing page content can be configured by setting the Campaign.AssetAutomationSetting of TEXT_ASSET_AUTOMATION to be opted-in or opted-out. We also launched the ListingGroupFilterDimension.Webpage dimension to allow Performance Max campaigns to filter URLs from a page feed specified by a CampaignAssetSet linking the campaign to an AssetSet of type PAGE_FEED.

For this feature to work correctly, developers need to provide BOTH the page feed configuration AND set text asset automation to OPTED_IN (which is the default behavior, if you do not specify a Campaign.AssetAutomationSetting of type TEXT_ASSET_AUTOMATION). We noticed that some developers have included a page feed or a listing group filter for a webpage, but have text asset automation set to OPTED_OUT. Unfortunately this combination will not correctly utilize the page feed for Performance Max campaigns as might be expected.

What is happening today?

Starting Feb 15, 2024, we will begin throwing OPERATION_NOT_PERMITTED_FOR_CONTEXT errors if a Performance Max campaign is created or updated such that it contains the follow incompatible state:

Incompatible state for a Performance Max campaign with a page feed and text asset automation
Campaign.AssetAutomationSetting of type TEXT_ASSET_AUTOMATION is set to OPTED_OUT AND A CampaignAssetSet linking the campaign to an AssetSet of type PAGE_FEED
OR
An AssetGroupListingGroupFilter with ListingGroupFilterDimension set to Webpage.

We are doing this to let you know that this combination is not valid and won’t serve ads utilizing landing page content as expected.

What happens next?

For those developers who have campaigns in this incompatible state, starting April 15, 2024, we will automatically fix the compatibility by removing CampaignAssetSet resources linking a campaign to an AssetSet of type PAGE_FEED and removing AssetGroupListingGroupFilter resources with ListingGroupFilterDimension set to Webpage only if the Campaign.AssetAutomationSetting of type TEXT_ASSET_AUTOMATION is set to OPTED_OUT. This fix will match how the campaign is currently serving and no action is required if you would like the campaign to remain in this state. If you would like to utilize the landing page content, then you will need to opt-in to text asset automation.

What do I need to do?

First, confirm that you are using text asset automation and page feed assets or asset group listing filters with webpage dimensions in your Performance Max campaigns. Otherwise, you are not impacted by this change.

To check if your Performance Max campaign is in an incompatible state for page feeds, run the following GAQL queries:

1) Check for page feeds linked to campaigns that have text asset automation opted-out:

SELECT 
  asset_set.id, 
  asset_set.name, 
  asset_set.resource_name, 
  campaign.id, 
  campaign.name, 
  campaign.resource_name, 
  campaign.asset_automation_settings, 
  campaign_asset_set.status, 
  campaign.status 
FROM campaign_asset_set 
WHERE 
  campaign.advertising_channel_type = 'PERFORMANCE_MAX' 
  AND asset_set.type = 'PAGE_FEED' 
  AND asset_set.status = 'ENABLED' 
  AND campaign_asset_set.status = 'ENABLED' 
  AND campaign.status != 'REMOVED' 

You may be impacted if any of the CampaignAssetSet resources, linking a campaign to an AssetSet of type PAGE_FEED, have a campaign_asset_set.status that is set to ENABLED and an item in campaign.asset_automation_settings with TEXT_ASSET_AUTOMATION set to OPTED_OUT.

2) Check for asset group listing group filters with dimension webpage for campaigns that have text asset automation opted-out:

SELECT 
  asset_group.id, 
  asset_group.name, 
  asset_group.resource_name, 
  asset_group_listing_group_filter.case_value.webpage.conditions, 
  asset_group_listing_group_filter.id, 
  asset_group_listing_group_filter.resource_name, 
  asset_group_listing_group_filter.listing_source, 
  campaign.id, 
  campaign.name, 
  campaign.resource_name, 
  campaign.asset_automation_settings, 
  campaign.status 
FROM asset_group_listing_group_filter 
WHERE 
  asset_group.status != 'REMOVED' 
  AND campaign.advertising_channel_type = 'PERFORMANCE_MAX' 
  AND asset_group_listing_group_filter.listing_source = 'WEBPAGE' 
  AND campaign.status != 'REMOVED'

You may be impacted if any of the AssetGroupListingGroupFilter resources have a case_value that is a Webpage and an item in campaign.asset_automation_settings with TEXT_ASSET_AUTOMATION set to OPTED_OUT.

Manually fix the inconsistent state of the campaign

If you would like to manually configure the campaign yourself ahead of the automatic fix, we suggest one of the two options:

Options to manually fix the inconsistent state of a Performance Max campaign
OPTION A) Turn on text asset automation
Set Campaign.AssetAutomationSetting of type TEXT_ASSET_AUTOMATION to OPTED_IN
OPTION B) Remove associated page feed references
Remove BOTH:
The CampaignAssetSet linking the campaign to an AssetSet of type PAGE_FEED AND The AssetGroupListingGroupFilter with ListingGroupFilterDimension set to Webpage.

You will be able to make this change until April 15, 2024, after which option B will be automatically applied to fix the Performance Max campaign. Note that after the automatic fix is applied, the serving state of the campaign won't change from how it is serving today.

How do I get support?

For more details on how to correctly use automatically generated text assets with landing pages, see the automatically created assets section of the Performance Max guide. If you require further support, please reach out to our team via one of our support channels.

Deprecation of Display & Video 360 API v2

Today we are deprecating Display & Video 360 API v2 and will sunset v2 on September 3, 2024. Migrate to Display & Video 360 API v3 before the sunset date to avoid an interruption of service.

You can read our release notes for more information on updates made to the API in v3, such as the addition of proximity location list management and updates to resource and field names. Follow the steps in our v3 migration guide to help you migrate from v2 to v3.

If you run into issues or need help with your migration, please contact us using our support contact form.

Announcing v202402 of the Google Ad Manager API

We're pleased to announce that v202402 of the Google Ad Manager API is available starting today, February 13, 2024. This release brings support for gross revenue metrics in reporting as well as new error messages to support the Spotlight deprecation.

For the full list of changes, check the release notes. Feel free to contact us on the Ad Manager API forum with any API-related questions.

Deprecating Commissions Bidding Strategy

On April 30, 2024, the creation of hotel campaigns with COMMISSION bidding strategy will sunset. This bidding strategy was available only to travel advertisers. Requests to create new hotel campaigns or apply this bidding strategy to existing campaigns after April 30th will result in a BiddingStrategyError.BIDDING_STRATEGY_NOT_SUPPORTED error. Existing campaigns with the COMMISSION bidding strategy will continue to run until October 31, 2024. After this day campaigns will stop serving until their bidding strategy is updated. A notification will be displayed in the Google Ads UI, guiding users on how to update the affected campaigns.

We suggest that travel advertisers with Hotel campaigns and Things to do Ads migrate to the Target ROAS (TARGET_ROAS) auto bidding strategy. You can find more information about the tROAS in our Help Center article.

If you have any questions or concerns, please don't hesitate to contact us in the forum.

Announcing iOS Google Mobile Ads SDK Version 11.0.0

Today, we are announcing that version 11.0.0 of the Google Mobile Ads SDK is now available. We recommend upgrading as soon as possible to get our latest features and performance improvements.

Simplified SwiftUI development

Version 11.0.0 no longer requires publishers to declare a view controller to present full-screen ads. As a result, SwiftUI Publishers can now present full-screen ads without the need for UIKit or UIViewControllerRepresentable workarounds. See our SwiftUI guide for more information.

struct ContentView: View {
  private let adCoordinator = AdCoordinator()

  var body: some View {
    ...

    Button("Watch an ad") {
      adCoordinator.showAd()
    }
  }
}

private class InterstitialAdCoordinator: NSObject, GADFullScreenContentDelegate {
  private var interstitial: GADInterstitialAd?

  ...

  func showAd() {
    guard let interstitial = interstitial else {
      return print("Ad wasn't ready")
    }

    // The SDK uses the app's main window to look up view controllers
    // automatically when one is not provided.
    interstitial.present(fromRootViewController: nil)
  }
}

Continue collecting user metrics in AdMob

The Google Mobile Ads SDK dependency on GoogleAppMeasurement has been removed. This dependency that powered the user metrics toggle in AdMob will be discontinued in early 2024. To continue collecting user metrics in AdMob, link your AdMob app to Firebase and integrate the Google Analytics for Firebase SDK into your app.

Changes to minimum OS and Xcode requirements

  • The minimum OS version to load ads has been bumped from 12 to 13. Applications can still be built for iOS 12, but the SDK will only load ads on iOS 13 and higher.
  • The minimum supported Xcode version has been bumped to 15.1.

For the full list of changes, check the release notes. Check our migration guide to ensure your mobile apps are ready to upgrade.

SDK Deprecation Reminder

Per the deprecation schedule, the release of version 11.0.0 means that:

  • iOS Google Mobile Ads SDK versions 9.x.x are officially deprecated, and will sunset in Q2 2025.
  • Versions 8.x.x and below will sunset in Q2 2024, approximately 60 days following the release of Android Google Mobile Ads SDK major version 23.0.0.
    • While there are currently no plans to disable ad serving on version 8.x.x, we strongly recommend updating to a supported SDK version to avoid being impacted in the future.

As always, if you have any questions or need additional help, contact us via the developer forum.