Tag Archives: google_ads_api

Changes in dynamic ad targets reporting

Starting on September 20, 2023, we’ve started rolling out a backend improvement on Google Ads dynamic ad targets reporting to include criteria that were removed and then added back as negative.

Before this change, report queries for web page criteria (that is, queries against the webpage_view resource) requesting historical data did not include criteria that were removed and then added back as negative.

This resulted in unexpected values in reports for the time frame when these criteria were accruing metrics (that is, when they were targeted and had negative = false), because the metrics they accrued in this time period were not returned in report query results.

The change only affects cases where a positive criterion was removed and added back as negative: all other criteria will return the same values they did before this change.

After this change is released, criteria metrics will take into account removed criteria and criteria that were re-added as negative.

Required actions

You don’t need to change anything in your GAQL queries; however, be aware that you may notice differences in criteria reporting after this change due to the correct values being reported.

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

Google Ads Shopping Campaign Enhanced CPC Deprecation

Starting in early October 2023, any Shopping campaigns using Enhanced cost-per-click (eCPC) will behave as if they are using Manual cost-per-click (CPC) bidding.

Enhanced CPC was the first Smart Bidding strategy launched by Google over 10 years ago. It has been replaced by more advanced bidding strategies such as Target ROAS and Maximize conversion value, as well as fully automated campaigns like Performance Max.

What happens if I change nothing?

If you choose to not make changes to your campaign by October 2023, it will operate as if it's using Manual CPC bidding. All your existing campaigns using eCPC will continue serving using the manual bids that you set. If you set ManualCpc.enhanced_cpc_enabled to true in a Shopping campaign, the API ignores the setting and the campaign will only use Manual CPC bidding.

What should I change?

If you want to continue to use Manual CPC, remove any code that sets ManualCpc.enhanced_cpc_enabled to true for Shopping campaigns. We recommend these alternatives to Manual CPC:

Where can I get support?

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

Google Ads API support for importing and editing conversions from Google Analytics

What's changing
Starting October 9, 2023, the Google Ads API will allow the following types of mutate operations for a ConversionAction imported from a Google Analytics 4 (GA4) property:
  1. An update that modifies status, primary_for_goal, category, name, or value_settings.
  2. A remove that removes the conversion action.
Why this is important
For many Google Ads users, the conversions they import from Google Analytics are a critical component of bidding and reporting. Until now, you could use the Google Analytics Admin API to create a link between your Google Analytics and Ads accounts, but you could not use the Google Ads API to complete the following remaining steps in the linking process: With this change, the Google Ads API supports both of these steps and provides a complete API-based solution for linking your Google Analytics 4 property to your Google Ads account.

In addition to the attributes needed for proper configuration of conversion goals, you can now modify the following attributes of an imported GA4 ConversionAction:
  • name
  • value_settings
Requests that attempt to modify any other attributes of an imported GA4 ConversionAction will continue to fail, as will requests that attempt to remove or update a ConversionAction imported from a Universal Analytics (UA) property.

What you should do
Modify any code in your integration that depends on the Google Ads API rejecting a ConversionActionOperation with a MUTATE_NOT_ALLOWED error if it attempts to update or remove an imported GA4 conversion. For example, if your integration relies on this behavior to detect if a conversion action is an imported GA4 conversion, modify it to instead check if the type of the ConversionAction is either GOOGLE_ANALYTICS_4_CUSTOM or GOOGLE_ANALYTICS_4_PURCHASE.

In addition, if you currently complete the process of linking Google Analytics to Google Ads accounts using the UI, consider whether switching to an API-based solution is appropriate for your use case.

How to get help
If you have any questions or need help, check out the Google Ads API support page for options.

Performance Max: create listing groups using batch processing

What’s New

Starting on October 4, 2023, AssetGroupListingGroupFilters can be created asynchronously using batch processing with the Google Ads API. If you use BatchJobService to create AssetGroupListingGroupFilter entities and other Performance Max resources in a single request, errors in the listing group tree creation will not block the creation of the remaining entities. However, the operations to create a listing group tree will still be atomic. This means that if any operation related to the creation of a listing group tree returns an error, all operations related to that listing group tree will also fail, save a few caveats, which are detailed in this Jobs & listing group filters guide.

This update does not change the behavior of any existing batch jobs that do not include operations that create listing group filters.

Previous Behavior

Prior to October 4, 2023, AssetGroupListingGroupFilters could only be created synchronously using the GoogleAdsService.Mutate or AssetGroupListingGroupFilterService.MutateAssetGroupListingGroupFilters method. Requests using the GoogleAdsService.Mutate method are always atomic when they contain AssetGroupListingGroupFilterOperation operations. This is because partial_failure is not supported for these operations, which means that an error in listing group tree creation would block all other operations in the request. If you tried creating AssetGroupListingGroupFilter entities prior to October 4, 2023 using batch processing, you would receive a MutateError.OPERATION_DOES_NOT_SUPPORT_PARTIAL_FAILURE error.

Change Rationale

Batch processing is a powerful feature in the Google Ads API that allows you to dispatch a set of operations, which may be interdependent, to multiple services without synchronously waiting for the operations to complete. We have made batch processing available for AssetGroupListingGroupFilters in response to your feedback to provide another option for creating listing group trees asynchronously and without blocking other operations in the same request.

Implementation Details

In order to add an AssetGroupListingGroupFilter using a batch job:

  1. Create a MutateOperation containing an AssetGroupListingGroupFilterOperation. This is no different than creating a MutateOperation using the GoogleAdsService.Mutate service.
  2. Add the MutateOperation to the batch job as you would with any other type of operation.

The example below demonstrates the process of adding a single AssetGroupListingGroupFilter to an existing batch job. See the Creating Shopping Listing Groups guide to learn more about creating product partition trees using AssetGroupListingGroupFilter entities.

// Constructs the AssetGroupListingGroupFilter.
AssetGroupListingGroupFilter listingGroupFilter =
     AssetGroupListingGroupFilter.newBuilder()
         .setAssetGroup(assetGroupResourceName)
         .setType(ListingGroupFilterType.UNIT_INCLUDED)
         .setVertical(ListingGroupFilterVertical.SHOPPING)
         .build();

// Constructs the operation to create the AssetGroupListingGroupFilter.
MutateOperation operation = MutateOperation.newBuilder()
     .setAssetGroupListingGroupFilterOperation(
           AssetGroupListingGroupFilterOperation
      .newBuilder()
      .setCreate(listingGroupFilter))
      .build();

// Sends a request to add the operation to the batch job.
AddBatchJobOperationsResponse response =
    batchJobServiceClient.addBatchJobOperations(
        AddBatchJobOperationsRequest.newBuilder()
            .setResourceName(batchJobResourceName)
            .addMutateOperations(operation)
            .build());

The following resources contain additional information to help you with your integration:

Improving Performance Max integrations Blog Series

This article is part of a series that discusses new and upcoming features that you have been asking for. We’ll cover what’s new and how it differs from the current implementation approach.

Keep an eye out for further updates and improvements on our developer blog, continue providing feedback on Performance Max integrations with the Google Ads API, and as always, contact our team if you need support.

Google Ads API v12 sunset reminder

Google Ads API v12 will sunset on September 27, 2023. After this date, all v12 API requests will begin to fail. Please migrate to a newer version before September 27, 2023 to ensure your API access is unaffected.

We've prepared various resources to help you with the migration: In addition, using the Google Cloud Console, you can view the list of methods and services to which your project recently submitted requests:
  1. Open the Dashboard page (found under APIs & Services) in the Google Cloud Console.
  2. Click on Google Ads API in the table.
  3. On the METRICS subtab, you should see your recent requests plotted on each graph. At the bottom of the page, you’ll see the Methods table, where you can see which methods you’ve sent requests to. The method name includes a Google Ads API version, a service, and a method name, e.g., google.ads.googleads.v12.services.GoogleAdsService.Mutate. In this way, you can see all versions that you’ve used recently.
  4. (Optional) Click on the time frame at the top right of the page if you need to change it.
If you have questions while you’re upgrading, please reach out to us on the forum or through [email protected].

Announcing v14_1 of the Google Ads API

Today, we’re announcing the v14_1 release of the Google Ads API. To use some of the v14_1 features, you will need to upgrade your client libraries and client code. The updated client libraries and code examples will be published next week. This version has no breaking changes.

Here are the highlights: Where can I learn more?
The following resources can help you get started: If you have any questions or need help, contact us through the forum.

Change to updates of Google Ads custom audience types

Starting September 27, 2023 you will see a change if you use custom audiences. You will no longer be able to update a custom audience type once you create the custom audience. For example, if you set the type to AUTO or INTEREST, then you cannot update it to the type SEARCH in the Google Ads API. This change ensures that your campaign continues to serve by making sure that your custom audience remains eligible.

What do I need to change?

Modify your code so it avoids attempting to update the type of an existing CustomAudience. If your code attempts to update the type field after September 27, 2023 then the API will return a CustomAudienceError.INVALID_TYPE_CHANGE error.

Where can I get support?

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

Image and Location Assets in New Accounts

What’s changing?

On July 6, 2023 we announced the auto-migration of image and location extensions to assets. Once the auto-migration starts on August 2, 2023, new accounts will only be able to create image and location assets and not extensions. New accounts will be treated as accounts that have been migrated.

How do I verify my account?

Use the following fields from v13 or greater in the Customer resource to track the status of your account:

  • bool image_asset_auto_migration_done
  • string image_asset_auto_migration_done_date_time
  • bool location_asset_auto_migration_done
  • string location_asset_auto_migration_done_date_time

What if I try to create an extension on a new or migrated account?

If your account has been migrated or is new and you attempt to create an extension the mutate request will be rejected and you will receive the error:

     LEGACY_EXTENSION_TYPE_READ_ONLY

If you have any questions, please reach out to us on the forum.