How can I exclude "Everything Else" while creating a shopping Listing group.

114 views
Skip to first unread message

Punit Pushkar

unread,
Jul 5, 2023, 2:39:11 AM7/5/23
to Google Ads API and AdWords API Forum
Hey Team, I am creating a listing group where I only want to Include certain ItemID from all products and Exclude  "EVERYTHING ELSE". I used the API Documentation but could not figure out how to exclude them. 

URGENT Help Needed
Attaching the code for the reference:-

def next_id():
global last_criterion_id
last_criterion_id -= 1
return str(last_criterion_id)


def main(client, customer_id, ad_group_id, replace_existing_tree):
ad_group_criterion_service = client.get_service("AdGroupCriterionService")
if replace_existing_tree:
remove_listing_group_tree(client, customer_id, ad_group_id)
operations = []
condition_dimension_info = client.get_type("ListingDimensionInfo")
client.copy_from(
condition_dimension_info.product_condition,
client.get_type("ProductConditionInfo"),
)
ad_group_criterion_other_operation = create_listing_group_subdivision(
client,
customer_id,
ad_group_id,
condition_dimension_info,
)
ad_group_criterion_other_resource_name = (
ad_group_criterion_other_operation.create.resource_name
)
operations.append(ad_group_criterion_other_operation)

item_dimension_info = client.get_type("ListingDimensionInfo")

item_ids = ["n12288755v", "n12648292v", "n12673786v"]

for item_id in item_ids:
item_dimension_info = client.get_type("ListingDimensionInfo")
item_dimension_info.product_item_id.value = item_id
operations.append(
create_listing_group_unit_biddable(
client,
customer_id,
ad_group_id,
ad_group_criterion_other_resource_name,
item_dimension_info,
900_000,
)
)

##Other item ids
client.copy_from(
item_dimension_info.product_item_id, client.get_type("ProductItemIdInfo"),
)
operations.append(
create_listing_group_unit_biddable(
client,
customer_id,
ad_group_id,
ad_group_criterion_other_resource_name,
item_dimension_info,
50_000,
)
)

# Add the ad group criteria.
mutate_ad_group_criteria_response = ad_group_criterion_service.mutate_ad_group_criteria(
customer_id=customer_id, operations=operations
)

# Print the results of the successful mutates.
print(
"Added ad group criteria for the listing group tree with the "
"following resource names:"
)
for result in mutate_ad_group_criteria_response.results:
print(f"\t{result.resource_name}")

print(f"{len(mutate_ad_group_criteria_response.results)} criteria added.")
# [END add_shopping_product_listing_group_tree]


def remove_listing_group_tree(client, customer_id, ad_group_id):
googleads_service = client.get_service("GoogleAdsService")
print("Removing existing listing group tree...")
query = f"""
SELECT ad_group_criterion.resource_name
FROM ad_group_criterion
WHERE
ad_group_criterion.type = LISTING_GROUP
AND ad_group_criterion.listing_group.parent_ad_group_criterion IS NULL
AND ad_group.id = {ad_group_id}"""

results = googleads_service.search(customer_id=customer_id, query=query)
ad_group_criterion_operations = []
for row in results:
criterion = row.ad_group_criterion
print(
"Found an ad group criterion with resource name: "
f"'{criterion.resource_name}'."
)
ad_group_criterion_operation = client.get_type(
"AdGroupCriterionOperation"
)
ad_group_criterion_operation.remove = criterion.resource_name
ad_group_criterion_operations.append(ad_group_criterion_operation)

if ad_group_criterion_operations:
ad_group_criterion_service = client.get_service(
"AdGroupCriterionService"
)
response = ad_group_criterion_service.mutate_ad_group_criteria(
customer_id=customer_id, operations=ad_group_criterion_operations
)
print(f"Removed {len(response.results)} ad group criteria.")


def create_listing_group_subdivision(
client,
customer_id,
ad_group_id,
parent_ad_group_criterion_resource_name=None,
listing_dimension_info=None,
):
operation = client.get_type("AdGroupCriterionOperation")
ad_group_criterion = operation.create
ad_group_criterion.resource_name = client.get_service(
"AdGroupCriterionService"
).ad_group_criterion_path(customer_id, ad_group_id, next_id())
ad_group_criterion.status = client.enums.AdGroupCriterionStatusEnum.ENABLED

listing_group_info = ad_group_criterion.listing_group
listing_group_info.type_ = client.enums.ListingGroupTypeEnum.SUBDIVISION
if (
parent_ad_group_criterion_resource_name
and listing_dimension_info != None
):
listing_group_info.parent_ad_group_criterion = (
parent_ad_group_criterion_resource_name
)
client.copy_from(listing_group_info.case_value, listing_dimension_info)

return operation


def create_listing_group_unit_biddable(
client,
customer_id,
ad_group_id,
parent_ad_group_criterion_resource_name,
listing_dimension_info,
cpc_bid_micros=None,
):
operation = client.get_type("AdGroupCriterionOperation")

criterion = operation.create
criterion.ad_group = client.get_service("AdGroupService").ad_group_path(
customer_id, ad_group_id
)
criterion.status = client.enums.AdGroupCriterionStatusEnum.ENABLED
if cpc_bid_micros:
criterion.cpc_bid_micros = cpc_bid_micros

listing_group = criterion.listing_group
listing_group.type_ = client.enums.ListingGroupTypeEnum.UNIT
listing_group.parent_ad_group_criterion = (
parent_ad_group_criterion_resource_name
)
if listing_dimension_info != None:
client.copy_from(listing_group.case_value, listing_dimension_info)

return operation

Google Ads API Forum Advisor

unread,
Jul 5, 2023, 6:47:37 AM7/5/23
to punitpus...@gmail.com, adwor...@googlegroups.com
Hi Punit,

Thank you for reaching out to the Google Ads API forum. I hope that you are doing well today.

I understand your concern that you want to create a listing group and include only 1 item id. That said, you may use the AdGroupCriterionService if you want to include only 1 item id in a listing group.

You may also check the sample request I made below:
{
  "operations": [
    {
      "create": {
        "adGroup": "customers/${CustomerID/adGroups/${adGroupID}",
        "listingGroup": {
          "type": "SUBDIVISION",
          "caseValue": {
            "productItemId": {
              "value": "${productID}"
            }
          }
        }
      }
    }
  ]
}

Let us know how it goes on your end. However if you are still unable to create, you may provide us with the complete API logs (request and response with request-id and request header) generated on your end.  You can provide it via Reply privately to the author option. If this option is not available, then send it instead on this email address googleadsa...@google.com. If you haven't enabled the logging yet in Python, logging can be enabled follow the steps here in this link https://developers.google.com/google-ads/api/docs/client-libs/python/logging.

Reference links:  
This message is in relation to case "ref:_00D1U1174p._5004Q2mrRVj:ref"

Thanks,
 
Google Logo Google Ads API Team


Reply all
Reply to author
Forward
0 new messages