Home / Tracking parameter reference
What each parameter in a GA4 request means, grouped the way you read a hit, and the limits that make GA4 drop or cut what the page sent.
GA4 sends events to https://region1.google-analytics.com/g/collect (or
www.google-analytics.com/g/collect), usually as a POST. The URL carries what the events share — the
measurement ID, the client ID, the page — and when several events are batched, the body carries one line per
event. Through a server-side container or Google tag gateway the host is your own domain, but the path and the
parameters are the same.
Which property the hit is for and how it was sent.
| Parameter | What it means |
|---|---|
vProtocol Version | Measurement protocol version. GA4 is always 2; a 1 here means a Universal Analytics hit, which stopped being processed in 2024. |
tidMeasurement ID | The account the hit is reported to — G- for a GA4 property, AW- for a Google Ads account. If this is not the id you expect, the data is landing in someone else's report. |
tids | Several destination ids in one hit, comma separated. The Google tag sends one request on behalf of every tag id it is configured for. |
_p | A random number identifying this page load, shared by every hit from it. Useful for telling one page view's hits from the next. |
_s | How many hits this page has sent so far in the session. |
_z | Cache buster, so a proxy cannot serve a stale response. |
_dbg | Debug flag. When it is 1 the hit appears in GA4 DebugView — Tag Master shows it either way. |
The event itself. Your own parameters ride on the ep. and epn. prefixes.
| Parameter | What it means |
|---|---|
enEvent Name | The event name being reported. This is the name you will look for in GA4, so a typo here silently creates a second event. |
ep.<name> | A parameter you sent with the event. GA4 keeps 25 of them per event, names up to 40 characters and values up to 100. |
epn.<name> | A number you sent with the event (GA4 stores it as a metric). The part after epn. is your own parameter name. |
_et | Engagement time in milliseconds since the last hit — the raw material behind average engagement time. |
_ee | Marks the hit that carries the session's engagement signal. |
Money and items. The value itself travels as an event parameter, usually epn.value.
| Parameter | What it means |
|---|---|
cuCurrency | Currency, in ISO-4217 form (TRY, EUR, USD). A value without a currency is dropped from revenue reports. |
pr1 | The first item in the cart, packed as id~name~price~quantity with two-letter prefixes. Tag Master decodes these into the items table above. |
Who the visitor is, as far as GA4 can tell, and where in the session this hit sits.
| Parameter | What it means |
|---|---|
cidClient ID | Client ID — the browser's anonymous identifier, taken from the _ga cookie. Two page views with different client ids count as two users. |
uidUser ID | User ID you set yourself, to stitch a person across devices. It must never be an email address or a phone number. |
sidSession ID | Session ID, a timestamp of when the session started. It changes after 30 minutes of inactivity or at midnight in the property's timezone. |
sctSession Count | How many sessions this browser has had. 1 means this is a first-time visitor as far as GA4 can tell. |
segSession Engaged | Session engaged. 1 once the visit lasts over 10 seconds, sees two pages, or triggers a conversion — that is what separates an engaged session from a bounce. |
_fv | First visit for this browser. |
_nsi | New session id — this hit opened a new session. |
_ss | Session start — the first hit of a session. |
up.<name> | A user property — something true about the visitor rather than about this event. Names up to 24 characters, values up to 36. |
upn.<name> | A numeric user property. GA4 keeps 25 of them, and they describe the person rather than the event. |
Where the hit was sent from.
| Parameter | What it means |
|---|---|
dlPage Location | The full page URL the hit is about. If personal data ends up in the query string, it ends up here too — for every tag on the page. |
drReferrer | The referrer. Empty on a direct visit; a self-referral here usually means a cross-domain link lost its linker parameter. |
dtPage Title | The page title at the moment the hit fired. On single page apps this often lags a route change by a beat. |
ulLanguage | The browser's language setting, which is where the Language report comes from. |
srScreen Resolution | Screen resolution in pixels. |
frm | Whether the hit came from inside an iframe. 1 means it did, which is often an embedded checkout. |
tfd | Milliseconds between the page starting to load and this hit leaving. |
The consent state the tag knew when it sent the hit.
| Parameter | What it means |
|---|---|
gcsConsent State (gcs) | Consent state at the moment of the hit, read as G1<ad_storage><analytics_storage>: G111 means both granted, G100 means both denied. |
gcdConsent Default (gcd) | The consent defaults the page declared, including ad_user_data and ad_personalization. It tells you what the site asked for before the visitor answered. |
npaNon-Personalized Ads | Non-personalised ads. 1 means this hit may not be used for remarketing. |
dmaDMA Region | Whether the hit is treated under the EU Digital Markets Act. |
dma_cps | Whether the visitor allowed data to be shared with Google Ads partners. |
ir | Marks the hit as coming from an ignored referrer configured in the property. |
The checks the Tag Master extension runs on every GA4 hit it captures. Each is something the platform drops, cuts or misreports without saying so in its own interface.
Dropped or wrongAn event name longer than 40 characters
GA4 rejects the event outright; it will never appear in a report.
Fix: Shorten the event name to 40 characters or fewer.
Dropped or wrongAn event name with spaces, dashes or a leading digit
Spaces, dashes and leading digits are rejected before the event is recorded.
Fix: Rename the event, e.g. add_to_cart rather than "Add to cart".
Dropped or wrongAn event name starting with ga_, google_ or firebase_
ga_, google_ and firebase_ belong to Google's own instrumentation.
Fix: Pick a name outside those prefixes.
Worth a lookAn event name GA4 already uses itself
GA4 already collects this one itself, so your version competes with its own reporting.
Fix: Use a distinct name unless you deliberately mean the built-in event.
Worth a lookMore than 25 event parameters
Everything past the twenty-fifth is discarded, and which ones survive is not documented.
Fix: Drop the parameters you do not report on, or move them to user properties.
Dropped or wrongA parameter name longer than 40 characters
GA4 drops the parameter rather than truncating its name.
Fix: Shorten the parameter name.
Dropped or wrongA parameter value longer than 100 characters
The tail is cut, so the values you compare in reports may be identical prefixes.
Fix: Send an id rather than the full text.
Dropped or wrongA user property over its limits
Over-long user properties are dropped, and audiences built on them stay empty.
Fix: Shorten the property name or the value.
Dropped or wrongA value with no currency
Without a currency GA4 cannot convert the amount, so the revenue column stays empty.
Fix: Send currency alongside value, e.g. currency: "TRY".
Dropped or wrongA currency that is not a three-letter code
Platforms cannot convert an unknown currency, so the value is dropped or read as the account default — silently changing what the sale was worth.
Fix: Send the three-letter code: TRY, EUR, USD. Not the symbol, not lowercase.
Dropped or wrongA value that is not a plain number
A value carrying a currency sign, a thousands separator or a comma decimal reads as zero on the platform side.
Fix: Send 1649.25 — no symbols, no spaces, dot as the decimal separator.
Worth a lookA commerce event with no items
Commerce reports are built from items; without them the event counts but sells nothing.
Fix: Add the items array to the ecommerce payload.
Dropped or wrongAn item with neither item_id nor item_name
GA4 joins products across events by item_id; an unidentified item cannot join anything.
Fix: Send item_id on every item.
Worth a lookAn item price that is not a number
A price like "549,75 TL" is read as zero, so the item contributes nothing to revenue.
Fix: Send price as a number: 549.75, no currency sign, dot as the decimal separator.
Worth a lookMore than 200 items in one event
The rest are dropped, and a large basket loses its tail.
Fix: Send the items that matter, or split the event.
Dropped or wrongA purchase with no transaction_id
A reloaded confirmation page counts the sale again, and revenue drifts upward.
Fix: Send transaction_id with every purchase.
Worth a lookA value that does not match its items
value is the basket and the items are what is in it. When they disagree, revenue by product will not add up to revenue, and one of the two is being computed differently from the other.
Fix: Send value as the sum of price × quantity, with item prices already discounted. An order-level coupon explains a lower value; a higher one usually means shipping or tax went into it.
Have a request in front of you? Paste it into the tracking request decoder and every parameter above is named on the hit itself, with these checks run on it. The Tag Master extension does the same for every request on the page, live.
In an event parameter, normally epn.value — the n marks it as a number. The currency is cu. Without cu, GA4 does not report the revenue.
ep. carries a text parameter and epn. a numeric one. The name after the prefix is the parameter name you set in the tag, such as ep.transaction_id or epn.value.
GA4 batches: when several events leave together, the URL holds what they share and the POST body holds one line per event. Read the Payload tab, or paste both into the request decoder.
Other references: Meta Pixel · Google Ads conversion · TikTok Pixel
Tag Master is free, needs no account, and collects no data.
Add to Chrome — Free