{"id":13100,"date":"2026-09-19T07:35:00","date_gmt":"2026-09-19T05:35:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=13100"},"modified":"2026-10-26T12:07:08","modified_gmt":"2026-10-26T11:07:08","slug":"tutorial-reading-a-ga4-collect-request-parameter-by-parameter","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/","title":{"rendered":"Tutorial: Reading a GA4 Collect Request Parameter by Parameter"},"content":{"rendered":"<p>A GA4 Collect request shows what a browser attempted to send to a collection endpoint. The URL, request body and headers belong together. The body carries data outside the URL; headers carry additional information about the request, such as its content type. One request can contain several events, and the eventual report also depends on processing, configuration and other data sources. There is no fixed list of sixty parameters that explains every request.<\/p>\n<p>The abbreviated fields below are diagnostic clues from the Google tag&#8217;s browser transport, not a stable public API for constructing requests. The documented gtag event fields and Measurement Protocol are separate interfaces. Internal encodings can change; the current Google tag implementation was checked on 24 October 2026.<\/p>\n<figure class=\"lw-diagram\"><img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/diagrams\/dia-13100-collect-20261024.png\" width=\"1120\" height=\"580\" alt=\"The request is one diagnostic layer. Item rules, consent behavior, server forwarding and reporting each need their own checks.\"><figcaption>The request is one diagnostic layer. Item rules, consent behavior, server forwarding and reporting each need their own checks.<\/figcaption><\/figure>\n<h2>The complete request, not just its URL<\/h2>\n<p>In DevTools, recording starts before the test action; Preserve log retains entries across navigation. A filter for collect is a useful starting point, but can also match other services and miss a custom collection path. The destination, method, initiator, timing, payload and response identify the actual route.<\/p>\n<p>Parameters may appear in the query string, the POST body or both. Batched requests can share URL parameters across several event lines. Method selection is not a universal small-GET\/large-POST rule. A newline-formatted batch requires inspection of both shared context and event records; arbitrary lines in an unknown body are not automatically events.<\/p>\n<p>The following synthetic example is wrapped for readability and is not a live request. The identifiers are placeholders. The purchase includes a transaction identifier, value, currency and an item; the purpose is inspection, not manually replaying a purchase.<\/p>\n<pre><code>https:\/\/www.google-analytics.com\/g\/collect\n  ?v=2&amp;tid=G-EXAMPLE&amp;cid=1234567890.1737041234\n  &amp;sid=1737041234&amp;sct=4&amp;dl=https%3A%2F%2Fshop.example%2Fcheckout\n  &amp;dt=Checkout&amp;en=purchase&amp;ep.transaction_id=ORDER-EXAMPLE-42\n  &amp;epn.value=129.9&amp;cu=EUR\n  &amp;pr1=idSKU-42~nmChair~pr64.95~qt2<\/code><\/pre>\n<h2>Destination and session context<\/h2>\n<p>Not every request contains every field. A measurement ID identifies a web data stream within a property. A client identifier describes a browser instance rather than a verified person; storage permission, configuration and cross-domain behavior affect its origin and persistence.<\/p>\n<table>\n<thead>\n<tr>\n<th>Observed field<\/th>\n<th>Diagnostic meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>v=2<\/code><\/td>\n<td>GA4 browser transport marker<\/td>\n<\/tr>\n<tr>\n<td><code>tid<\/code><\/td>\n<td>Target web-stream measurement ID<\/td>\n<\/tr>\n<tr>\n<td><code>cid<\/code><\/td>\n<td>Client identifier; not proof of a particular cookie or person<\/td>\n<\/tr>\n<tr>\n<td><code>sid \/ sct<\/code><\/td>\n<td>Session identifier \/ session count context<\/td>\n<\/tr>\n<tr>\n<td><code>seg<\/code><\/td>\n<td>Engaged-session indicator in the inspected format<\/td>\n<\/tr>\n<tr>\n<td><code>_p \/ _s<\/code><\/td>\n<td>Internal grouping \/ sequence clues, not delivery receipts<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Automatically generated GA4 session IDs use seconds since 1 January 1970 at 00:00 UTC, the Unix epoch. The session ID alone is not globally unique, and custom or server-provided values need separate scrutiny. A gap in an internal sequence field does not prove network loss: recording boundaries, filters, batching and multiple destinations can change the visible sequence. A missing request may also reflect a script error, CSP, a different endpoint or no matching trigger; the Network panel, Console and Tag Assistant provide complementary evidence.<\/p>\n<h2>Page context and privacy<\/h2>\n<p><code>dl<\/code>, <code>dr<\/code> and <code>dt<\/code> commonly carry page location, referrer and title. Defaults come from browser document values, but configured overrides and redaction can alter the outgoing data. A missing referrer does not by itself prove direct traffic: browser policy and privacy controls can suppress it. In a single-page application, where content changes without loading a complete new document, the event timing and explicitly supplied title need to match the intended page.<\/p>\n<p><code>ul<\/code> and <code>sr<\/code> describe language and screen resolution. English settings and an 800&#215;600 screen do not prove automation. Those values are neither identity checks nor reliable bot classifiers.<\/p>\n<p>The decoded page URL needs inspection for sensitive paths, query values and other unintended data. Query content is not automatically a custom dimension, and page-path and full-location dimensions are different. Configured data redaction can remove selected values before transmission, but is a best-effort control with a defined scope. A clean URL alone says nothing about the remaining parameters or headers.<\/p>\n<h2>Event values and engagement<\/h2>\n<p><code>en<\/code> commonly identifies the event; generic <code>ep.<\/code>\/<code>epn.<\/code> fields distinguish text and numeric event values in the inspected transport. <code>up.<\/code>\/<code>upn.<\/code> serve a similar purpose for user properties, while predefined fields can have dedicated codes such as <code>cu<\/code> for currency. The final request remains the relevant check when a template normalizes a supplied value.<\/p>\n<p>A transport prefix does not automatically create a report dimension or metric. Custom reporting requires the appropriate definition, and Google can interpret numeric-looking dimension strings as numbers. Numeric values should meet the documented event schema at the source. Conversion with Number alone is insufficient validation: an empty string becomes zero, a decimal comma yields NaN, and Infinity is not a usable finite amount.<\/p>\n<p><code>_et<\/code> commonly represents engagement milliseconds. Engagement measures focused-page or foreground-app time, not simply wall-clock time between HTTP requests. It can be attached to a later event or omitted when no new engagement time exists. Zero or absence does not prove that the page had no human visitor.<\/p>\n<h2>Items and purchase totals<\/h2>\n<p>In the inspected browser format, <code>pr1<\/code>, <code>pr2<\/code> and subsequent fields can each contain one packed item. The following common item-code mapping helps with reading; it is not a complete specification for software that splits and interprets every possible item encoding. Delimiters, encoding and custom item parameters require care.<\/p>\n<table style=\"width:100%;border-collapse:collapse;table-layout:auto;\">\n<thead>\n<tr>\n<th style=\"white-space:nowrap;vertical-align:top;\">Code<\/th>\n<th style=\"vertical-align:top;\">GA4 field<\/th>\n<th style=\"white-space:nowrap;vertical-align:top;\">Code<\/th>\n<th style=\"vertical-align:top;\">GA4 field<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">id<\/td>\n<td>item_id<\/td>\n<td style=\"white-space:nowrap;vertical-align:top;\">pr<\/td>\n<td>price<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">nm<\/td>\n<td>item_name<\/td>\n<td style=\"white-space:nowrap;vertical-align:top;\">qt<\/td>\n<td>quantity<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">br<\/td>\n<td>item_brand<\/td>\n<td style=\"white-space:nowrap;vertical-align:top;\">ds<\/td>\n<td>discount<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">ca<\/td>\n<td>item_category<\/td>\n<td style=\"white-space:nowrap;vertical-align:top;\">cp<\/td>\n<td>coupon<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">c2 \u2026 c5<\/td>\n<td>item_category2 \u2026 5<\/td>\n<td style=\"white-space:nowrap;vertical-align:top;\">ln<\/td>\n<td>item_list_name<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">va<\/td>\n<td>item_variant<\/td>\n<td style=\"white-space:nowrap;vertical-align:top;\">lp<\/td>\n<td>index<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A documented item needs <code>item_id<\/code> or <code>item_name<\/code>; both are recommended. Missing id alone does not mean the item is discarded. Purchase value is the sum of item price times quantity, excluding shipping and tax, with a suitable currency. The example gives 64.95 \u00d7 2 = 129.90. Transaction IDs need to identify actual transactions consistently for duplicate prevention.<\/p>\n<p>The documented items array allows up to 200 elements. Exactly 200 items do not inherently prove a transport overflow, and a short reported list has no single automatic explanation. Input construction, event limits, processing and report scope all need comparison. Event revenue and item revenue have different scopes; discrepancies can be investigated in suitable reports or exports as well as in the request.<\/p>\n<h2>Consent signals with their limits<\/h2>\n<p><code>gcs<\/code> carries advertising-storage and analytics-storage states. Common values are G111 for both granted, G100 for both denied, G101 for analytics storage only and G110 for advertising storage only. These values cover two signals, not the whole consent implementation. <code>gcd<\/code> contains more detailed consent information and is also sent when consent mode is not active; it is not merely a record of defaults.<\/p>\n<p>Tag Assistant makes defaults, updates and the four relevant Google signals easier to inspect: ad_storage, analytics_storage, ad_user_data and ad_personalization. The declared states need comparison with timing, actual tag behavior, storage and the banner choice, including a later withdrawal.<\/p>\n<p>Advanced consent mode can send cookieless measurements while analytics storage is denied; basic mode blocks the Google tags until the required consent. A G100 request alone does not prove correct initialization, absence of all identifiers or modeling eligibility. Cookieless signals may include a page-load random value; a new client ID for every request is not a safe universal assumption. No visible request alone does not establish the reason for blocking.<\/p>\n<h2>Reception and server-side processing<\/h2>\n<p>An HTTP 204 means that the endpoint returned no response content; it is not an event-by-event schema validation or a guarantee of final reporting. DebugView requires debug mode and can omit events under client privacy controls or denied analytics-cookie consent. Realtime and processed reports answer different questions and are not complete raw-request ledgers.<\/p>\n<p>With server-side tagging, the browser normally shows only the browser-to-server leg. The server preview exposes the incoming request, the claiming client, event data, fired tags and outgoing requests. Those records can reveal added, removed or changed fields. Browser data alone cannot establish what the downstream endpoint received or how it later processed the event.<\/p>\n<h3>Does a missing parameter prove that GA4 can never know the value?<\/h3>\n<p>No. It establishes only that the inspected field is absent from that part of the capture. The body, headers, other requests, server enrichment and later processing are separate sources.<\/p>\n<h3>Is Collect the Measurement Protocol?<\/h3>\n<p>The browser transport described here and the documented JSON Measurement Protocol have different formats and validation workflows. A browser query string is not a JSON Measurement Protocol payload.<\/p>\n<p><!-- lw-collect-guide:start --><\/p>\n<h2>Practical check: compare multiple Collect requests<\/h2>\n<p>The <a href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/ga4-parameter-analyser\/\">GA4 Parameter Analyser<\/a> can now inspect several browser Collect requests together. One URL or URL-encoded query\/body string goes on each line. If parameters belong to the common URL of a POST request, the separate shared-parameters field makes that context visible on every line.<\/p>\n<p>The overview shows event names, measurement IDs and repeated parameter keys. The comparison lists only differences: an absent key is different from a key with an empty value. Different event types naturally carry different parameters, so a difference alone is not a tracking fault. Repeated keys remain in their original order; the tool makes no claim about which occurrence the receiver will use.<\/p>\n<p>Values are decoded once and rendered as text, including any HTML-like content. The optional CSV download contains the decoded values and is not anonymized. This makes the analyser useful for examining an unexpected page URL or parameter, but it is not a complete personal-data detector. A clean-looking result does not prove that the implementation is free of personal data.<\/p>\n<p>No pasted request is replayed or uploaded. The tool describes the input, not acceptance by Google. Actual collection can be checked using <a href=\"https:\/\/support.google.com\/analytics\/answer\/7201382?hl=en\">Google DebugView<\/a> where applicable. Query decoding follows the <a href=\"https:\/\/url.spec.whatwg.org\/#application\/x-www-form-urlencoded\">URL form-encoding rules<\/a>; packed item segments are only decoded heuristically. JSON Measurement Protocol payloads require the separate validator.<\/p>\n<p><!-- lw-collect-guide:end --><\/p>\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\/reference\/events\">Google Analytics: Recommended events and purchase fields<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/security\/concepts\/consent-mode\">Google Tag Platform: Consent mode overview<\/a><\/li>\n<li><a href=\"https:\/\/support.google.com\/analytics\/answer\/11109416?hl=en\">Google Analytics: User engagement<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\/reference\/config\">Google Analytics: Configuration reference<\/a><\/li>\n<li><a href=\"https:\/\/support.google.com\/analytics\/answer\/14240153?hl=en\">Google Analytics: Custom dimensions and metrics<\/a><\/li>\n<li><a href=\"https:\/\/support.google.com\/analytics\/answer\/13544947?hl=en\">Google Analytics: Data redaction<\/a><\/li>\n<li><a href=\"https:\/\/developer.chrome.com\/docs\/devtools\/network\/reference\">Chrome DevTools: Network features reference<\/a><\/li>\n<li><a href=\"https:\/\/support.google.com\/analytics\/answer\/7201382?hl=en\">Google Analytics: Monitor events in DebugView<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\/debug\">Google Tag Manager: Preview and debug server containers<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/security\/guides\/consent-debugging\">Google Tag Platform: Troubleshoot consent mode with Tag Assistant<\/a><\/li>\n<li><a href=\"https:\/\/support.google.com\/analytics\/answer\/9191807?hl=en\">Google Analytics: About Analytics sessions<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\/ecommerce\">Google Analytics: Measure ecommerce<\/a><\/li>\n<li><a href=\"https:\/\/www.googletagmanager.com\/gtag\/js?id=G-EXAMPLE\">Google tag: delivered JavaScript implementation, checked 24 October 2026<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9110.html#name-204-no-content\">IETF RFC 9110: 204 No Content<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Number\">MDN: JavaScript Number<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/protocol\/ga4\/validating-events\">Google Analytics: Validate Measurement Protocol events<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A GA4 Collect request can distribute data across its URL and body and contain several events. Common fields help diagnose page context, items and consent; HTTP responses and reports provide different evidence.<\/p>\n","protected":false},"author":1,"featured_media":28491,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[113],"tags":[91258,91516,91219],"class_list":["post-13100","post","type-post","status-publish","format-standard","hentry","category-tutorials","tag-google-analytics-4","tag-tracking","tag-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Reading a GA4 Collect Request Parameter by Parameter | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Finding the collect request in the browser, sorting its parameters into four groups, and decoding the compact e-commerce item format.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Reading a GA4 Collect Request Parameter by Parameter | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Finding the collect request in the browser, sorting its parameters into four groups, and decoding the compact e-commerce item format.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-19T05:35:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T11:07:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-13100-collect-20261024-dark.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Reading a GA4 Collect Request Parameter by Parameter\",\"datePublished\":\"2026-09-19T05:35:00+00:00\",\"dateModified\":\"2026-10-26T11:07:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/\"},\"wordCount\":1648,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/lw-flux3-20261031\\\/hero-13100.png\",\"keywords\":[\"Google Analytics 4\",\"Tracking\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/\",\"name\":\"Tutorial: Reading a GA4 Collect Request Parameter by Parameter | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/lw-flux3-20261031\\\/hero-13100.png\",\"datePublished\":\"2026-09-19T05:35:00+00:00\",\"dateModified\":\"2026-10-26T11:07:08+00:00\",\"description\":\"Finding the collect request in the browser, sorting its parameters into four groups, and decoding the compact e-commerce item format.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/lw-flux3-20261031\\\/hero-13100.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/lw-flux3-20261031\\\/hero-13100.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Reading a GA4 Collect Request Parameter by Parameter\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Reading a GA4 Collect Request Parameter by Parameter\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: Reading a GA4 Collect Request Parameter by Parameter | Lukas Wojcik","description":"Finding the collect request in the browser, sorting its parameters into four groups, and decoding the compact e-commerce item format.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Reading a GA4 Collect Request Parameter by Parameter | Lukas Wojcik","og_description":"Finding the collect request in the browser, sorting its parameters into four groups, and decoding the compact e-commerce item format.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-19T05:35:00+00:00","article_modified_time":"2026-10-26T11:07:08+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-13100-collect-20261024-dark.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Reading a GA4 Collect Request Parameter by Parameter","datePublished":"2026-09-19T05:35:00+00:00","dateModified":"2026-10-26T11:07:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/"},"wordCount":1648,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/lw-flux3-20261031\/hero-13100.png","keywords":["Google Analytics 4","Tracking","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/","name":"Tutorial: Reading a GA4 Collect Request Parameter by Parameter | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/lw-flux3-20261031\/hero-13100.png","datePublished":"2026-09-19T05:35:00+00:00","dateModified":"2026-10-26T11:07:08+00:00","description":"Finding the collect request in the browser, sorting its parameters into four groups, and decoding the compact e-commerce item format.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/lw-flux3-20261031\/hero-13100.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/lw-flux3-20261031\/hero-13100.png","width":1200,"height":630,"caption":"Tutorial: Reading a GA4 Collect Request Parameter by Parameter"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Reading a GA4 Collect Request Parameter by Parameter"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=13100"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13100\/revisions"}],"predecessor-version":[{"id":26778,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13100\/revisions\/26778"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/28491"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=13100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}