Google Ads “Fields Cannot Be Queried Together” Error: Troubleshooting Guide
If you build a custom Google Ads report and see an error like “The fields you have requested cannot be queried together”, “Cannot select the following segments because at least one unsupported metric is found…”, or “The requested fields can only be read from the ad_group_criterion report…”, this isn’t a bug or a connection problem. It means the specific combination of fields you selected isn’t something the Google Ads reporting API supports in a single request, and Windsor is passing that restriction along.
This is one of the most common issues people hit when building Google Ads reports, so this guide walks through why it happens and how to fix the most frequent cases. Error wording can vary slightly by Google Ads API version, so treat the quoted messages below as representative, not verbatim.
Why this happens
Google Ads doesn’t store performance data as one big flat table. It splits it across different report “resources”: campaign-level stats, ad group-level stats, keyword performance, ad group criteria, conversion action metadata, auction insights, Keyword Planner data, and more. Each resource only supports a specific set of fields, and Google Ads’ API rejects a query the moment it mixes fields from resources that can’t be joined together in one call.
This compatibility isn’t just a matter of intuition. Google Ads exposes it as structured metadata. Every resource, field, segment, and metric has a selectable_with list, retrievable via GoogleAdsFieldService (the same metadata that powers the API’s Query Builder), that spells out exactly what it can be combined with. That metadata is the actual source of truth for compatibility, not the field names alone.
In practice, this means: some field combinations that look perfectly reasonable to a user (e.g. “ad_group_criterion_keyword_text, cost, clicks, conversions”) actually span more than one underlying resource, and Google Ads won’t return them in a single report.
For the complete list of fields Windsor supports for this connector, see the Google Ads field reference.
Note that the field names used throughout this guide (e.g. “keyword”, “quality_score”) are Windsor’s own flattened field names, not the raw Google Ads API (GAQL) field paths: the underlying GAQL field for keyword text, for example, is ad_group_criterion.keyword.text.
Each fix below is something you can hand to an AI assistant instead of doing by hand. Claude, ChatGPT, Claude Code, Cursor, and OpenAI Codex can all call Windsor more than once and merge the results themselves. Describe the conflict and the join key from the case below, and it will take it from there.
Common causes, in order of how often we see them
1. Conversion-related segments combined with standard metrics
Example error: “Google does not allow certain combinations of metrics, because they are reported separately in Google Ads (e.g. impressions cannot be combined with conversions). Try another combination of fields.”
Don’t take the bracketed example literally. What actually fails is adding a conversion-related segment such as conversion_action_category or conversion_action_name to a query that also selects a standard metric, and impressions is not the only trigger: cost and clicks break it the same way. This is not a blanket rule that impressions can never be combined with conversions: a standard campaign or ad group performance report that includes both impressions and conversions works fine. The conflict is specifically about certain conversion-related segments, not the base conversion metrics themselves.
Certain metric/segment pairs are tracked on different internal segmentation logic and Google Ads refuses to blend them in one query.
- Fix: split the report into two requests: one with the conversion segment and its own metrics, one with your standard performance metrics, then join the results yourself by date and campaign if needed.
- Ask your assistant: “Split this into two Windsor requests, one for [the conflicting segment/metric] and one for the rest, then join them by date and campaign.”
2. Using the Keyword Planner keyword field instead of the live keyword field
Example error: “The fields you have requested cannot be queried together… keyword, cost, clicks, impressions, spend, conversions…”
This one catches almost everyone, because two different fields both look like “keyword”:
- keyword returns keyword ideas from Keyword Planner, Google’s research data, not your account’s. It belongs to a separate API service, cannot be combined with performance metrics, and needs a seed (see case 6).
- keyword_text is your actual live keyword. It sits on the same resource as your performance metrics.
If you picked keyword when you meant your own keywords, the field combination isn’t the problem; the field is.
- Fix: swap keyword for keyword_text. Live keyword reporting combines freely with campaign, ad group, match type, quality score and standard metrics in a single request. This works in one call: date, campaign, ad_group, keyword_text, keyword_match_type, quality_score, cost, clicks, impressions, conversions.
- There is no need to split keyword performance away from campaign or ad group breakdowns. Request them together.
- If you want Keyword Planner research data instead, see case 6, since that one genuinely does need its own request.
Quality Score, read carefully: quality_score does combine with date without error, but it returns a current snapshot repeated across every date, not history. It also sums across ad groups when ad_group is left out: the same keyword scoring 3 in each of two ad groups comes back as 6, and Quality Score only runs 1 to 10. Always include ad_group, and use historical_quality_score (date-segmentable, back to January 2016) when you want Quality Score over time. Pull it above ad-group level and the totals run into the hundreds, well outside the 1 to 10 scale, so a plausible-looking number here isn’t necessarily a valid one.
Two more Quality Score traps. historical_quality_score sums across ad groups exactly like quality_score, so include ad_group for that field too. And criterion_id is a numeric field, so it gets added up rather than grouped by, and two ad groups sharing a criterion come back as one row with the two IDs summed. Use ad_group or ad_group_id instead; those are text fields and group correctly.
For a worked example, see Google Ads Quality Score reporting in BigQuery.
Ask your assistant: “Use keyword_text, not keyword. I want my live keywords, not Keyword Planner ideas. Pull them with campaign, ad group and my standard metrics in one Windsor request.”
3. ad_group_criterion keyword fields requested with other metrics
Example error: “The requested fields can only be read from the ad_group_criterion report and cannot be combined with fields outside it. Requested fields: cost, clicks, date, ad_group_criterion_keyword_text, cost_micros, impressions, spend, conversions, ad_group_criterion_keyword_match_type.”
Fields prefixed ad_group_criterion_* live entirely inside the ad_group_criterion resource. Google’s own documentation confirms this resource carries no metrics of its own: attributed resources like campaign and ad_group can be selected alongside it for context, but they won’t segment any metric, and the resource’s fields cannot be combined with standard cost/click/impression/conversion metrics in the same request.
- Fix: pull ad_group_criterion_keyword_text / ad_group_criterion_keyword_match_type on their own (campaign and ad_group are fine alongside them), and get performance metrics in a separate request. Do not add date. The resource has no dates, so date comes back empty on every row and your date range is ignored: a two-day request still returns every keyword criterion in the account, including ones from campaigns that stopped running years ago.
- Ask your assistant: “Pull the ad_group_criterion keyword fields in one Windsor request with campaign and ad_group but no date, and performance metrics in another, then join them by ad group and keyword text.”
4. Conversion action metadata requested from a performance query
Example error: fields like conversion_action_category, conversion_action_type, conversion_action_name, conversion_tracker_id, conversion_action_status fail when requested together with campaign/ad_group performance metrics.
Conversion action fields describe the configuration of your conversion actions (their names, categories, tracking status). They’re metadata, not performance data, and live in a separate resource from performance metrics. This restriction is about which resource the query is rooted on, not about the presence of a date field: a query rooted on conversion_action itself does support segments.date and metrics like all_conversions.
- Fix: request conversion_action_* fields in their own report, rooted on the conversion_action resource (date is fine there). Use a separate report for day-by-day conversion performance from your campaign/ad_group report.
- The conversion_action_* fields do not all combine with each other either. conversion_tracker_id works alongside conversion_action_name, conversion_action_category and conversion_action_status, but conversion_tracker_id together with conversion_action_type fails. Pull the type separately if you need both.
- Ask your assistant: “Pull conversion action details in one Windsor request and day-by-day conversion performance in another, then join them by conversion action ID, not date.”
5. Auction insight segments combined with standard metrics
Example error: “Cannot select the following segments because at least one unsupported metric is found in SELECT or WHERE clause: ‘segments.auction_insight_domain’ (unsupported metrics: ‘impressions’, ‘search_impression_share’).”
Auction Insights is a specialized, competitor-facing report. It only supports a narrow set of auction-insight-specific metrics. Standard metrics like impressions and search_impression_share aren’t available alongside it.
- Before troubleshooting field compatibility: most developers hit a METRIC_ACCESS_DENIED error first. Google defines several named auction-insight metrics (auction_insight_search_impression_share, auction_insight_search_overlap_rate, auction_insight_search_outranking_share, and others), but all of them require an allowlisted account, and that allowlist has been closed to new applicants. If you’re getting METRIC_ACCESS_DENIED, splitting the request won’t fix it: you don’t currently have API access to this report at all.
- Fix: pull auction_insight_domain with date, campaign and, if you want it, ad_group in one request (those dimensions are all the connector exposes here), and pull impressions / search_impression_share separately from a standard campaign report.
- Note: these two reports do share a join key: auction_insight_domain comes back segmented by your own campaign and date, so date + campaign joins them cleanly after pulling. What you cannot do is select both in the same request.
- Windsor currently exposes one auction insights field, auction_insight_domain, and none of the allowlist-only auction-insight metrics, so the competitor domain list is what you get today.
- Ask your assistant: “Pull auction_insight_domain with date and campaign in one Windsor request and impressions or search impression share in another, then join them on date and campaign.”
6. Keyword Planner metrics mixed with live keyword performance fields
Example error: “The fields you have requested cannot be queried together… keyword_text, avg_monthly_searches.”
avg_monthly_searches (and other Keyword Planner metrics) comes from Google’s keyword research/forecast data, not your account’s actual performance data. It’s not just a different resource within the same reporting API: it comes from an entirely separate API service (the Keyword Planning idea service, e.g. generateKeywordIdeas), while live performance data comes from the standard Google Ads reporting service. There’s no way to request both in one call, and no shared row-level join key beyond the keyword text itself.
- Fix: request Keyword Planner metrics on their own; pull actual performance for that keyword in a separate report, and join on keyword text.
- Keyword Planner requests also need a starting point: set the Keyword Planner Seeds and/or Keyword Planner Page URL option on the connector, or the request fails with “Keyword Planner requires at least one seed”.
- Watch the column names when you join. Keyword Planner returns its text in the keyword field; live performance returns keyword_text. Same kind of value, different column, so map one onto the other rather than joining on a shared name. With a seed set, these work together in one request: keyword, avg_monthly_searches, competition_index, keyword_competition.
- Ask your assistant: “Pull Keyword Planner metrics in one Windsor request and live keyword performance in another, then join them by keyword text.”
General troubleshooting checklist
- Check you picked the field you meant: keyword returns Keyword Planner ideas; keyword_text is your live keyword. Mixing those two up causes more of these errors than any real restriction.
- Read the field list in the error message. It tells you exactly which fields were requested together.
- Check whether any fields are prefixed ad_group_criterion_*, conversion_action_*, or relate to Keyword Planner (avg_monthly_searches, monthly_searches, competition_index, keyword_competition, etc.). These almost always need their own request.
- If the conflict is between two ordinary metrics, try removing one and see if the report runs, then request it separately.
- As a last check, look up the fields directly in the Google Ads API’s field metadata (GoogleAdsFieldService, or the Query Builder built on top of it) and check their selectable_with list. If it doesn’t allow the combination there either, it’s a genuine Google Ads API restriction, not a Windsor-specific limitation.
- Split the report into multiple requests along the lines above, and join the results on shared dimensions (date, campaign, keyword) after pulling them.
- Ignore fields in the error message that you never selected. Windsor adds a few automatically (date, totalcost and cost_micros all show up this way), so read past them to find the real conflict.
Quick reference: field groups that need their own request
| Field group | Example fields | Combine with standard metrics? |
|---|---|---|
| Live keyword performance | keyword_text, keyword_match_type, quality_score, historical_quality_score | Yes, including campaign and ad group in the same request. Include ad_group when pulling Quality Score, or scores are summed across ad groups |
| Ad group criterion | ad_group_criterion_keyword_text, ad_group_criterion_keyword_match_type | No metrics, and no usable date (it returns empty), but campaign and ad_group are fine in the same request |
| Conversion action metadata | conversion_action_category, conversion_action_type, conversion_action_name, conversion_tracker_id | No when mixed with campaign/ad_group performance fields, but yes with date/segments.date when rooted on the conversion_action resource itself. And these fields do not all combine with each other: conversion_tracker_id plus conversion_action_type fails |
| Auction insights | segments.auction_insight_domain and related auction fields | No (only auction-insight-specific metrics), and requires an allowlisted account (METRIC_ACCESS_DENIED otherwise) |
| Keyword Planner | keyword, avg_monthly_searches, monthly_searches, competition_index, keyword_competition | No, separate API service entirely, not just a separate resource. Also requires a seed or page URL |
| Standard performance | cost, clicks, impressions, spend, conversions, cost_micros, campaign, ad_group, date | Yes, with each other, but some conversion-related segments (see case 1 above) still need to be split out |
Still stuck?
If you’ve split the request along these lines and still get a “cannot be queried together” error, reach out to support with:
- The exact field list from the error message.
- Your connector/account.
- The date range you requested.
- The full error message, verbatim.
- Whether any of the selected fields relate to Keyword Planner, conversion actions, auction insights, or ad_group_criterion.
That’s the fastest way for us to identify a genuinely new restriction and add it to this guide.
Related reading
Tired of juggling fragmented data? Get started with Windsor.ai today to create a single source of truth
Windsor vs Coupler.io