{"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-09-09T13:24:13","modified_gmt":"2026-09-09T11:24:13","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 hit is one HTTP request, and everything the property will ever know about that moment is in its query string. Sixty parameters, all abbreviated to two or three characters, none of them documented in the interface.<\/p>\n<p>Reading them is worth learning for one reason: it is the only place where what the browser actually sent can be seen. Every report, every debug view and every consent indicator is downstream of this request, and a value that is not here was never sent.<\/p>\n<figure class=\"lw-diagram\">\n<img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/collect-anfrage-en.png\" width=\"1120\" height=\"580\" decoding=\"async\" loading=\"lazy\"\n     alt=\"A GA4 collect request wrapped over several lines with its parameters coloured by group, beside a table decoding the two-letter codes inside a single e-commerce item field\"><figcaption>Four groups cover almost every parameter. The fifth block, the e-commerce item, is a format of its own inside one field.<\/figcaption><\/figure>\n<h2>Finding the Request<\/h2>\n<p>The request goes to <code>\/g\/collect<\/code>, either at Google directly or at the server container if one is in use. In the browser&#8217;s network panel, a filter on <code>collect<\/code> reduces the list to exactly these hits.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>https:\/\/www.google-analytics.com\/g\/collect\n  ?v=2&amp;tid=G-AB12CD34&amp;gtm=45je55h0v9182736&amp;_p=1737041234567\n  &amp;cid=1234567890.1737041234&amp;ul=de-de&amp;sr=2560x1440&amp;_s=2\n  &amp;sid=1737041234&amp;sct=4&amp;seg=1&amp;dl=https%3A%2F%2Fshop.example%2Fkasse\n  &amp;dt=Kasse&amp;dr=https%3A%2F%2Fwww.google.com%2F&amp;en=purchase\n  &amp;ep.payment_type=card&amp;epn.value=129.9&amp;cu=EUR&amp;_et=4312\n  &amp;pr1=idSKU-42~nmStuhl~caMoebel~pr64.95~qt2&amp;gcs=G111<\/code><\/pre>\n<p>Two practical notes about where it hides. Small hits travel as a GET and the parameters are in the address; larger ones switch to a POST, and then the address carries only part of them while the rest sits in the request body. And several events can be batched into one POST, one per line &#8211; a body with three lines is three hits, not one.<\/p>\n<p>A request that never appears is a finding in itself, and it has three usual causes: consent is denied and the tag is holding back, an ad blocker removed the script, or the tag never fired. The three are told apart in the tag debugger, not here.<\/p>\n<h2>The Parameters That Identify<\/h2>\n<p>The first group answers who is sending and to which property. These parameters are on every hit and change rarely.<\/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;\">Parameter<\/th>\n<th style=\"vertical-align:top;\">Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">v=2<\/td>\n<td>Protocol version &#8211; 2 is GA4, 1 was Universal Analytics<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">tid<\/td>\n<td>Measurement ID of the target property<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">cid<\/td>\n<td>Client ID, the value from the _ga cookie without its prefix<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">sid<\/td>\n<td>Session ID &#8211; the epoch second at which the session started<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">sct<\/td>\n<td>Session count for this client<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">seg<\/td>\n<td>1 once the session counts as engaged, 0 before that<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">_p<\/td>\n<td>Random number per page load, groups the hits of one page<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\">_s<\/td>\n<td>Counter within the page load &#8211; the first hit is 1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Two of these are more useful than they look. The session ID is a timestamp, so it says exactly when the session began &#8211; a session that keeps restarting is visible here before any report shows it. And <code>_s<\/code> makes gaps obvious: a page whose hits jump from 1 to 3 lost one on the way.<\/p>\n<h2>The Parameters That Describe the Page<\/h2>\n<p>The second group is the context, and it is where most wrong values originate, because these are the parameters a tag can overwrite.<\/p>\n<p><code>dl<\/code> is the page location and arrives percent-encoded; it is the source of the page path and of every query parameter GA4 later reports. <code>dr<\/code> is the referrer and empty on a direct entry. <code>dt<\/code> is the document title, taken at the moment the hit fires &#8211; which is why a single-page application that fires before the title changes reports the previous page&#8217;s title.<\/p>\n<p><code>ul<\/code> is the browser language and <code>sr<\/code> the screen resolution. Both come from the browser and are the two fields that most often reveal an automated visitor: a resolution of 800&#215;600 paired with an English locale on a German shop is a pattern rather than a person.<\/p>\n<p>Worth checking here rather than in a report: whether <code>dl<\/code> carries parameters that should not be in analytics at all. Everything after the question mark ends up in the page dimension, and a form that puts an email address in the URL sends it here first.<\/p>\n<h2>The Event and Its Parameters<\/h2>\n<p>The third group is what actually happened, and it follows a simple naming rule.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>en=purchase              the event name\nep.payment_type=card     event parameter, text\nepn.value=129.9          event parameter, number\nup.plan=premium          user property, text\nupn.credits=40           user property, number\n_et=4312                 engagement time in milliseconds since the last hit\ncu=EUR                   currency<\/code><\/pre>\n<p>The distinction between <code>ep.<\/code> and <code>epn.<\/code> is the one that costs the most time when it is wrong. A number sent as text lands in a text dimension, cannot be summed, and cannot be turned into a metric afterwards &#8211; and nothing reports an error, because a text parameter with the content <code>129.9<\/code> is perfectly valid.<\/p>\n<p>The engagement time is cumulative per hit, not per session: each request carries the milliseconds since the previous one. A page that sends 0 here throughout is not being looked at, or the timer is being reset by something.<\/p>\n<h2>The E-Commerce Payload in One Field<\/h2>\n<p>Items do not each get their own parameter. They are packed into <code>pr1<\/code>, <code>pr2<\/code> and so on, one field per item, with two-letter codes and a tilde as separator.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>pr1=idSKU-42~nmStuhl~caMoebel~pr64.95~qt2~brNordholz~vaEiche<\/code><\/pre>\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>Three things become checkable once this is readable. Whether every item carries an <code>id<\/code> &#8211; an item without one is dropped silently. Whether <code>pr<\/code> is a plain number: a price arriving as <code>64,95<\/code> with a comma, or with a currency symbol, is not a number and the revenue stays empty. And whether the sum of price times quantity matches <code>epn.value<\/code>, because the two are sent independently and a mismatch between them is invisible in every report.<\/p>\n<p>The number of items has a ceiling that is easy to hit. A request has a length limit, and a cart with two hundred lines exceeds it &#8211; GA4 then switches to a POST, and beyond that it truncates. A purchase whose item list is shorter in the reports than in the shop is almost always this.<\/p>\n<h2>The Consent Fields<\/h2>\n<p>The last group is short and decides more than the rest together.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>gcs=G111    ad_storage granted, analytics_storage granted\ngcs=G100    both denied\ngcs=G101    ad_storage denied, analytics_storage granted\ngcd=13t3t3t3t5   the defaults that were set before the choice<\/code><\/pre>\n<p>The two digits after <code>G1<\/code> are ad storage and analytics storage in that order, 1 for granted and 0 for denied. A hit with <code>G100<\/code> is a cookieless ping: it counts towards modelling but writes no identifier, and the client ID in it is generated per request rather than persisted.<\/p>\n<p>The field to compare it against is <code>gcd<\/code>, which records what the defaults were. A container whose defaults arrive as granted while the banner has not been answered yet is a misconfiguration that only shows here &#8211; the reports look normal, because the data is being collected.<\/p>\n<p>One last check that takes ten seconds and settles a whole class of arguments: reload the page with consent denied and look for the request. If a hit with <code>gcs=G100<\/code> goes out, consent mode is working as designed. If nothing goes out at all, the tag is being blocked entirely &#8211; which is a different setup with different reports, and worth knowing which one is in place.<\/p>\n<div class=\"lw-quellen\">\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\" target=\"_blank\" rel=\"noopener noreferrer\">Google Analytics 4 developer guide<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9110.html\" target=\"_blank\" rel=\"noopener noreferrer\">RFC 9110: HTTP Semantics<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\/ecommerce\" target=\"_blank\" rel=\"noopener noreferrer\">GA4 ecommerce events<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Everything GA4 knows about a hit travels in one query string with sixty abbreviated parameters. Four groups explain almost all of them, and the e-commerce payload hides in a single field with two-letter codes.<\/p>\n","protected":false},"author":1,"featured_media":13240,"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 - Blog<\/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 - Blog\" \/>\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=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13100-tutorial-reading-a-ga4-collect-request-p.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=\"6 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\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\\\/\"},\"wordCount\":1097,\"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\\\/2026\\\/08\\\/hero-13100-tutorial-reading-a-ga4-collect-request-p.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 - Blog\",\"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\\\/2026\\\/08\\\/hero-13100-tutorial-reading-a-ga4-collect-request-p.png\",\"datePublished\":\"2026-09-19T05:35:00+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\\\/2026\\\/08\\\/hero-13100-tutorial-reading-a-ga4-collect-request-p.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13100-tutorial-reading-a-ga4-collect-request-p.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 - Blog","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 - Blog","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","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13100-tutorial-reading-a-ga4-collect-request-p.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"6 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","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-reading-a-ga4-collect-request-parameter-by-parameter\/"},"wordCount":1097,"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\/2026\/08\/hero-13100-tutorial-reading-a-ga4-collect-request-p.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 - Blog","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\/2026\/08\/hero-13100-tutorial-reading-a-ga4-collect-request-p.png","datePublished":"2026-09-19T05:35:00+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\/2026\/08\/hero-13100-tutorial-reading-a-ga4-collect-request-p.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13100-tutorial-reading-a-ga4-collect-request-p.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":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13100\/revisions"}],"predecessor-version":[{"id":17308,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13100\/revisions\/17308"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/13240"}],"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}]}}