Possible bug in Google Ads Api v9

107 views
Skip to first unread message

Vasile Orhei

unread,
Apr 19, 2022, 2:11:25 AM4/19/22
to Google Ads API and AdWords API Forum
Summary: when the field segments.date is used in a Google Ads query, the data for some ads or ad groups is missing from the response.

Among other things, our app is using the Google Ads Api (v9) to retrieve data about the clicks, impressions, costs and conversions for each campaign, ad group and ad in our clients account. In order to achieve this we are using this type of query:

Url:https://googleads.googleapis.com/v9/customers/59**43/googleAds:search
Post content: {"query":"SELECT campaign.id, campaign.name ,campaign.status, campaign.serving_status, campaign.advertising_channel_type, campaign.advertising_channel_sub_type, campaign.bidding_strategy_type ,campaign.start_date, campaign.end_date, ad_group.id, ad_group.name, ad_group.status, ad_group.type, ad_group_ad.ad.id, ad_group_ad.ad.type, ad_group_ad.status, ad_group_ad.ad.added_by_google_ads, ad_group_ad.ad.name, metrics.all_conversions, metrics.all_conversions_value_by_conversion_date, metrics.average_cost,metrics.average_cpc, metrics.average_cpm, metrics.average_cpv, metrics.clicks, metrics.conversions, metrics.conversions_value_by_conversion_date, metrics.cost_micros, metrics.cost_per_all_conversions, metrics.cost_per_conversion, metrics.ctr, metrics.impressions, metrics.interactions, segments.date FROM ad_group_ad  WHERE segments.date BETWEEN ? AND ?","pageSize":"50"}

Recently, we noticed that we are missing values for some of the ads (by comparing with the reports from the Google Ads web interface). What seems to be common for these ads is that they report conversions (by conversion time), but they are not reporting impressions.

We manage to find a precise example. We have a campaign, which has two adgroups. When we are running this query:
SELECT campaign.id,campaign.name,campaign.status,campaign.serving_status,campaign.advertising_channel_type, campaign.advertising_channel_sub_type, campaign.bidding_strategy_type, campaign.start_date,campaign.end_date, metrics.all_conversions, metrics.all_conversions_value_by_conversion_date, metrics.average_cost,metrics.average_cpc, metrics.average_cpm, metrics.average_cpv, metrics.clicks,metrics.conversions,metrics.conversions_value_by_conversion_date, metrics.cost_micros,metrics.cost_per_all_conversions,metrics.cost_per_conversion,metrics.ctr, metrics.impressions,metrics.interactions,segments.date FROM campaign  WHERE segments.date BETWEEN '2022-04-17' AND '2022-04-17' and campaign.id=16**38
The response is
[{"campaign":{"servingStatus":"SERVING","endDate":"2037-12-30","advertisingChannelType":"SHOPPING","name":"Fo***ts", "resourceName":"customers/59**43/campaigns/16**38","id":"16**38","biddingStrategyType":"MANUAL_CPC","startDate":"2022-03-31", "status":"ENABLED"},"metrics":{"ctr":0.018867924528301886,"conversions":0,"averageCpc":330000,"impressions":"53","costPerAllConversions":330000,"interactions":"1","conversionsValueByConversionDate":97.336860384,"allConversionsValueByConversionDate":97.336860384,"costMicros":"330000","allConversions":1,"clicks":"1","averageCost":330000,"averageCpm":6226415.094339622},"segments":{"date":"2022-04-17"}}]

The campaign has for 2022-04-17 a conversion of 97.336860384, which is in agreement with Google Ads reports.

When we are trying to see the same data at the adgroup level, by running:
SELECT campaign.id, campaign.name, campaign.status, campaign.serving_status, campaign.advertising_channel_type, campaign.advertising_channel_sub_type, campaign.bidding_strategy_type, campaign.start_date, campaign.end_date, ad_group.id, ad_group.name, ad_group.status, ad_group.type, metrics.all_conversions ,metrics.all_conversions_value_by_conversion_date, metrics.average_cost, metrics.average_cpc, metrics.average_cpm, metrics.average_cpv, metrics.clicks,metrics.conversions, metrics.conversions_value_by_conversion_date, metrics.cost_micros, metrics.cost_per_all_conversions, metrics.cost_per_conversion, metrics.ctr, metrics.impressions, metrics.interactions, segments.date FROM ad_group  WHERE segments.date BETWEEN '2022-04-17' AND '2022-04-17' and campaign.id=16**38
The response is
[{"adGroup":{"name":"P**k","resourceName":"customers/59**43/adGroups/14**32","id":"14**32","type":"SHOPPING_PRODUCT_ADS","status":"ENABLED"},"campaign":{"servingStatus":"SERVING","endDate":"2037-12-30","advertisingChannelType":"SHOPPING","name":"Focused Products", "resourceName":"customers/59**43/campaigns/16**38", "id":"16**38", "biddingStrategyType":"MANUAL_CPC", "startDate":"2022-03-31","status":"ENABLED"}, "metrics":{"ctr":0.018867924528301886, "conversions":0,"costMicros":"330000","averageCpc":330000, "allConversions":1, "clicks":"1","impressions":"53","costPerAllConversions":330000,"averageCost":330000,"averageCpm":6226415.094339622,"interactions":"1"},"segments":{"date":"2022-04-17"}}]
Only one of the adgroups is returned, and it’s the one which has no conversions.

We tested multiple queries, and I think that the one that points to the precise problem is this one:
SELECT campaign.id,campaign.name,campaign.status,campaign.serving_status,campaign.advertising_channel_type, campaign.advertising_channel_sub_type, campaign.bidding_strategy_type, campaign.start_date, campaign.end_date, ad_group.id, ad_group.name, ad_group.status, ad_group.type , metrics.all_conversions, metrics.all_conversions_value_by_conversion_date, metrics.average_cost, metrics.average_cpc , metrics.average_cpm, metrics.average_cpv, metrics.clicks, metrics.conversions, metrics.conversions_value_by_conversion_date ,metrics.cost_micros, metrics.cost_per_all_conversions, metrics.cost_per_conversion, metrics.ctr ,metrics.impressions, metrics.interactions, segments.date FROM ad_group  WHERE segments.date BETWEEN '2022-04-17' AND '2022-04-17' and ad_group.id=13**27
(where we are trying to retrieve the precise addgroup which is not retrieved at 2.). The response from this query is empty.

But if we remove the segments.date field from the query
SELECT campaign.id, campaign.name, campaign.status, campaign.serving_status, campaign.advertising_channel_type, campaign.advertising_channel_sub_type, campaign.bidding_strategy_type, campaign.start_date, campaign.end_date, ad_group.id, ad_group.name, ad_group.status, ad_group.type ,metrics.all_conversions, metrics.all_conversions_value_by_conversion_date, metrics.average_cost, metrics.average_cpc , metrics.average_cpm, metrics.average_cpv, metrics.clicks, metrics.conversions, metrics.conversions_value_by_conversion_date ,metrics.cost_micros, metrics.cost_per_all_conversions, metrics.cost_per_conversion, metrics.ctr , metrics.impressions, metrics.interactions FROM ad_group  WHERE segments.date BETWEEN '2022-04-17' AND '2022-04-17' and ad_group.id=13**27
The response is:
 [{"adGroup":{"name":"À**te","resourceName":"customers/59**43/adGroups/13**27", "id":"13**27", "type":"SHOPPING_PRODUCT_ADS","status":"ENABLED"},"campaign":{"servingStatus":"SERVING","endDate":"2037-12-30","advertisingChannelType":"SHOPPING","name":"Focused Products","resourceName":"customers/59**43/campaigns/16**38", "id":"16**38","biddingStrategyType":"MANUAL_CPC","startDate":"2022-03-31","status":"ENABLED"},"metrics":{"conversions":0,"allConversionsValueByConversionDate":97.336860384,"costMicros":"0","allConversions":0,"clicks":"0","impressions":"0","interactions":"0","conversionsValueByConversionDate":97.336860384}}]
Which is precisely the adgroup missing from our type 1 queries.

Notes:
-This behavior is manifest only for a small number of ads.
-We absolutely need the segments.date field, because we are storing the data for each day,  for reporting purposes. Our requests are usually used for a longer period of time (in order to minimize the number of calls made to the API) and if we remove the segments.date field we will not obtain the data for each day.
-I removed the real Id’s from the request.

Vasile Orhei

unread,
Apr 19, 2022, 1:11:37 PM4/19/22
to Google Ads API and AdWords API Forum
We are seeing the same behavior when using  Google Ads Api v10

Google Ads API Forum Advisor

unread,
Apr 19, 2022, 11:53:12 PM4/19/22
to vor...@adamplify.com, adwor...@googlegroups.com
Hi Vasile,

Thank you for reaching out and for the detailed description of your issue.

When using segments fields in your queries for the Google Ads API, certain records may not be returned due to specific conditions. For more information on Google Ads API reporting behavior when these segments fields are used, you may refer to our segmentation guide and this section, as well as this section from our zero metrics guide.

Should the above documentation do not explain the behavior you are encountering, you may provide to our team you complete request and response logs, with its request-id, and the login-customer-id used. 

If you haven't yet, logging can be enabled by navigating to the Client libraries > Your client library (ex. Java) > Logging documentation.

You may then send the requested information via the Reply privately to author option. If this option is not available, you may send the details directly to our googleadsa...@google.com alias instead.

Best regards,

Google Logo
Peter Laurence
Google Ads API Team
 


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