[{"data":1,"prerenderedAt":639},["ShallowReactive",2],{"{\"version\":\"published\",\"language\":\"en\"}layout":3,"{\"version\":\"published\",\"language\":\"en\"}content/knowledge/":207,"content-list-a1b2c3d4-e5f6-7890-abcd-ef1234567890-en-knowledge":253,"Eru7PE36Nv":435,"6YGAwrR6qi":450,"M1A3tAobLD":460,"6UErIukmcI":470,"uzXIOt0d4J":486,"meq5CwEb5s":496,"eygE58EeSc":506,"nISmFEg228":516,"iOIsPvcTZM":526,"ZWbKARDAxl":536,"Ej3dGDgcRB":546,"f0xEQncwd4":556,"Ke6NfdaNEG":566,"GhGReQZBFK":586,"fuldyLrLhv":604,"okgaSsujcn":621},{"data":4,"headers":185},{"story":5,"cv":182,"rels":183,"links":184},{"name":6,"created_at":7,"published_at":8,"updated_at":9,"id":10,"uuid":11,"content":12,"slug":173,"full_slug":173,"sort_by_date":174,"position":175,"tag_list":176,"is_startpage":32,"parent_id":174,"meta_data":174,"group_id":178,"first_published_at":179,"release_id":174,"lang":180,"path":174,"alternates":181,"default_full_slug":174,"translated_slugs":174},"Layout & Menu Settings","2024-07-09T11:23:15.417Z","2026-08-21T07:00:43.091Z","2026-08-21T07:00:43.104Z",520580076,"d0565ccd-50f8-4a35-9583-813fff54f59a",{"_uid":13,"menu":14,"banner":135,"footer":141,"component":171,"promotion":172},"9245e14a-f18f-4a6c-8060-61e8beb3d9f1",[15],{"_uid":16,"logo":17,"component":22,"rightSide":23,"navigation":40},"fd2f2bd7-3ebb-4923-8327-febceaf9131b",{"id":18,"alt":19,"filename":20,"fieldtype":21},16613298,"","https://a.storyblok.com/f/296300/2078x457/3b34c3fe19/witbee-logo-new.png","asset","mega-menu",[24,34],{"_uid":25,"href":26,"size":27,"text":28,"target":29,"rounded":30,"variant":31,"disabled":32,"component":33,"showArrow":32},"839bb546-784b-4ba0-871b-263f3c901b86","/contact-free-consultation","md","Free consultation","_self","none","primary",false,"button-blok",{"_uid":35,"href":36,"size":27,"text":37,"target":29,"rounded":30,"variant":38,"disabled":32,"component":33,"showArrow":39},"32d63a94-8cbd-474c-9ce1-457cfa576ccf","https://cloud.witbee.com","Login","secondary",true,[41,50,90,129],{"_uid":42,"link":43,"name":47,"subItems":48,"component":49},"3f3dab6a-9cd6-4ea1-9fdd-645b62d9cb49",{"id":19,"url":44,"linktype":45,"fieldtype":46,"cached_url":44},"/services","url","multilink","Services",[],"mega-menu-item",{"_uid":51,"link":52,"name":54,"subItems":55,"component":49},"6951d7b0-368d-4db6-85fa-80af9088e8e0",{"id":19,"url":53,"linktype":45,"fieldtype":46,"cached_url":53},"/usługi","WitCloud Platform",[56],{"_uid":57,"links":58,"title":88,"component":89},"9e0dbc8d-3b23-474c-ab56-2eba6486c651",[59,67,74,81],{"_uid":60,"icon":61,"link":62,"component":64,"lowerText":65,"upperText":66},"2144a1bf-1bdf-4a82-9f59-b5e7d7f73f47","InformationCircleIcon",{"id":19,"url":63,"linktype":45,"fieldtype":46,"cached_url":63},"/witcloud","mega-menu-subitem-link","Learn about WitCloud","Platform overview",{"_uid":68,"icon":69,"link":70,"component":64,"lowerText":72,"upperText":73},"a6f22621-aa4f-4b0c-be09-11b4140d7dea","UsersIcon",{"id":19,"url":71,"linktype":45,"fieldtype":46,"cached_url":71},"/witcloud/integrations","GA4, Ad Systems, E-commerce platforms & more","Our Data Integrations",{"_uid":75,"icon":76,"link":77,"component":64,"lowerText":79,"upperText":80},"42267fc4-06a8-465a-a3cf-56a311ff7022","NewspaperIcon",{"id":19,"url":78,"linktype":45,"fieldtype":46,"cached_url":78},"/witcloud/pricing","Flexible subscription","Pricing",{"_uid":82,"icon":83,"link":84,"component":64,"lowerText":86,"upperText":87},"6333bd24-c3b2-46ba-8dc2-93770459a0bc","BriefcaseIcon",{"id":19,"url":85,"linktype":45,"fieldtype":46,"cached_url":85},"/witcloud/docs/","Check how to configure","Documentation","Overview","mega-menu-subitem",{"_uid":91,"link":92,"name":94,"subItems":95,"component":49},"0182c7f6-b9d7-4e01-81bd-97635c68d72f",{"id":19,"url":93,"linktype":45,"fieldtype":46,"cached_url":93},"/content","Knowledge Hub",[96],{"_uid":97,"links":98,"title":94,"component":89},"0f09839c-f7ce-48b8-8dc4-9269791644c0",[99,104,110,117,123],{"_uid":100,"icon":76,"link":101,"component":64,"lowerText":102,"upperText":103},"dd3ac1b6-d987-496d-bb75-e0db7459a79f",{"id":19,"url":93,"linktype":45,"fieldtype":46,"cached_url":93},"All our guides, case studies and webinars","All resources",{"_uid":105,"icon":61,"link":106,"component":64,"lowerText":108,"upperText":109},"5a1e2f7a-1111-4a00-9101-aa0000000101",{"id":19,"url":107,"linktype":45,"fieldtype":46,"cached_url":107},"/content/framework","Our analytics framework, explained step by step","Framework",{"_uid":111,"icon":112,"link":113,"component":64,"lowerText":115,"upperText":116},"5a1e2f7a-2222-4a00-9102-aa0000000102","VideoCameraIcon",{"id":19,"url":114,"linktype":45,"fieldtype":46,"cached_url":114},"/content/webinars","Recordings of our expert-led sessions","Webinars",{"_uid":118,"icon":83,"link":119,"component":64,"lowerText":121,"upperText":122},"5a1e2f7a-3333-4a00-9103-aa0000000103",{"id":19,"url":120,"linktype":45,"fieldtype":46,"cached_url":120},"/content/case-studies","Real results from our clients","Case studies",{"_uid":124,"icon":76,"link":125,"component":64,"lowerText":127,"upperText":128},"5a1e2f7a-4444-4a00-9104-aa0000000104",{"id":19,"url":126,"linktype":45,"fieldtype":46,"cached_url":126},"/content/knowledge","Guides on GA4, BigQuery and more","Knowledge base",{"_uid":130,"link":131,"name":133,"subItems":134,"component":49},"eaef6de5-12a1-40f0-8bcf-3e00472ef87e",{"id":19,"url":132,"linktype":45,"fieldtype":46,"cached_url":132},"/contact","Contact",[],[136],{"_uid":137,"link":138,"boldText":19,"component":140,"normalText":19},"d23b7c9c-c50d-4704-a330-c5d89f673a95",{"id":19,"url":19,"linktype":139,"fieldtype":46,"cached_url":19},"story","banner-blok",[142],{"_uid":143,"logo":144,"columns":145,"socials":167,"footnote":168,"component":169,"newsletter":170},"6bbe2605-0003-4e0f-9c83-f57387d6b9dc",{"id":18,"alt":19,"filename":20,"fieldtype":21},[146],{"_uid":147,"links":148,"title":165,"component":166},"bb943e00-cbd9-44d3-9ca8-e287f92f9a4c",[149,155,160],{"_uid":150,"link":151,"name":153,"component":154},"fa11f2ce-87a4-40b7-8c26-2248948ecdab",{"id":19,"url":152,"linktype":45,"fieldtype":46,"cached_url":152},"/legal/privacy-policy","Privacy policy","website-footer-link",{"_uid":156,"link":157,"name":159,"component":154},"29ce4cf1-4ae3-4c03-a924-1b7283a52cea",{"id":19,"url":158,"linktype":45,"fieldtype":46,"cached_url":158},"/legal/witcloud-terms-of-use","WitCloud - terms of use",{"_uid":161,"link":162,"name":164,"component":154},"7b2b71ce-9047-493a-ae9a-24f33d13b228",{"id":19,"url":163,"linktype":45,"fieldtype":46,"cached_url":163},"/legal/witcloud-privacy-policy","WitCloud - privacy policy","Legal","website-footer-column",[]," ©2025 Witbee sp. z o. o. All rights reserved.","website-footer",[],"layout-blok",[],"layout",null,30,[177],"Global","961eba08-4135-4b80-aba4-032c02789c49","2024-07-12T13:10:50.158Z","default",[],1788963673,[],[],{"age":186,"cache-control":187,"connection":188,"content-encoding":189,"content-type":190,"date":191,"etag":192,"referrer-policy":193,"sb-be-version":194,"server":195,"transfer-encoding":196,"vary":197,"via":198,"x-amz-cf-id":199,"x-amz-cf-pop":200,"x-cache":201,"x-content-type-options":202,"x-frame-options":203,"x-permitted-cross-domain-policies":30,"x-request-id":204,"x-runtime":205,"x-xss-protection":206},"12","max-age=0, public, s-maxage=604800, stale-if-error=3600","keep-alive","gzip","application/json; charset=utf-8","Wed, 09 Sep 2026 14:24:26 GMT","W/\"fcdd72bf0ef9897d2a66e8d76b633e9f\"","strict-origin-when-cross-origin","5.959.0","nginx/1.29.1","chunked","Origin,Accept-Encoding","1.1 4f9674ecfa7356676414cbab65f49e64.cloudfront.net (CloudFront)","OdeUMNTlLRajKTS4B4Otftqvbn9zzze7RMpXmIhg9eswx-gH8cKXfQ==","WAW51-P2","Hit from cloudfront","nosniff","SAMEORIGIN","46de2325-f684-44e3-916a-a0a5d093b571","0.027038","0",{"data":208,"headers":245},{"story":209,"cv":182,"rels":243,"links":244},{"name":210,"created_at":211,"published_at":212,"updated_at":213,"id":214,"uuid":215,"content":216,"slug":224,"full_slug":236,"sort_by_date":174,"position":237,"tag_list":238,"is_startpage":39,"parent_id":239,"meta_data":174,"group_id":240,"first_published_at":241,"release_id":174,"lang":180,"path":174,"alternates":242,"default_full_slug":174,"translated_slugs":174},"Knowledge","2026-06-25T08:35:07.410Z","2026-08-21T07:34:00.107Z","2026-08-21T07:34:00.121Z",191229572796195,"12c2659b-7f9b-4934-b8b9-f2fef6af5dcf",{"_uid":217,"body":218,"component":228,"meta_tags":229,"meta_title":235},"1ef761af-7711-4b0f-b48f-1f8b18e24c63",[219],{"_uid":220,"sort":221,"header":222,"source":223,"eyebrow":210,"component":225,"description":226,"displayMode":227},"a1b2c3d4-e5f6-7890-abcd-ef1234567890","date-desc","Knowledge Base",[224],"knowledge","content-list-blok","Articles, guides, and analyses on data analytics, BigQuery, Google Analytics 4, and reporting automation in e-commerce.","grid","landing-page",[230],{"_uid":231,"name":232,"content":233,"component":234},"knowledge-index-meta-description","description","Articles, guides and analyses on data analytics, BigQuery, Google Analytics 4 and reporting automation in e-commerce.","meta-tag","Knowledge base — BigQuery, GA4 and e-commerce analytics guides","content/knowledge/",-10,[],191213970958235,"5efb1a4d-c165-4d51-b50b-fd6ed7760d45","2026-06-25T08:35:07.470Z",[],[],[],{"cache-control":187,"connection":188,"content-encoding":189,"content-type":190,"date":246,"etag":247,"referrer-policy":193,"sb-be-version":194,"server":195,"transfer-encoding":196,"vary":197,"via":248,"x-amz-cf-id":249,"x-amz-cf-pop":200,"x-cache":250,"x-content-type-options":202,"x-frame-options":203,"x-permitted-cross-domain-policies":30,"x-request-id":251,"x-runtime":252,"x-xss-protection":206},"Wed, 09 Sep 2026 14:24:38 GMT","W/\"431ca2dcd24f85698ad1e0fec616983a\"","1.1 9448fc1c48817eb327c6aba5fe8c8544.cloudfront.net (CloudFront)","AiaRHJsLQW2pcnV1f5Hzh73Xr_ixa6SKIVkyrDGZ7DwopMhGxHx8wA==","Miss from cloudfront","cae96ba2-4d70-4625-bb0f-f4123e2ffe5e","0.023689",[254,281,304,327,357,384,409],{"name":255,"created_at":256,"published_at":257,"updated_at":258,"id":259,"uuid":260,"content":261,"slug":275,"full_slug":276,"sort_by_date":174,"position":277,"tag_list":278,"is_startpage":32,"parent_id":239,"meta_data":174,"group_id":279,"first_published_at":257,"release_id":174,"lang":180,"path":174,"alternates":280,"default_full_slug":174,"translated_slugs":174},"Google Analytics 4 [GA4] BigQuery - traffic sources, sessions, attribution, marketing costs and ready data for analysis","2026-06-23T08:28:42.839Z","2026-08-21T07:00:41.845Z","2026-08-21T07:00:43.295Z",190520208788172,"4a92d87b-04d7-4610-87e4-83ec85851626",{"_uid":262,"title":263,"content":264,"eyebrow":19,"showTOC":39,"category":224,"readTime":19,"subtitle":265,"component":266,"heroImage":267,"meta_tags":271,"meta_title":263,"heroButtons":272,"updatedDate":273,"bottomBlocks":274},"70c651b3-e211-4834-ade3-941e7ce294fd","Google Analytics 4 BigQuery - traffic sources, sessions, attribution, marketing costs and ready data for analysis","## Continuation of a series of posts about Google Analytics 4 data in BigQuery [Article series]\n\n\n\nThis article is part of a series of posts about Google Analytics 4 as well as data export to Google BigQuery. It consists of the following items:\n\n\n\n- [#1 Google Analytics 4 BigQuery – why should you use it? ](https://witbee.com/blog/google-analytics-4-bigquery-why-you-should-use-it)  \n- [#2 Google Analytics 4 BigQuery – 9 challenges that are sure to surprise you when analysing your data](https://witbee.com/blog/google-analytics-4-bigquery-9-challenges-to-surprise-you-in-data-analysis) \n- [#3 Google Analytics 4 BigQuery – traffic sources, sessions, attribution, marketing costs and ready-to-analyse data](https://witbee.com/blog/google-analytics-4-bigquery-traffic-sources-sessions-attribution-marketing-costs-and-ready-data-for-analysis) (which you are currently reading)\n\n\n\nThe last post was about analytical challenges related to data analysis in Google BigQuery. Companies as well as analysts and specialists working for them should focus mainly on making decisions based on data, and not on laborious and expensive preparation as well as processing of data for their analysis.\n\n\n\nIn response to this challenge, in our [WitCloud platform](https://witbee.com/witcloud) we decided to create an analytical module that, based on the exported Google Analytics 4 data to Google BigQuery, will solve problems with their processing and prepare these data in such a form so that they are ready for use in the company for various analyzes or integration with other systems.\n\n\n\nIn this article, we will step by step discuss what modifications we have made to the data and how we approached the design of the data structure in Google BigQuery.\n\n\n\n![Google Analytics 4 BigQuery - WitCloud - Sessions, Attributions](https://a.storyblok.com/f/46798/868x362/c5426a763d/google-analytics-4-bigquery-witcloud-events-to-sessions.png)\n\n## Enriching the events table with traffic sources [Enriching with traffic sources]\n\n### The issue of poor traffic source data in Google Analytics 4 [GA4] BigQuery Export\n\n\nIn article [#2 Google Analytics 4 BigQuery - 9 challenges, that will surprise you when analyzing data](https://witbee.com/blog/google-analytics-4-bigquery-9-challenges-to-surprise-you-in-data-analysis), we raised the problem of the lack of calculated traffic sources for specific sessions and poor access to Google Ads data. In the default exported “events_” table we have only the following fields available, i.e. traffic_source.source, traffic_source.medium, traffic_source.name (campaign name).\n\n\n\nReferring to our previous article; however, the problem is that these are fields that inform us about what source occurred in the first campaign of the time of acquiring this user, and not about the source that occurred in a given session, as we can view it in the reports and the \"Session source/medium\" dimension in the Google Analytics 4 panel. This means that in the panel, Google provides us with processed data, and we will have to do it ourselves using raw data in BigQuery.\n\n\n\n![Google Analytics 4 BigQuery traffic_source field description](https://a.storyblok.com/f/46798/986x327/0de56d0a96/google-analytics-4-bigquery-traffic-source-field-desc.png)\n\n\n\nUsing these fields in the table, we will achieve a different image than in the case of the “Session source / medium” dimension in the panel.\n\n\n\n\u003Cdiv style=\"text-align:center\">\n\u003Cimg src=\"https://a.storyblok.com/f/46798/790x164/1ae9c65264/google-analytics-4-bigquery-traffic-source-field-behaviour.png\">\n\u003C/div>\n\n\n\nMoreover, the table lacks more detailed information about Google Ads campaigns, as was the case in the export of data of Google Analytics Universal 360 (premium version)\n\n\n\n\n\n\u003Cdiv style=\"text-align:center\">\n\u003Cimg src=\"https://a.storyblok.com/f/46798/713x578/acc36d50a3/google-analytics-4-bigquery-missing-google-ads-fields.png\">\n\u003C/div>\n\n\n\n### The solution to the problem is all about enriching the events tables with the sources of session traffic in the Google Analytics 4 and Universal Analytics models.\n\n\n\nIn response to this challenge, we decided to enrich the \"events_\" table with additional groups of fields that provide information about the sources of traffic that occur in a particular session as well as additional information about the Google Ads campaign. \n\n\n\nThe data was enriched in the Google Analytics 4 model, which does not create a new session when changing the campaign source during the session, and in the Google Universal Analytics model, which creates a new session every time a new traffic source appears.\n\n\n\n![Google Analytics 4 BigQuery Vs WitCloud Tables](https://a.storyblok.com/f/46798/861x629/cfb22d8638/google-analytics-4-bigquery-witcloud-vs-events.png)\n\n\n\n#### Ability to track users between different devices\n\n\n\nBefore we discuss how individual models work on cases, we must mention a significant factor that we had to take into consideration when creating the module, i.e. tracking users between devices such as computers, smartphones and tablets (cross-device).\n\n\nGoogle Analytics 4 has appropriate functionalities that can connect events on the user's path based on 3 dimensions, i.e.:\n\n\n\n- **Device ID**, i.e. a browser cookie or an identifier in the application\n- **User ID**, i.e. an implementable user ID from our database, e.g. after registering/logging in to our website/application\n- **Google ID (Google Signals)**, i.e. an identifier connected to a logged-in user in Google (requires additional activation in the administrative settings of the service)\n\n\nBy default, Google Analytics only tracks the user based on Device ID, which is a cookie or application ID. This means that if we enter the selected website from a mobile device and then from a desktop computer, Google Analytics will report information about 2 different users acquired from 2 different channels. Based on this, it is not possible to track users between devices, because each device and each browser will have a different user ID.\n\n\n\nHowever, if we decide to send our own user ID in the implementation, e.g. after logging in/registering or activating the Google Signals option, Google will perform a deduplication of users on all collected data, i.e. it will find a connection between devices and provide us with more accurate data on users as well as their behaviour.\n\n\n\nIn the Google Analytics 4 panel, we can decide whether we want to see data with or without deduplication based on the \"Reporting Identity\" settings.\n\n\n\n![Google Analytics 4 Reporting Identity](https://a.storyblok.com/f/46798/834x549/d25537595b/google-analytics-4-bigquery-reporting-identity.png)\n\n\n\nIn Google BigQuery, we can perform user deduplication only on the basis of 2 dimensions, i.e. Device ID and User ID, because as far as legal aspects are concerned, Google Signals data is not shared in the Google Analytics 4 data export.\n\n\n\n![Google Analytics 4 BigQuery Device Id, User Id and No Google Singals ID](https://a.storyblok.com/f/46798/771x454/dda30cd467/google-analytics-4-bigquery-identity-user.png)\n\n\n\n#### Sessions & Traffic Source Approach - Google Analytics 4 vs Google Analytics Universal\n\n\n\nThe following diagram will allow us to better answer 2 significant and related to each other questions:\n\n\n\n\u003Col>\n  \u003Cli>How does deduplication of users using the user_id parameter affect the attribution of traffic sources?\u003C/li>\n  \u003Cli>How has the logic of counting sessions in Google Analytics 4 vs Google Analytics Universal changed?\u003C/li>\n\u003C/ol>\n\n\n\n![Google Analytics 4 BigQuery - Cross Device Sessions](https://a.storyblok.com/f/46798/1145x533/8f22588d1f/google-analytics-4-bigquery-diagram-cross-device-sessions.png)\n\n\n\nBrief description of the scheme:\n\n\n\n- The user entered the website from a mobile device after being referred from Facebook, which resulted in the creation of a new session\n- During the session generated by Facebook (within 30 minutes of the lack of interaction), the user clicked on the page again through a Google Ad\n- After some time, the user decided to enter the website again, this time from a desktop computer without being redirected (direct entry)\n- On both mobile and desktop devices, the user was logged in and the “user_id” parameter was sent\n\n\n\nNow let's take a look at how traffic source attribution and session calculation for each model will behave.\n\n\n\n**Google Analytics 4 - Cross Device Model**\n\n\n\n![Google Analytics 4 BigQuyer - GA4 Cross Device Model](https://a.storyblok.com/f/46798/689x138/63d1b8837b/google-analytics-4-bigquery-ga4-cross-device-model.png)\n\n\n\nIn the Google Analytics 4 - Cross Device model, when the user enters a website from a mobile device and is redirected from Facebook, a new session will be created. When a user clicks through a Google ad from the same device during a session, no new session is created because Google Analytics 4 does not create a new session when the campaign source changes during the previous session.\nThe moment the user enters a website from a desktop device and it is a direct entry (“Direct” traffic), this source will be overwritten with the last source of traffic that occurred in the previous session - it will not be Facebook, but Google, which previously did not cause the creation of a new session on a mobile device.\n\n\n\n**Google Analytics 4 - Device Model**\n\n\n\n![Google Analytics 4 BigQuery - Device Model](https://a.storyblok.com/f/46798/689x157/c7f291706b/google-analytics-4-bigquery-ga4-device-model.png)\n\n\n\nIn the Google Analytics 4 model based on Device ID (in the case of a website, this will be a cookie), each browser will have a new user ID generated. In such a situation, the first session will have a Facebook source assigned, and the second session, which occured on another device, will have a “Direct” source. Google campaigns will be ignored in this case, because the logic of Google Analytics 4 does not take into consideration the creation of a new session when changing the traffic source. The second session (direct entry) will not inherit the traffic source, as it is in no way related to the previous device (no deduplication and use of user_id). It will be direct, then.\n\n\n\n\n**Universal Analytics - Device Model**\n\n\n\n![Google Analytics 4 BigQuery Device Model](https://a.storyblok.com/f/46798/687x182/6c23c8306d/google-analytics-4-bigquery-ua-device-model.png)\n\n\n\nIn the Universal Analytics model based on Device ID (currently and historically used in Google Analytics Universal), the Facebook source will be assigned in the first session. A new session will then be created for the Google source, as Universal Analytics creates a new session each time the campaign source is changed during the session. When the user enters directly from the desktop device, a third session will be created, which will not be overwritten with a Google value, as it is not in any way related to the previous device (no deduplication and use of user_id). It will be direct, then.\n\n\n\n**Universal Analytics - Cross-Device Model**\n\n\n\n![Google Analytics 4 BigQuery Cross Device Model](https://a.storyblok.com/f/46798/683x189/995cdfb460/google-analytics-4-bigquery-ua-cross-device-model.png)\n\n\n\nThe Universal Analytics model based on cross-device is a novelty that we decided to recreate on the basis of a dedicated approach related to user deduplication in Google Analytics 4, but keeping the old approach, which assumes creating a new session when the source of the campaign changes during the session. In this way, the first session will have the ‘facebook’ value, then a new session will be created, for the Google source, because Universal Analytics creates a new session every time the campaign source changes during the session. After direct input from the desktop device, a third session will be created, which will be overwritten with Google value, because we are able to connect users to each other on the basis of deduplication using user_id.\n\n\n\n#### Why have we prepared three data models?\n\n\n\nDecisions about reporting with the use of the chosen Google Analytics model may depend on the preferences of the organization. That is why, we wanted each company to be able to make its own decisions about this choice or be able to compare data in different models.\n\n\n\nFor this reason, we have prepared data in 3 models, i.e.:\n\n\n\n- Google Analytics 4 Cross Device including Deduplication\n- Google Analytics Universal Cross Device including deduplication\n- Google Analytics Universal Device without deduplication (known and liked from Google Analytics Universal)\n\n\n\n## Event grouping into sessions, i.e. session tables for Google Analytics 4 data [Grouping events into sessions]\n\n\n### Event Table vs Session Table\n\n\n\nAn event table is a table that contains rows, each of them corresponds to a single event with all the attributes collected based on the implementation on the website or in the application. This is how Google Analytics 4 data is dumped when we start the function of exporting it to Google BigQuery. It enables to view all event parameters in great detail.\n\n\n\n![Google Analytics 4 BigQuery Screen Events Table](https://a.storyblok.com/f/46798/901x472/bc104a0435/google-analytics-4-bigquery-events-table.png)\n\n\n\nA session table is a table that contains rows,  each of them corresponds to one session - it contains grouped and calculated information based on all events that occurred in the event table.\n\n\n\n![Google Analytics 4 BigQuery Calculated Sessions Table](https://a.storyblok.com/f/46798/697x230/acfeb88331/google-analytics-4-bigquery-sessions-table.png)\n\n\n\n### Why did we decide to create a session table?\n\n\n\nThe key issue was to provide a relatively light table for the tools responsible for data visualization. The session table, due to the fact that it has aggregated and converted values, takes up much less space compared to the event table.\n\n\n\n\nFor example, the event table, which contained 850,000 events, had a weight of 1.5 GB.\nThe session table that was created based on these events had just 52,000 rows and its weight was 83 MB.\n\n\n\n![Google Analytics 4 BigQuery - Events vs Sessions Tables](https://a.storyblok.com/f/46798/627x203/392bc8ddec/google-analytics-4-bigquery-events-vs-sessions-table.png)\n\n\n\n\nAll visualization tools integrated with Google BigQuery perform an SQL query, as we mentioned in our first article here. By questioning a smaller table, visualizations work much faster and cheaper.\n\n\n\nWhen preparing the session table, we thought about calculating the most popular metrics used for various reports and adding information about campaign sources, gellocations, devices or all transaction information. Therefore, what we obtain is a much lighter table, still very rich in information, without having to write additional SQL queries related to the event table.\n\n\n\n\n![Google Analytics 4 BigQuery - WitCloud Sessions Table](https://a.storyblok.com/f/46798/1030x643/d16245bda9/google-analytics-4-witcloud-sessions-table.png)\n\n\n\n### The module provides 3 session tables in the following models, i.e. Google Analytics 4, Universal Analytics Cross-Device and Universal Analytics Device\n\n\n\nBased on the above-mentioned examples in the section on the \"events\" table, we already know that each model, i.e. Google Analytics 4, Universal Analytics Cross-Device and Universal Analytics Device will be able to have a different number of sessions and different traffic sources. Therefore, we decided to create 3 tables for particular models that have the same field scheme (metrics and dimensions).\n\n\n\n![Google Analytics 4 BigQuery - WitCloud Sessions in 3 models](https://a.storyblok.com/f/46798/442x339/12294d8207/google-analytics-4-bigquery-sessions-witcloud-3-models.png)\n\n\n\n### Session tables include currency conversions for stores selling in multiple markets\n\n\n\n\nIf users can make purchases in different currencies on our website or in the application, we must ensure that the value is converted to the currency that has been established in the settings of the respective service. This requires downloading the exchange rate from a given day through the API and creating additional calculation fields. That is why, we decided to make this task easier and automatically convert the values for transactions and products in our session table, according to the established currency in the Google Analytics 4 administrative settings.\n\n![Google Analytics 4 BigQUery - Convert Currency Automatically](https://a.storyblok.com/f/46798/1062x225/9f3f7346d7/google-analytics-4-currency-conversion-aproach.png)\n\n\n\n![Google Analytics 4 BigQuery Currency Converted Fields](https://a.storyblok.com/f/46798/756x475/b685923dbf/google-analytics-4-bigquery-currency-converted-fields.png)\n\n## Google Analytics 4 [GA4] BigQuery - conversion attribution [Conversion attribution]\n\n\n\n### Attribution of traffic sources in Google BigQuery\n\n\n\nOwning Google Analytics 4 data in BigQuery, which was enriched with traffic sources in various models, we couldn't resist preparing some additional tables that contain the attribution of marketing channels. As in the case of the session table, we have included tables in 3 models here, i.e. Google Analytics 4 Cross Device, Google Analytics Universal Cross Device and Google Analytics Universal Device.\n\n\n\n![Google Analytics 4 BigQuery - WitCloud Attribution in 3 models](https://a.storyblok.com/f/46798/338x259/d0cf856eaa/google-analytics-4-bigquery-attribution.png)\n\n\n\nThe attribution is performed for all events that have been marked as a conversion in the Google Analytics panel.\n\n\n\n\n![Google Analytics 4 Conversions Events](https://a.storyblok.com/f/46798/1125x264/7156f7749f/google-analytics-4-conversions.png)\n\n\n\n### What do the attribution tables contain?\n\n\n\nAttribution tables contain information about conversion paths in 5 different attribution models, i.e. last click non direct, first click, linear, position based and timedecay.\n\n\n\n![Google Analytics 4 BigQuery - Attribution Calculation Table Schema](https://a.storyblok.com/f/46798/998x617/a92fa0d1a5/google-analytics-4-bigquery-attribution-table-schema-desc.png)\n\nThe data allows for a detailed analysis of all user paths leading to conversion. Having a calculated score for each model, we can multiply the weight (attribution_score) by the conversion value and obtain an accurate result for reporting purposes.\n\n\n\n![Google Analytics 4 BigQuery - Attribution Conversion Paths Example](https://a.storyblok.com/f/46798/903x149/2867ea71dc/google-analytics-4-bigquery-attribution-conversion-paths-example.png)\n\n\n\nIf our conversion is a “purchase” event, we will also find all information about transactions and sold products in the table. This gives us a lot of additional possibilities, e.g. we can data from CRM on profit based on transaction and product identifiers and check which marketing channels support particular product groups on the path to purchase.\n\n\n\n![Google Analytics 4 BigQuery Attribution Models](https://a.storyblok.com/f/46798/649x353/edebcd629f/google-analytics-4-bigquery-attribution-products.png)\n\n\n\n## Google Analytics 4 BigQuery module in WitCloud - start your analytical adventure in 30 minutes [WitCloud module]\n\n\n\n### Configuration of data export in Google BigQuery and creation of an account in WitCloud\n\n\n\nYou can start the adventure with the data described above in less than 30 minutes. All you need is a project on the Google Cloud Platform and a data export of Google Analytics 4 to BigQuery.\nIf you create a Google Cloud Platform settlement account for the first time, you'll get $300 to use for the first 90 days\n\n\n\n[How to set up a project on Google Cloud Platform](https://witbee.com/docs/start/how-to-start/#setting-up-the-google-cloud-platform-project)\n\n[How to start exporting Google Analytics 4 data to BigQuery](https://support.google.com/analytics/answer/9823238?hl=en&ref_topic=9359001#step3&zippy=%2Cin-this-article)\n\n\n\nThe next step is to create an account and project in the WitCloud platform. We offer a 14-day trial period. So taking into account $300 to get started with Google and our trial period, you can start data analysis for free.\n\n\n\n[How to set up a project on the WitCloud platform](https://witbee.com/docs/start/how-to-start/#create-an-account-and-create-a-project-in-witcloud-platform)\n\n\n\n[Google Cloud Free Trial & WitCloud Free Trial']('https://a.storyblok.com/f/46798/358x307/3102ae6e2f/google-cloud-witcloud.png)\n\n\n\n### How to set up a project on the WitCloud platform\n\nThe WitCloud platform can automatically download and process BigQuery data not only for Google Analytics 4, but also for popular advertising systems, e-commerce platforms, search console data and Google sheets.\n\n\n\n\n\nIn the first place, we recommend starting the following modules:\n\n\n\n- [Google Ads](https://witbee.com/docs/collect/google-ads-to-bigquery/) - to combine Google Ads campaign data with the GA4 module later\n- [Google Analytics 4 BigQuery](https://witbee.com/docs/collect/google-analytics-4-bigquery/)\n- in order to obtain the tables discussed in the article\n\n\n\nIt is recommended to configure other marketing sources at the next stage:\n\n\n\n- [Ad Systems](https://witbee.com/witcloud/integrations?cat=Ad%2520System)\n- [E-commerce platforms](https://witbee.com/witcloud/integrations?cat=Ecommerce)\n\n\n\n![WitCloud Platform - All Marketing Data in Google BigQuery ](https://a.storyblok.com/f/46798/926x403/765588f1d0/witcloud-all-integration.png)\n\n\n\nIf you decide to give it a try and encounter any difficulties while activating the integration, do not hesitate to ask us a question via the chat located in the lower right corner of the website.\n\n\n\n","Simple and fast analysis of Google Analytics 4 data in BigQuery thanks to the WitCloud platform. Session tables, marketing channel attribution and more.","content-page",{"id":268,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":269,"copyright":19,"fieldtype":21,"meta_data":270,"is_external_url":32},190527407462478,"https://a.storyblok.com/f/296300/900x600/abccb0f082/10-ga4-bigquery-ready-data.png",{},[],[],"2025-02-25 00:00",[],"google-analytics-4-bigquery-traffic-sources-sessions-attribution-marketing-costs-and-ready-data-for-analysis","content/knowledge/google-analytics-4-bigquery-traffic-sources-sessions-attribution-marketing-costs-and-ready-data-for-analysis",0,[],"c4d63873-b48c-4c11-8717-9675a264ef31",[],{"name":282,"created_at":283,"published_at":257,"updated_at":284,"id":285,"uuid":286,"content":287,"slug":298,"full_slug":299,"sort_by_date":174,"position":300,"tag_list":301,"is_startpage":32,"parent_id":239,"meta_data":174,"group_id":302,"first_published_at":257,"release_id":174,"lang":180,"path":174,"alternates":303,"default_full_slug":174,"translated_slugs":174},"Google Analytics 4 [GA4] BigQuery - 9 challenges to surprise you in data analysis","2026-06-23T08:28:33.008Z","2026-08-21T07:00:43.184Z",190520168536775,"cbd46d2c-d585-4da6-91ea-754c8fc8b69b",{"_uid":288,"title":282,"content":289,"eyebrow":19,"showTOC":39,"category":224,"readTime":19,"subtitle":290,"component":266,"heroImage":291,"meta_tags":295,"meta_title":282,"heroButtons":296,"updatedDate":273,"bottomBlocks":297},"b6f75232-4b82-49d2-845a-284ebf9d3c5d","## Continuation of a series of articles about Google Analytics 4 [GA4] data in BigQuery [Article series]\n\n\n\nThis article is part of a series of posts about Google Analytics 4 and the export of data to Google BigQuery. It consists of the following components:\n\n\n\n- [#1 Google Analytics 4 BigQuery – why you should use it? \n](https://witbee.com/blog/google-analytics-4-bigquery-why-you-should-use-it)  \n- [#2 Google Analytics 4 BigQuery – 9 challenges that are sure to surprise you when analysing your data](https://witbee.com/blog/google-analytics-4-bigquery-9-challenges-to-surprise-you-in-data-analysis)  (which you are currently reading)\n\n- [#3 Google Analytics 4 BigQuery – traffic sources, sessions, attribution, marketing costs and ready-to-analyse data\n](https://witbee.com/blog/google-analytics-4-bigquery-traffic-sources-sessions-attribution-marketing-costs-and-ready-data-for-analysis)\n\n\n\nIn the previous post of  [Google Analytics 4 BigQuery - why you should use it ?](https://witbee.com/blog/google-analytics-4-bigquery-why-you-should-use-it) we discussed a number of arguments about why it is worthwhile to use the export of Google Analytics 4 data in BigQuery.\nHowever, while interacting with data, we may come across various difficulties that we should be aware of before we spend many hours on taking attempts to overcome them. So we decided to write an informative article about these problems - this is a collection of our experience from projects based on data export from Google Analytics 4. \n\n## Data reported in Google BigQuery will be different than those seen in the Google Analytics 4 panel [Data differs from the panel]\n\nThe first task we handled while working with the export of Google Analytics 4 data in BigQuery was to trace the logic of reports that are available in the interface. In this way, we can learn a lot and understand exactly how the metrics and dimensions are calculated and validate the correctness of our queries.\n\n\n\nHere, the task turned out to be difficult, because according to [Google Analytics 4 documentation](https://support.google.com/analytics/answer/9191807?hl=en) , the data in the panel may differ from those that we will calculate in BigQuery.\nEven if the data in the Google Analytics 4 panel shows that they are not sampled, the number of sessions is still an estimate based on the number of unique session identifiers. Read more about this topic in: [Unique count approximation in Google Analytics](https://developers.google.com/analytics/blog/2022/hll)\n\n\n\n![How Google Analytics 4 Calculate Sessions](https://a.storyblok.com/f/46798/671x92/65aa7fa106/google-analytics-4-bigquery-number-of-sessions.png)\n\n\n\nIn BigQuery we most often do not use the estimation function, and hence we can spot differences, for instance in the number of sessions compared to the results given in standard and exploratory reports or in Looker Studio.\n\n\n\nHere are the recommendations from Google:\n\n\n\n- If we wish to get more accurate results based on raw data, we should use Google BigQuery to export data\n- If we need to quickly obtain results taking into account the margin of error, it is best to check them in the reports in the panel  \n\n\n\n![Google Analytics 4 BigQuery Data Precision](https://a.storyblok.com/f/46798/904x264/f30627a14d/google-analytics-4-bigquery-data-precision.png)\n\n## Information about campaign sources in BigQuery we only have the first source of user acquisition [Only first acquisition source]\n\nLittle doubt, a report showing the source/medium was the most popular report in Google Analytics Universal. Such a report was also reproduced in Google Analytics 4. It is available in the default Acquisition -> Traffic Acquisition section.\n\n\n\n\n![Google Analytics 4 - Source/Medium Report](https://a.storyblok.com/f/46798/1780x780/a49616841d/google-analytics-4-source-medium-report.png)\n\n\n\nThis report uses a dimension called “Session source/medium”, which carries information about the source of the session. \n\n\n\nWhile viewing data exported to Google BigQuery for GA4, we can notice fields called traffic_source.source, traffic_source.medium, traffic_source.name (campaign name), which are very often misused to reproduce the above report. \n\n\n\n![Google Analytics 4 BigQuery traffic_source field example](https://a.storyblok.com/f/46798/752x63/4647884f9c/google-analytics-4-bigquery-traffic-source-example.png)\n\n\n\nThe problem, however, is that these are fields with the information about the things that occurred in the first campaign since acquiring this user, not about the source that occurred in a relevant session, as we can view it in the reports and the \"Session source/medium\" dimension.\n\n\n\n![Google Analytics 4 BigQuery traffic_source field description](https://a.storyblok.com/f/46798/986x327/0de56d0a96/google-analytics-4-bigquery-traffic-source-field-desc.png)\n\n\n\nBy using these fields in the table, we will thus achieve a different image than for the “Session source / medium” dimension in the panel.\n\n\n\n![Google Analytics 4 BigQuery traffic_source field path example](https://a.storyblok.com/f/46798/790x164/1ae9c65264/google-analytics-4-bigquery-traffic-source-field-behaviour.png)\n\n\n\n\u003Cspan style='color:red'>UPDATE - the following parameters are currently available at the event parameter level and in the columns in the collected_traffic_source group. However, please remember that these are not data calculated according to the dimension logic, i.e. Session source/medium/campaign. These are just parameters that occur with the event. \u003C/span>\n\n\n\nTo reproduce this dimension, we need to retrieve the campaign parameters from the events, and then calculate these data according to the logic described in the documentation for all sessions: [[GA4] Scopes of traffic-source dimensions - Analytics Help ](https://support.google.com/analytics/answer/11080067?hl=en&ref_topic=11151952#zippy=%2Cin-this-article)\n\n\n\n![Google Analytics 4 BigQuery Campaign Parameters ](https://a.storyblok.com/f/46798/913x374/f97bc5ec82/google-analytics-4-bigquery-campaign-info.png)\n\n\n\n## Google Analytics 4 [GA4] performs deduplication on users between devices* [Cross-device deduplication]\n\n\n\n The data may be connected between platforms/devices, this being a major revolution in Google Analytics 4 compared to Google Analytics Universal. By implementing Google Analytics 4 on our website and in the mobile application, we are able to obtain one transparent source of analysis for these platforms.\n\n\n\nBy default, Google Analytics generates a “user_pseudo_id” for each device/browser, that is a new cookie (website) or identifier (mobile application). Based on this identifier, the calculations necessary to present all metrics and dimensions in the panel are performed.\nOne user can visit our website or app through different devices. If you visit us on the website on your computer, then on the website on your mobile device, and finally in the mobile application, you will be identified as 3 different users. \n\n\n\nIf we enable [Google Signals](https://support.google.com/analytics/answer/9445345?hl=en&ref_topic=9303474#zippy=%2Cin-this-article) or implement a [User ID function](https://support.google.com/analytics/answer/9213390?hl=en) (by way of illustration a custom identifier from a database when logging in or making a purchase)Google Analytics will perform a deduplication on your data (as far as possible in Google Signals), which will affect the number of users and the attribution of marketing channels. We may view data at different levels (whether deduplicated or not) depending on our identity settings in Google Analytics 4 - more on this in: [[GA4] Reporting Identity - Analytics - Help ](https://support.google.com/analytics/answer/10976610?hl=en)\n\n\n\n![Google Analytics 4 User Identity](https://a.storyblok.com/f/46798/921x418/9f147ef977/google-analytics-4-user-deduplication-before-after.png)\n\n\n\nHowever, it is worth remembering that Google Signals data is data that Google can connect with users who have logged into their Google accounts and have ad personalization enabled. By linking this data to logged-in users, the reports may present a number of users more accurately. In view of the users' privacy policy, Google cannot share this data with us, which also affects the discrepancies in data between the interface and the reports in Google BigQuery. Read more about this topic in: [[GA4] Activate Google signals for Google Analytics 4 properties](https://support.google.com/analytics/answer/9445345?hl=en&ref_topic=9303474#zippy=%2Cin-this-article)\n\n\n\n![Google Analytics 4 BigQuery Show More Users ](https://a.storyblok.com/f/46798/981x169/ee1df82f28/google-analytics-4-bigquery-export-show-more-users.png)\n\n\n\nTake note - if we have implemented the user_id parameter on our website or application, we can seek to recreate the deduplication of users in BigQuery - only in this way will we achieve the correct number of users and the correct attribution of traffic sources to the session in accordance with the “Cross-Device” logic. \n\n\n\n[Complex Deduplication in BigQuery | by Benjamin Campbell ](https://benjaminsky.medium.com/complex-deduplication-in-bigquery-a3c5e78dec2b) , expands the issue of the deduplication problem and a potential solution.\n## One session ID (ga_session_id) can be assigned to 2 different users [One session ID, 2 users]\n\n\n\nTime stamps are used intensively in programming.\nThis data determines the moment when a specific event occurred.\nThe value of this stamp is defined on the basis of \"Unix Time\", a system of time representation measuring the number of seconds since the early 1970.\n\n\n\nFor example, Timestamp 1672481243 represents the date and time: 2022-12-31 10:07:23\nThat's 1672481243 seconds since the early 1970s.\n\n\n\nWhen browsing Google Analytics 4 data in BigQuery, we also have a lot of contact with time stamps, for instance the field event_timestamp contains the number of microseconds since 1970.\n\n\n\nWhen we look at the identifier named “ga_session_id”, we see that this is the approximate time of the first event starting the sessions.\n\n\n\n![Google Analytics 4 GA Session ID Duplication](https://a.storyblok.com/f/46798/739x124/c1db345336/google-analytics-4-bigquery-ga_session_id.png)\n\n\n\nWhereas several users can start sessions at the same time (exactly the same second), the parameter per se, that is ga_session_id, does not give a unique session identifier. To this end, we need to combine user_pseudo_id or user ID and ga_session_id to obtain a unique session ID for our calculations. We can do this with the CONCAT function.\n\u003Ccode >\nSELECT \n&nbsp;&nbsp;&nbsp;CONCAT(user_pseudo_id, ga_session_id) as session_id\nFROM\n&nbsp;&nbsp;&nbsp;your_google_analytics_4_events\n\u003C/code>\n\n\n\n\nWe will then develop a unique string, one which will communicate the identifier of a session:\n\n\n\n\u003Cp style='text-align:center'>\u003Cspan style='color:green'>1020668977.1672354709\u003C/span>\u003Cspan style='color:red'>1672354709\u003C/span>\u003Cp>\n\n\n\nOf note - if we look at the value of user_pseudo_id and see what it is composed of, we will also notice a timestamp communicating the date of creation of the user in question.\n\n\n\n\u003Cp style='text-align:center'>\n1020668977.\u003Cspan style='color:red'>1672354709\u003C/span> = {{random number}} + “.” + {{user created timestamp}}\n\u003C/p>\n\n## One session ID (ga_session_id) can occur on 2 different days [One session ID, 2 days]\nGoogle Analytics Universal created a new session each time:\n\n- there has been no interaction for more than 30 minutes (based on default settings)\n- when campaign parameters changed ( that is utm, gclid, referral)\n- **when the session took place between one and the other day**\n\n\n\nBy way of illustration, if a user started the session at 23:58, and the purchase was made without walking away from the computer at 00:05 the following day, Google Analytics Universal created 2 different session IDs in this case - the one lasted from 23:58 to 00:00 and the other from 00:00 to 00:05 (assuming that the user closed the browser as soon as he had made his purchase).\n\n\n\nFor Google Analytics 4, the session ID will remain the same between one and two days. Accordingly, if we want to calculate the exact metrics for a relevant session, we have to take into account the data from the previous day, be it to check the entry/destination page for a specific session. This affects the size of the processed data and the need to apply additional modifications in SQL queries.\n\n## URL (page_location) can be up to 1000 characters long [URL up to 1000 characters]\n\n\n\n\u003Cspan style='color:red'>UPDATE - Character limit restrictions for page_location parameter changed from 420 to 1000 characters\u003C/span>\n\n\n\nIf you have long urls, ones using many parameters, the analysis of this data in BigQuery may surprise you. During one of the projects, the client asked us to analyze the filters selected by the user based on the parameters in the url addresses. We sat down to the task with optimism, writing regular expressions that allow us to extract parameters from url addresses.\nFollowing a brief analysis, we noticed that parts of the parameters are missing or often cut out in url addresses. So we decided to check the maximum length of url addresses and it turned out that a large part is always 420 characters - all these addresses had cut off parameters due to length.\n\n\n\n\n![Google Analytics 4 page_location max 420 characters](https://a.storyblok.com/f/46798/1020x110/421b49949a/google-analytics-4-page-location-max-420-characters.png)\n\n\n\nOur recommendation: if we are aware that the relevant url parameters will be very important for us during data analysis,  we should pass them as event parameters. Take note, however, that page_location is a system parameter that can be \u003Cs>420\u003C/s> 1000 characters long. For custom parameters, the character limit is 100. Read more about the limits: [[GA4] Event collection limits - Analytics Help](https://support.google.com/analytics/answer/9267744?hl=en)\n\n## Data without analytical consent contain no information about user_pseudo_id and ga_session_id [No-consent data gaps]\n\n\n\nIf we have correctly implemented the Google consent mode function, the data may reach Google Analytics in various forms. If you do not agree to be identified by a cookie, your events will be submitted to Google BigQuery, but the parameters, that is user_pseudo_id and session_id, will be null. Hence, if we plan to use this data for combining or other calculations, it is worthwhile to keep it in mind, because many data can be grouped into one non-existent user or into one non-existent session.\n\n\n\n![Google Analytics 4 BigQuery Consent Mode Data](https://a.storyblok.com/f/46798/861x675/3ffd4a1a5a/google-analytics-4-bigquery-consent-mode.png)\n\n\n\n## When our transactions go to Google Analytics in different currencies, we need to have them converted [Multi-currency conversion]\n\n\n\nIf users can make purchases in different currencies on our website or in the application, we must ensure that the value is converted to the currency that has been set in the settings of the respective service.\nIn the case of submitting the “currency” event parameter in the implementation, Google Analytics 4 provides us with additional fields in which the data converted by default to USD are located. Sadly, we cannot define the currency in which we would like to drop data to Google BigQuery. Respectively, if we have a selected currency in our service settings, for instance PLN, in which case we will have to download the day-specific rate  to Google BigQuery and convert this information in order to be able to map what we see in the panel.\n\n\n![Google Analytics 4 BigQuery - Currency Conversion Value](https://a.storyblok.com/f/46798/1049x235/69163b248f/google-analytics-4-currency-conversion-issue.png)\n\n## Lack of complete information about full Google Ads data and vulnerability to campaign name changes [Google Ads data limits]\n\n\n\nIn exporting Google Analytics Universal data to BigQuery, we were accustomed to comprehensive information about Google Ads campaigns.\n\n\n\n![Google Analytics 4 BigQuery Missing Google Ads Data](https://a.storyblok.com/f/46798/718x575/99b5b1dfe4/google-analytics-4-bigquery-missing-google-ads-data.png)\n\n\n\nAs we mentioned earlier, for Google BigQuery data, we have only 3 fields calculated, that is traffic_source.source, traffic_source.medium and traffic_source.name, and these are fields that talk about acquiring a user, not about the sources of a specific session.\nIf you want to complement your Google Analytics 4 data with additional information from Google Ads, including your advertising account identifier, campaign identifier, campaign type, we need to make sure that Google Ads tables are included in Google BigQuery, and only in the subsequent step do we link them with additional SQL instructions. This process is quite capable of expanding the logic of queries, and so this constitutes another difficulty that we must be ready for while exploring data.\n\n\n\n## Summary\n\nGoogle Analytics 4 and the ability to export data to Google BigQuery is a great solution for all companies that wish to make efficient decisions based on data. However, if we want to fully draw from their potential and act in accordance with the state-of-the-art practices related to measuring traffic between devices, we must spend a lot of time processing this data (user deduplication, attribution of traffic sources, combining Google Ads data). We also need to be prepared for data discrepancies between the Google Analytics 4 panel and what we get as a result in Google BigQUery.\n\n\n\nLuckily, most of the problems related to data processing can be automated - we discussed our approach to this issue in our next article  [“Google Analytics 4 BigQuery - traffic sources, sessions, attribution, marketing costs and ready data for analysis”](https://witbee.com/blog/google-analytics-4-bigquery-traffic-sources-sessions-attribution-marketing-costs-and-ready-data-for-analysis). \n\n\n","When interacting with Google Analytics 4 [GA4] data in BigQuery, we managed to encounter various difficulties that are worth knowing about in advance, before many hours have passed on a detective attempt to overcome them.",{"id":292,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":293,"copyright":19,"fieldtype":21,"meta_data":294,"is_external_url":32},190527407499343,"https://a.storyblok.com/f/296300/900x600/07a6ad8a1c/11-ga4-bigquery-9-challenges.png",{},[],[],[],"google-analytics-4-bigquery-9-challenges-to-surprise-you-in-data-analysis","content/knowledge/google-analytics-4-bigquery-9-challenges-to-surprise-you-in-data-analysis",10,[],"4f75bf07-79d3-4f9f-8ceb-37bdb2ff7e9c",[],{"name":305,"created_at":306,"published_at":257,"updated_at":307,"id":308,"uuid":309,"content":310,"slug":321,"full_slug":322,"sort_by_date":174,"position":323,"tag_list":324,"is_startpage":32,"parent_id":239,"meta_data":174,"group_id":325,"first_published_at":257,"release_id":174,"lang":180,"path":174,"alternates":326,"default_full_slug":174,"translated_slugs":174},"Google Analytics 4 [GA4] BigQuery - why you should use it?","2026-06-23T08:28:24.874Z","2026-08-21T07:00:43.097Z",190520135199428,"286c6655-c086-4815-b927-99038aa3e83f",{"_uid":311,"title":305,"content":312,"eyebrow":19,"showTOC":39,"category":224,"readTime":19,"subtitle":313,"component":266,"heroImage":314,"meta_tags":318,"meta_title":305,"heroButtons":319,"updatedDate":273,"bottomBlocks":320},"dc82dc8e-104a-488d-9f00-4dc382a4b37c","## A series of articles on Google Analytics 4 [GA4] data in BigQuery [Article series]\n\n\n\nThis article is part of a series of posts about Google Analytics 4 and the export of data to\nGoogle BigQuery. It consists of the following components:\n\n\n\n- [#1 Google Analytics 4 BigQuery – why you should use it?](https://witbee.com/blog/google-analytics-4-bigquery-why-you-should-use-it )   (which you are currently reading)\n- [#2 Google Analytics 4 BigQuery – 9 challenges that are sure to surprise you when analysing your data](https://witbee.com/blog/google-analytics-4-bigquery-9-challenges-to-surprise-you-in-data-analysis) \n- [#3 Google Analytics 4 BigQuery – traffic sources, sessions, attribution, marketing costs and ready-to-analyse data](https://witbee.com/blog/google-analytics-4-bigquery-traffic-sources-sessions-attribution-marketing-costs-and-ready-data-for-analysis)\n\n\n\n## Getting started – Google Analytics 4 and Google BigQuery [Getting started]\n\n\n\n### Why is the Google Analytics interface not enough?\nThe moment you implement Google Analytics 4 on a website or app, you start sending\ninformation about user events to Google's database. Based on this data, various types of\nreports are displayed in the Google Analytics 4 interface. \n\n\n\nBrowsing data in the Google Analytics 4 interface can be an enjoyable task.\nSometimes, however, you may encounter various types of constraints while running an\nanalysis, e.g.:\n\n\n\n- the data is sampled, which means that the results are presented on the basis of a\n  sample of data rather than all the information collected\n- some metrics and dimensions cannot be combined as the system does not allow it\n- there is too much data as a result of which many dimensions, e.g. URLs or product names, are suddenly hidden under the name “(other)”\n\n\n\nWe often want to pull data from Google Analytics out of the system and perform additional\ntasks, e.g.:\n\n\n\n- build a dashboard containing Google Analytics data and all marketing costs so as to\n  be able to calculate ROAS or ERS for individual channels\n- combine Google Analytics data with CRM data, e.g. order status information\n- measure marketing campaign attribution using data that includes product margins\n\n\n\nThis is also when we face various limitations, e.g.:\n\n\n\n- we are surprised by the limits of exported rows from Google Analytics and the\n  number of possible API queries\n- we cannot extract just some of the information at a certain level, e.g. user ID or\n  transaction, only aggregated calculated values that we cannot modify in any way\n\n\n\n### Google Analytics 4 [GA4] BigQuery Export\n\n\n\nWe could list many more examples and limitations for different projects. In response to all\nthe above problems and challenges, Google has released a service for exporting raw data\nfrom Google Analytics 4 to BigQuery (we will explain the choice of this tool in particular later in the post), i.e. data that the former uses to prepare all reports in the panel. They contain very detailed information about each event sent by the user with all the attributes, i.e.: device ID, the exact time of the event, event name and its parameters, geolocation information and all data collected through the e-commerce module.\n\n\n\n![Google Analytics 4 BigQuery Events](https://a.storyblok.com/f/46798/901x472/6713400cd2/google-analytics-4-bigquery-export-table.png)\n\n\n\nThe idea is simple – if you want to keep the data we collect for you for longer and use it for your analyses and business purposes, you now have the opportunity to do so.\n\n\n\n### Not only large but also small and medium-sized entrepreneurs have a chance to take action!\n\nIn the past, when using the Google Analytics Universal tool, only the largest players could\nafford to export raw data, namely companies that could afford to pay a minimum of tens of thousands of dollars annually for the Google Analytics 360 service (premium version). At\npresent, this option is available free of charge to all companies using Google Analytics 4.\nThis is an opportunity that can be tapped into not only by large companies and corporations but also by small and medium-sized entrepreneurs who want to use Google Analytics 4 data to make better business decisions.\n\n### Why is Google Analytics 4 data exported to Google BigQuery and not to a spreadsheet or Excel?\n\n\n\n#### Structure of transmitted events\nThe data table diagram itself contains over 100 columns featuring diverse values, displayed\nin various structures. Events often contain a lot of additional information such as several\nparameters or a couple of purchased products. Browsing this type of data in spreadsheets\nbefore making an appropriate selection would be difficult.\n\n#### Data size\nFor the purposes of this article, we checked a small online store, visited on a given day by\n2,200 users – such a store generated 50 MB of data in a single day. Assuming that we\nwould like to analyse all the data of this store, e.g. from an entire year, the file with the table would have to weigh ca. 18 GB – no spreadsheet can easily accommodate a file this size, not to mention performing additional operations such as calculations, sorting or filtering.\nFor reference, large companies can collect from several dozen to even several hundred GB\nof information in one day in Google Analytics. Special tools had to be developed to store\nsuch large datasets and analyse them.\n\n#### Google BigQuery – a modern data warehouse in the cloud\n\nGoogle, whose mission is to \"organise the world's information and make it universally\naccessible and useful,\" needed to analyse very large datasets from all its services, i.e.\nGoogle Search, YouTube, Google Maps and others. To meet that end, a technology called\nGoogle BigQuery was created, which has the capacity to store and analyse data of\n\nenormous size. Google BigQuery is commonly referred to as \"a petabyte-scale data\nwarehouse\".\n\n\n\n\u003Cp style='text-align:center'>1 PETABYTE = 1,000 TERABYTES = 1 MLN GB\u003C/p>\nThe solution worked well for internal analysis at Google, which is why in 2017 Google\nBigQuery was made available as a product for storing and analysing datasets on the\ngrowing Google Cloud platform.\n\n\n\nHaving two products, i.e. Google Analytics and Google BigQuery, and customers of different scales, Google decided to integrate the two. This made it possible to start automatic export of Google Analytics data to Google BigQuery with just a few clicks. As previously mentioned, this service was available in Google Analytics Universal only to premium customers. Now anyone who has Google Analytics can perform such integration by going into the administrative settings. The details are covered in the documentation at this link: [Configuring Google Analytics 4 BigQuery Export.](https://support.google.com/analytics/answer/9823238?hl=en&ref_topic=9359001#zippy=%2Cin-this-article)\n\n\n\n\u003Cdiv style=\"text-align:center\">\n\u003Cimg src=\"https://a.storyblok.com/f/46798/604x560/4ffbae8fcf/google-analytics-4-bigquery-export-configuration.png\">\n\u003C/div>\n\n\n\n#### Google Analytics 4 [GA4] - exploring data in BigQuery\n\nAfter exporting the data, it's time to mine it in the Google BigQuery interface.\nThe Google BigQuery interface is quite simple and intuitive. On the left is a list of our datasets and tables available for analysis. The remaining and largest part of the interface is taken up by the field where you need to write and run an SQL query.\n\n\n\n\n![Img](https://a.storyblok.com/f/46798/1210x702/cde5023e6b/google-analytics-4-bigquery-export-exploration.png)\n\n\n\nThe thing is, in order to analyse data in Google BigQuery, you need to learn the database\nSQL (Structured Query Language) as Google BigQuery currently supports neither \nEnglish :).\n\n![Google Analytics 4 SQL](https://a.storyblok.com/f/46798/940x788/9dcc1a7d6f/ga4_gif_en.gif)\nIn short, SQL is a query language used to manage a database. Among other things, it allows you to write, read, modify and delete data in tables. When writing a query, we use various commands and instructions, i.e. SELECT, FROM, WHERE, GROUP BY, ORDER BY.\n\n\n\n![Google Analytics 4 BigQuery - Example of SQL Query](https://a.storyblok.com/f/46798/903x567/58db85b030/google-analytics-4-example-of-sql-query-en.png)\n\n\n\nAfter launching the query, we receive feedback in the form of a table, which we can then\nsave or export to other tools, e.g. Looker Studio, Google Sheets or Excel via a CSV file.\nBelow is an example query yielding the TOP 10 products added to the cart based on data\nfrom Google Analytics 4.\n\n\n\n![Img](https://a.storyblok.com/f/46798/1356x716/23ebcf7137/google-analytics-4-bigquery-example-query.png)\n\n\n\nIf you plan to export via Google Analytics 4 to BigQuery, it is worth embarking on your\nlearning adventure with SQL, where the entry barrier is much lower than when delving into\nthe world of programming.\n\n\n\nBelow is a handful of useful resources on this topic:\n\n\n\n- [w3schools - SQL Tutorial ](https://www.w3schools.com/sql/)  \n- [Examples of basic SQL queries regarding Google Analytics 4 data](https://developers.google.com/analytics/bigquery/basic-queries)\n- [The book Google BigQuery: The Definitive Guide: Data Warehousing, Analytics, and Machine Learning at Scale](https://www.amazon.pl/Google-BigQuery-Definitive-Warehousing-Analytics/dp/1492044466/ref=asc_df_1492044466/?tag=plshogostdde-21&linkCode=df0&hvadid=504212245098&hvpos=&hvnetw=g&hvrand=1543218266178473463&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=20859&hvtargid=pla-864415395724&psc=1)\n- [Simo Ahava - #BIGQUERYTIPS: QUERY GUIDE TO GOOGLE ANALYTICS: APP + WEB](https://www.simoahava.com/analytics/bigquery-query-guide-google-analytics-app-web/)\n- [Google BigQuery documentation](https://cloud.google.com/bigquery/docs/reference/standard-sql/introduction#sql)\n\n\n\n## A few reasons why you should get started with Google Analytics 4 export in BigQuery [Why use it]\n\nNow that we've covered the basics of exporting data to Google Analytics 4, it's time to learn about some important reasons that should prompt any company to start performing their analytics in Google BigQuery.\n\n\n\n### If you don't enable data export to Google BigQuery, you will lose your historical data.\n\nIn the case of Google Analytics Universal, you had the option to set automatic data deletion after 14, 26, 38 and 50 months. You could also opt out, which meant that data for analysis in Google Analytics was available from as long as 50 months back.\n\n\n\nGoogle Analytics Universal – data retention settings\n\n![Google Analtyics 4 BigQuery Data Retention](https://a.storyblok.com/f/46798/894x350/b1555a6489/google-analytics-4-bigquery-export-data-retention.png)\n\nIn Google Analytics 4, the default retention time of your data is set to 2 months – if you have this option left unaltered, it is a good idea to change it by going to Administration -> Service Settings -> Data Retention. In the free version, you can extend the range to a maximum of 14 months. In the paid version of Google Analytics 4 Premium, it is possible to extend retention to 26, 38 and 50 months, however, the option to keep data indefinitely is not available.\n\n\n\nGoogle Analytics 4 [GA4]– data retention settings\n\n![Img](https://a.storyblok.com/f/46798/894x417/ad34084be4/google-analytics-4-bigquery-export-data-retention-settings.png)\n\n\n\nData in BigQuery can be stored indefinitely – the catch is that data in BigQuery appears only from the moment of its configuration, so if you want to access historical data, you should enable data export to Google BigQuery as soon as possible.\n\n\n\n### Google Analytics 4 data visualisations in Looker Studio – in BigQuery there are no API limits\n\nA popular solution for data visualisation outside of the Google Analytics 4 panel is Looker Studio, formerly known as Google Data Studio. Google Analytics 4 is programmatically integrated with this tool via API (Application Programming Interface), which allows you to quickly and easily create your own visualisations in the form of tables and charts.\nIn November 2022, many companies that had analytical dashboards in Looker Studio, instead of tables and charts, saw a message informing them that the previously mentioned API had exceeded its data download limits.\nAnd this is what the reports looked like:\n\n \n\n![Google Analytics 4 Looker Studio Limits Error](https://a.storyblok.com/f/46798/1205x784/8f7d251957/google-analytics-4-looker-studio-limits-error.png)\n\n\n\nAn official announcement on this matter appeared in the Looker Studio documentation, which referred to the imposed limits in the Google Analytics Data API.\nA link to the published statement can be found [here.](https://support.google.com/looker-studio/answer/11521624?hl=en#nov-10-2022).\n\n\n\n![Google Analytics 4 Looker Studio Data Limits](https://a.storyblok.com/f/46798/1046x408/ab1b2cd337/google-analytics-4-looker-studio-release-notes.png)\n\n \n\nGoogle even introduced a tool to monitor the number of queries from this connector so as to better estimate the extent to which the limits of data downloaded by your dashboards are exceeded.\nIf such limits are exceeded, one of the recommended options is to reduce the number of visualisations as well as access to a report in the organisation or to export data from Google Analytics 4 to Google BigQuery.\n\n![Google Analytics 4 Looker Studio Data Limits Steps To Resolve](https://a.storyblok.com/f/46798/772x437/4a54ca47ea/google-analytics-4-looker-studio-data-limits-resolve.png)\n\n\n\nWhen you are connected via the Google BigQuery connector, queries are sent to Google BigQuery and not to the Google Analytics Data API, thanks to which you bypass query limits for historical data. Data visualisation based on tables from Google BigQuery is therefore another benefit here if you want to have constant access to reporting without fretting over any limits.\n\n\n\n### Interface data sampling – a piece of cake for BigQuery\n\nThe exploration section of the Google Analytics 4 panel features many options for visualising and reporting the collected data. Some of them, depending on the selected metrics and dimensions, require hefty calculations, which may ultimately result in data sampling. When a larger number of events need to be processed within a given query, Google Analytics will use a sample of available data. In the case of the free version of Google Analytics, the limit is 10 million events, for the paid premium version it stands at 1 billion events.\n\n\n\nIn the screenshot below, you can see a recommended cohort report running in the template gallery. Without modifying any parameters, an exclamation mark appears, informing us about a large sampling of data – this report was prepared on the basis of 6.91% of all information available to Google Analytics, therefore it is most likely highly inaccurate.\nReferring to this example when analysing other data, you may encounter many such cases that can significantly hinder decision-making.\n\n \n\n![Google Analytics 4 Reports Sampling](https://a.storyblok.com/f/46798/1283x577/c2f853202d/google-analytics-4-report-sampling.png)\n\n\n\nWhen preparing reports in Google BigQuery, you have access to all the collected data and you can prepare such a report as well as many others without sampling. This is not possible in this case in the interface.\n\n\n\n### Data cardinality – in BigQuery the level of data aggregation is all up to you\n\nData cardinality occurs when the analysis scope adopted in the report contains too many rows. It could include, for example, a URL, product ID, user ID or multiple combinations of traffic sources. Due to the cardinality of data, you may come across differing values in standard reports and mining reports using the same dimensions and metrics. The cardinality of data in the Google Analytics 4 panel also inserts a row item called \"(other)\" each time the row limit is reached.\nNo such situation will occur in Google BigQuery because you decide on the level of aggregation of the data which you want to work on.\n\n![Google Analytics 4 Data Cardinality](https://a.storyblok.com/f/46798/1358x720/928b1624f0/google-analytics-4-data-cardinality.png)\n\n\n\n### Possibility of linking Google Analytics data to other systems\n\nYou can input a lot of business-related data other than Google Analytics into Google BigQuery, for example, information about advertising costs, statuses from CRM systems, data from Google Merchant Center and much more.\nYou can put it all together and prepare one table, i.e. a so-called 'Data Mart'. You can then visualise such a table on the dashboard, e.g. in Looker Studio, and constantly monitor the marketing performance of your business.\nSuch things are possible without coding thanks to [ready-made solutions that automate the collection and reporting of data.](https://witbee.com/witcloud)\n\n\n\n\u003Cdiv style=\"text-align:center\">\n\u003Cimg src=\"https://a.storyblok.com/f/46798/404x243/c59cb25af6/google-analytics-4-bigquery-data-cost-integration.png\">\n\u003C/div>\n\n\n\n![Google Analytics 4 & Data Integration Report](https://a.storyblok.com/f/46798/999x222/68fc1b50c6/google-analytics-4-bigquery-data-integration-report.png)\n\n\n\n### Validation and continuous monitoring of implementations based on data in Google BigQuery\n\nGA4 data in BigQuery makes it easy to verify reports and event implementations. With all the detailed information at our disposal, including the user ID and the timestamp of each event, you are able to precisely analyse the values sent to Google Analytics when a user interacts with the website. With the aid of appropriate SQL queries, you can detect anomalies in the data or check irregularities related to the sequence of events sent without bypassing the system’s stumbling blocks, i.e. sampling or data cardinality. If a business introduces many changes to a website or app, the constant monitoring of values sent to Google Analytics allows you to quickly react to changes, e.g. an incorrectly sent parameter.\n\n\n\n### Ability to use data for forecasting and prediction with BigQuery ML\n\nAbility to use data for forecasting and prediction with BigQuery ML\nThe use of machine learning in marketing is already becoming a standard. With data in Google BigQuery, you can keep up with these trends and use them to build predictions or forecasts based on our data without having to code in languages like Python or Java. \n[The BigQuery ML Module](https://cloud.google.com/bigquery-ml/docs/introduction) allows you to create models, forecasts and predictions based on SQL, which significantly reduces the barrier to entry into this area and opens up new possibilities, including forecasting traffic and sales from individual marketing channels, detecting anomalies in data, building advanced segmentation for users or creating custom attribution models.\n\n\n\n![Google Analytics 4 & BigQuery ML](https://a.storyblok.com/f/46798/906x427/6549ac28cc/google-analytics-4-bigquery-and-machine-learning.png)\n\n\n\nSo, if you think the answers to the following questions would be useful to you, BigQuery ML is the solution that can help:\n\n\n\n- How much revenue has my business \u003Cs>generated\u003C/s> / \u003Cspan style='color: green' >will generate\u003Cspan> ?\n- How much have we \u003Cs>spent\u003C/s> / \u003Cspan style='color: green'>will we spend\u003C/span> on media?\n- Which products \u003Cspan style='color: green'>will sell\u003C/span> and how much \u003Cspan style='color: green'>will it cost us\u003C/span>?\n- How much have \u003Cs>we earned\u003C/s> / \u003Cspan style='color: green'>will we earn\u003C/span> from all this?\n\n\n\n\u003Cdiv style=\"text-align:center\">\n\u003Cimg src=\"https://a.storyblok.com/f/46798/706x197/7ad081983a/google-analytics-4-bigquery-and-ml-report-example.png\">\n\u003C/div>\n\n\n\n## Raw and unsampled data almost \"for free\" – let's take a look at the costs [Costs]\n\nAs we mentioned at the beginning of the article, with Google Analytics Universal the matter was simple: if you wanted to have unsampled Google Analytics data in BigQuery, you had to have **Google Analytics Premium that cost tens of thousands dollars a year**. Now you have the opportunity to enable this service free of charge. \n\n\n\nGoogle BigQuery itself is a paid service that belongs to the Google Cloud Platform product family. If you set up a billing account in Google Cloud Platform for the first time, you get $300 to use for the first 90 days. Therefore, you can start analysing data for free. \n\n\n\nAlso, it is worth recalling that BigQuery was created for the analysis of very large datasets. As such, the price list of this tool has been tailored to major players, which means that small, medium-sized and sometimes even large enterprises have the opportunity to use great technology at a very low price.\n\n\n\nGoogle BigQuery monthly billing is determined by three elements:\n\n\n\n- $0.02 per month for each GB stored in Google BigQuery, with the first 10 GB being free\n- $5 for each TB processed when running SQL queries on data, with 1 TB per month being free\n- $0.05 for each transferred GB in a real-time data stream (if this option is enabled)\n\n\n\nAccording to the information contained in the documentation, 1 GB of data amounts to ca. 600,000 Google Analytics events. In order to illustrate this figure, we checked an online store which was visited by 260,000 users in one month. Such a store generated 6 million events, which yields an average of 200,000 events per day.\n\n\n\nTo simplify calculations, below is an example estimate for a business generating 600,000 events per day.\n\n\n\nReal-time data streaming\n\n\n\n30 days x 1GB x $0.05 = **$1.5 for sending 18 MLN events** to Google BigQuery per month\n\n\n\nData storage\n\n\n\nThe data will increase every day, so the cost of storage will also increase every month. In order to illustrate the costs, we present it in full denominations. \n\n\n\n1st month: (30 GB – 10 GB for free) * $0.02 = 20 GB * $0.02 = $0.4  \n2nd month: (60 GB – 10 GB for free) * $0.02 = 50 GB * $0.02 = $1  \n3rd month: (90 GB – 10 GB for free) * $0.02 = 80 GB * $0.02 = $1.6  \n…  \n12th month: (360 GB – 10 GB for free) * $0.02 = $7\n\n\n\nPerforming SQL queries on data\n\n\n\nWhen executing a SQL query on data, you can select only the information that is of interest to you. Therefore, not all the information you have has to being processed. For instance, we checked a business with ca. 1 GB of data and 3 quite extensive reports in Looker Studio refreshed every hour. This business processed 1.5 TB of data per month.\n\n\n\n(1.5 TB – 1 TB for free) * 5$ = 0.5 TB for $5 = $2.5\n\n\n\nThe costs of performing queries depend on many issues and so they may vary for individual businesses. A few factors that can affect the costs are as follows:\n\n\n\n- the size of the batch data for the report\n- the number of reports\n- quality of written queries (you can often achieve the same effect many times cheaper, avoiding errors in SQL syntax)\n- traffic on reports connected to, for example, Looker Studio. Each chart or table executes a SQL query to BigQuery, which involves the accrual of additional MB\n\n\n\nThe total monthly cost for a business generating 600,000 events per day\n\n\n\nAssuming that you already have a complete set of data from one year, you will pay $11:\n\n\n\n$7 for storage + $1.5 for streaming + $2.5 for polling = $11\n\n\n\nFor stores that generate far fewer than 600,000 events per month, this service can be practically free.\n\n\n\n## Summary\n\nExporting Google Analytics 4 data to Google BigQuery allows you to prevent data loss and bypass numerous limits and restrictions that await in the panel or API connection. Also, it is a good place to start building your own data warehouse, where you will collect more information, including that concerning advertising costs or statuses from CRM systems. This tool was created for big players, so there is no major barrier to entry when it comes to the price of this solution. If you start using this technology more often, you can leap into the world of machine learning in a relatively simple way and start making better predictions.\nCompanies that start to efficiently use this technology in business will gain a substantial competitive edge on the market.\n","Exporting Google Analytics 4 [GA4] data to Google BigQuery allows you to protect us against data loss and bypass many limits and restrictions waiting for us in the panel or API connection.",{"id":315,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":316,"copyright":19,"fieldtype":21,"meta_data":317,"is_external_url":32},190527407441997,"https://a.storyblok.com/f/296300/900x600/4023fad189/12-ga4-bigquery-why-use-it.png",{},[],[],[],"google-analytics-4-bigquery-why-you-should-use-it","content/knowledge/google-analytics-4-bigquery-why-you-should-use-it",20,[],"822d7ee2-57d3-4e13-94da-dc3109939f73",[],{"name":328,"created_at":329,"published_at":257,"updated_at":330,"id":331,"uuid":332,"content":333,"slug":352,"full_slug":353,"sort_by_date":174,"position":175,"tag_list":354,"is_startpage":32,"parent_id":239,"meta_data":174,"group_id":355,"first_published_at":257,"release_id":174,"lang":180,"path":174,"alternates":356,"default_full_slug":174,"translated_slugs":174},"Raport \"na wczoraj\", który dostaniesz za tydzień","2026-06-22T19:22:58.176Z","2026-08-21T07:00:42.990Z",190327104256848,"63e297e4-7adc-4c36-a29f-dfc985044211",{"_uid":334,"title":335,"content":336,"eyebrow":337,"showTOC":39,"category":224,"readTime":19,"subtitle":338,"component":266,"heroImage":339,"meta_tags":343,"meta_title":348,"heroButtons":349,"updatedDate":350,"bottomBlocks":351},"raport-content-page","A Report “for Yesterday” That You’ll Get in a Week: How Data Chaos Paralyzes Your E-commerce","## The Anatomy of Paralysis [Paralysis]\n\nIt’s Tuesday, 10:00 AM. A sharp sales peak after the weekend promotion has just ended. You burst into the marketing team meeting with one, simple question: “What was yesterday’s *real* ROAS? We need to know whether to continue the investment or cut the budget.”\n\nSilence.\n\nFinally, someone from the marketing team speaks up uncertainly: “You know, it’s complicated. I checked the Google Ads panel, it shows a ROAS of 4.0. The Facebook panel shows 3.5. But we both know these are ‘optimistic’ numbers from the panels… they might be reporting the same transactions, they don’t account for morning cancellations, and they don’t confirm if all transactions are definitely paid orders. In GA4, the numbers look different again…”\n\nAfter a moment, he adds: “To get the *real* revenue, we have to wait for Greg. He’s the only one with the script that connects these ad costs with our e-commerce system (Magento) and filters orders by ‘paid’ status. The data from our CRM is just more complete. I sent a request… but Greg is on vacation. Realistically, we’ll have that summary… maybe on Friday.”\n\nSound familiar?\n\nA decision that needed to be made in 10 minutes – based on cost data from **Google and Facebook** and *reliable* revenue data from **your store** – has just been postponed by a week. During this time, the marketing budget is either being “burned” on an ineffective campaign or, even worse, a high-performing campaign was paused because no one could confirm its *real* effectiveness in time.\n\nThis isn’t a problem of lacking data. It’s decision-making paralysis caused by chaos in *accessing* it.\n\n## A Problem Deeper Than “Bad Reports” [The Problem]\n\nIn conversations with hundreds of e-commerce managers, we’ve noticed a pattern. The biggest pain point is that data is *unavailable* here and now, in one place.\n\nThe problem we’ve diagnosed has three faces:\n\n1. **Human Silos:** Data is locked in the heads or on the hard drives of specific people. “Only Greg” knows how to merge those two Excels. “Only Ann” has access to that specific view in the system. When a key person is sick or on vacation – the entire analytical process stops.\n2. **Technical Silos:** Data from Facebook Ads lives in its own “optimistic” world. Data from Google Ads in its own. Data from your Magento, Shoper, or PrestaShop is the “source of truth” about real revenue. Without an automatic connection, these two worlds never meet.\n3. **A “Report-Ordering” Culture:** Because data is in silos, accessing it becomes a privilege, not a standard. Teams “order” reports from specialists/analysts, getting in a virtual queue and waiting for their answer.\n\n**And now, the “chaos multiplier”: Scale.**\n\n![The chaos multiplier: scale](https://a.storyblok.com/f/296300/660x278/218caf653e/image3.png)\n\nWhat if you operate not in one, but in **five markets** (in PLN, EUR, CZK)? What if instead of 3 marketing channels, you have **15**, including affiliate networks, Ceneo, TikTok, and dozens of partners? What if the data downloaded to Excel is reported in different currencies?\n\nThis chaos grows exponentially. Every new market and every new channel is another “human silo” and “technical silo.” At this point, manually merging data becomes not just *difficult*. It becomes physically *impossible*.\n\n## The True Cost of a “Quick Question” [True Cost]\n\nLet’s consider what this model costs. A “quick question” that ties up a specialist/analyst for half a day isn’t just the cost of their salary. It is, above all:\n\n- **Opportunity Cost:** Lost sales opportunities because a campaign wasn’t optimized in time.\n- **The Cost of Bad Decisions:** Decisions made “by gut feeling” or based on incomplete data (e.g., only from the “optimistic” ad panel) because “there was no time to wait” for the full picture from the CRM.\n- **The Cost of Team Frustration:** The best specialists/analysts don’t want to be “report factories.” They want to be “growth engines.” When 80% of their time is spent manually copying and pasting data, their potential is wasted. The marketing team is frustrated because they don’t get answers in time.\n\nChaos in data flow is chaos in communication flow. And communication chaos is a straight path to losing in the competitive e-commerce market.\n\n## Freeing the Data: From “Waiting” to “Acting” [Solution]\n\nThe solution to this paralysis isn’t hiring another “Greg” or buying another tool for “pretty charts.” The solution is a fundamental change in the philosophy of data access: **automation and centralization.**\n\nInstead of manually *asking* for data, technology should *prepare* it for us – automatically, every night. At WitBee, we believe (in line with our mission to democratize access to analytics) that data should be a resource available “on-demand,” not “by-order.”\n\nWhat should such an ideal, automated process look like in practice?\n\n1. **Automatic Connection:** The system must be **built to handle scale**. It should automatically, every night, connect to *all* your sources – whether that’s 3 ad systems or 15, one market in PLN or five in different currencies.\n2. **Unification of “Truth”:** The system must automatically pull costs from every channel, but more importantly, connect them with *hard data* from your e-commerce platform — pulling real, paid revenue and filtering by order status.\n3. **Ready for Analysis:** The data must be cleaned and unified. Such a system allows you to report based on *real, paid revenue*, filtering out cancellations.\n\nIn the morning, when you come to work, you don’t have to *ask* for a report. You open your dashboard (e.g., in Looker Studio), which is powered by ready, connected, and up-to-date data from *all* markets.\n\n## How Does a Company Change When Data Flows Freely? [After]\n\n![Before vs After: unified dashboard](https://a.storyblok.com/f/296300/1237x504/1d6757c2e7/image5.png)\n\nLet’s return to the scenario from Tuesday at 10:00 AM.\n\n**The “AFTER” Scenario:**\n\nThe Head of E-commerce comes to the meeting. Everyone is looking at the same, up-to-date dashboard. The question isn’t: “What was the ROAS?” The question is: “I see our global, CRM-based ROAS was 4.5 yesterday, but in the Czech market, the Google Ads X campaign has a ROAS of 8. Marketing team – why do you think that campaign worked so well there, and how can we immediately scale this to Germany?”\n\nThis is a fundamental change.\n\nWhen a company stops wasting time asking “What were the numbers?” and starts discussing “What do we do next?” – it’s a sign it has moved from chaos to strategy. Specialists/analysts stop being “gatekeepers” of data and become strategic partners for the business.\n\n## In Summary [Summary]\n\nThe “report on vacation” is a symptom of a disease called manual data management. If your team too often hears “we have to wait for the data,” “Greg is on vacation,” or “I’ll check on that for tomorrow” – it’s a warning sign.\n\nThis is not a technical problem. It is a strategic “bottleneck” that paralyzes the growth of your e-commerce.\n\n**Think about it: how many decisions this quarter did you make based on a gut feeling, because there simply wasn’t time for hard, connected data from all your markets?**\n\n## Watch the Webinar on Reporting Automation [Webinar]\n\nIf this problem resonates with you and the communication chaos around reporting sounds familiar, we have something for you.\n\nWatch the free webinar: [**“End the Waiting: How to Automate E-commerce Reporting”**](/content/jak-wdrozyc-automatyzacje-raportowania-w-e-commerce)\n\nDuring the session, we’ll show step by step:\n\n- What a modern, automated reporting architecture looks like.\n- How to connect data from multiple ad systems (Google, Meta, TikTok) with “hard” data from your CRM/e-commerce in practice.\n- How to move from chaos in spreadsheets to a single, consistent dashboard that updates itself and tells the truth.\n\nThis won’t be a sales presentation. It will be a workshop showing the *methodology* that frees teams from repetitive work.","Article","Waiting a week for a crucial ROAS report? This article dissects how data chaos, human silos, and manual reporting paralyze e-commerce businesses — and what automation looks like in practice.",{"id":340,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":341,"copyright":19,"fieldtype":21,"meta_data":342,"is_external_url":32},190524925519719,"https://a.storyblok.com/f/296300/900x600/c215f0d3b8/04-report-for-yesterday.png",{},[344],{"_uid":345,"name":346,"content":347,"component":234},"raport-og-image","Meta Og Image","https://a.storyblok.com/f/296300/1200x628/68af5e29c3/blog_report_yesterday.png","A Report “for Yesterday” That You’ll Get in a Week | WitBee",[],"2025-11-13 00:00",[],"raport-na-wczoraj-ktory-dostaniesz-za-tydzien","content/knowledge/raport-na-wczoraj-ktory-dostaniesz-za-tydzien",[],"b08db62d-51c3-41f6-86ec-33f17bd525c3",[],{"name":358,"created_at":359,"published_at":257,"updated_at":360,"id":361,"uuid":362,"content":363,"slug":378,"full_slug":379,"sort_by_date":174,"position":380,"tag_list":381,"is_startpage":32,"parent_id":239,"meta_data":174,"group_id":382,"first_published_at":257,"release_id":174,"lang":180,"path":174,"alternates":383,"default_full_slug":174,"translated_slugs":174},"BigQuery Pricing for E-commerce: A Non-Technical Guide","2026-06-22T13:57:28.322Z","2026-08-21T07:00:42.398Z",190247109968418,"96f672cc-96be-4743-8494-b79f95734fd2",{"_uid":364,"title":358,"content":365,"eyebrow":19,"showTOC":39,"category":224,"readTime":19,"subtitle":366,"component":266,"heroImage":367,"meta_tags":371,"meta_title":358,"heroButtons":375,"updatedDate":376,"bottomBlocks":377},"8c37b8a8-35d4-4a37-a686-485ce2660d88","When you hear the term \"Data Warehouse\" or \"BigQuery,\" two thoughts probably cross your mind. First: \"This is the technology I need to connect data and scale my business.\" Second: \"This sounds like a Google invoice I won't have control over.\"\n\nCloud pricing and many guides refer to complicated concepts for a non-technical person. They are full of terms like _active storage_, _slot time_, or _streaming inserts_. And many store owners ask themselves a simple question: \"Will this ruin me?\"\n\nThe answer is: **No, if the data architecture is correct.**\n\nBigQuery is like a powerful industrial machine. It is cheap to maintain, as long as you use it wisely. In this guide, we will go through all cost stages and show where the line lies between a \"playground for analysts\" and real reporting for business.\n\n\n\n**Important Disclaimer:** It would be easiest to write, as is common in various guides, \"It depends...\".  \nCloud costs are fluid. Nevertheless, the calculations below are real estimates for a medium/large e-commerce, aimed at showing the scale of costs and the differences between the \"raw\" and the optimized approach.\n\n\n\n## Part 1: Storage - We are safe here\n\nLet's start with the basics. BigQuery is, simply put, a gigantic Excel in the cloud. The first cost is storing data (e.g., from GA4, CRM, ads).  \nYou pay for how much space your data occupies on Google's disks.\n\n### Example: Store generating 10 million events monthly in GA4\n\n![](https://a.storyblok.com/f/296300/964x316/1ba15af773/image7.png)\n\n\nLet's assume your e-commerce generates 10 million actions monthly (views, clicks, purchases).\n\n- **GA4:** 10 million events is approx. 10 GB monthly (averaging that one event is approx. 0.5 - 1 KB of data)\n- **Additionally, orders/products database from CRM and campaign data from the ad system:** approx. 5-8 GB monthly.\n- **Total:** You gain approx. 15-18 GB of data every month.\n\nEstimated cost:  \nGoogle offers the first 10 GB per month for free. Each subsequent gigabyte costs around $0.02.  \nEven if you accumulate a 3-year history (approx. 500 GB), the monthly cost of maintaining this archive will close around $10 per month.  \n**Conclusion:** Just _keeping_ data is very cheap.\n\n\n\n## Part 2: Data Delivery - in batches or instantly\n\nYou have two options for sending data to BigQuery.\n\nLet's look at the example of data export from Google Analytics 4:\n\n1. **Daily Export:** Once a day, in the morning, Google packs yesterday's data and uploads it to your warehouse. **Cost: $0.**\n2. **Streaming (Live):** Data hits the database minutes after the event. **Cost: approx. $0.05 per GB.**\n\n**Conclusion:** BigQuery does not charge fees in this case for the process of saving data in the form of packages (so-called batch). In the case of streaming (sending live data), you also have nothing to worry about if your scale isn't very large (10 GB * $0.05 = $0.50 monthly).\n\n![](https://a.storyblok.com/f/296300/1024x751/39962a04d1/image8.png)\n\n\n\n\n## Part 3: Processing (Query) - Two Worlds of Costs\n\nHere we get to the heart of the matter. BigQuery makes money on **reading** data ($6.25 per 1 TB). But who reads this data? Here we must distinguish between two scenarios, because they determine your invoice.\n\n### World 1: Analyst in the console (Human Factor)\n\nThis is the situation where your analyst goes directly into BigQuery and writes SQL code to answer an \"ad hoc\" question, e.g., _\"Check why the conversion from iPhones dropped last Tuesday\"_.\n\nHere the cost depends 100% on **human skill**.\n\n- **Junior Analyst:** Might write a SELECT * query that mindlessly reads the entire database (terabytes of data) to find 5 rows. Cost of one query: **$5**.\n- **Senior Analyst:** Will use partitions, select only necessary columns, and limit scanning. The same query will be executed for **$0.05**.\n\nThis is a \"laboratory\". Here costs are one-off and depend on skill. But business rarely sits in the console. Business sits in reports.\n\n![](https://a.storyblok.com/f/296300/1024x565/363eb64c01/image3.png)\n\n\n### World 2: Business in Looker Studio (Automated)\n\nThis is your daily life. You have a dashboard in Looker Studio. You don't write SQL code there - you click filters, change dates.  \nBut Looker Studio must send an SQL query to BigQuery in the background to draw a chart.  \nAnd here the problem appears: The Automaton (Looker Studio) is not as clever as the Senior Analyst. If you connect it to raw data, it will generate heavy, expensive queries with your every click.\n\n![](https://a.storyblok.com/f/296300/1024x559/ef88e496c9/image5.png)\n\n\nWe have frequently worked on projects where we optimized the costs of non-optimal queries used in reports. Let's look at the example below - every day the report generated increasingly higher costs, reaching the amount of $53 per day. By introducing slight changes in SQL queries (skill), the report continued to work the same way, but costs dropped almost to 0. However, this is best presented in an example case study.\n\n![](https://a.storyblok.com/f/296300/1480x529/da9271ddeb/image4.png)\n\n\n## Part 4: Case Study - How much does a Quarterly Report cost?\n\nLet's assume you have a sales dashboard from the last 90 days. It is used by **5 people** (board, marketing).\n\n### Scenario A: The \"Raw\" Route (Looker Studio -> Raw Data)\n\nYou connect the report directly to tables with raw GA4 events.  \nOne day of raw data weighs 1 GB. A 90-day report must therefore \"touch\" 90 GB of data.\n\n1. **Interaction Trap:** Looker Studio is \"wasteful\". To display a dashboard with 10 elements (charts, counters), it can send 10 separate queries.\n2. **No Cache:** BigQuery has a cache, but it only works if you change nothing.\n    - The Manager enters the report.\n    - Clicks the \"Black Friday Campaign\" filter.\n    - Cache stops working. BigQuery must sift through **90 GB** again to cut out just this campaign.\n    - The Manager changes the table sorting. Another 90 GB.\n\nEffect:  \n5 people × 10 filter changes daily × gigabytes of data.  \nThe invoice becomes unpredictable. It could be $50, or it could be $300 if the team is very active. You pay every time someone touches the report.\n\n### Scenario B: The \"Data Mart\" Approach (WitCloud)\n\nThis approach is based on the principle: **Let's prepare the data once, but properly.**\n\nThe process looks like this:\n\n1. **Automatic Task (Job):** Every morning the system downloads data **only from yesterday** (1 GB of raw data).\n2. **Aggregation:** The system extracts what is important and saves it in the **Data Mart**. The resulting \"brick\" from one day weighs e.g., 20 MB (and not 1000 MB).\n3. **Adding the brick:** This small portion of data is appended to the main table as a new partition.\n\nWhat happens in the report?  \nWhen the Manager changes dates, filters, and sorts, Looker Studio queries the Data Mart.  \nInstead of scanning 90 GB, it scans 90 small \"bricks\" (total 1.8 GB).  \n**Estimated monthly cost:**\n\n1. **Daily processing:** You pay in the morning for recalculating _only one day_ of raw data. This is a fixed cost, approx. **$15 - $25 monthly**.\n2. **Reporting:** Because you work on lightweight data, hundreds of clicks by your managers generate a cost in the range of **$2 - $5 monthly**.\n\n**Total:** **$20 - $30 monthly**. A fixed amount, independent of how often you check the results.\n\n![](https://a.storyblok.com/f/296300/1024x559/926a3bc7f0/image6.png)\n\n\n\n\n## Part 5: Why does it work? Two pillars of savings\n\nThe secret to low costs in the Data Mart approach relies on two technical mechanisms. Partitioning is only half the success. The other half is **Aggregation (Reducing detail)**.\n\nTo understand this, imagine how a large supermarket works.\n\n### Pillar 1: Aggregation (Instead of a million receipts - a summary)\n\n- **Raw Data:** This is a giant sack where you keep **all receipts** from all cash registers. Each receipt has a list of products, time, cashier. If you have 10,000 customers daily, you have 10,000 long receipts (rows in the database).\n  - When you ask BigQuery for revenue, the database must take every receipt in hand and sum up the amounts. This takes time and costs money because the database \"crunches\" a huge amount of information.\n- **Data Mart (Aggregation):** This is a situation where the accountant takes these 10,000 receipts once a day, calculates what is important, and writes it on a single sheet: _\"Day: Tuesday. Total sales: 50,000. Number of transactions: 10,000\"_.\n  - We put this single sheet (aggregation result) into the Data Mart.\n  - **Effect:** Instead of keeping millions of rows about every click, we keep a dozen rows with the daily summary. The table becomes 1000x lighter.\n\n![](https://a.storyblok.com/f/296300/1024x559/43e4ca93c0/image1.png)\n\n\n### Pillar 2: Partitioning (Order in the binder)\n\nSince we already have these lightweight \"daily summary sheets,\" we must arrange them well.\n\n- **Without Partitions:** Sheets with summaries lie in one pile. To find \"July,\" you have to dig through everything.\n- **With Partitions:** Sheets are filed in a binder, where each plastic sleeve is labeled with a date.\n\n![](https://a.storyblok.com/f/296300/1024x559/e9ff619d89/image2.png)\n\n\n### How does it work together?\n\nWhen your Manager opens the Dashboard in Looker Studio and asks for results from the last quarter:\n\n1. Thanks to **Partitioning**, BigQuery opens only 90 specific sleeves in the binder (it doesn't touch the rest of the year).\n2. Thanks to **Aggregation**, inside each sleeve it finds not thousands of receipts, but one sheet with a summary.\n\nThat is why the report loads in a fraction of a second and costs fractions of a cent. BigQuery doesn't have to calculate anything anymore (because we calculated it in the morning) - it only **reads** the ready result.\n\n\n\n## Summary: So how much does it actually cost?\n\nFor a typical e-commerce with 10 million events monthly, the real bill for BigQuery with a well-designed architecture looks as follows:\n\n| Cost Type | Description | Estimated Amount |\n| :--- | :--- | :--- |\n| **Storage** | Maintaining data from several years (GA4, Ads, CRM). | **$5 - $15** (depending on history) |\n| **Processing (ETL)** | Daily recalculation of _only new_ data to Data Marts. | **$15 - $25** |\n| **Reporting (Query)** | Using dashboards in Looker Studio (on lightweight data). | **$1 - $5** |\n| **TOTAL** | | **$25 - $45 / monthly** |\n\nBigQuery is not expensive - ignorance is expensive. It is risky to put raw data in the hands (and tools) of people who do not optimize queries. Implementing an intermediate layer (Data Marts) - whether manually or through platforms like **WitCloud** - turns an unpredictable invoice into a low, fixed subscription.","When you hear the term \"Data Warehouse\" or \"BigQuery,\" two thoughts probably cross your mind. First: \"This is the technology I need to connect data and scale my business.\" Second: \"This sounds like a Google invoice I won't have control over.\"",{"id":368,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":369,"copyright":19,"fieldtype":21,"meta_data":370,"is_external_url":32},190524925572970,"https://a.storyblok.com/f/296300/900x600/af11b1a8b3/02-bigquery-pricing.png",{},[372],{"_uid":373,"name":346,"content":374,"component":234},"f34609f1-8fcd-404a-aa30-9063d2f22e22","https://a.storyblok.com/f/296300/1200x628/b1e5c63eae/bigquery_pricing_eng.png",[],"2025-11-25 00:00",[],"bigquery-pricing-for-e-commerce-a-non-technical-guide","content/knowledge/bigquery-pricing-for-e-commerce-a-non-technical-guide",50,[],"fa6065ad-9fb4-4ee4-ba50-114a75d184ec",[],{"name":385,"created_at":386,"published_at":257,"updated_at":387,"id":388,"uuid":389,"content":390,"slug":403,"full_slug":404,"sort_by_date":174,"position":405,"tag_list":406,"is_startpage":32,"parent_id":239,"meta_data":174,"group_id":407,"first_published_at":257,"release_id":174,"lang":180,"path":174,"alternates":408,"default_full_slug":174,"translated_slugs":174},"Dlaczego Twoja analityka przestanie działać za 6 miesięcy? ","2026-06-22T13:54:43.098Z","2026-08-21T07:00:42.320Z",190246433222209,"206bc95d-0a1f-4346-a0b2-b29f8658bcae",{"_uid":391,"title":392,"content":393,"eyebrow":19,"showTOC":39,"category":224,"readTime":19,"subtitle":394,"component":266,"heroImage":395,"meta_tags":399,"meta_title":392,"heroButtons":401,"updatedDate":376,"bottomBlocks":402},"cc1f6ce3-33f2-4bfa-9dcf-0a690bf791ef","Why Your Analytics Will Fail in 6 Months: 3 Ways to Build E-commerce Analytics","## Why Will Your Analytics Stop Working in 6 Months?\n\nThe story of every e-commerce business starts innocently. In the beginning, there is **one online store**. An order panel in a system like Magento, Shoper, or Idosell is enough for you. Everything is clear – you have access to basic information about revenue, customers, and products.\n\nBut then you start to grow.\n\nYou connect **Google Analytics 4** to understand user behavior. You launch campaigns in **Google Ads, Meta Ads, TikTok Ads, and Criteo** to drive traffic. You enter **Allegro** (Marketplace) to increase reach. You start cooperating with price comparison engines (**Ceneo**) and affiliate networks.\n\nFinally, you make the decision: \"We are entering foreign markets.\" You open sales in the Czech Republic, Germany, or Romania.\n\nAnd at this moment, the scale of the problem explodes. You now have separate ad accounts for each country, reports in different currencies (PLN, EUR, CZK, RON), and separate product feeds. You wake up in a world where data is in thirty different places. The Facebook panel shows different conversions than GA4, the store's CRM doesn't see costs from Romania, and calculating margins takes two days in Excel.\n\nInstead of clarity, you have chaos.\n\nYou then face a choice: how to \"build a home\" for your data to get it under control? In the world of analytics, you have three paths. Two of them are traps that look tempting at the start but collapse like a house of cards when your company begins to scale.\n\n![](https://a.storyblok.com/f/296300/1228x528/bf2239917e/proces_wzrostu_ecommerce.png)\n\n\nHere is a story about analytical maturity – based on the old fable of the three little pigs, but with a very modern (and painful) moral.\n\n## Path 1: The \"Black Box\" Trap (The House of Straw)\n\nThe first path is chosen by pragmatists who want results \"right now.\" You choose ready-made, closed reporting systems (so-called black boxes).\n\n* **What does it look like?** You connect an account, pay a subscription, and see nice charts. It is fast and painless.\n* **Where is the problem?** This solution works until you ask a difficult question. You see metrics (e.g., ROAS), but you have no idea how they were calculated. You do not have access to the raw data underlying that result.\n\n**What happens when Growing Requirements (The Wolf) come?**\n\nOne day your company grows, and you need to do something more with the data than just look at it. That's when you start hitting wall after wall:\n\n1. **The \"Main Report\" Wall:** The board uses Power BI or Tableau. You want to add marketing costs from your \"black box\" there to see the full business bill. **Reality:** It’s impossible. You are in a closed ecosystem. You are left with manually pasting CSVs into Excel every Monday.\n2. **The \"CRM Automation\" Wall:** Your sales team wants to see in the CRM which ads a lead clicked on. **Reality:** Your \"black box\" has no API or it is very limited. You cannot \"feed\" the sales department with marketing knowledge.\n3. **The \"AI Partners\" Wall:** You hire an AI agency that asks for historical transactional data to train its algorithms. **Reality:** There is no way to securely share a slice of the data.\n\n**The Finale:** You hire a great analyst. They want to build their own attribution model on raw data. The \"black box\" provider says: *\"Of course, we share raw data in the Enterprise plan, which costs 5 times more.\"* Your data has become a hostage.\n\n## Path 2: The Illusion of Control, or \"Do It Yourself\" (The House of Sticks)\n\nThe second path is for the clever ones. You think: *\"I won't let them lock me in a box! We'll do it ourselves in-house. We have free connectors and Greg in IT.\"* This is the DIY approach, which usually ends in chaos in two acts:\n\n**Act I: The Connector Frankenstein in Looker Studio**\nYou connect separate plugins directly to Looker Studio: Facebook Ads, Google Ads, GA4, CRM.\n\n* **Problem:** These are silos. To see the whole picture (e.g., profit vs. spend), you have to force-combine these sources in the visualization tool (Blended Data).\n* **Risk:** The business logic is \"sewn\" into fragile report filters, not the database. One error in campaign naming is enough for the entire report to stop working.\n\n**Act II: The Swamp of Raw Data (ETL without a plan)**\nYou go a step further. You dump data into your own BigQuery using simple ETL tools.\n\n* **Problem:** You have access to data, but it is a so-called \"Data Swamp.\" You have 800 tables: orders separately, products separately, campaigns separately. Nothing matches anything else.\n* **Risk:** To use this, someone must write and maintain complicated SQL logic.\n\n**What happens when \"Greg\" leaves?**\nThis whole structure holds together only thanks to the one person who built it. When \"Greg\" leaves the company, he takes the knowledge with him. You are left with infrastructure that no one understands. A new analyst, instead of looking for insights, wastes months on reverse engineering, trying to understand why the numbers don't add up.\n\n## Path 3: The WitCloud Foundation (The House of Brick)\n\nThe third path is for those who understand that analytics is an investment in company assets. You choose **WitCloud (All In One)**.\n\nWhy is this the house of brick? Because it combines the advantages of both worlds while eliminating their disadvantages.\n\n**First: Automating the \"Dirty Work\"**\nWitCloud is a platform that does the heavy engineering work for you. Our module automatically downloads, cleans, and unifies data from over a dozen systems (Ads, GA4, CRM, Marketplaces). You don't worry about changes in the Facebook or TikTok API – we take care of maintaining this infrastructure. Your technical team sleeps soundly.\n\n**Second: Visualization at the Start + Openness to Growth**\nWe don't leave you with just a database. You receive a set of base reports in Looker Studio. For many companies, this is enough to make decisions \"here and now.\" But what if your appetite grows? Because the data is **your property** and sits on your Google Cloud, you have full freedom:\n\n* You can develop reports yourself.\n* You can commission us to build dedicated dashboards.\n* You can collaborate with any agency that knows SQL/BigQuery. No one needs to learn \"our system\" – they work on Google standards.\n\n**Third: An Analyst's Paradise**\nWhen you hire an analyst, you don't give them a \"black box\" or a \"swamp of 800 tables.\" You give them access to ready-made, documented datamarts (e.g., for margin analysis or custom attribution models). The analyst can write their own SQL queries or plug data into AI tools. You pay an expert for **insights** (high value), not for \"data cleaning\" (low value).\n\n## Moral: From Fighting Tools to Using Data\n\nAnalytical maturity is the moment when you stop fighting with tools and start using data.\n\nDon't build with straw (because lack of access or Enterprise costs will limit you). Don't build with sticks (because you will drown in technical debt when your \"Greg\" leaves and you enter another market).\n\nBuild a foundation with WitCloud. Thanks to this, regardless of whether you have one marketer today or an international Business Intelligence department in a year – your analytical environment will be ready, secure, and scalable. And you will be the owner of the truth about your business.","Is your analytics built of straw, sticks, or brick? We use the Three Little Pigs metaphor to reveal critical e-commerce data mistakes. Discover why \"black box\" systems and simple Looker Studio plugins fail at scale, and learn how to build a durable data foundation on Google Cloud with WitCloud.",{"id":396,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":397,"copyright":19,"fieldtype":21,"meta_data":398,"is_external_url":32},190524925515621,"https://a.storyblok.com/f/296300/900x600/429a949a9c/01-analytics-will-fail.png",{},[400],{"_uid":373,"name":346,"content":347,"component":234},[],[],"dlaczego-twoja-analityka-przestanie-dzialac-za-6-miesiecy","content/knowledge/dlaczego-twoja-analityka-przestanie-dzialac-za-6-miesiecy",60,[],"a802a9ba-4d8f-4b74-87e5-254578633e1c",[],{"name":410,"created_at":411,"published_at":257,"updated_at":412,"id":413,"uuid":414,"content":415,"slug":429,"full_slug":430,"sort_by_date":174,"position":431,"tag_list":432,"is_startpage":32,"parent_id":239,"meta_data":174,"group_id":433,"first_published_at":257,"release_id":174,"lang":180,"path":174,"alternates":434,"default_full_slug":174,"translated_slugs":174},"Automatyzacja raportowania w Idosell","2026-06-22T13:50:14.896Z","2026-08-21T08:06:51.629Z",190245334650087,"89e37058-b2cf-4176-abb3-aea13eb27f7e",{"_uid":416,"title":417,"content":418,"eyebrow":19,"showTOC":39,"category":224,"readTime":19,"subtitle":419,"component":266,"heroImage":420,"meta_tags":424,"meta_title":392,"heroButtons":426,"updatedDate":427,"bottomBlocks":428},"dcd6133f-6e3f-4e5a-8954-c8c8d001bb22","Do you run a shop on the IdoSell platform? Then this is a must-read for you.","## Dear manager, director, owner, or simply an employee of a store operating on IdoSell.\n\nYou operate an online store and probably, like most online stores, you struggle with a quite large problem that you might not even be aware of. But thanks to the fact that you use the IdoSell platform, dealing with this can be simpler than ever before.\n\nLet's start from the beginning, though: what problem am I actually talking about.\n\nOkay.\n\nIt's not entirely simple to explain, which is why many people don't consider it a problem. And yet, it is.\n\nIt's a problem with analytics. Not with data. You have data, and probably more than you need. It's about utilizing that data. It's about a problem on three levels.\n\n## The first is the way you make decisions based on your data.\n\nI can assume that when you really need a report, you either send a request to someone to create such a report, or you sit down yourself and piece something together that you hope will help you. After all, you have some data in your IdoSell panel, e.g., sales data, inventory data, or customer data. On the other hand, you have data on the effectiveness of marketing activities you invest in and website traffic data in the Google Analytics 4 panel. And data on ads and spending can be found in specific ad panels, e.g., Google Ads, Meta Ads, Ceneo, etc. Then there's sales via marketplaces or Allegro.\n\nOr maybe you operate in more than one market, selling in Germany, Romania, the Czech Republic too? Isn't every such market coincidentally a separate Google Analytics account, a separate Google Ads account, and even separate store panels, different sales reports?\n\nIf you would like to see the full picture of your business, its health, all marketing expenses, and true information about sales, then this requires downloading and combining information from all these tools we listed.\n\nOr you just look at a small fragment of reality and it works somehow.\n\n## The second level of this problem is advertising systems.\n\nMarketing specialists have fewer and fewer opportunities to set how and where your ads are displayed. This is mostly decided by an algorithm now. And this algorithm needs the best possible data to operate. Stop with the excuse that half the money is wasted anyway. If the system gets correct information about user behavior, it will handle campaign optimization, and you will start earning from it. It's worth remembering here that it is still a human who decides on campaign division and the rules under which the system operates. The more accurate the data, e.g., about product popularity and effectiveness, the better we can manage ROAS bid settings.\n\n## The third problem is AI, which is being discussed in every possible context.\n\nEveryone wants to use AI now. But practically every presentation also features the \"garbage in, garbage out\" slide. AI works on the data we feed it. But this data must be properly arranged and described. Prepared so that AI can work on it. Without this, let's not expect spectacular or even any results.\n\nI admit that while writing this text, I feel like listing further: a fourth, fifth, sixth problem, but it doesn't make sense. If you manage an online store, you understand what I'm writing about.\n\nYou don't need data; you need one place where your data will be stored, organized, updated in real-time, and accessible both to you and the tools you use.\n\n## In short, you need a Data Warehouse.\n\nUntil recently, a complicated project, very time-consuming, requiring a team of specialists. You have to set up a cloud server, program connections between systems, organize data, and take care of the stability of the entire infrastructure. A lot of work, large budgets. An option unavailable to most stores.\n\n## But you have a store on IdoSell. And that changes a lot.\n\nYou have the opportunity to collect store data, Google Analytics 4 data, marketing data, and marketplace data (so practically everything you need) in one place, in your secure cloud project. Data can be updated in real-time, and you can have access to one full report containing all information at any time of the day or night.\n\nThis data can feed marketing systems. Your AI agents can operate on this data.\n\nWithout an IT department, without multi-month projects, without huge costs.\n\nI know, it sounds unreal, it sounds like marketing, there must be a catch somewhere, and probably more than one.\n\nIs there really?\n\nOr maybe just check it out -> sign up for the webinar on reporting automation in e-commerce.\n\nYou don't have to use the opportunities you'll learn about. Maybe you don't need this. Maybe these problems don't affect you that much.\n\nBut as a person managing or working in e-commerce, you should know what solutions are available. Because ignorance is the worst.\n\nOr maybe you'll find something that will allow you to strategically increase revenue and reduce costs, saving you many hours a week. Maybe you'll find a way for AI to finally bring real value to the company?\n\nI know one thing: it's worth finding out for yourself.\n\nClick the link, fill out the form, and come to the webinar. In the worst case, you'll learn what reporting automation means and how a data warehouse works. In the best case, you will transform your online store.\n\nSo?\n\nSee you there!","Dear manager, director, owner, or simply a team member of an IdoSell store.\n\nYou run an online store, and like most e-commerce businesses, you’re likely facing a major challenge - one you might not even be aware of. But because you’re using the IdoSell platform, fixing it could be easier than ever before.",{"id":421,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":422,"copyright":19,"fieldtype":21,"meta_data":423,"is_external_url":32},190524925466467,"https://a.storyblok.com/f/296300/900x600/584f3959ea/08-automate-reporting.png",{},[425],{"_uid":373,"name":346,"content":347,"component":234},[],"2025-12-09 00:00",[],"automatyzacja-raportowania-w-idosell","content/knowledge/automatyzacja-raportowania-w-idosell",70,[],"77cdbe23-acb0-44d8-a782-ff13da58a8f6",[],{"data":436,"body":437,"excerpt":-1,"toc":447},{"title":19,"description":222},{"type":438,"children":439},"root",[440],{"type":441,"tag":442,"props":443,"children":444},"element","p",{},[445],{"type":446,"value":222},"text",{"title":19,"searchDepth":448,"depth":448,"links":449},2,[],{"data":451,"body":452,"excerpt":-1,"toc":458},{"title":19,"description":226},{"type":438,"children":453},[454],{"type":441,"tag":442,"props":455,"children":456},{},[457],{"type":446,"value":226},{"title":19,"searchDepth":448,"depth":448,"links":459},[],{"data":461,"body":462,"excerpt":-1,"toc":468},{"title":19,"description":417},{"type":438,"children":463},[464],{"type":441,"tag":442,"props":465,"children":466},{},[467],{"type":446,"value":417},{"title":19,"searchDepth":448,"depth":448,"links":469},[],{"data":471,"body":473,"excerpt":-1,"toc":484},{"title":19,"description":472},"Dear manager, director, owner, or simply a team member of an IdoSell store.",{"type":438,"children":474},[475,479],{"type":441,"tag":442,"props":476,"children":477},{},[478],{"type":446,"value":472},{"type":441,"tag":442,"props":480,"children":481},{},[482],{"type":446,"value":483},"You run an online store, and like most e-commerce businesses, you’re likely facing a major challenge - one you might not even be aware of. But because you’re using the IdoSell platform, fixing it could be easier than ever before.",{"title":19,"searchDepth":448,"depth":448,"links":485},[],{"data":487,"body":488,"excerpt":-1,"toc":494},{"title":19,"description":358},{"type":438,"children":489},[490],{"type":441,"tag":442,"props":491,"children":492},{},[493],{"type":446,"value":358},{"title":19,"searchDepth":448,"depth":448,"links":495},[],{"data":497,"body":498,"excerpt":-1,"toc":504},{"title":19,"description":366},{"type":438,"children":499},[500],{"type":441,"tag":442,"props":501,"children":502},{},[503],{"type":446,"value":366},{"title":19,"searchDepth":448,"depth":448,"links":505},[],{"data":507,"body":508,"excerpt":-1,"toc":514},{"title":19,"description":392},{"type":438,"children":509},[510],{"type":441,"tag":442,"props":511,"children":512},{},[513],{"type":446,"value":392},{"title":19,"searchDepth":448,"depth":448,"links":515},[],{"data":517,"body":518,"excerpt":-1,"toc":524},{"title":19,"description":394},{"type":438,"children":519},[520],{"type":441,"tag":442,"props":521,"children":522},{},[523],{"type":446,"value":394},{"title":19,"searchDepth":448,"depth":448,"links":525},[],{"data":527,"body":528,"excerpt":-1,"toc":534},{"title":19,"description":335},{"type":438,"children":529},[530],{"type":441,"tag":442,"props":531,"children":532},{},[533],{"type":446,"value":335},{"title":19,"searchDepth":448,"depth":448,"links":535},[],{"data":537,"body":538,"excerpt":-1,"toc":544},{"title":19,"description":338},{"type":438,"children":539},[540],{"type":441,"tag":442,"props":541,"children":542},{},[543],{"type":446,"value":338},{"title":19,"searchDepth":448,"depth":448,"links":545},[],{"data":547,"body":548,"excerpt":-1,"toc":554},{"title":19,"description":263},{"type":438,"children":549},[550],{"type":441,"tag":442,"props":551,"children":552},{},[553],{"type":446,"value":263},{"title":19,"searchDepth":448,"depth":448,"links":555},[],{"data":557,"body":558,"excerpt":-1,"toc":564},{"title":19,"description":265},{"type":438,"children":559},[560],{"type":441,"tag":442,"props":561,"children":562},{},[563],{"type":446,"value":265},{"title":19,"searchDepth":448,"depth":448,"links":565},[],{"data":567,"body":569,"excerpt":-1,"toc":584},{"title":19,"description":568},"Google Analytics 4 GA4 BigQuery - 9 challenges to surprise you in data analysis",{"type":438,"children":570},[571],{"type":441,"tag":442,"props":572,"children":573},{},[574,576,582],{"type":446,"value":575},"Google Analytics 4 ",{"type":441,"tag":577,"props":578,"children":579},"span",{},[580],{"type":446,"value":581},"GA4",{"type":446,"value":583}," BigQuery - 9 challenges to surprise you in data analysis",{"title":19,"searchDepth":448,"depth":448,"links":585},[],{"data":587,"body":589,"excerpt":-1,"toc":602},{"title":19,"description":588},"When interacting with Google Analytics 4 GA4 data in BigQuery, we managed to encounter various difficulties that are worth knowing about in advance, before many hours have passed on a detective attempt to overcome them.",{"type":438,"children":590},[591],{"type":441,"tag":442,"props":592,"children":593},{},[594,596,600],{"type":446,"value":595},"When interacting with Google Analytics 4 ",{"type":441,"tag":577,"props":597,"children":598},{},[599],{"type":446,"value":581},{"type":446,"value":601}," data in BigQuery, we managed to encounter various difficulties that are worth knowing about in advance, before many hours have passed on a detective attempt to overcome them.",{"title":19,"searchDepth":448,"depth":448,"links":603},[],{"data":605,"body":607,"excerpt":-1,"toc":619},{"title":19,"description":606},"Google Analytics 4 GA4 BigQuery - why you should use it?",{"type":438,"children":608},[609],{"type":441,"tag":442,"props":610,"children":611},{},[612,613,617],{"type":446,"value":575},{"type":441,"tag":577,"props":614,"children":615},{},[616],{"type":446,"value":581},{"type":446,"value":618}," BigQuery - why you should use it?",{"title":19,"searchDepth":448,"depth":448,"links":620},[],{"data":622,"body":624,"excerpt":-1,"toc":637},{"title":19,"description":623},"Exporting Google Analytics 4 GA4 data to Google BigQuery allows you to protect us against data loss and bypass many limits and restrictions waiting for us in the panel or API connection.",{"type":438,"children":625},[626],{"type":441,"tag":442,"props":627,"children":628},{},[629,631,635],{"type":446,"value":630},"Exporting Google Analytics 4 ",{"type":441,"tag":577,"props":632,"children":633},{},[634],{"type":446,"value":581},{"type":446,"value":636}," data to Google BigQuery allows you to protect us against data loss and bypass many limits and restrictions waiting for us in the panel or API connection.",{"title":19,"searchDepth":448,"depth":448,"links":638},[],1788963878027]