How do I go about removing one or more keyword-specific bids via the Google
Ads API Python library? What I want to be able to do is perform the
equivalent of changing the "Max. CPC" field to blank for a keyword in the
Ads UI, thus allowing the ad group default bid to kick in for that keyword.
The first approach I took was retrieving the ad group criterion instance
that I wanted to update via GoogleAdsService, then creating a new ad group
criterion operation, copying the retrieved campaign onto the new ad group
criterion operation's update field, mutating the new ad group criterion (by
setting ad_group_criterion.cpc_bid_micros.value = 0), then creating a field
mask and copying the field mask onto the operation's update_mask field.
from google.api_core import protobuf_helpers
from google.ads.google_ads.client import GoogleAdsClient
client = GoogleAdsClient.load_from_storage()
google_ads_service = client.get_service('GoogleAdsService', version='v3')
agc_operation = client.get_type('AdGroupCriterionOperation',
version='v3')
query = ("SELECT customer.id, ad_group.id, "
"ad_group_criterion.criterion_id, "
"ad_group_criterion.cpc_bid_micros, "
"ad_group_criterion.keyword.text, "
"FROM ad_group_criterion "
"WHERE campaign.status = 'ENABLED' "
"AND ad_group.status = 'ENABLED' "
"AND ad_group_criterion.type = 'KEYWORD' "
"AND ad_group_criterion.status = 'ENABLED' "
"AND ad_group_criterion.cpc_bid_micros > 0")
results = google_ads_service.search(customer_id, query=query)
for row in results:
initial_ad_group_criterion = row.ad_group_criterion
agc_operation.update.CopyFrom(initial_ad_group_criterion)
updated_ad_group_criterion = agc_operation.update
updated_ad_group_criterion.cpc_bid_micros.value = 0
field_mask = protobuf_helpers.field_mask(initial_ad_group_criterion,
updated_ad_group_criterion)
agc_operation.update_mask.CopyFrom(field_mask)
However, attempting to update/remove the keyword-specific bid in this way
results in an INVALID_VALUE partial failure error, with the error message
"The field's value is invalid." Digging in a bit further, it appears that 0
is not considered a valid Int64 value and thus cannot be accepted as an
updated value for ad_group_criterion.cpc_bid_micros.
For my other approach, I created an empty AdGroupOperation object,
retrieving an empty AdGroupCriterion object and updating that object to
have ad_group_criterion.cpc_bid_micros.value = 0. I then created a new
field mask that compares it to None, finally copying the field mask onto
the operation's update_mask field.
from google.api_core import protobuf_helpers
from google.ads.google_ads.client import GoogleAdsClient
client = GoogleAdsClient.load_from_storage()
google_ads_service = client.get_service('GoogleAdsService',
version='v3')
ad_group_criterion_operation = client.get_type('AdGroupCriterionOperation',
version='v3')
query = ("SELECT customer.id, ad_group.id, "
"ad_group_criterion.criterion_id, "
"ad_group_criterion.cpc_bid_micros, "
"ad_group_criterion.keyword.text, "
"FROM ad_group_criterion "
"WHERE campaign.status = 'ENABLED' "
"AND ad_group.status = 'ENABLED' "
"AND ad_group_criterion.type = 'KEYWORD' "
"AND ad_group_criterion.status = 'ENABLED' "
"AND ad_group_criterion.cpc_bid_micros > 0 ")
results = google_ads_service.search(customer_id, query=query)
for row in results:
initial_ad_group_criterion = row.ad_group_criterion
ad_group_criterion_operation.update.CopyFrom(initial_ad_group_criterion)
updated_ad_group_criterion = ad_group_criterion_operation.update
updated_ad_group_criterion.cpc_bid_micros.value = 0
field_mask = protobuf_helpers.field_mask(initial_ad_group_criterion,
updated_ad_group_criterion)
ad_group_criterion_operation.update_mask.CopyFrom(field_mask)
This resulted in a response containing the correct resourceName
(customers/{customer_id}/adGroupCriteria/{ad_group_id}~{ad_group_criterion_id}),
but the keyword-specific bid wasn't removed or updated -- it remained as it
was.
Should I be going about this in a different way entirely? For instance,
rather than trying to update the cpc_bid_micros value to "0" should I be
using a "remove" mutate of some kind? Thanks for reading and for any help
you can provide.
--
--
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
---
You received this message because you are subscribed to the Google Groups
"AdWords API and Google Ads API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/adwords-api/eebe5dff-ed06-4da2-81c6-a7f23ecbe910%40googlegroups.com.