GA4 Request Errors: Dimension and Metric Limits, Date Presets and Filters

Most GA4 request failures through Windsor.ai are about field names or field combinations, and those have their own guides: “Unexpected field(s)” and “Some of the selected fields cannot be queried together”. This page covers everything else we see on GA4 requests, in order of frequency: invalid date presets, the GA4 API’s size limits per request, date filters, filter operators and syntax, then the rarer messages. Each section stands on its own; jump to the message you are seeing.

"Invalid date_preset. Allowed values are: last_Xd, last_XdT..."

Example: the request used date_preset “today”, “todayT”, “last_6mT”, “last_12mT”, “last_3mT” or “custom”.

Windsor accepts these presets on every connector: last_Xd (days), last_Xw (weeks), last_Xm (months), last_Xy (years), last_year, last_2years, this_month, this_year. By default a preset ends yesterday. Add T to include today, but only on these forms: last_XdT, last_yearT, last_2yearsT, this_monthT, this_yearT. There is no T variant for weeks or months, so last_6mT and last_12mT fail, and there is no “today” preset.

  • Fix: for the last six months including today use last_180dT. For today alone, or any exact range, use date_from and date_to with YYYY-MM-DD dates instead of a preset.
  • Passing “custom” as the preset does nothing; “custom” means supplying date_from and date_to.
  • Ask your assistant: “Use date_preset last_30d, or date_from and date_to for an exact range. Do not use today or a T suffix on months.”

"GA4 allows at most 9 dimensions per request" and "at most 10 metrics per request"

Example: “GA4 allows at most 10 metrics per request, but 12 were requested. Please reduce the number of selected metrics.”

These are Google’s limits on a single Data API report: 9 dimensions and 10 metrics. Windsor counts your fields before calling Google and stops the request rather than let it fail. Date, hour and year_month count as dimensions.

  • Fix: split the field list into two requests that share the same dimensions, then join on those dimensions. Sessions, users and engagement in one request, ecommerce and revenue in another is the usual cut.
  • Drop aliases that return the same value twice, such as users next to active_users, or totalrevenue next to transactionrevenue.
  • Ask your assistant: “Split these GA4 metrics into two requests of at most 10 metrics each with the same dimensions, run both, and join them on date and session_source_medium.”

"Date filter is not supported, please set the required date range instead"

Example: the request put date into the filters, such as [["date", "gte", "2026-08-01"]], instead of setting a date range.

Dates are a request parameter, not a filter. Windsor applies the range through date_preset or date_from and date_to, and GA4 requires it that way.

  • Fix: remove the date condition from filters and set date_from and date_to, or a date_preset. Filters are for dimensions and metrics only.
  • Ask your assistant: “Move the date condition out of filters into date_from and date_to and run the request again.”

"Invalid operator: 'equals'" and other unknown filter operators

Example: Invalid operator: 'equals', Invalid operator: '=', Invalid operator: '==', Invalid operator: 'nin', Invalid operator: 'not_contains', Invalid operator: 'greater_than', Invalid operator: 'ne'.

Windsor filters use a fixed set of operator names, the same on every connector: eq, neq, gt, gte, lt, lte, contains, ncontains, null, notnull, in. Symbols, spelled-out names and other tools’ abbreviations are rejected before the request reaches Google.

  • Fix: replace the operator. equals, = and == become eq; ne, != and not_equals become neq; greater_than becomes gt; not_contains becomes ncontains; nin has no equivalent, so use one neq condition per value joined with and.
  • For in, the value is the list of alternatives as one JSON-encoded string: ["country", "in", "["United States", "Canada"]"].
  • Ask your assistant: “Rewrite the filter with Windsor operators: eq, neq, gt, gte, lt, lte, contains, ncontains, null, notnull or in.”

"Invalid filter: 'country'" and other filter syntax errors

Example: Invalid filter: 'country', Invalid filter: 'event_name', Invalid filter: 'and', or the whole filter echoed back, such as Invalid filter: '[['country', 'eq', 'United States']]'.

Windsor received the filter in a shape it does not recognise. A single condition is a three-item list, ["field", "operator", value], or the equivalent object {"field": "...", "operation": "...", "value": "..."}. The filters parameter is a list of those conditions, with the strings “and” or “or” between them, and nesting allowed. Passing the whole structure as a quoted string with single quotes, passing a bare field name, or leaving a stray “and” at the start all produce this error.

  • Fix: send filters as a real list with double-quoted JSON strings. One condition: [["country", "eq", "United States"]]. Two conditions: [["country", "eq", "United States"], "and", ["sessions", "gt", 100]]. Clients that cannot send nested lists may send the same structure as one JSON-encoded string with double quotes.
  • Ask your assistant: “Send filters as a JSON list of [field, operator, value] conditions joined with and, using double quotes.”

Less common messages

These three show up on a handful of accounts a month. Each has a short fix.

"Invalid date range: date_to is earlier than date_from"

Example: “Invalid date range: date_to (2026-08-31) is earlier than date_from (2026-09-01).”

The dates in the message point at the cause: a “this month” range computed as the first of the month through yesterday, in the first days of a month, when yesterday still falls in the previous month.

  • Fix: use the preset this_monthT to include today, or set date_from and date_to explicitly and check that date_to is not before date_from.

"You have exhausted your GA4 API requests quota, please try again later"

Example: “… 429 … Exhausted property tokens for a project per hour.”

Google meters GA4 Data API usage per property in tokens, with hourly and daily caps. Wide requests with many dimensions and long date ranges spend tokens fastest. When the property is out of tokens for the hour, no request against it can complete until the hour rolls over.

  • Fix: wait for the hour to roll over, then request fewer dimensions and a shorter range.
  • If it recurs daily, the property is shared with other tools that consume the same quota. Our GA4 quota guide explains how tokens are charged.

"Data size is too big" and "Data has not been pulled in time"

Example: “Data size is too big. Request less fields, accounts or date range.”

The result exceeded what a single request can return. High-cardinality dimensions (page_path, landing_page_plus_query_string, transactionid, event_name by date) over long ranges are the usual cause.

  • Fix: shorten the date range, drop the highest-cardinality dimension, limit the request to one property with the accounts parameter, or add a filter. For a year of page-level data, request month by month.
  • Ask your assistant: “Run this GA4 request one month at a time and stitch the results.”

Related reading

Tired of juggling fragmented data? Get started with Windsor.ai today to create a single source of truth

Let us help you streamline data integration and AI insights, so you can focus on what matters: growth strategy.
g logo
fb logo
big query data
youtube logo
power logo
looker logo