Networks · GA4
GA4 events: names and parameters
Updated 2026-09-27
Google Analytics 4 (GA4) collects events through the Google tag (gtag.js or Google Tag Manager). Each event leaves the browser as a request to a /g/collect endpoint, with the measurement ID in tid, the event name in en, event parameters prefixed ep. or epn. and items packed into pr1, pr2 and so on. Universal Pixel Debugger decodes these requests and shows each field with the exact key it came from.
Where the events go
| Endpoint | Method | What it carries |
|---|---|---|
*.google-analytics.com/g/collect, analytics.google.com/g/collect | GET, or POST with several events separated by newlines | One or more events: tid, en, ep.*/epn.*, cu, prN items, page fields |
/collect with v=2 on the same hosts | GET or POST | The same GA4 format |
/g/s/collect | GET or POST | When it carries only consent fields (gcs, gcd, dma, npa) and no tid or en: a consent ping, labeled "Google tag consent ping", not a GA4 event |
<site>/<path>/ag/g/c, <site>/<path>/ga/g/c | GET or POST | Google tag gateway (first-party mode): the same hits sent through the site's own domain. They must carry tid or gtm; the Requests tab keeps the original URL. |
Event names as sent
The event name is the en parameter. The extension shows it exactly as sent and assigns no category, so a custom name stays custom even when it contains a standard one.
Sent name (en) | Usually sent when |
|---|---|
page_view | A page loads |
view_item_list | A product list or category page is viewed |
view_item | A product page is viewed |
view_search_results, search | A site search runs; the term is in ep.search_term |
add_to_cart | A product is added to the cart |
remove_from_cart | A product is removed from the cart |
view_cart | The cart is viewed |
begin_checkout | Checkout starts |
add_shipping_info | Shipping details are submitted |
purchase | An order is completed |
Value, currency, order ID and products
| Field | Key(s) | Notes |
|---|---|---|
| Event value | epn.value, then ep.value | Shown only when sent. Never filled from item prices. |
| Currency | cu, then ep.currency | Kept exactly as sent |
| Transaction ID | ep.transaction_id, epn.transaction_id | Used to compare the same order across networks |
| Occurrence ID | ep.event_id, epn.event_id | Separate from the transaction ID |
| Products | pr1, pr2, … | Packed ~-separated tokens: id (item ID), nm (name), pr (price), qt (quantity), plus others such as br and va. A SKU is read only from an explicit k<n>sku/v<n> pair. |
| Other order fields | ep.tax, ep.shipping, ep.coupon, ep.payment_type, ep.shipping_tier (or the epn. form) | Listed in the parameter checklist |
| Client and session | cid, sid, sct | Match the values in the _ga and _ga_<stream> cookies |
Common problems
- Cart events without a value. On live stores,
add_to_cartsentcuand the item price inpr1but noepn.valueorep.value, andbegin_checkoutsent the product only. The extension shows the value as not observed instead of using the price. - Custom names that look standard. On a live store, the site sent
Purchaseadd_to_cartandPurchaseview_itemin one batched POST, with no value, currency or products. These are custom names, not purchases, and are shown as sent. - Repeated cart events with different items. On a live store, one cart action sent
add_to_carttwice with the variant ID and twice with the parent ID, at slightly different prices. Repetition alone does not prove double counting. - Hits cancelled by a reload.
user_engagementhits sent just before the page reloads can fail withnet::ERR_ABORTED. The extension notes these as cancelled by the browser. - Consent pings mistaken for events.
/g/s/collectrequests with only consent fields carry no event and no measurement ID.
How to check it with Universal Pixel Debugger
- Open the side panel with the toolbar icon on the site, click Clear, then do the action you want to test. A GA4 hit can arrive after the other networks, so check again after a few seconds.
- Find the GA4 lane on the signal board. It shows the event count and flags request errors or requests with no decoded event.
- Click an event. Value and currency show the key each came from, for example from epn.value or from cu, or Not observed. Products list each packed field with its source, such as
pr1.qt. - Read the GA4 parameters checklist ("N of M known fields sent"), the Not sent list and Other sent fields.
- Check the issues: invalid value or currency, a potential duplicate, or a value, currency or product mismatch with another network that sent the same transaction ID.
A loaded script, a captured request and a decoded event are separate evidence. An HTTP success response does not prove that Google Analytics accepted or counted the event.