Category Archives: Ads Developer Blog

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

AdFormat Change in AdWords API and Google Ads scripts Starting January 31, 2020

On January 31, 2020, the AdWords API and Google Ads scripts will start returning UNKNOWN for AdFormat in the Geo Performance Report. All other reports with AdFormat will not be affected. The Google Ads API is not affected as the field does not exist.

Please update your code where it uses these fields:
AdWords API Google Ads API Google Ads scripts

If you have any questions while updating your code, please reach out to us on our Google Ads API and AdWords API forum or our Google Ads scripts forum.

Conversion reporting issues for November 11 through November 20

Update: We have edited this post to add more details about the reporting bug and list affected fields in the AdWords API and Google Ads API beta.

On Nov 20 at approximately 9pm PST, a bug caused Google Ads Search and Shopping conversions occurring between Nov 11 12:01 AM PST and Nov 20 11:59 PM PST to be overreported for advertisers using non-last click attribution models. This bug impacts reports in all Google Ads interfaces, including any report data downloaded via the AdWords API, Google Ads API and Google Ads Scripts. Google Ads bid strategies are not impacted by this issue.

The following reporting fields are affected in the AdWords API and Google Ads API beta. Google Ads scripts that reference the AdWords API fields below and any derivative custom columns based upon these metrics may also be affected.

AdWords API Google Ads API beta

We are actively working on fixing the bug and correcting the conversion data.

We appreciate your patience as we work to resolve this issue as quickly as possible.

Announcing v1.1 of the DoubleClick Bid Manager API

We are pleased to announce the release of version 1.1 of the DoubleClick Bid Manager API. The full v1.1 API documentation can be found here.

Major changes

This release contains two major changes that affect the API methods queries.createquery, queries.getquery, queries.listqueries, and reports.listreports. All other API methods remain unchanged.

One-to-one API filters to report column mappings

In v1, some report columns were not mapped to any API filters and could only be included indirectly by adding related API filters in createquery. For example, in v1, report column “Advertiser Integration Code” could only be accessed by including API filter FILTER_ADVERTISER in calls to createquery

Starting with v1.1, a new API filter FILTER_ADVERTISER_INTEGRATION_CODE maps to report column “Advertiser Integration Code”, and it is no longer automatically included when using FILTER_ADVERTISER. Instead, this new filter needs to be added to the report explicitly.
Refer to the v1.1 API filter documentation for a full list of the new API filters.

Pagination support 

In v1, listqueries and listreports attempted to retrieve all Queries and Reports and would time out if there were too many resources to return. Starting with v1.1, responses from these two methods are paginated, making all resources retrievable.

Refer to the v1.1 API release notes for more details.

- DBM API Team

September 2019 Ad Manager Developer Workshop Materials

Thanks to everyone who was able to make it to the September 2019 Ad Manager Developer Workshop in London!

If you are interested in the content we covered, you can now access the presentation materials from the workshop talks. We have also posted videos of the talks on our Ads Developers YouTube channel.

As always, if you have general API questions or comments, please reach out to us on the Ad Manager API forums.

Introducing adaptive anchor banners

In today’s mobile-first world, app publishers who use banner ads must serve them across a greater variety of screen sizes and layouts than ever before. Existing responsive banner ad formats often produce ads that are too small and not optimally tailored to the specifications of each device.

To address this, we’ve created a new banner type called adaptive anchor banners. These banners dynamically adjust creative size to deliver an ad that is ideally sized across all of your user’s devices, without the need to write any custom code.

These banners are designed to replace standard 320x50 and leaderboard banner sizes, as well as smart banners. Here is a comparison of the 3 formats on a standard mobile device:

Standard banner vs. smart banner vs. AdMob’s adaptive anchor banner

Migrating your banner implementation to adaptive

Here are a few simple steps to update your banner implementation to use adaptive banners:

  1. Ensure your UI supports a variable height banner. Depending on what constraints or layout mechanism you are using to position your banner, you may need to remove height constraints such that the layout accepts variable content size.
    • For Android this can be done using WRAP_CONTENT.
    • For iOS constrain your banner in terms of X and Y positions, you may also give it a width constraint, but ensure any height constraint or content size is placeholder only.

    Note that the max height is 15% of the device height or 90px, whichever is smaller.

  2. Use the adaptive banner ad size APIs to get an adaptive ad size. The adaptive ad size APIs are available for different orientations.

    AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, width)
    AdSize.getPortraitAnchoredAdaptiveBannerAdSize(context, width)
    AdSize.getLandscapeAnchoredAdaptiveBannerAdSize(context, width)



    Which one you use depends on your use case. If you want to preload ads for a given orientation, use the API for that orientation. If you only need a banner for the current orientation of the device, use the current orientation API.

    Once you have an ad size, set that on your banner view as usual before loading an ad. The banner will resize to the adaptive ad size as long as you have laid it out without any conflicting constraints.

  3. Update your mediation adapters. If you use mediation, update your mediation adapters to the latest version. All open source mediation adapters that support banners have been updated to support the adaptive banner ad size requests. Note that adapters will still only return ad sizes supported by their corresponding ad network SDK, and those ads will be centered in your adaptive banner view.

Review our developer resources

For further information including detailed implementation guidance, review our developer resources:

As always, please reach out on our developer forum if you have any questions.

Announcing v201911 of the Google Ad Manager API

We're happy to announce that v201911 of the Google Ad Manager API is available starting today. This version brings new reporting and video features, unlocking new possibilities for automation in your Ad Manager network.

  • We’re improving our reporting error messages so that you can better understand what went wrong in a number of situations, including when a report has an invalid date range.
  • You can now break down reports by CMS Metadata, which was added as a targeting option in v201902 of the Ad Manager API.
  • On video line items, you can now read and write customVastExtension, which provides access to XML extensions that are part of the VAST specification (both v3 and v4).
  • For further configurability of Dynamic Ad Insertion, you can now set the mediaPlaylistOriginForwardingType and mediaPlaylistOriginPathPrefix fields on CdnConfigurations.

If you’re on an older version of the Ad Manager API, now is a great time to upgrade to take advantage of these and other recent features like the TargetingPresetService, which was added in v201905. The release notes contain the full list of API changes for v201911 and all other active API versions.

Feel free to reach out to us on the Ad Manager API forum with any API-related questions.

Sunset of the Ad Manager API v201811

On Monday, December 2, 2019, in accordance with the deprecation schedule, v201811 of the Ad Manager API will be sunset. At that time, any requests made to this version will return errors.

If you’re still using this version, now is the time to upgrade to the latest release and take advantage of new features like the TargetingPresetService and reporting on CustomTargetingKeys.

When you’re ready to upgrade, check the release notes to identify any breaking changes. Then, grab the latest version of your client library and update your code.

We now provide a machine-readable version of our deprecation schedule, giving you more flexibility to stay up to date with the latest Ad Manager API features. You can access this CSV file at

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

Video and Channel IDs Change in AdWords API, Google Ads API, and Google Ads Scripts Starting November 15, 2019

On November 15, 2019, AdWords API, Google Ads API, and Google Ads scripts will start returning null ID criteria for YouTube channels and videos that have been deleted, due to changes in our data retention policy. The criteria itself remains for a given ad group, but referencing the video ID or channel ID for that criteria will return null.
  • In the AdWords API v201809, null values are returned as two dashes (--) in reporting.
  • In the Google Ads API, NULL values are returned as NULL values.
  • In Google Ads Scripts, null values are returned as null JavaScript values.
Please update your code where it uses these fields:
AdWords API Google Ads API Google Ads Scripts
YouTubeVideo.videoId YouTubeVideoInfo.video_id YouTubeVideo.getVideoId()
YouTubeChannel.channelId YouTubeChannelInfo.channel_id VideoYouTubeVideo.getVideoId()
Criteria in CAMPAIGN_CRITERIA_REPORT Media.getYouTubeVideoId()

If you have any questions while updating your code, please reach out to us on our forum.

Python 2 Deprecation in Google Ads API Client Library

On June 11, 2019 we deprecated support for Python 2 in the AdWords/Google Ad Manager client library for Python. As part of our previously announced plans, in mid-November 2019 we will be deprecating support in the Google Ads client library for Python as well.

When version 4.0.0 of the Google Ads client library for Python is released, we will officially end support for Python 2 and versions of Python 3 prior to 3.6.0.

If you use the Google Ads client library for Python, please take note of the following:
  • If you are already using Python version 3.6.0 or later, you can upgrade to Google Ads client library 4.0.0 and no other action is needed. If not, please do not upgrade to version 4.0.0 until you’ve upgraded to Python version 3.6.0 or later.
  • Version 4.0.0 will continue to support previous API versions such as v1_3 but we won't support client library issues related to Python 2 compatibility. For example, we won't release version 4.0.1 to fix a bug that only exists for Python 2 users.

If you have questions about the Python 3 migration, please submit an issue on the Google Ads client library repository’s Issues page, and for general API support please reach out to us on the Google Ads API forum.

Upcoming sunset of accelerated budget delivery

This is a reminder that, starting October 14, 2019, accelerated budget delivery will no longer be generally available in AdWords API, Google Ads API, and Google Ads scripts for use with shared budgets, search campaigns, and shopping campaigns.

We encourage all developers to review our announcement of the sunset, which has been recently updated to include the most up-to-date information on expected error codes that could be returned after this change goes into effect.

Please don’t hesitate to contact us via the AdWords API and Google Ads API Forum or the Google Ads scripts forum if you have any questions.

Adam Ohren, Google Ads API Team