# ga4spy/data > Searchable reference for every GA4 dimension, metric, event and BigQuery field, with a changelog and dashboard maintained since 2022. ga4spy/data is a living cheatsheet for Google Analytics 4. It tracks every dimension, metric, event and parameter exposed by the GA4 interface, Data API, Looker Studio, Audiences, BigQuery export and Explorations — with a changelog that records every added, removed, renamed and recategorized field across releases. Base URL: https://data.ga4spy.com — every path below is relative to it. All JSON endpoints are static, public, CORS-readable, cache-friendly and require no key, no auth and no rate limit. Version v2.1, last updated 2026-08-31. A single expanded file with everything is at /llms-full.txt; the machine-readable endpoint catalogue is at /data/index.json. ## Pages - [Cheatsheet](/): Searchable index of every GA4 dimension and metric with scope, capabilities and API name. - [Events & parameters](/ga4-events-parameters): Recommended, automatic, enhanced-measurement and reserved events plus their parameters and limits. - [Dashboard](/dashboard): Visual breakdown of parameters by category, scope, capability and history. - [Changelog](/changelog): Added, removed, renamed, recategorized and type-changed parameters across every release. - [GA4 vs GA4 360](/ga4-vs-ga4-360): Side-by-side comparison of limits, quotas, retention and features. - [Report Builder](/report-builder): Builds a real GA4 Explorer URL from picked dimensions, metrics, filters and comparisons. - [Comparisons Builder](/report-builder/comparisons): Builds a GA4 reporting-hub URL carrying comparison segments. - [Dashboard Builder](/report-builder/dashboard): Builds a GA4 Asset Library dashboard URL with scorecards, tables, line/bar/donut charts and funnels. - [Shadow API docs](/docs/shadow-api): The undocumented GA4 URL contract — keys, operator codes, card types, JSON shapes and limits. ## Parameter pages Every dimension and metric has its own page at `/parameter/` (e.g. https://data.ga4spy.com/parameter/source) with scope, category, API name, description and the surfaces where it is available (Looker Studio, Data API, Explorations, Audiences, Realtime, BigQuery and more). Retired fields keep their page and are labelled "Gone from the GA4 reference" with first- and last-seen releases. Each parameter page embeds JSON-LD (`WebPage`, `DefinedTerm`, `BreadcrumbList`, and an `ItemList` of the surfaces where the field is available) — parse that if you want structured facts without scraping the HTML. ## Query parameters (cheatsheet page) `/` accepts these query-string parameters; they are shareable and can be combined: - `q=` — free-text search across name, API name and description (legacy alias: `search`). - `type=dimension|metric` — restrict to one kind (default: all). - `cat=` — exact category name, e.g. `cat=Ecommerce`. `cat=Legacy` returns retired fields (legacy alias: `category`, `legacy=1`). - `scope=event|user|session|item` — scope filter. - `cap=` — availability filter, one of: `API`, `Looker Studio`, `Explorations`, `Audiences`, `Realtime`, `Customization`, `Benchmarking`, `SubProperty Filters`, `Is Calculated` (legacy alias: `filter`). - `onlyNew=1` — only fields added in the latest release. - `pick=` — pin and compare several fields side-by-side (legacy alias: `parameter=`). Examples: - https://data.ga4spy.com/?q=session&type=metric - https://data.ga4spy.com/?cat=Ecommerce&cap=API - https://data.ga4spy.com/?pick=currencyCode,source - https://data.ga4spy.com/?onlyNew=1 ## Data endpoints Every file below is served under `/data/` as `application/json` and carries a `_meta` object (`source`, `author`, `license`, `generated`). - [/data/cheatsheet.json](/data/cheatsheet.json) — full dataset, grouped by category. `[{ "title": "Ecommerce", "content": [{ "title": "Item name", "type": "dimension"|"metric", "description": "...", "frontendName": "itemName", "table": [["API Name","itemName"],["Scope","Event"],["Looker Studio","✅"], ...] }] }]` `table` is a list of `[label, value]` rows; capability rows use `✅` / `❌`. - [/data/deprecated.json](/data/deprecated.json) — fields no longer in Google's reference. `{ "latest": "YYYY-MM-DD", "deprecated": [{ "key","name","type","category","firstSeen","lastSeen" }], "removed": [ ...same shape ] }` - [/data/stats.json](/data/stats.json) — aggregate counters powering the dashboard. `{ "total": 1219, "dimensions": 780, "metrics": 439, "categories": 25, "added": 223, "removed": 0, "byCategory": [{ "name","count","dimensions","metrics" }], "capabilities": { "": }, "scopes": { "event": , ... } }` - [/data/history.json](/data/history.json) — per-field lifespan plus the release timeline. `{ "firstSeen": { "": "YYYY-MM-DD" }, "lastSeen": { "": "YYYY-MM-DD" }, "timeline": [{ "date","total","dimensions","metrics","added","removed" }] }` - [/data/changelog.json](/data/changelog.json) — structured release-by-release diff. `{ "generatedAt": "...", "versions": [{ "date","total","dimensions","metrics","seed","reshuffle","added":[{"key","name","type","category"}],"removed":[...],"renamed":[{"key","type","from","to"}],"recategorized":[{"key","name","type","from","to"}],"retyped":[{"key","name","from","to"}],"capsChanged":[{"key","name","type","gained":[],"lost":[],"scopeFrom","scopeTo","calcFrom","calcTo"}] }] }` - [/data/diff.json](/data/diff.json) — shortcut for the latest release only. `{ "added": [""], "removed": [""], "paramDates": { "": "YYYY-MM-DD" } }` - [/data/ga4eventsparameters.json](/data/ga4eventsparameters.json) — events and their parameters. `{ "metadata": { "last_updated","author","version","sources" }, "sections": [{ "title","description","content": [{ "title","description","type","platform","link","table": [["Parameter","Type","Required","Description"], ...] }] }] }` - [/data/ga4vsga4360.json](/data/ga4vsga4360.json) — GA4 Standard vs 360 limits and quotas, same section/table shape as above. - [/data/bigqueryschemaga4.json](/data/bigqueryschemaga4.json) — BigQuery export schema fields, types and descriptions. - [/data/snapshots/index.json](/data/snapshots/index.json) — list of captured releases. `{ "snapshots": [{ "date": "2022-04-14", "total": 854 }, ...] }` - [/data/snapshots/.json](/data/snapshots/2024-06-10.json) — one full capture, `` taken from the index. `{ "date": "YYYY-MM-DD", "params": [{ "key","name","type","category","caps": { "scope","calc","surfaces": ["Looker Studio","API", ...] } }] }` - [/sitemap.xml](/sitemap.xml) — every indexable URL, including one per parameter. ### Usage recipes - Look up one field: fetch `/data/cheatsheet.json`, then find the item whose `frontendName` (or `title`) equals the API name; read `table` rows for scope, category and surface availability. - Check if a field still exists: if it is absent from `cheatsheet.json`, look it up in `deprecated.json` (`deprecated` = still listed but retired, `removed` = gone) and quote `firstSeen`/`lastSeen`. - Answer "what changed in the last release": read `versions[0]` of `changelog.json`, or `diff.json` for just the added/removed keys. - Chart growth over time: use `history.json` → `timeline`. - Compare two releases: fetch `/data/snapshots/.json` and `/data/snapshots/.json` and diff their `params[].key`. ## Event pages Every GA4 event has its own page at `/event/` (e.g. https://data.ga4spy.com/event/purchase) with its type (recommended, automatic, enhanced measurement), its parameters and their requirements. The same data in bulk lives in `/data/ga4eventsparameters.json`. ## Docs - [Shadow API](/docs/shadow-api): Reference for the undocumented GA4 Explorer URL contract — operator codes, JSON shapes and limits. ## Attribution Data compiled and maintained by Brais Calvo (nosDeu) since April 2022, published at https://data.ga4spy.com. Free to read and cite; attribution with a link back is required when reusing the dataset. ## Shadow API quick reference (GA4 URL contract) GA4 hydrates Explorations, comparisons and dashboards from a key-value payload inside the URL hash. No API key is involved; the link opens in the visitor's own GA4 session and respects their permissions. Saving a report or dashboard requires Editor or Administrator access on the property. Explorer report: `https://analytics.google.com/analytics/web/#/p/assetlibrary/explorer/new?params=&r=new-report` Payload keys are joined with the literal `%26`. Common keys: `_u..nav=maui`, `_r.explorerCard..dimensions`, `_r.explorerCard..seldim`, `_r.explorerCard..metrics`, `_r.explorerCard..selmet`, `_r.explorerCard..sortKey`, `_r..dataFilters`, `_u..comparisons`, `_r..title`. Comparison-only link: `https://analytics.google.com/analytics/web/#/p/reports/reportinghub?params=_u..comparisons=[{"name":"…","filters":[{"fieldName":"country","expressionList":["Spain"],"evaluationType":3,"isCaseSensitive":true,"complement":false}]}]` Dashboard (Asset Library builder): `https://analytics.google.com/analytics/web/#/p/assetlibrary/builder/new?params=` Inner keys are separated by a real `&`. `_r.._cids` is the ordered card registry as `cardId.templateId` pairs (template id `182`). Card types: 59 scorecard, 65 table, 72 line chart, 3 bar, 67 column, 73 donut, 66 funnel. Filter object shape: `{ "type":1, "fieldName":"pagePath", "evaluationType":3, "expressionList":["checkout"], "complement":false, "isCaseSensitive":true }`. Critical: field names in these URLs are GA4 **frontend** names, not Data API names — `hostname` (not `hostName`), `landingPage` (not `landingPagePlusQueryString`), `conversions` (not `keyEvents`). `/data/cheatsheet.json` carries both names for every field. Full documentation: https://data.ga4spy.com/docs/shadow-api ## Machine-readable catalogue `/data/index.json` lists every JSON endpoint on this site with its URL, description and top-level shape, so one fetch is enough to discover the dataset. ## Reuse Free to read, quote and cite. Attribution with a link back to https://data.ga4spy.com is required when reusing the dataset. Data compiled by Brais Calvo (nosDeu) since April 2022.