Can't Remove Specific Adset from Adgroup

43 views
Skip to first unread message

Galih Laras Prakoso

unread,
May 22, 2024, 9:25:00 AM5/22/24
to Google Ads API and AdWords API Forum
I read that we can't delete asset using AssetService but some of the Google Team recommended users to mutate via AdService instead. 

So I tried to remove specific asset from AdGroup by using this code:
```
def _pause_assets_by_campaign(
self,
campaign_resource_name,
paused_assets_resource_names
):
ga_service = self._client.get_service("GoogleAdsService")
query = f"""SELECT
ad_group_ad.resource_name,
ad_group_ad.ad.app_ad.images,
ad_group_ad.ad.app_ad.youtube_videos,
campaign.resource_name
FROM ad_group_ad
WHERE campaign.resource_name = '{campaign_resource_name}'"""

self._get_logger().info(f"pause_ads_by_campaign -> query: {query}")

response = ga_service.search_stream(customer_id=self._customer_id, query=query)

self._get_logger().info(f"pause_ads_by_campaign -> response: {response}")

paused_assets_resource_names_map = {}

for resource_name in paused_assets_resource_names:
paused_assets_resource_names_map[resource_name] = True
self._get_logger().info(f"pause_ads_by_campaign -> paused_assets_resource_names_map: {paused_assets_resource_names_map}")

for batch in response:
for row in batch.results:
self._get_logger().info(f"pause_ads_by_campaign -> AdGroupAd: {row}")
ad = row.ad_group_ad.ad

ad_service = self._client.get_service("AdService")
ad_operation = self._client.get_type("AdOperation")

updated_ad = ad_operation.update
updated_ad.resource_name = ad.resource_name

extended_youtube_videos = [
youtube_asset for youtube_asset in ad.app_ad.youtube_videos if youtube_asset.asset not in paused_assets_resource_names_map
]

self._get_logger().info(f"pause_ads_by_campaign -> extended_youtube_videos: {extended_youtube_videos}")

updated_ad.app_ad.youtube_videos = extended_youtube_videos

extended_images = [
image_asset for image_asset in ad.app_ad.images if image_asset.asset not in paused_assets_resource_names_map
]

self._get_logger().info(f"pause_ads_by_campaign -> extended_images: {extended_images}")

updated_ad.app_ad.images = extended_images

field_mask = protobuf_helpers.field_mask(
None, updated_ad._pb
)

self._get_logger().info(f"pause_ads_by_campaign -> field_mask: {field_mask}")

self._client.copy_from(ad_operation.update_mask, field_mask)

self._get_logger().info(f"pause_ads_by_campaign -> ad_operation: {ad_operation}")
self._get_logger().info(f"pause_ads_by_campaign -> ad_operation.update_mask: {ad_operation.update_mask}")

response = ad_service.mutate_ads(
customer_id=self._customer_id, operations=[ad_operation],
)

self._get_logger().info(f"pause_ads_by_campaign -> response: {response}")

resource_name = response.results[0].resource_name

self._get_logger().info(f"pause_ads_by_campaign -> Ad updated! resource_name:{resource_name}")
```
There is no error thrown but my asset is not getting excluded by this update. Please help me to resolve this. :)

Google Ads API Forum Advisor

unread,
May 22, 2024, 3:57:59 PM5/22/24
to galih...@pass3.id, adwor...@googlegroups.com
Hi,

Thank you for reaching out to the Google Ads API support team.

Kindly note that assets are permanent and cannot be deleted. To prevent an asset from showing in your ads, unlink it from the campaign, ad group, or account where it's associated. You can use AdGroupAdService or AdService to mutate ads within the ad groups with these assets. Currently, it is only possible to create assets using Google Ads API. I will raise a request to support the removal operation feature to become available in the Google Ads API. However, I cannot provide a scheduled timeline for its availability in the API. So, I would recommend you to follow our blog post and release notes for future updates.
 
This message is in relation to case "ref:!00D1U01174p.!5004Q02tJ3cg:ref" (ADR-00236031)

Thanks,
 
Google Logo Google Ads API Team


Reply all
Reply to author
Forward
0 new messages