Category Archives: Ads Developer Blog

The official blog for information about the AdWords, AdSense, DoubleClick and AdMob APIs and SDKs

Announcing v9 of the Google Ads API

Today, we’re announcing the v9 release of the Google Ads API. To use some of the v9 features, you 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:
  • Added support for Performance Max campaigns, a new campaign type that provides a unified buying service to virtually all Google Ads inventory. Performance Max also provides a superset of Smart Shopping Campaign functionality.
  • Added support for conversion goals to help you organize your conversion actions so that you can more easily optimize toward your advertising objectives.
  • Smart campaigns is in open beta and is now available for all users. We also added a new, more robust suggestion method, which leverages your company’s business details to suggest keyword themes for your Smart campaign.
  • Added support for an App campaign for pre-registration and the pre-registration ads which helps to gauge interest before an app or a game is available to install.
  • Migrated Video ads from using MediaFile to represent videos and images to using assets: AdVideoAsset and AdImageAsset. This includes the companion_banner and video fields of Video ads-related objects.
  • To comply with ATT, ConversionUploadService now supports conversion uploads with BRAID identifiers (ClickConversion.gbraid and ClickConversion.wbraid) in place of GCLID. BRAID identifiers are used for clicks associated with conversions from iOS14 devices. This feature is currently only available to allowlisted customers.
  • The Google Ads API now distinguishes between conversions with SKAdNetwork conversion value 0 and conversions with no conversion value present in the postback from Apple. Note that this feature is only available for SKAdNetwork conversions received after September 20th, 2021.
  • Added support for asset sets, which are a collection of assets. They will eventually replace the FeedService.
  • Added support for ad customizers for Responsive Search Ads.
  • Added support for warnings for OfflineUserDataJobService as AddOfflineUserDataJobOperationsRequest.enable_warnings. When set to true, any non-blocking errors pertaining to operation failures will be returned as AddOfflineUserDataJobResponse.warning.
  • ad_group_ad_asset_view reporting is now available for App engagement ads and responsive search ads.
  • Added support for retrieving hotel_reconciliation resources, which contain booking information to reconcile bookings from commission campaigns.
  • Added support for customer match rate range with CreateOfflineUserDataJobRequest.enable_match_rate_range_preview. The customer match rate range is the efficacy of your Customer Match uploads, which is the number of matched user data rows divided by the total number of Customer Match uploaded rows.
  • Added UserAttribute.shopping_loyalty to allow for sending loyalty-related data with UserAttribute.
  • Added the following types of assets, which will be available in all accounts by the end of 2021
    • Price assets
    • Hotel Callout assets
    • Mobile App assets
    • Call assets
    • Call to action assets
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.

Sunset of the Ad Manager API v202011

On Tuesday, November 30, 2021, in accordance with the deprecation schedule, v202011 of the Ad Manager API will sunset. At that time, any requests made to this version will return errors.

If you’re still using v202011, now is the time to upgrade to a newer release and take advantage of additional functionality. For example, in v202102 we added support for AudioCreatives, and in v202105 we added support for pushing creative previews to linked devices.

When you’re ready to upgrade, check the full release notes to identify any breaking changes. Here are a few examples of changes that may impact your applications:

  • v202102
    • The AuthenticationError enum value NOT_WHITELISTED_FOR_API_ACCESS was changed to NETWORK_API_ACCESS_DISABLED.
    • The LineItem fields isPrioritizedPreferredDealsEnabled and adExchangeAuctionOpeningPriority were removed.
    • For video Line Items, the videoMaxDuration field is now required and must be greater than 0.
  • v202105
  • v202108
    • On the MobileApplication object, the singular field appStore was changed to the list field appStores.

As always, don't hesitate to reach out to us on the developer forum with any questions.

Ads API apps must complete OAuth verification

Last year, the OAuth scopes used by the following Ads APIs were classified as sensitive, requiring developers to complete the OAuth verification process for their Google Cloud projects:
  • Google Ads API & AdWords API
    • https://www.googleapis.com/auth/adwords
  • Content API for Shopping
    • https://www.googleapis.com/auth/content
  • DoubleClick Bid Manager API
    • https://www.googleapis.com/auth/doubleclickbidmanager
Any remaining OAuth clients using the above scopes that remain unverified may have their existing credentials revoked and lose access to the above APIs if they do not complete the OAuth verification process as soon as possible.

Certain apps may qualify for one of the exceptions for app verification. If your application meets any one of those exceptions, follow the steps listed for the appropriate use case. If not, you must complete OAuth verification to continue using these Ads APIs.

If you have any questions or need additional help, contact us using any of the following support options:

Google Ads scripts failures starting on October 13

There is an ongoing issue with Google Ads scripts that started around 7:30 AM EDT on October 13, 2021. If your existing script is affected, it will fail with a "Finished with errors" execution status or show "Failed" or "No changes" in the Results column. No context is being logged for the failed scripts. If your existing script is affected, it will fail to run while this issue is ongoing. We will keep this blog post updated with the latest information.

We have identified the issue and it will not affect any further scripts than those already affected at this time. We are working on restoring functionality for all scripts. Once we do, your scripts will return to running as scheduled.

This issue only affects existing scripts, so as a workaround while we work to resolve this issue, you can create a duplicate of your existing script. You can do this by copying and pasting the script contents into a new script.

If you have any questions, please leave a post on our forum.

Announcing the release of the Authorized Buyers Marketplace API

The Authorized Buyers Marketplace API has been released. You can use the Marketplace API to manage clients, users, and auction packages, and to negotiate proposals with publishers. This new API is intended to replace the following Marketplace resources included in the Ad Exchange Buyer II API:
Although the Ad Exchange Buyer II API is not deprecated at this time, we recommend that all Marketplace integrations adopt the new API to receive the latest updates going forward. New features will only appear in the Marketplace API.

The Marketplace API introduces the following features:
  • Programmatic support for auction packages.
  • Deals are now a sub-resource of proposals.
  • The finalizedDeals resource helps you manage deals.
  • The rtbMetrics field of finalizedDeals provides performance data.
Given that the Marketplace API is distinct from the existing Real-time Bidding and Ad Exchange Buyer II APIs, please note that you need to enable the Authorized Buyers Marketplace API in your Google Cloud Console project. Additionally, you need to update your existing OAuth 2.0 credentials and workflows to include a new API scope:

https://www.googleapis.com/auth/authorized-buyers-marketplace

For any questions or feedback about this API, please contact us via our support forums.

UserData Enforcement in Google Ads API

On January 10, 2022, the maximum number of user_identifers set in a UserData object will be reduced from 100,000 to 20. This is to clarify that each set should represent a single user.

The table below illustrates uploading UserData for two users (John Doe and Max Mustermann), each of whom has two email addresses.




Correct usage

operations: {
create: {
user_identifiers {
hashed_email: hash(“[email protected]”)
},
user_identifiers {
hashed_email: hash(“[email protected]”)
}
}
}
operations: {
create: {
user_identifiers {
hashed_email: hash(“[email protected]”)
},
user_identifiers {
hashed_email: hash(“[email protected]”)
}
}
}
Incorrect usage

operations: {
create: {
user_identifiers {
hashed_email: hash(“[email protected]”)
},
user_identifiers {
hashed_email: hash(“[email protected]”)
},
user_identifiers {
hashed_email: hash(“[email protected]”)
},
user_identifiers {
hashed_email: hash(“[email protected]”)
}
}
}

UserData is used for Customer Match and store sales uploads. In a given create/remove UserData operation, each set of user_identifiers should be for a single user.

Note that the same total amount of data can be sent in a single request, but each set of user_identifiers must represent a single person.

If the number of user_identifiers for a single set exceeds the new limit of 20, a TOO_MANY_USER_IDENTIFIERS error will be generated.

This will be applied to the two Google Ads API methods that provide UserData uploads:

If you have any questions or need additional help, contact us via the forum.

Final reminder to migrate to the AdMob API

On October 12, 2021, you will no longer be able to retrieve AdMob data from the AdSense Management API v1.4. To retrieve AdMob data programmatically, migrate to the AdMob API.

What do I need to do?

Follow the instructions in the migration guide to migrate your API workflow. Review these additional resources to support your migration:


Start migrating from the AdSense API to the AdMob API as soon as possible. If you don’t complete the migration by October 12th, 2021, you will lose access to AdMob data through the AdSense API, which may impact your ability to make data-driven business decisions.

Feel free to reach out to us via the AdMob API Developer forum if you have questions or feedback regarding the AdMob API.


Take the 2021 Google Publisher Tag developer survey

In 2020, we launched the first ever Google Publisher Tag (GPT) developer survey to learn more about our community and understand how we can improve the developer experience. Feedback from users like you directly inspired improvements to our sample offerings, release notes, and much more over the course of the past year.

As we look forward to a new year, it's time once again to check in with our developer community to see what's working well and what can be improved. Starting today, we're kicking off the 2021 GPT developer survey.



The survey should take no more than 10 minutes to complete, and it will be open through the end of October 2021. Most questions are optional and your answers are completely anonymous.

Remember that the feedback you provide influences what we work on over the course of the next year, so please let us know what matters most to you. Thanks in advance for taking the time to help improve the GPT developer experience!

Support for Responsive Video Ads in Scripts

Today we’re launching support for responsive video ads in Google Ads scripts. If you were using the TrueView for action campaign type, you must update your code to use the new video ad type. If you don’t update, your code will begin throwing errors starting approximately October 10, 2021. The old TrueView for action campaign type is being renamed to Video action campaign along with this change.

You can update your selectors with a new withCondition clause to separate Video action campaigns from other video campaign types in your code.

To get campaigns with the video action type:

AdsApp.videoCampaigns()
.withCondition("AdvertisingChannelSubType = VIDEO_ACTION")
.get();
Or to get video campaigns of other types, which are unaffected by this change:

AdsApp.videoCampaigns()
.withCondition("AdvertisingChannelSubType != VIDEO_ACTION")
.get();
Once you've identified that you're acting on a Video action campaign, create a new type of ad group that can house responsive video ads, and then construct a new type of ad at ad creation time. For other types of video campaigns, this new ad type isn’t available.

For creating the ad group, if you were using:

videoCampaign.newVideoAdGroupBuilder().withAdGroupType("VIDEO_TRUE_VIEW_IN_STREAM")
Then update that code to:

videoCampaign.newVideoAdGroupBuilder().withAdGroupType("VIDEO_RESPONSIVE")
For creating the ads themselves, if you were using:

adGroup.newVideoAd().inStreamAdBuilder()
Then update that code to:

adGroup.newVideoAd().responsiveVideoAdBuilder()
Check out the reference documentation for the new responsiveVideoAdBuilder for details on its fields and methods.

If you have any questions, please leave a post on our forum so that we can help.

Google Ads API, Google Ads scripts, and AdWords API issues on Oct 1

Between 2:50 am EDT and 6:40 am EDT on October 1, there was an outage that may have prevented some users from accessing the Google Ads API, Google Ads scripts, & the AdWords API. If you were using the Google Ads API or the AdWords API or running Google Ads scripts, then you may have experienced slowness or timeouts. Please check for any failed requests from these tools during the outage.

If you have any questions, please contact us via the forum.