I figured out how to create & delete keyword plans, but I couldn't figure out how I can get a list of all my existing keyword plans (resource names / plan ids)?

final long customerId = Long.valueOf("XXXXXXXXXX");     GoogleAdsClient googleAdsClient = new ... KeywordPlanServiceClient client = googleAdsClient.getVersion8().createKeywordPlanServiceClient(); String[] allExistingKeywordPlans = client. ??? 


<dependency>     <groupId>com.google.api-ads</groupId>     <artifactId>google-ads</artifactId>     <version>16.0.0</version> </dependency> 


Further resources: https://developers.google.com/google-ads/api/docs/samples/add-keyword-plan

Any hints on how this can be solved is highly appreciated! Many thanks in advance!

Tag:google-ads-api, java

5 comments.

  1. mrki102

    Maybe you can try to fetch the keyword_plan resource from your account. This is how I've done it to create remove operations for all the existing keywordPlans.

    GoogleAdsServiceClient.SearchPagedResponse response = client.search(SearchGoogleAdsRequest.newBuilder() .setQuery("SELECT keyword_plan.resource_name FROM keyword_plan") .setCustomerId(Objects.requireNonNull(googleAdsClient.getLoginCustomerId()).toString()) .build()); List<KeywordPlanOperation> keywordPlanOperations = response.getPage().getResponse().getResultsList().stream() .map(x -> KeywordPlanOperation.newBuilder() .setRemove(x.getKeywordPlan().getResourceName()) .build()) .collect(Collectors.toList());

    Of course this can also be applied to your use-case.

    1. mrki102

      developers.google.com/google-ads/api/fields/v10/keyword_plan

    2. MJey

      Thank you for sharing! Indeed works nicely. For the future souls the client for me is: googleAdsClient.getVersion9.createGoogleAdsServiceClient()

  2. André

    This is for PHP if you like to remove all of the existing keyword plans:

    $googleAdsServiceClient = $this->googleAdsClient->getGoogleAdsServiceClient(); /** @var GoogleAdsServerStreamDecorator $stream */ $stream = $googleAdsServiceClient->searchStream( $linkedCustomerId, 'SELECT keyword_plan.resource_name FROM keyword_plan' ); $keywordPlanServiceClient = $this->googleAdsClient->getKeywordPlanServiceClient(); /** @var GoogleAdsRow $googleAdsRow */ foreach ($stream->iterateAllElements() as $googleAdsRow) { $keywordPlanOperation = new KeywordPlanOperation(); $keywordPlanOperation->setRemove($googleAdsRow->getKeywordPlan()->getResourceName()); $keywordPlanServiceClient->mutateKeywordPlans($this->linkedCustomerId, [$keywordPlanOperation]); }
  3. Ali Uyanık

    For python:

    import argparse import sys from google.ads.googleads.client import GoogleAdsClient from google.ads.googleads.errors import GoogleAdsException def main(client, customer_id): ga_service = client.get_service("GoogleAdsService") query = """ SELECT keyword_plan.name, keyword_plan.id, keyword_plan.forecast_period, keyword_plan.resource_name FROM keyword_plan """ # Issues a search request using streaming. search_request = client.get_type("SearchGoogleAdsStreamRequest") search_request.customer_id = customer_id search_request.query = query stream = ga_service.search_stream(search_request) for batch in stream: for row in batch.results: resource_name = row.keyword_plan.resource_name forecast_period = row.keyword_plan.forecast_period id = row.keyword_plan.id name = row.keyword_plan.name print( f'plan resource name "{resource_name}" with ' f'forecast period "{forecast_period.date_interval}" ' f"and ID {id} " f' name "{name}" ' ) if __name__ == "__main__": # GoogleAdsClient will read the google-ads.yaml configuration file in the # home directory if none is specified. googleads_client = GoogleAdsClient.load_from_storage(path='your-google-ads.yml-file-path',version="v10") parser = argparse.ArgumentParser( description=("Retrieves a campaign's negative keywords.") ) # 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.", ) args = parser.parse_args() try: main(googleads_client, args.customer_id) except GoogleAdsException as ex: print( f'Request with ID "{ex.request_id}" failed with status ' f'"{ex.error.code().name}" and includes the following errors:' ) for error in ex.failure.errors: print(f'\tError with message "{error.message}".') if error.location: for field_path_element in error.location.field_path_elements: print(f"\t\tOn field: {field_path_element.field_name}") sys.exit(1)

Add a new comment.