Hi Team,
I hope you're doing well.
While working with the shopping_product resource in the Google Ads API, we observed a few inconsistencies and limitations that we’d like to clarify. We’ve summarized the issues below and would appreciate your input or confirmation on each:
Dereferenced Products' Performance Missing
If a product drove performance via a campaign (e.g., Campaign A) but was later dereferenced from that campaign using inventory filters, will its historical performance mapping to that campaign appear in the shopping_product report?
Campaign ID Filter Inconsistency
Queries using the syntax campaign.id = {value} fail with error -
{ "shoppingProductError": "MISSING_CAMPAIGN_FILTER" }
, while using the full resource name (e.g., shopping_product.campaign = "customers/{accountId}/campaigns/{id}") works.
➤ Is there a reason for this behavior, and should we always prefer full resource names over IDs?
Multi-Campaign Filtering Error
Attempting to filter by multiple campaigns results in the following error:
This was triggered by the query:
➤ Is multi-campaign filtering not supported for this resource, or is this a bug?
We’re currently trying to use shopping_product to enrich product-level insights, and these limitations are blocking some of our use cases. Any guidance or recommendations would be very helpful.
Thanks in advance for your help!
Best Regards,
Sravanthi Reddy
Hi,
Thank you for reaching out to the Google Ads API support team.
Upon checking the provided information, I understand that you are encountering an MISSING_CAMPAIGN_FILTER error while retrieving the data from the shopping_product resource using the Google Ads API. This error means a filter on the campaign resource name is missing. Both the campaign and ad group must be specified in the WHERE clause. If one or other is not present, this will result in one of the following errors: MISSING_CAMPAIGN_FILTER and MISSING_AD_GROUP_FILTER. As you are including both campaign and ad_group in the 'SELECT' clause of your GAQL query you need to filter the 'WHERE' clause with campaign and ad_group resources. I would recommend you to refer to this guide for more information.
Please be informed that specifying the report with a date or date range in the WHERE clause will return metrics for all products at the account level which are (regardless of whether the metrics are non-zero) for the specified time period. You cannot select segments.date, doing so would result in an UNSUPPORTED_DATE_SEGMENTATION error. I would suggest you refer to the 'Product metrics, filtered by date (Account level)' documentation for more information.
Note that historical performance mapping to that campaign doesn’t appear in the shopping_product report. I have checked your Google Ads account, I could see the campaign Ids you mentioned are not present in your account even with ‘REMOVED’ status.
![]() |
Google Ads API Team |
[2025-07-14 08:35:59Z GMT] This message is in relation to case "ref:!00D1U01174p.!500Ht01svXYh:ref" (ADR-00318780)
Hi Team,
Yes, you’re right — the account doesn’t contain those campaigns. I had added dummy IDs for reference.
The following query works:
However, this one fails:
Also, I haven’t included any ad_group filter.
My questions:
1. Why does the first query work with just a single campaign filter, but the second one fails with multiple campaign filters?
It seems inconsistent if a single campaign filter works but multiple (via IN) don’t. Could you please clarify the expected behavior?
2. On this note from your previous response:
“Note that historical performance mapping to that campaign doesn’t appear in the shopping_product report.”
Campaign ID Filter Inconsistency
Queries using the syntax campaign.id = {value} fail with error -
{ "shoppingProductError": "MISSING_CAMPAIGN_FILTER" }
, while using the full resource name (e.g., shopping_product.campaign = "customers/{accountId}/campaigns/{id}") works.
➤ Is there a reason for this behavior, and should we always prefer full resource names over IDs?
4. Multi-Campaign Filtering:
Could you please share a working sample query that demonstrates how to filter the shopping_product resource by multiple campaigns?
Thanks again for your continued help!
2. On this note from your previous response:
Could you confirm whether the current_state refer to the current_date? If yes, according to the shopping_product, Note that segmentation by date segments is not permitted and will return UNSUPPORTED_DATE_SEGMENTATION error. I would suggest referring to the product_metrics filter by account level
3. Can you please respond to this question??
Yes, filtering on the campaign.id value is not supported and you need to use the resource name. I would suggest referring to the product_statues(campaign_level) to know the sample query.
4. Multi-Campaign Filtering:
However the Multi-Campaign is supported and provided a combination of adgroup and campaign:
"query":"SELECT shopping_product.campaign, shopping_product.item_id, metrics.impressions FROM shopping_product WHERE shopping_product.item_id = '213126' AND shopping_product.campaign = 'customers/5680872613/campaigns/18267422150' AND shopping_product.ad_group = 'customers/5680872613/adGroups/138238657582''"
Thanks,
Google Ads API Team.