How to use google ads api python to update keyword text value?

426 views
Skip to first unread message

Rukeith Tseng

unread,
Mar 15, 2020, 11:30:30 PM3/15/20
to AdWords API and Google Ads API Forum
I am trying to update keyword text value via google ads api python sdk.
Here is my sample code

import argparse
import sys

from google.api_core import protobuf_helpers
from google.ads.google_ads.client import GoogleAdsClient
from google.ads.google_ads.util import ResourceName


def main(client, customer_id, ad_group_id, criterion_id):
   agc_service = client.get_service('AdGroupCriterionService', version='v3')

    ad_group_criterion_operation = client.get_type('AdGroupCriterionOperation',
                                                  version='v3')

    ad_group_criterion = ad_group_criterion_operation.update
   ad_group_criterion.resource_name = agc_service.ad_group_criteria_path(
       customer_id, ResourceName.format_composite(ad_group_id, criterion_id))

// update here
ad_group_criterion.keyword.text.value = 'test-keyword'

   fm = protobuf_helpers.field_mask(None, ad_group_criterion)
   ad_group_criterion_operation.update_mask.CopyFrom(fm)

    try:
       agc_response = agc_service.mutate_ad_group_criteria(
           customer_id, [ad_group_criterion_operation])
   except google.ads.google_ads.errors.GoogleAdsException as ex:
       print('Request with ID "%s" failed with status "%s" and includes the '
             'following errors:' % (ex.request_id, ex.error.code().name))
       for error in ex.failure.errors:
           print('\tError with message "%s".' % error.message)
           if error.location:
               for field_path_element in error.location.field_path_elements:
                   print('\t\tOn field: %s' % field_path_element.field_name)
       sys.exit(1)

    print('Updated keyword %s.' % agc_response.results[0].resource_name)


if __name__ == '__main__':
   # GoogleAdsClient will read the google-ads.yaml configuration file in the
   # home directory if none is specified.
   google_ads_client = GoogleAdsClient.load_from_storage()
   parser = argparse.ArgumentParser(
       description=('Pauses an ad in the specified customer\'s ad group.'))
   # The following argument(s) should be provided to run the example.
   parser.add_argument('-c', '--customer_id', type=str,
                       required=True, help='The Google Ads customer ID.')
   parser.add_argument('-a', '--ad_group_id', type=str,
                       required=True, help='The ad group ID.')
   parser.add_argument('-k', '--criterion_id', type=str,
                       required=True, help='The criterion ID, or keyword ID.')
   args = parser.parse_args()

    main(google_ads_client, args.customer_id, args.ad_group_id,
        args.criterion_id)



But I got an error like this:

error_code {
   request_error: IMMUTABLE_FIELD
 }
 message: "Field \'keyword.text\' cannot be modified by \'UPDATE\' operation."
 location {
   field_path_elements {
     field_name: "operations"
     index {
     }
   }
   field_path_elements {
     field_name: "update"
   }
   field_path_elements {
     field_name: "keyword"
   }
   field_path_elements {
     field_name: "text"
   }
 }
}
, 'OEhB_4KnhzMQaXAX0pvB2Q')



I found that update expanded text ads will need to use AdService to update rather than AdGroupAdService.
Is that keyword need to use another service to update text value rather than AdGroupCriterionService?


David Wihl

unread,
Mar 16, 2020, 7:29:22 AM3/16/20
to AdWords API and Google Ads API Forum
What type of ad are you trying to mutate? The list of ad types can be found at: https://developers.google.com/google-ads/api/docs/ads/ad-types  The third column, Mutable, tells you whether you can mutate that specific ad type. For example a TextAd is not mutable but a ExpandedTextAd is.

-David

Google Ads API Forum Advisor Prod

unread,
Mar 16, 2020, 2:34:56 PM3/16/20
to adwor...@googlegroups.com

Hi Rukeith,

Thank you for reaching out. You encountered the issue as you tried to mutate the ad whose type is not mutable. Please refer to this guide on types of ads that are mutable. Please let me know if you have any further concerns.

Thanks and regards,
Xiaoming, Google Ads API Team



 

ref:_00D1U1174p._5001UXVAp7:ref

Rukeith Tseng

unread,
Mar 16, 2020, 8:34:26 PM3/16/20
to AdWords API and Google Ads API Forum
Hi David,
    The ad type which I try to update is ExpandedTextAd

Google Ads API Forum Advisor Prod

unread,
Mar 17, 2020, 2:35:39 PM3/17/20
to rukeit...@mile.cloud, adwor...@googlegroups.com

Hi Rukeith,

The Keyword object's text is immutable once it is created. If you need to modify the text you would have to remove the existing Keyword and then add a new Keyword with the new text. It is not necessary that updating a keyword means you can update all the fields related to a keyword. 



Thanks and regards,
Xiaoming, Google Ads API Team



 

ref:_00D1U1174p._5001UXVAp7:ref
Reply all
Reply to author
Forward
0 new messages