[go: up one dir, main page]

On June 30, 2025 we announced that we would roll out a change that would cause our bidding models to start using the presence of the ClickConversion.conversion_environment field in imported in-app conversions for campaign performance.

That change, which may have caused performance degradation in certain campaigns where this is not set, will no longer be implemented. However we still recommend that users who import conversions using the Google Ads API set the conversion_environment field in order to gain the following benefits:

  • Accurate cross-environment attribution: Understand the full value of your campaigns across website and app sources.
  • Ad destination reporting: Gain insights into where the user lands after clicking your ad, and the relative performance of each segment.
  • Streamlined Google support: Receive faster and more effective troubleshooting.

For more details see this Help Center article.

If you have any questions or need help, see the Google Ads API support page for options.

We're thrilled to announce the open source release of the Google Ads API Model Context Protocol (MCP) Server, available here. This project marks a significant step in democratizing access to Google Ads data for the next generation of AI tools and agent developers.

The Model Context Protocol (MCP) is the open standard that allows Large Language Models (LLMs), like Google Gemini, to connect with and act upon external data sources and applications. By releasing an MCP Server specifically for the Google Ads API, we are making it possible for any MCP-compatible AI application to understand and analyze advertising campaigns through natural language.

This initial release is read-only, meaning it can be used for reporting and diagnostics but will not make changes to your account.

Please use the GitHub repo for technical issues with the MCP server.

For technical support issues with the API, reach out to the Google Ads API support channel.

If you have other questions or want to discuss this post, please reach out to us on our “Google Advertising and Measurement Community” Discord server.

When we released V21 of the Google Ads API, we released a field with the wrong name in the BudgetPerDayMinimumErrorDetails message: the field minimum_budget_amount_micros was mistakenly released as minimum_bugdet_amount_micros, with the word “budget” misspelled.

We already corrected the error in V22 of the API; however, we are also retroactively correcting it in V21 starting from October 15th, 2025 (the same day of the V22 release).

What do I need to do?

If you are using one of our officially supported client libraries, they will keep working seamlessly when we release the field rename.

However, when you upgrade to the latest version of your client library, you will have to modify your existing code that accesses this field to comply with the field rename, even if you are still using V21.

If you are using the Google Ads API with the REST transport layer, make sure your code is handling the minimum_budget_amount_micros field by its correct name instead of the mistakenly released one.

If you have any questions or want to discuss this post, please reach out to us on our “Google Advertising and Measurement Community” Discord server.

Today, we’re announcing you can start adding Google Mobile Ads mediation adapters to your iOS projects using Swift Package Manager (SPM).

Swift Package Manager is Apple's first-party tool for managing project dependencies. By supporting SPM, we're making it easier for you to integrate and manage our mediation adapters, helping you streamline your development workflow and reduce setup complexity.

Which adapters are supported?

We're planning to roll out SPM support for all open source and versioned adapters. Each adapter will be in its own dedicated GitHub repository.

Adapters currently available:

Ad source Minimum version supported in SPM
AppLovin 13.3.1.0
DT Exchange 8.3.8.0
IronSource 8.10.0.0
Liftoff Monetize 7.5.3.0
i-mobile 2.3.4.2
inMobi 10.8.6.0
Meta 6.20.1.0
Mintegral 7.7.9.0
Pangle 7.4.1.1.0
Unity 4.16.0.0

Add a Swift Package to your project

To add a package dependency to your Xcode project, navigate to File > Add Package Dependencies… and search for the package using each adapter's corresponding GitHub URL:

Adapters coming soon

We're continuing to roll out Swift Package Manager support for more mediation adapters. Check the list of currently supported adapters by visiting our GitHub page.

If you have any questions or want to discuss this post, please reach out to us on our “Google Advertising and Measurement Community” Discord server.

Starting on November 17 2025, we are changing the account-default behavior of automatically created customer conversion goals.

Current behavior

Currently, when you create a new conversion action using the Google Ads API, customer conversion goals are created automatically, as needed. These newly created goals are automatically set as account-default, meaning this goal will automatically be biddable in any campaign that is optimizing to account-default goals. While convenient, this sometimes leads to bidding mechanisms targeting unnecessary goals, potentially resulting in suboptimal campaign performance. This change aims to optimize bidding performance by reducing the number of unnecessary goals included in the account-default set for a given account.

What’s changing?

With this change, a new automatically created goal will only be set as account-default if all other goals within the same category are also account-default goals. For example, if an account has an existing, non-account-default customer conversion goal associated with a conversion action with the category PURCHASE and a conversion origin of WEBSITE, then any new conversion actions with the category PURCHASE will result in goals that are also not account-default.

This approach helps us better infer user intent, and it ensures that the account-default set remains lean and effective.

Technical recommendation

After this change is introduced, newly created account goals will not be considered account-default automatically. If you want to set an account goal to account-default manually, set the CustomerConversionGoal.biddable field to true.

This update will enhance the efficiency and effectiveness of goal management within Google Ads. We encourage you to review your applications and client workflows in light of this upcoming change.

For any questions or concerns, feel free to refer to our support page. You can also discuss this post in our “Google Advertising and Measurement Community” Discord server.

Today in the Google Ads UI, you will see updated enhanced conversions for leads diagnostics that feature a number of improvements that offer better visibility into the state of your conversion import implementation. The goal of these changes is to help you identify common problems and address them quickly.

Here are some of the changes you’ll see:

  1. New "Importing limited user-provided data" Alert: A new, high-priority alert has been introduced to detect a common implementation error, where users fail to import incremental conversions that contain user-provided data (UPD) but not a GCLID. We recommend that you import all of your conversion data that has user-provided data, regardless of whether or not it has a GCLID. Doing so helps to find cross-device or Youtube EVC conversion touchpoints, driving performance uplift. You may not see these benefits if you omit UPD-only conversions.
  2. Improved Status for "Tagless" Implementations: A new "Good" status has been added to validate setups where advertisers import conversions with both a GCLID and user-provided data, but do not have the Google tag implemented on their website. Previously, this valid configuration could trigger confusing "Urgent" alerts. If you have not implemented the Google tag on your website, it’s important to include GCLIDs in your conversion imports whenever possible in order to get performance benefits.
  3. Reprioritized Alert Logic: Alert priorities have been updated to be more intelligent. For users sending GCLIDs with their offline data, import-related issues will be prioritized as more critical, while tag-related issues will be downgraded in severity.
  4. Complete Alert Visibility: The diagnostics interface has been updated to show all alerts at once, regardless of their severity tier. This allows developers to see a complete picture of all required and recommended actions upfront, rather than fixing one issue only to uncover another.
  5. Deprecation of CLICK_NOT_FOUND: The informational CLICK_NOT_FOUND error has been removed from the Diagnostics UI and API, and, correspondingly, the debug_mode parameter in the UploadClickConversions method that triggers it in API responses has also been removed. See this related blog post for reference.

Reach out to the Google Ads API support channel if you have any questions or need support. If you want to discuss this change with us, join our “Google Advertising and Measurement Community” Discord server.

We’re excited to announce a refresh of the Google Ads scripts documentation! Like the Google Ads API documentation changes announced in a previous blog post, we have focused on making the Google Ads scripts documentation more intuitive and useful. Here’s a sneak peek at what’s new:

1. Logically grouped guides

We’ve reorganized our guides into clear categories. Whether you're a beginner starting out with core concepts or an expert exploring all the different campaign types supported by scripts, you'll find what you need faster. These changes will help you write scripts more efficiently by smoothly navigating between related topics, building on previous guides and highlighting unique scripts features.

2. Dedicated reference tab

You now have a dedicated reference tab to quickly explore all the scripts objects available to you. This creates a direct path to the resources you need and aligns our documentation more closely with the Google Ads API documentation, providing a more seamless experience across our products.

3. Combined solutions and examples

We've merged the solutions and examples tabs into a single, comprehensive resource. Now you can find all our sample code in one place. This is a great launchpad for discovering what’s possible with scripts and for modifying examples to create your own powerful solutions.

We have more exciting updates on the way, and we'll be incorporating more of the fantastic feedback from our Google Ads scripts community. If you have any questions, suggestions, or want to discuss this post, please reach out to us on our “Google Advertising and Measurement Community” Discord server, where we have a dedicated #ads-scripts channel.

We are excited to announce the release of the google-ads-bom for the Google Ads API client library for Java, now available with v40.0.0 of the google-ads client library. This new Bill of Materials (BOM) is designed to significantly simplify your dependency management and enhance the stability of your Google Ads API integrations.

What is a BOM?

A BOM is a build-time tool that provides a centralized, authoritative "rulebook" for managing dependency versions. By importing our BOM, you ensure your project uses the exact set of compatible dependency versions that the Google Ads client was built and tested against. This significantly helps avoid dependency conflicts with libraries like Guava and GAX, which are also used by many other frameworks.

How to incorporate the google-ads-bom into your code

To leverage the benefits of the google-ads-bom, import it into the section of your build file (e.g., pom.xml for Maven or build.gradle for Gradle). You should then omit the version specification from the google-ads dependency in the section.

How to include the BOM in your Maven project:

<!-- Import the Bill of Materials (BOM) -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.api-ads</groupId>
            <artifactId>google-ads-bom</artifactId>
            <version>40.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<!-- Add the google-ads dependency without a version -->
<dependencies>
    <dependency>
        <groupId>com.google.api-ads</groupId>
        <artifactId>google-ads</artifactId>
    </dependency>
</dependencies>

How to include the BOM in your Gradle project:

// Import the Bill of Materials (BOM).
implementation platform('com.google.api-ads:google-ads-bom:40.0.0')

// Add the google-ads dependency, without a version. The version is managed by the BOM.
implementation 'com.google.api-ads:google-ads'

Declaring dependencies covered by the google-ads-bom

The BOM automatically manages the versions for several common libraries–such as Guava, Protobuf, GAX, and gRPC–to make them compatible. To avoid potential dependency conflicts, you should not specify a version when declaring these dependencies. For example, if you are using Guava, you would declare it without a version:

In Maven:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
</dependency>

Or in Gradle:

implementation 'com.google.guava:guava' // NO VERSION SPECIFIED.

To retrieve a list of constrained dependencies that can be imported using the BOM without a declared version, use the listAllDependencyConstraints gradle task.

To learn more about this new google-ads-bom offering and how to configure your Java client, check out our getting started guide.

Today we’re announcing the general availability of Structured Data Files v9.1. All users can now use SDF v9.1 to upload and download SDFs in the Display & Video 360 UI.

SDF v9.1 makes a number of small changes to files supporting Insertion Order, Line Item, and Ad Group resources:

  • Added the ability to configure whether certain targeting is set at the Line Item or Ad Group resource-level for Demand Gen Line Items.
  • Added a Combined Audience Targeting column to Ad Group files.
  • Made the Io Objective column required in Insertion Order files.
  • Updated the options available in the Bid Strategy Unit and TrueView Video Ad Formats columns in Line Item files.
  • Removed the Bid Multipliers column from Line Item files and the Measure DAR and Measure DAR Channel columns from Insertion Order files.

Full details on the changes between v9 and v9.1 can be found in the Structured Data Files release notes.

SDF v7 is deprecated and scheduled for sunset on November 4, 2025. SDF v7.1, v8, and v8.1 are deprecated and scheduled for sunset on March 3, 2026. If you are still using a deprecated SDF version, follow the instructions in our v9 migration guide to update your integration to use v9 or greater.

If you run into issues or need help with this new version, please follow the instructions in our support guide, or contact us using our contact form.

We’ve heard your requests for faster API access to Ads features available in the Google Ads UI. We will accelerate our launch timeline to have Google Ads API monthly releases, except for during the end of year holiday period.

We will increase the number of major releases from 3 per year to 4 per year. The remaining releases will be minor releases, only adding incremental new non-breaking features. We have also adjusted the sunset schedules to avoid extra version migrations that will burden the API developers. Each major release will now be available for one year after the release.

Release schedule for 2026

With the new timeline, the tentative release schedule for 2026 will be as shown in the following table. Please keep in mind that these dates are only estimates and may be adjusted going forward. Additionally, releases may be added, removed, or switched between major and minor versions.

Version Planned Release Type* Projected launch* Projected sunset*
V23 Major January 2026 February 2027
V23_1 Minor February 2026 February 2027
V23_2 Minor March 25, 2026 February 2027
V24 Major April 2026 May 2027
V24_1 Minor May 2026 May 2027
V24_2 Minor June 2026 May 2027
V25 Major July 2026 August 2027
V25_1 Minor August 2026 August 2027
V25_2 Minor September 2026 August 2027
V26 Major October 2026 November 2027
V26_1 ** Minor November 2026 November 2027

* Estimated and subject to change.

** This is designated as an optional release due to overlap with the holiday season.

Sunset schedule for 2026

The following is the tentative sunset schedule for 2026. As with releases, these dates are only estimates and may be adjusted going forward.

Version Projected sunset*
V19 February 2026
V20 June 2026
V21 August 2026
V22 October 2026

* Estimated and subject to change.

How to get help

As always, you can find the details of individual releases at the following pages.

If you have any questions or want to discuss this post, please reach out to us on our “Google Advertising and Measurement Community” Discord server.

What’s changing?

As announced last year, Google will stop serving political advertising in the European Union ahead of new regulation in October 2025. Today, we’re releasing updates to the Campaign Manager 360 API v4 to support this change. We’re also announcing the release of v5.

For details on the changes related to euPoliticalAdsDeclaration, continue reading this post. For details on all other changes, and the v5 release, see the release notes.

v4 Deprecation and sunset reminder

In accordance with our deprecation schedule, the v5 release marks the beginning of the deprecation period for v4, which will sunset on Feb 26, 2026. After this date, any requests made against v4 will begin returning errors.

See the migration guide for details. In most cases, you will just need to upgrade to the latest version of your preferred client library. We recommend that you review the release notes to learn about important changes you might need to be aware of.

If you have questions about this or anything else Campaign Manager 360 API related, feel free to reach out to us on our support forum.

Background

Campaign Manager 360 will require self-declaration for EU political ads. You must declare whether or not a campaign contains EU political ads when creating it.

You can also make this declaration for the advertiser as a whole. This declaration will state whether any campaigns under the advertiser will contain EU political ads. We recommend that you make the declaration at the advertiser level using the Campaign Manager 360 API or under the advertiser Properties settings in the Campaign Manager 360 UI.

Campaign Manager 360 API v4 and v5 will support the ability to declare whether a campaign contains EU political ads.

Campaign Manager 360 API

Campaign Manager 360 will start requiring declarations for new campaigns and for existing campaigns when adding a new placement, ad, or creative.

Campaign Manager 360 API v5 will require the field euPoliticalAdsDeclaration for new campaign resources and for existing campaign resources when adding a new placement, ad, or creative.

The field euPoliticalAdsDeclaration will be added to the following API objects in v4 and v5 to surface self-declaration at different resource levels:

  • Campaign objects for getting and setting the declaration at the campaign level.
  • Advertiser for getting and setting the declaration at the advertiser level.

The following table lists the values that can be set for this field on Advertiser resources.

Value
ADVERTISER_PLANS_TO_SERVE_EU_POLITICAL_ADS
ADVERTISER_DOES_NOT_PLAN_TO_SERVE_EU_POLITICAL_ADS

The following table lists the values that can be set for this field on Campaign resources.

Value
CONTAINS_EU_POLITICAL_ADS
DOES_NOT_CONTAIN_EU_POLITICAL_ADS

If you set the euPoliticalAdsDeclaration field to ADVERTISER_DOES_NOT_PLAN_TO_SERVE_EU_POLITICAL_ADS for the parent advertiser, the field will be backfilled for existing campaigns to match and new campaigns will use that value if another is not set at creation.

What do I need to do?

We recommend that you make the declaration at the advertiser level. You can do this either by setting the euPoliticalAdsDeclaration field using the API when calling the advertisers.insert, advertisers.patch or advertisers.update methods, or in the Campaign Manager 360 UI under the advertiser Properties setting.

If you can’t declare at the advertiser level or have declared that EU political ads may be served under your advertiser, you will need to provide declarations at the campaign level by updating your use of the following API methods:

How will this affect my campaign serving?

Refer to the Campaign Manager 360 Help center article to learn more about how this declaration affects your ad serving.

Learn More

As with every new version of the Campaign Manager 360 API, we encourage you to carefully review all changes in the release notes. For those of you looking to get going right away, updated client libraries are now available. If you're just starting out, the Get Started guide is a great reference to help you get up and running quickly.

Give it a try and let us know if you have any questions!

What’s changing?

As announced last year, Google will stop serving political advertising in the European Union (EU) ahead of new regulation in October 2025. Starting September 8, 2025, the Display & Video 360 API and Structured Data Files (SDFs) will roll out enforcements related to this change. If you use either of these products to create or manage line items, you may need to update your application to handle these enforcements before September 8, 2025 to avoid an interruption of service.

Background

Starting September 8, 2025, Display & Video 360 will require self-declaration for EU political ads. You must declare whether a line item will serve EU political ads when creating it.

You can also make this declaration for the advertiser as a whole. This declaration will state whether any line items under the advertiser will serve EU political ads. Make the declaration at the advertiser level using the Display & Video 360 API or under the advertiser Basic details settings in the Display & Video 360 UI once it launches after September 8. If you declare that your advertiser won’t serve EU political ads, new line items under that advertiser will use that declaration if another isn’t provided, avoiding an interruption of service.

Display & Video 360 API and Structured Data Files have added support for declaring whether a line item serves EU political ads. Similar support for self-declaration will launch in the Display & Video 360 UI starting September 8, 2025.

Display & Video 360 API

In the Display & Video 360 API, the field containsEuPoliticalAds has been added to the following API objects in v3 and v4 to surface self-declaration at different resource levels:

  • LineItem objects for getting and setting the declaration at the line item level.
  • Advertiser for getting and setting the declaration at the advertiser level.

The possible settable values for the field are shown in the table below, with a meaning relevant to the resource to which it is assigned.

Value
Meaning
CONTAINS_EU_POLITICAL_ADVERTISING The resource will be used to serve EU political ads.
DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING The resource will not be used to serve EU political ads.

Starting September 8, 2025, Display & Video 360 API will start requiring that the containsEuPoliticalAds field is set for new line item resources or for existing line item resources when updating geography targeting of existing line items.

What do I need to do?

Every new line item created will need a valid declaration using the field containsEuPoliticalAds.

Set the containsEuPoliticalAds field in the Advertiser object using the advertisers.patch method, or set the declaration under the advertiser Basic details settings in the Display & Video 360 UI once it is available. If you set the containsEuPoliticalAds field to DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING for the parent advertiser, new line items will use that value unless another value is set at creation, and the field will be backfilled for existing line items within a day. This field can then be updated using either the UI, API, or Structured Data Files.

If your advertiser is not serving EU political ads, declaring at the advertiser level will be a sufficient action to avoid errors. If you can’t declare at the advertiser level or have declared that EU political ads may be served under your advertiser, you must update your use of the following API methods:

Structured Data Files

In Structured Data Files, we have launched v9, which adds the column Contains EU Political Ads to the line item file. This allows for the retrieval and setting of EU political ads declaration at the line item level. This column uses the values YES and NO to represent the line item declaration.

With this launch, we are also deprecating SDF v7.1, v8, and v8.1 and recommend that you migrate to v9 your earliest convenience. We will support these versions until we sunset them in March 2026.

Starting September 8, 2025, Display & Video 360 will start requiring you to use v9 to upload Structured Data Files and set the Contains EU Political Ads column to YES or NO for new SDF line item entries. If your advertiser has declared that it will not serve EU political ads, you can continue to use previous versions to upload SDFs.

What do I need to do?

Every new line item created will need a valid declaration using the column Contains EU Political Ads.

Set the containsEuPoliticalAds field in the advertiser using the Display & Video 360 API advertisers.patch method, or set the declaration under the advertiser Basic details settings in the Display & Video 360 UI once it is available. If you declare that the advertiser will not serve EU political ads, new line items will use the NO value for the Contains EU Political Ads column unless another value is set at creation, and the field will be backfilled for existing line items within a day. This enables you to use v7, v7.1, v8, or v8.1 for SDF upload. After line item creation, this field can be updated using the UI, API, or Structured Data Files.

If you can’t declare at the advertiser level or have declared that EU political ads may be served under your advertiser, do the following before September 8, 2025:

  • Migrate to using SDF v9. See our migration guide for instructions.
  • Set the Contains EU Political Ads column to YES or NO in line item entries on SDF upload when:
    • Creating new line items.
    • Updating any of the following columns of the existing line item:
      • Geography Targeting - Include
      • Geography Targeting - Exclude
      • Geography Regional Location List Targeting - Include
      • Geography Regional Location List Targeting - Exclude
      • Proximity Targeting
      • Proximity Location List Targeting
    • Creating new ad groups with set Geography Targeting columns under the existing line item.
    • Updating the Geography Targeting columns of ad groups under the existing line item.

Also, if you use Structured Data Files at all, make sure to migrate to v9 before all previous versions are sunset in March 2026.

How do I get help?

Reach out to the Display & Video 360 API support channels if you have more questions about this change.

In today's data-driven world, the performance of your ad campaigns increasingly depends on the richness of the conversion data you import. When it comes to machine learning, the more signals you provide, the better the models can understand user behavior, predict outcomes, and deliver value. For conversion imports specifically, richer data can mean increased observed conversions, and better modelled conversions.

For this reason it’s important to make sure that your application is set up to gather, and import, as much conversion data as possible to the Google Ads API. To do that, you may need to make improvements to your existing conversion import pipeline.

Why upgrade?

We recommend that you upgrade your conversion import pipeline by gathering and importing more than just GCLIDs.

  • Durability:
    • Improve conversion attribution, especially when GCLIDs are missing, by incorporating new data points.
    • Adapt to evolving privacy regulations and the deprecation of traditional tracking identifiers.
  • Better modeling:
    • Provide more data to Google's AI for better campaign optimization.
    • Get a more complete picture of user behavior and improve model reliability.

Steps to upgrade your conversion import pipeline

  • Update your Google Ads API version:
  • Include user-provided data:
    • Include hashed user-provided data (email, phone number), when available, to unlock cross-device and engaged-view conversions. See our documentation on sending user-provided data.
    • Important: Set up your application to import all conversions, even if they only have user-provided data and don’t have a GCLID.
  • Send additional signals:
    • Capture and import session attributes by using our JavaScript helper function to generate an encoded token (setting session_attributes_encoded), or by capturing the sub-fields individually as key-value pairs (setting session_attributes_key_value_pairs). We recommend using the JavaScript helper function to provide an encoded token; use of key-value pairs is available for users who cannot generate an encoded token in the browser. User's IP address is also available as a new field, though reporting and bidding benefits will become available in the future.
    • Make sure you provide users with clear and comprehensive information about the data you collect on your sites, apps, and other properties and get consent where required by law or any applicable Google policies.
  • Adopt Braid (gbraid & wbraid):
    • Capture and import these URL parameters for privacy-safe conversion reporting when GCLID and user-provided data are unavailable.
    • Note: We recently announced that gclid and gbraid can be imported together for a single conversion starting on Oct. 3, 2025.
  • Implement order ID:
    • Set the order_id field with a unique identifier. This helps reference conversions when adjustments or retractions are needed.
  • Provide conversion environment:
    • Set the conversion_environment field to specify whether the conversion source is APP or WEB.
    • Note: We recently announced that conversion environment data will start informing bidding models for in-app conversions in late September.
  • Consent and data sharing responsibilities:
    • Advertisers are responsible for ensuring they have the right to share all data uploaded to Google. Make sure you set the consent field on all imported conversions.

Reach out to the Google Ads API support channel if you have any questions.

We're thrilled to announce significant improvements to the Google Ads API documentation, designed to make your development experience smoother, faster, and more intuitive. These changes are a direct result of valuable feedback from our incredible API developer community.

Our goal was simple: enhance discoverability and reduce the need to jump between pages, so you can spend less time searching and more time building. Let's dive into what's new:

1. Easier campaign type discovery and implementation

One of the most requested features was clearer guidance on supported campaign types. You can now more easily identify which campaign types the API supports and, crucially, find all the resources you need to implement them directly within the documentation. This streamlines your workflow from discovery to deployment.

2. Unified reporting and reference documentation

We've merged our Reporting and Reference documentation into a single location. This means all your essential references are now together, providing a more comprehensive and less fragmented experience when you're working with data and API specifics.

3. Seamless gRPC and REST integration

For those who switch between gRPC and REST, we've introduced a highly anticipated feature: a one-button toggle!

This lets you effortlessly switch between the two protocols on the same page. If you haven't yet, we highly recommend trying out our Try-it feature directly from the developer site. With gRPC and REST now co-located, accessing Try-it is more efficient than ever, making it perfect for quickly testing new features and requests.

4. Reorganized and clustered guides

All your familiar guides are still there, but we've given them a thoughtful re-ordering. Guides with similar features are now clustered together, creating a more logical flow and helping you navigate to related topics more quickly. This thoughtful reorganization aims to reduce friction and enhance your learning.

We want your feedback!

These changes are just the beginning, and your feedback is crucial as we continue to refine and improve. If you have any thoughts on these updates, or suggestions for future enhancements, please click the Send Feedback button at the bottom of any page in the documentation.

This direct line lets you provide valuable input that will help shape the future of the Google Ads API documentation.

We're incredibly excited about these updates and believe they will significantly enhance your experience with the Google Ads API. Happy coding!


What’s changing?

As announced last year, Google will stop serving political advertising in the European Union ahead of a new regulation taking effect in October 2025. On September 3, 2025, the Google Ads API and Google Ads scripts will roll out enforcements related to this change. If you use either of these products to create or manage campaigns, you may need to update your application to handle these enforcements before September 3, 2025.

API support for self-declaration of EU political ads

Google Ads API and Google Ads scripts have added support for self-declaration as to whether a campaign has EU political ads. Learn how an EU political ad is defined here. Versions v19.2, v20.1, and v21 of the API contain a new field named contains_eu_political_advertising in the Campaign object. The possible values and their meaning are shown in the table below.

Value Meaning
CONTAINS_EU_POLITICAL_ADVERTISING The campaign has EU political ads.
DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING The campaign does not have EU political ads.
UNSPECIFIED The campaign is missing self-declaration about EU political ads.

You can retrieve the self-declaration status of a campaign in Google Ads API by running the following query using either the Search or SearchStream methods of the GoogleAdsService. For Google Ads Scripts, use the AdsApp.search or AdsApp.report methods.

select campaign.id, campaign.contains_eu_political_advertising from campaign

If you use the Google Ads API client libraries, you may need to download the latest library version to use this functionality in versions v19 and v20 of the API.

API validation & enforcement changes

On September 3, 2025, Google Ads API and Google Ads scripts will start enforcing the following checks in versions v19 and v20 of the API.

These checks are already enforced in version v21 of the Google Ads API.

How will this affect my campaign serving?

Any campaign that has declared EU political ads by setting contains_eu_political_advertising to true will stop serving ads in the EU on September 22, 2025. Refer to our Help Center to learn more.

Existing campaigns without a declaration will remain unaffected for now. We recommend updating the existing campaigns in your accounts with an appropriate declaration as soon as possible. You can retrieve campaigns without a declaration using the following GAQL query using either the Search or SearchStream methods of the GoogleAdsService.

select campaign.id, campaign.contains_eu_political_advertising
  from
    campaign
  where 
    campaign.contains_eu_political_advertising NOT IN
    (
       'CONTAINS_EU_POLITICAL_ADVERTISING',
       'DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING'
    )

What do I need to do?

If your application uses either Google Ads API or Google Ads scripts to create or manage campaigns, make sure to update your application to handle these enforcements before September 3, 2025.

How do I get help?

Reach out to the Google Ads API support or Google Ads scripts support channels if you have more questions about this change.

Today, we’re announcing the v21 release of the Google Ads API. To use some of the v21 features, you must upgrade your client libraries and client code. All the updated client libraries and code examples have been published.

As previously announced, we are also releasing minor versions v20.1 and v19.2 of the Google Ads API.


Here are some of the key features in this release:

  • We have added a new field named contains_eu_political_advertising for the Campaign object. Use this field to self-declare whether your campaign contains political advertising content targeted towards the European Union. If this field is set to true, the campaign will no longer serve in the EU starting September 23, 2025. This feature is also released in versions v20_1 and v19_2 of the API so you can start using this feature immediately without upgrading to the latest version of the API. See our blog post to learn more.
  • A new view campaign_search_term_view aggregates search term data at the campaign level and exposes search term data for Performance Max campaigns. We encourage you to migrate from search_term_view to campaign_search_term_view if you are interested in fetching search term data for Performance Max campaigns.
  • Brand guidelines will automatically be enabled on new campaigns.
  • You can now use the ai_max_setting.enable_ai_max field of the Campaign object to enable AI Max for Search campaigns. Google Ads AI Max is a suite of AI-powered features for standard Search campaigns designed to increase conversions and reach. It works by using machine learning to expand keyword targeting, dynamically generate ad creatives based on user intent, and send users to the most relevant landing pages on your website. Refer to our blog post to learn more. A new view ai_max_search_term_ad_combination_view exposes search term data for AI Max for Search campaigns. We plan to launch a consolidated version of this view including data from other campaign types in a future API version.
  • We are allowing Terms & Service, QR codes, and various other barcodes to be added to PromotionAssets.

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.

This blog post was updated on August 12, 2025 to add clarification on how to attach a negative keyword list to your campaign.

We're excited to announce the launch of three powerful new features for Performance Max campaigns within the Google Ads API. These updates will give you greater control and flexibility over your Performance Max campaigns, allowing for even more precise targeting and optimization. Available today across all supported versions of the Google Ads API, these features empower developers and advertisers to refine their Performance Max strategies.

Introducing new targeting capabilities

1. Device targeting

With the introduction of device targeting, you now have the ability to specify at the campaign level where your Performance Max ads will appear. This feature provides a new layer of control, enabling you to optimize your campaign reach across various platforms. To set up device targeting, add a DeviceInfo criterion to your Performance Max campaign.

2. Negative keyword lists

To help prevent your ads from showing for irrelevant searches, we're introducing support for negative keyword lists at the campaign level on Performance Max campaigns. This highly requested feature allows you to upload and apply lists of keywords that you want to exclude, ensuring your ads are displayed to the most relevant audience. You can attach a negative keyword list to your campaign by attaching a SharedSet with the type NEGATIVE_KEYWORDS using the CampaignSharedSetService. Refer to this page for an example on how to attach a negative keyword set to a campaign.

3. Age range exclusions

We're also adding the capability to exclude specific age ranges from your Performance Max campaigns. This allows for more granular audience targeting, which helps you comply with age-related advertising regulations and focus your spend on the most appropriate demographics for your products or services. To set up an age range exclusion, add an AgeRangeInfo as a negative criterion on your PMax campaign.

How to get started

These new features are available starting today on all supported versions of the Google Ads API. For detailed documentation on how to implement these new targeting options in your Performance Max campaigns, refer to our developer guides.

We're committed to continually enhancing the Google Ads API to provide you with the tools you need to succeed. We encourage you to explore these new features and incorporate them into your Performance Max strategies to achieve even better results.

Today, we’re announcing the July 2025 update to the Display & Video 360 API. This update includes the following:

For more details, see the Display & Video 360 API release notes. Before using these new features, make sure to update your client library to the latest version.

Display & Video 360 API v3 will sunset on October 7, 2025. If you are still using v3, update your integration to use v4 as soon as possible. Follow the steps in our v4 migration guide to migrate.

If you need help with these new features, please contact us using our Display & Video 360 API Technical support contact form.

In October, 2025, Python 3.9 will reach end-of-life in October 2025 and will no longer be supported by the Python Software Foundation. Once Python 3.9 officially reaches end-of-life status, it will also no longer be supported by the Google Ads client library for Python. That means we will not make updates to the library, or address any issues related to compatibility with Python 3.9, outside of critical security updates.

In Q4 2025 we will release a new major version of the library that is incompatible with Python 3.9. This new version will include support for Python 3.14. Users of deprecated, or soon-to-be deprecated versions of Python, are at risk of losing access to the Google Ads API. Please note the below timelines:

  • Current: Python 3.7 users cannot currently access the Google Ads API
  • Q1 2026: Python 3.8 users will lose access to the API when version v19 of the Google Ads API is sunset in Q1 2026.
  • Late 2026: Python 3.9 users will lose access to the API when version v22 of the Google Ads API is sunset in late 2026

Follow the deprecation and sunset timetable for updates around the specific timing of Google Ads API version releases and sunsets.

Any library users currently relying on Python 3.8 or 3.9 should upgrade their systems to Python 3.10 or higher as soon as possible.

If you have any questions about this change, please file an issue on the client library repository.

Starting on October 3, 2025, you will be able to set both the gclid and gbraid fields on your ClickConversion messages when importing them to the Google Ads API, by using the UploadClickConversions method.

Previously, setting both of these fields resulted in the following partial failure error:

Once this change is released, this error will no longer be returned. Instead you will see successful import responses.

What’s changed?

Today, we're excited to announce that the brand guidelines rollout is now complete for all new Performance Max campaigns created through the Google Ads UI, with API-created accounts soon to follow. As was first announced in December, this means that new PMax campaigns initiated in the UI will have brand guidelines enabled by default, offering advertisers greater control over their brand's representation.

With brand guidelines rolling out to more Performance Max campaigns, it is crucial to understand how this impacts campaigns you interact with via the API, and for you to update your code in advance to prepare for it.

What do API Users need to update now?

Previously, brand assets such as your business name and logo were associated with Asset Groups.

Currently, for any PMax campaign with brand guidelines enabled, these brand assets are now stored at the campaign level. This means if your application queries or modifies brand assets for PMax campaigns, you must adjust your code to look for these assets in CampaignAsset instead of AssetGroupAsset for these campaigns. Accounting for both asset locations in your application is vital to ensure your integrations continue to function as expected. To determine if brand guidelines are enabled for a PMax Campaign, check the Campaign.brand_guidelines_enabled field.

What do API Users need to plan for in the future?

Brand guidelines will be enabled by default when creating PMax Campaigns using the API beginning in v21. You can optionally disable brand guidelines by setting the Campaign.brand_guidelines_enabled field to false on-creation. The default behavior for brand guidelines on new Performance Max campaigns created via the API remain disabled for all supported versions through v20.

To manually turn on brand guidelines through the API, you have two options:

  1. Starting in v19, all API users can choose to manually enable brand guidelines when creating a new PMax campaign. To do so, you need to set the Campaign.brand_guidelines_enabled field to true during campaign creation. You can refer to the “Add Performance Max Campaign” code sample for an example of how to create a campaign with brand guidelines enabled.
  2. To manually enable brand guidelines for an existing campaign, use CampaignService.EnablePMaxBrandGuidelines. Set auto_populate_brand_assets to true to automatically populate the campaign with top-performing brand assets. Disabling brand guidelines for a campaign after its creation is not supported.

There is an in-progress automatic migration to enable brand guidelines for existing campaigns. As previously announced, this migration has already begun on a rolling basis by CID. Only campaigns that use the same logos and business name across all asset groups will be automatically migrated. We anticipate the migration to be completed for all applicable CIDs by October 30th. In the meantime, we encourage you to use the existing migration endpoint to manually update your campaigns to brand guidelines at your own pace.

Google Ads API v18 will sunset on August 20, 2025. Starting on this date, all v18 API requests will begin to fail. Migrate to a newer version prior to August 20, 2025 to ensure your API access is unaffected.

Here are some resources to help you with the migration:

You can view a list of methods and services your project has recently called using the Google Cloud Console:

  1. Open the APIs & Services in the Google Cloud Console.
  2. Click Google Ads API in the table.
  3. On the METRICS subtab, you should see your recent requests plotted on each graph. You can see which methods you've sent requests to in the Methods table. The method name includes a Google Ads API version, a service, and a method name, such as google.ads.googleads.v18.services.GoogleAdsService.Mutate.
  4. (Optional) Choose the timeframe you want to view for your requests.

If you have questions while you’re upgrading, reach out to us on the forum or at googleadsapi-support@google.com.

What is changing?

Google is deprecating the ad sharing functionality in Google Ads API.

  • With the October 2025 release of v22, the ability to create shared ads will be removed from all supported versions on October 15, 2025.
  • In Q1 2026, shared ads will sunset and stop serving. The exact date isn’t determined, and will be communicated in the future.

This change will affect how ads are created and managed at scale, so it's crucial to understand the implications and prepare your systems accordingly. Let's break down what's happening, why it matters, and what you need to do.

What is Ad Sharing?

In simple terms, "ad sharing" means creating one ad and using that exact same ad in multiple Ad Groups.

Instead of building identical ads over and over for each Ad Group, you build it once and link it everywhere you need it.

Why is this changing?

This change aligns with the movement to Asset-Based Ads. The future of Google Ads is centered around asset-based ad formats like Responsive Search Ads (RSAs) and Performance Max campaigns. In these formats, the "ad" is dynamically assembled from a pool of assets (headlines, descriptions, images), making the concept of a static, shareable ad object less efficient.

How to Prepare

The timeline gives you ample time to adapt, but we strongly recommend starting the process now to avoid any disruption to your advertising operations. Follow these steps to ensure a smooth transition.

Step 1: Audit Your Application

The first step is to determine if your application uses the ad sharing model.

Review your codebase, specifically any logic that interacts with the AdGroupAdService. Look for any instances where you created an AdGroupAd by pointing to an existing ad's resource name that is already in use in another ad group.

Your current, soon-to-be-deprecated logic might look something like this conceptually:

  1. Create an AdGroupAd that contains an Ad.
  2. Create an AdGroup.
  3. Create another AdGroupAd using the embedded Ad from step 1 and the AdGroup from Step 2. (This is the functionality that will be removed).

Step 2: Update Your Ad Creation Logic

You must refactor your code to create a new, unique ad for every ad group. Instead of sharing an ad, your new workflow should be a loop that creates a distinct ad for each target ad group. You will no longer be able to create a standalone ad. Instead, you will specify the ad parameters as part of creating an AdGroup.

The new, compliant logic should look like this:

  1. For AdGroup_1:
    • Create an AdGroupAd using ad for ad_group_1.
  2. For AdGroup_2:
    • Create an AdGroupAd using ad for ad_group_2.

Even if the ad copy is identical, the ads must be created as separate ad objects in the API.

If you still have legacy Expanded Text Ads (ETAs) serving that are shared, you must convert them to Responsive Search Ads and assign each shared instance to a single AdGroup.

Step 3: Understand the Impact on Reporting

When you stop sharing a single ad and start creating unique ads for each ad group, the performance history will be affected.

Important: Performance statistics (impressions, clicks, conversions) are tied to the unique ad. The new ads you create will start with zero performance history. The historical data from your old, shared ads will remain, but it will not be carried over to the new ads.

Be sure to communicate this to your team or clients. Plan to export and archive historical performance data before you make the switch to perform long-term, ad-level analysis.

Migration of Existing Shared Ads

Step 1: Identify Your Shared Ads

First, you need a definitive list of all ads that are currently shared across more than one ad group.

SELECT
  ad_group_ad.ad.id,  -- This is the unique ID of the 'Ad' itself
  ad_group.id,        -- This is the unique ID of the 'AdGroup'
  ad_group_ad.status,
  ad_group_ad.ad.type,
  campaign.id,
  campaign.name,
  ad_group.name
FROM
  ad_group_ad
WHERE
  ad_group_ad.status IN ('ENABLED', 'PAUSED')
ORDER BY
  ad_group_ad.ad.id, ad_group.id

If you find an ad_group_ad.ad.id in your results whose associated collection of ad_group.ids has more than one entry, it means that specific Ad (identified by ad_group_ad.ad.id) is linked to multiple ad groups (each identified by a unique ad_group.id in the collection).

If any ad_group.id that is associated with more than one distinct ad_group.id, then that Ad is considered "shared".

Step 2: Gather Ad Content and Associated Ad Groups

For each shared Ad you identified in Step 1, you need to retrieve two things:

  1. The content of the ad (its headlines and descriptions).
  2. The list of all ad groups where it is currently active.

Step 3: Create a New, Unique ResponsiveSearchAd in Each Ad Group

For the core of the migration, loop through each ad group you identified in Step 2 and create a new ResponsiveSearchAd inside it.

Best Practice: If your shared ad is an Expanded Text Ad, don't just copy the 3 headlines and 2 descriptions. Use them as a starting point and add more assets. The power of ResponsiveSearchAds comes from having a deep pool of headlines and descriptions for Google to test. Aim for 5 short headlines, 1 long headline, and 5 descriptions.

Here is a quick summary of the ResponsiveSearchAds limits,

Asset Type Maximum Allowed Character Limit Best Practices
Short Headline Up to 5 30 characters Provide all 5
Long Headline 1 90 characters Always provide 1
Description Up to 5 90 characters Provide all 5

Here is a conceptual outline of the mutate operation using AdGroupAdService:

  1. Loop through each ad_group.resource_name from your Step 2 results.
  2. Inside the loop, construct a new AdGroupAd object.
  3. Set the ad_group field to the current ad_group.resource_name.
  4. Create an Ad object within the AdGroupAd.
  5. Populate the responsive_search_ad field with your assets:
    • Create a list of AdTextAsset objects for your headlines.
    • Create a list of AdTextAsset objects for your descriptions.
    • Set the final_urls, path1, and path2 using the data from your old Ad.
  6. Execute the MutateAdGroupAds() request.

This process ensures that each ad group now has its own unique ResponsiveSearchAds, ready to be served.

Step 4: Remove the Old Shared Ads

Once your new ResponsiveSearchAds have been created and have passed the editorial review (status is ENABLED), it's time to retire any shared ads.

  1. Identify the resource name of the old AdGroupAd (the link between the shared ad and the ad group).
  2. Use the AdGroupAdService to perform the mutation. Within this service, you'll construct an AdGroupAdOperation. This operation object has a remove field where you provide the resource name of the AdGroupAd you want to remove.
  3. Finally, you call the mutateAdGroupAds method on the AdGroupAdService.

The Timeline for Phasing Out Shared Ads

We strongly encourage you to manually migrate your shared ads yourself

  • This is the best approach. It allows you to create new ads with unique images and headlines tailored specifically to the audience in each Ad Group. More relevant ads lead to better results.

Phase 1: Starting 15 October 2025

  • You can no longer create new shared ads.
  • Any attempt to link a single ad to a new Ad Group will be blocked and will return an error. If you use automated tools or scripts for this, they will stop working.

Phase 2: Between 15 October 2025 and Q1 2026

  • Your existing shared ads will continue to serve normally.
  • No immediate action is required for ads that are already shared; they will not be affected during this period.

Phase 3: In Q1 2026

  • We will automatically convert all remaining shared ads.
  • For any ads that are still shared, we will create individual copies in each Ad Group they belong to.

We recommend consulting the official Google Ads API documentation and keeping an eye on the Google Ads Developer Blog for further details as the date approaches.

Start your audit today and share this post with your development team to ensure you are prepared for a seamless transition.

Automatic Process in Q1 2026

If you take no action, we will automatically separate your shared ads for you in the first quarter of 2026.

Here’s how our automated process will work:

  • One Ad Group Keeps the Original Ad: Your original ad will be kept in just one of the Ad Groups (specifically, the one with the lowest ad group ID).
  • Other Ad Groups Get Copies: We will create new copies of the original ad for all the other Ad Groups it was shared with.
  • Automated Content Will Be Regenerated: Your settings for features like "asset automation" will be copied. However, the actual machine-generated assets (like automatically created headlines or images) will not be transferred. Our system will create a brand-new set for each copied ad, which may affect initial performance.

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