Google splits GA4’s API into two separate products: the Data API, for pulling report data, and the Admin API, for configuration and account management. Windsor’s connector uses the Data API, and most of the naming confusion that causes failed pulls traces back to one thing: the Data API’s own field names are camelCase (eventCount, totalUsers, sessionSourceMedium), while Windsor’s flattened field ids are lowercase (event_count, totalusers, session_source_medium). Guessing the wrong casing, or mixing the two, is behind more failed GA4 pulls than any other single cause. The full field-name lookup is in the GA4 “Unexpected field(s)” error guide.
The canonical pull, API and no-code
The most common full pull, date, event_count, and event_name together, is a single Data API request:
POST https://analyticsdata.googleapis.com/v1beta/properties/{propertyId}:runReport
{
"dateRanges": [{"startDate": "30daysAgo", "endDate": "today"}],
"dimensions": [{"name": "date"}, {"name": "eventName"}],
"metrics": [{"name": "eventCount"}]
}
The same pull through Windsor.ai, once GA4 is connected, is a plain-language prompt to ChatGPT, Claude, or Copilot:
Pull date, event_count, and event_name for my GA4 property over the
last 30 days. Which events are trending up or down?
Most-requested fields, mapped to the API
The fields teams pull most through Windsor map directly to Data API dimensions and metrics: sessions is the sessions metric, session_default_channel_group is the sessionDefaultChannelGroup dimension, engaged_sessions and engagement_rate are engagedSessions and engagementRate. The pattern holds throughout: take Windsor’s snake_case id, convert to camelCase, and it’s the raw API field.
Limits that cause the most errors
The Data API allows at most 10 metrics per request (9 dimensions), an 11th fails the whole call rather than truncating it; see the GA4 request limits guide for the full list of caps and date-preset rules. A separate error family covers fields that can’t be requested together in one call at all, concentrated around transactions, event counts, and ecommerce fields, each needing its own request; the “fields cannot be queried together” guide walks through the fix for each case. Both limits apply identically whether you’re calling the raw API or pulling through Windsor.
Handling API quotas
The Data API enforces its own request quotas independent of Windsor’s own rate limits. For the specific quota tiers and how to work within them when the destination is Looker Studio, see Optimizing GA4 API Quotas in Looker Studio.
GA4 API without code
Everything above uses the real Data API dimensions and metrics without writing any code or handling OAuth. Connect your GA4 property to Windsor.ai once, and ChatGPT, Claude, or Copilot can query it directly through plain-language prompts.

