[{"data":1,"prerenderedAt":17097},["ShallowReactive",2],{"blog-en-listing":3},[4,97,232,403,559,697,1005,1150,1346,1679,1835,3488,3676,4276,5669,5805,5947,6112,6171,7138,7409,7601,7828,8073,12208,12352,14360,14557,14934,15204,15562,15640,15961,16169],{"id":5,"title":6,"author":7,"body":8,"category":7,"description":14,"extension":83,"image":84,"isToc":85,"langAlt":7,"meta":86,"metaDescription":7,"navigation":88,"path":89,"published":88,"publishedAt":90,"readingTimeMinutes":91,"readingTimeText":92,"relatedArticles":7,"seo":93,"stem":94,"teaser":95,"updatedAtCustom":7,"__hash__":96},"blog_en\u002Fen\u002Fblog\u002FGA-ip-handling.md","IP Address GDPR Issues in Google Analytics",null,{"type":9,"value":10,"toc":75},"minimark",[11,15,20,23,26,30,33,44,47,51,54,57,61,64,72],[12,13,14],"p",{},"The General Data Protection Regulation (GDPR) is a comprehensive data protection regulation implemented in the European Union (EU) in May 2018. Its primary aim is to safeguard the personal data and privacy rights of EU citizens. One of the areas affected by GDPR is the handling of IP addresses, which are unique identifiers assigned to devices connected to a network. This article explores the challenges faced by Google Analytics clients in relation to IP address handling and provides insights into the steps necessary to comply with GDPR requirements.",[16,17,19],"h2",{"id":18},"ip-handling-in-google-analytics","IP handling in Google Analytics",[12,21,22],{},"IP addresses play a crucial role in Google Analytics, as they provide valuable insights into user behavior and website traffic. For example, by analyzing IP addresses, website owners can identify the geographic location of their visitors. However, under GDPR, IP addresses are considered personal data as they can potentially be used to indirectly identify individuals.",[12,24,25],{},"GDPR introduced stringent guidelines on the processing of personal data, including IP addresses. According to GDPR, IP addresses are considered personally identifiable information (PII) if they can be linked to an individual. Consequently, organizations that use Google Analytics need to ensure they handle IP addresses in compliance with GDPR.",[16,27,29],{"id":28},"the-search-for-a-solution","The search for a solution",[12,31,32],{},"Before GDPR, Google Analytics used to collect and store complete IP addresses by default, which became impossible in the wake of the regulation’s enactment. As a result, website owners had to find a solution that would enable them to continue using Google Analytics while respecting the privacy rights of users.",[12,34,35,36,43],{},"The journey towards a solution was influenced by the involvement of EU member state governments, whose data protection authorities issued guidelines for companies wishing to use Google Analytics in a GDPR-compliant manner. As an example, ",[37,38,42],"a",{"href":39,"rel":40},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fblog\u002Fgoogle-analytics-proxy\u002F",[41],"nofollow","this"," article contains valuable insights about the position of the French government on the issue, which can serve as a reference point for a broader understanding of governmental approaches to the issue in European countries.",[12,45,46],{},"The French government’s main recommendation to website owners on the issue of IP addresses is to introduce proxies, which act as intermediaries between a user's device and the end platform, hiding the actual IP address of the user and replacing it with a different IP address. By utilizing proxies, website owners can obfuscate the user’s original IP address prior to sending data into Google Analytics, decreasing the likelihood that data can be directly linked to an individual.",[16,48,50],{"id":49},"implementing-proxies","Implementing proxies",[12,52,53],{},"To implement proxies for IP obfuscation in Google Analytics, website owners need to configure their websites to route incoming traffic through a proxy server. The proxy server will then handle the communication with Google Analytics, effectively masking the actual IP addresses of the users.",[12,55,56],{},"Utilizing proxies to obfuscate IP addresses in Google Analytics provides an additional layer of privacy protection for users. It helps ensure compliance with GDPR regulations and minimizes the risk of inadvertently collecting and storing personally identifiable information. However, implementing proxies may introduce complexities in the setup and configuration process, requiring technical expertise and potentially incurring additional costs. The easiest way to minimize such difficulties is to employ a dedicated solution such as mHub Cloud. mHub Cloud is a comprehensive tool allowing website owners to easily implement IP address masking for Google Analytics, while also making server-side tracking into many other platforms (Piano Analytics, Facebook, or Google Ads and many more) easy and accessible.",[16,58,60],{"id":59},"conclusion","Conclusion",[12,62,63],{},"The GDPR regulations for IP address handling in Google Analytics are key for protecting user privacy. Utilizing an intermediary server or data handler is necessary to obfuscate IP addresses and ensure GDPR compliance.  Implementing a solution like mHub Cloud  can serve as an effective method for organizations seeking a reliable middleman for IP obfuscation in Google Analytics.",[12,65,66,71],{},[37,67,70],{"href":68,"rel":69},"https:\u002F\u002Fmhubcloud.com\u002F",[41],"mHub Cloud"," offers a user-friendly interface and easy implementation process, allowing for the seamless routing of traffic between users' devices and Google Analytics while masking IP addresses. By leveraging solutions like mHub Cloud, organizations can enhance data protection, meet legal obligations, and build trust with users by prioritizing their privacy.",[12,73,74],{},"Implementing an intermediary server for IP obfuscation allows website owners to strike an optimal balance between leveraging insights from data analytics and protecting user privacy, creating a secure and trustworthy online experience for their users while adhering to GDPR guidelines.",{"title":76,"searchDepth":77,"depth":77,"links":78},"",2,[79,80,81,82],{"id":18,"depth":77,"text":19},{"id":28,"depth":77,"text":29},{"id":49,"depth":77,"text":50},{"id":59,"depth":77,"text":60},"md","\u002Fupload\u002Fga-ip-handling-en.png",false,{"language":87},"English",true,"\u002Fen\u002Fblog\u002Fga-ip-handling","2024-04-29T12:00:00+00:00",3.71,"4 min read",{"title":6,"description":14},"en\u002Fblog\u002FGA-ip-handling","The solution to the legal issue around sending IP addresses into Google Analytics","PauB2a0-jXSTrXpRgTYF2x9IeaEBT3OQyUNMl-kg-o0",{"id":98,"title":99,"author":7,"body":100,"category":7,"description":104,"extension":83,"image":219,"isToc":85,"langAlt":7,"meta":220,"metaDescription":7,"navigation":88,"path":221,"published":88,"publishedAt":222,"readingTimeMinutes":223,"readingTimeText":224,"relatedArticles":225,"seo":228,"stem":229,"teaser":230,"updatedAtCustom":7,"__hash__":231},"blog_en\u002Fen\u002Fblog\u002Fare-the-results-of-your-a-b-testing-accurate.md","Are the results of your A\u002FB testing accurate?",{"type":9,"value":101,"toc":214},[102,105,109,121,128,131,134,145,151,158,163,167,170,185,196,203,205,208],[12,103,104],{},"A\u002FB test is an important tool for optimizing marketing expenses. It provides information about the benefits of a solution without the interference of other factors. Moreover, it can lower the risk of exposure to the whole audience before you are sure that is the right choice for you. Especially if you want to compare two competing solutions, for example, two agencies offering you a different promotional solution, and you like both of them. It can be difficult to choose one only by looking at it. What had worked in the past may not be as profitable now. With A\u002FB testing methodology you can evaluate if the more expensive proposition is really worth the premium you are paying for it. Or try a more daring idea to see the outcomes of the possibly high risk.",[16,106,108],{"id":107},"data-issues","Data issues",[12,110,111,112,116,117,120],{},"However, to perform an A\u002FB test ",[113,114,115],"strong",{},"you need to rely on the data"," needed for the analysis. To avoid systematic differences in the groups, random assignment of users to groups is generally preferred if the type of data allows it. Although, even with the random assignment, not all issues are solved yet. In particular, it is essential to check if the real shares of users in compared groups are not significantly different from their expected shares that are used in the evaluation. For the A\u002FB test, there is no problem having groups that are not equally distributed, given that the smaller group has a reasonable amount of traffic in it. However, if you expect the groups to be divided into halves, assigning systematically one of the solutions to 55 % of traffic will ",[113,118,119],{},"distort the results of the A\u002FB test dramatically",". This is even more relevant for A\u002FB tests with more than two groups for comparison as the individual shares can vary more relative to their size.",[122,123,124,127],"example",{},[113,125,126],{},"Example:","\n if users are divided into three groups at 20:40:40 distribution and the data have high variation, it can happen that the smallest group which on average has 20 % of the traffic will oscillate between 12 % and 28 % in daily shares. This causes the results to be difficult to interpret due to changing relative position and large standard deviation of the effect.\n",[12,129,130],{},"In practice, even with the use of random assignment, the data are rarely distributed by the exact share. When there is no problem in the data, the average over a long period of time should converge to the expected share. However, the real daily shares vary naturally around their averages depending on the volatility of the data.",[12,132,133],{},"Consequently, this unfolds two aspects of the issue of correct group distribution:",[12,135,136,137,140,141,144],{},"1. Check if there is no problem in the data causing the ",[113,138,139],{},"average shares"," to ",[113,142,143],{},"differ from the expected shares"," (e.g. due to implementation of the random assignment or due to sample in Google Analytics)",[12,146,147],{},[148,149],"img",{"alt":76,"src":150},"\u002Fupload\u002Fexample1_wrongdistribution.webp",[12,152,153,154,157],{},"2. If you want to evaluate the A\u002FB test on a daily basis, the results can be influenced by the ",[113,155,156],{},"fluctuation of data"," around their average shares.",[12,159,160],{},[148,161],{"alt":76,"src":162},"\u002Fupload\u002Fexample2_largevariation.webp",[16,164,166],{"id":165},"how-to-approach-the-issue-with-the-wrong-distribution","How to approach the issue with the wrong distribution?",[12,168,169],{},"Over the years of practice, when we experienced similar problems in a few of our clients, we found two possible ways to approach this matter that works for most cases. Depending on the particular case and the testing frequency, you can check the difference between the real ratio and the expected one or you can choose to calculate daily shares.",[12,171,172,173,176,177,180,181,184],{},"Firstly, you perform a test whether the real representation of the groups is ",[113,174,175],{},"not statistically different"," from the expected distribution and in case of no difference, ",[113,178,179],{},"evaluate"," the test ",[113,182,183],{},"based on the expected distribution",". This is mostly relevant for a one-time A\u002FB test or an A\u002FB test that is evaluated over an aggregated time period (for example weekly or monthly based on the size of the data).",[12,186,187,188,191,192,195],{},"Alternatively, you can approach the problem in a more systematic way. We use this approach in our analyses, especially in repeatedly evaluated daily A\u002FB tests. In addition to other data necessary for the A\u002FB test evaluation, we also ",[113,189,190],{},"collect daily data about new users"," that visited the client’s website. For these new users, we obtain data on their assignment to the test groups. Based on this data ",[113,193,194],{},"we calculate daily share"," for each test group as the ratio between the daily count of new users in the given group and the total count of all new users. This calculated daily share is then used instead of the expected shares of the test groups.",[12,197,198,199,202],{},"The systematic approach ensures that even on the basis of daily evaluation, the results are ",[113,200,201],{},"not affected by the differences of current share to the expected share"," for the given group. Furthermore, it ensures that no error in assignment to groups affects the results. This leads to more reliable and potentially stable outcomes that help you to select the better performing solution quicker and avoid miss-interpretation based on the wrong representation of the solutions among users.",[16,204,60],{"id":59},[12,206,207],{},"To conclude, A\u002FB testing should be a part of a decision process. It doesn’t matter if you are trying to choose between and agency or a different color. Especially, when the decision is strategic and can impact the business significantly, the verification of the results is crucial.",[209,210,213],"action",{"link":211,"button":212},"\u002Fen\u002Fget-in-touch\u002F","Contact Us","\nOur methodology has successfully revealed and corrected the data issue and supported the accuracy of the evaluation for multiple clients. Contact us for more information. We can ensure the accuracy of your A\u002FB testing too.\n",{"title":76,"searchDepth":77,"depth":77,"links":215},[216,217,218],{"id":107,"depth":77,"text":108},{"id":165,"depth":77,"text":166},{"id":59,"depth":77,"text":60},"\u002Fupload\u002Fab-testing-article-cover.webp",{},"\u002Fen\u002Fblog\u002Fare-the-results-of-your-a-b-testing-accurate","2020-07-29T12:00:00.000+00:00",5.015,"6 min read",[226,227],"content\u002Fen\u002Fblog\u002Fincrease-conversions-with-category-page-product-ranking.md","content\u002Fen\u002Fblog\u002Fgetting-the-most-out-of-permission-marketing.md",{"title":99,"description":104},"en\u002Fblog\u002Fare-the-results-of-your-a-b-testing-accurate","You are testing two versions of your content or two marketing agencies and their performance. Generally, testing is vital to make better business decisions. Therefore, you expect the results to tell you what you need to know. However, what if the tested data is not correctly distributed into the groups? How can you rely on the results? Is it possible to detect it?","UUf0hx43SuKaK9Jv_PRJERitDPCLh4NXYLTSuAjog6I",{"id":233,"title":234,"author":7,"body":235,"category":7,"description":239,"extension":83,"image":393,"isToc":85,"langAlt":7,"meta":394,"metaDescription":7,"navigation":88,"path":395,"published":88,"publishedAt":396,"readingTimeMinutes":397,"readingTimeText":398,"relatedArticles":7,"seo":399,"stem":400,"teaser":401,"updatedAtCustom":7,"__hash__":402},"blog_en\u002Fen\u002Fblog\u002Fbigquery-reporting.md","BigQuery reporting standard",{"type":9,"value":236,"toc":386},[237,240,243,248,251,267,270,274,277,282,287,290,295,298,303,306,311,314,317,321,326,338,343,354,357,362,370,373,377,380,383],[12,238,239],{},"Why can't Google Analytics 4 user interface reporting cover all requirements?",[12,241,242],{},"The main issue with reporting in Google Analytics is sampling and thresholding. This means that you are limited in the depth to which you can analyze your data. There is only one way to bypass sampling and thresholding of data in GA4 - pull data into BigQuery. That way you will always have unbiased data. Since the data in Big Query is a table that contains raw data, it is necessary to prepare basic datasets for reporting and the following use of this data.",[244,245,247],"h3",{"id":246},"advantages","Advantages",[12,249,250],{},"Huge customization potential and more sophisticated data utilization through:",[252,253,254,258,261,264],"ol",{},[255,256,257],"li",{},"Unsampled data",[255,259,260],{},"Real-time data (no 2-day delay)",[255,262,263],{},"Historical data (no 14-month retention period limitation)",[255,265,266],{},"Offline data integration possibilities (user data from CRM, marketing spends etc.)",[12,268,269],{},"To use data effectively, we've designed a database structure. This ensures the quality and integrity of the data we use.",[244,271,273],{"id":272},"structure-description","Structure description",[12,275,276],{},"This structure presents a layered approach to managing GA4 data. Each layer fulfills the specific need of the data management and transformations. That requires specialized expertise, facilitating efficient and accurate data processing and analysis.",[278,279],"image-with-caption",{"source":280,"caption":281},"\u002Fupload\u002Fbigquerylayers.webp","High-level view of the database structure and roles required to build it",[12,283,284],{},[113,285,286],{},"L0 Raw layer",[12,288,289],{},"The L0 Raw Layer contains raw GA4 data. This layer is crucial for retaining the original data structure. It makes it available for further transformations and analysis in subsequent layers. Be aware that raw data from GA 4 are not the data which you see in user interface of GA 4. There is no precalculated metrics such as sessions\u002Fusers and that needs to be established in next layers.",[12,291,292],{},[113,293,294],{},"L1 Normalized Model Layer",[12,296,297],{},"In the L1 Normalized Model Layer, GA4 event data undergoes a structured transformation process. It is organized into distinct tables, including events, sessions, users, and more. Normalizing data makes later analyses easier and improves the efficiency and clarity of the data ecosystem.",[12,299,300],{},[113,301,302],{},"L2 Business Layer",[12,304,305],{},"Within the L2 Business Layer, a deeper dive into data occurs. Advanced analytics, funnels, segmentation, KPI tracking, and data enrichment are the focal points. This layer focuses on extracting useful insights from data to offer valuable information for decision-making and strategic planning.",[12,307,308],{},[113,309,310],{},"L3 Presentation Layer",[12,312,313],{},"The L3 Presentation Layer is the interface where data is transformed into consumable knowledge. Customized reports and dashboards created here help various departments answer their questions. Simultaneously, it maintains data governance, ensuring data quality and compliance with regulations. This guarantees the reliability and trustworthiness of the presented insights.",[12,315,316],{},"Each layer represents a specific part of the database which must be operated by a specialist. You can find out more about who these specialists are below.",[244,318,320],{"id":319},"roles-description","Roles description",[12,322,323],{},[113,324,325],{},"Database Engineer & Database Architect",[327,328,329,332,335],"ul",{},[255,330,331],{},"Proficiency in GA4 Data: Demonstrates a comprehensive grasp of GA4 data intricacies, including metrics, dimensions, and the interconnections among GA4 entities like sessions, events, and users.",[255,333,334],{},"Mastery of Big Query: Possesses a deep understanding of the Big Query database structure and its extensive features, including database objects and the nuances of the Big Query SQL dialect.",[255,336,337],{},"Database Architecture Expertise: Proficient in designing optimized database structures and their components, akin to a Database Architect (DBA).",[12,339,340],{},[113,341,342],{},"Data Analyst",[327,344,345,348,351],{},[255,346,347],{},"Big Query Competency: Has a fundamental understanding of the Big Query database structure and excels in employing the Big Query SQL dialect.",[255,349,350],{},"Business Acumen: Proficient in translating and implementing business requirements into actionable data processes.",[255,352,353],{},"GA4 Data Proficiency: Displays an in-depth understanding of GA4 data, encompassing metrics, dimensions, and the interconnectedness of GA4 entities.",[12,355,356],{},"This position doesn’t require as many senior technical skills as the previous one. With that being said, it can be taught in couple trainings with Cross Masters team and be fully operated by the person inside your company.",[12,358,359],{},[113,360,361],{},"Business Analyst",[327,363,364,367],{},[255,365,366],{},"Visualization Proficiency: Proficient in creating insightful reports using various Business Intelligence (BI) tools such as Power BI or Looker Studio.",[255,368,369],{},"Data Connection Expertise: Possesses knowledge of connecting report datasets, with a clear understanding of the process involved in linking BI tools to the Big Query database.",[12,371,372],{},"To be able to fully comprehend all the business requirements this position should be covered by someone who understands the business processes inside the company (team). The best choice in this case is your team member.",[244,374,375],{"id":59},[113,376,60],{},[12,378,379],{},"In summary, this approach ensures the data is being used in correct and efficient way but requires a certain level of expertise.  At Cross Masters, we have the expertise and capacity to fulfill all of these roles or provide comprehensive training for them. Our team's proficiency in GA4 data, Big Query, database architecture, and business analytics ensures that we can design, build, maintain, and optimize these databases effectively. Furthermore, we can tailor training programs to empower your internal team members, particularly for roles like the Business Analyst, which benefit from an in-depth understanding of your company's unique business processes.",[12,381,382],{},"Our goal is to partner with your team either by direct role fulfillment or skill development opportunities. We adapt to your specific needs, ensuring your data management system is not only technically correct but also aligned with your business objectives.",[209,384,385],{"link":211,"button":212},"\nEliminate all GA4 reporting issues and make the most of your data.\n",{"title":76,"searchDepth":77,"depth":77,"links":387},[388,390,391,392],{"id":246,"depth":389,"text":247},3,{"id":272,"depth":389,"text":273},{"id":319,"depth":389,"text":320},{"id":59,"depth":389,"text":60},"\u002Fupload\u002Fbigquerytitleimage.webp",{"language":87},"\u002Fen\u002Fblog\u002Fbigquery-reporting","2024-01-22T12:00:00+00:00",4.47,"5 min read",{"title":234,"description":239},"en\u002Fblog\u002Fbigquery-reporting","Maximizing the Potential of GA4 Data Beyond UI Limitations","LG14q8NpyMIYAsCWGPF7vXZrBV1CtWD6YLcx3coapLY",{"id":404,"title":405,"author":7,"body":406,"category":7,"description":410,"extension":83,"image":547,"isToc":85,"langAlt":7,"meta":548,"metaDescription":7,"navigation":88,"path":549,"published":88,"publishedAt":550,"readingTimeMinutes":551,"readingTimeText":552,"relatedArticles":553,"seo":555,"stem":556,"teaser":557,"updatedAtCustom":7,"__hash__":558},"blog_en\u002Fen\u002Fblog\u002Fcan-tv-become-a-performance-channel.md","Can TV become a performance channel?",{"type":9,"value":407,"toc":536},[408,411,414,425,428,431,435,438,458,462,465,469,472,476,479,483,486,489,493,496,500,503,508,510,515,521,524,533],[12,409,410],{},"One of the goals of the performance part of a TV campaign can be to attract more potential customers and raise the website traffic, in other words, to take action. You can then target these customers via remarketing and other digital channels. Thus, TV advertising can bring new customers to your site that you haven't yet managed to reach online.",[12,412,413],{},"This effect can be measured as traffic on your website or the company name search results on the internet increase within a few minutes or seconds after your ad is broadcasted, compared to regular traffic.",[415,416,417],"blockquote",{},[12,418,419],{},[113,420,421],{},[422,423,424],"em",{},"Three-quarters of TV viewers watch their favorite show with a \"second screen\" in their hands, mobile or tablet, and often see advertised sites after watching ads.",[12,426,427],{},"It means looking at TV advertising from a different perspective - you do not want to broadcast it to as many viewers as possible but to the viewers who will respond to it.",[12,429,430],{},"In a regular TV campaign evaluation, you can see if several members of the target audience saw the ad, remembered it, and liked it. If you look at the broadcast spot in terms of performance, you can measure its immediate effect on all viewers by analyzing site traffic. This way, you can optimize the ad itself and its placement in the broadcast.",[16,432,434],{"id":433},"how","How?",[12,436,437],{},"Three complex steps can be harder to take than it might seem. Each step involves smaller steps.",[252,439,440,443,446,449,452,455],{},[255,441,442],{},"Evaluate your previous campaigns",[255,444,445],{},"Consult with experts to increase your strengths",[255,447,448],{},"Test and then evaluate different TV channels",[255,450,451],{},"Compare different lengths and versions of spots",[255,453,454],{},"Split your budget into multiple sections and run your campaign one at a time",[255,456,457],{},"Create a clear “call-to-action” message",[244,459,461],{"id":460},"_1-evaluate-your-previous-campaigns-to-see-which-channels-shows-and-broadcast-times-delivered-the-highest-response","1. Evaluate your previous campaigns to see which channels, shows, and broadcast times delivered the highest response",[12,463,464],{},"Track short-term traffic increases (peaks) during the time your ad airs. You need to know the normal daily traffic first and compare it to these peaks. The advanced statistical computing and comparison of before and after campaign state uncover, which ads, showtimes, or TV channels work the best. The results can be truly dramatic. TV Ad analysis can be a very powerful tool for further investment.",[244,466,468],{"id":467},"_2-consult-with-your-media-agency-to-increase-your-strengths","2. Consult with your media agency to increase your strengths",[12,470,471],{},"Redistributing the budget from inefficient (cost \u002F visit-acquisition) ads to those that drive more traffic increases ROI. Thanks to the correlation between the short-term and long-term effects of TV advertising, the marketing investment in the short-term effect of advertising will positively reflect on the brand. However, solely relying on official statistics and people meter measurements usually don’t provide informative value for your campaign, sufficiently. When a million people see your ad in news, ten come to your site. The same ad that airs in the afternoon in a music show can receive 100 visits and 10 conversions. Although the first spot was predicted to have a better effect, the second spot proved to be better in terms of performance.",[244,473,475],{"id":474},"_3-test-different-tv-channels-or-broadcast-times-and-evaluate-which-were-the-most-successful","3. Test different TV channels or broadcast times and evaluate which were the most successful",[12,477,478],{},"Often the results are very surprising. Unusual formats and times can bring unexpectedly positive outcomes. Even if testing your TV ads on a focus group, it may happen that its perception will be very different from reality and larger target groups. Thus, do not be afraid to advertise, for example, cosmetics in between a show on cars, perhaps you will find that car drivers like to buy gifts for their wives and are grateful for any help.",[244,480,482],{"id":481},"_4-compare-different-lengths-and-versions-of-spots","4. Compare different lengths and versions of spots",[12,484,485],{},"Different spots can have dramatically different response rates. Viewers respond differently to ads placed in shows and in between two shows. Some TV spots have a significantly higher response when broadcasted after the show, and some excel when placed directly into an advertising break within a single show. There can also be a big difference if the spot is placed first, within the series of the advertisement, or as the last one.",[12,487,488],{},"Keep in mind that your perception of the spot will probably be different from the way an ordinary viewer understands it. You, your team, and your agency know the product or service in detail. The main testing, quantitative research, will be conducted during the broadcast. There you will be able to measure very precisely how appropriate each ad type is for the target group, whether the short or long version of the spot works better. When evaluating, consider also other parameters: day of the week, holiday, holiday in the region, championship match on another channel.",[244,490,492],{"id":491},"_5-split-your-budget-into-multiple-sections-and-run-your-campaign-one-at-a-time-to-adjust-the-layout-over-time","5. Split your budget into multiple sections and run your campaign one at a time to adjust the layout over time",[12,494,495],{},"Try to distribute your campaign in several waves, analyzing the results over time, and using the insight from one wave to optimize the next. It can help to optimize your campaign, reach higher performance, and increase ROI.",[244,497,499],{"id":498},"_6-significant-call-to-action-doubles-viewer-response-in-the-form-of-site-visits-and-searches","6. Significant \"call to action\" doubles viewer response in the form of site visits and searches",[12,501,502],{},"People mostly relax while watching TV. Therefore, if you want a TV campaign to be productive, your message should be crystal clear. Explicit instruction for what people should do will grow the response 80-100%. Sell ​​your old phone, buy our goods, order a service, register now! Make it easy for viewers to make decisions and tell them what you want them to do. It is much easier for them to respond to advertising. This “performance” part of the TV ad can very elegantly complement a brand-focused message. Out of curiosity, think about how many TV ads you see actually meet this rule?",[12,504,505],{},[148,506],{"alt":76,"src":507},"\u002Fupload\u002Fexperimentmeasureevaluate.svg",[16,509,60],{"id":59},[12,511,512],{},[113,513,514],{},"Experiment. Measure. Evaluate. This is the only way to get the best results.",[12,516,517,518],{},"After each broadcast of the spot, compare its performance with the previous ones. If it worked exceptionally well, try repeating the constellation to see if you can replicate the success. You pay the same attention to flops. Which of the parameters had the main influence on the fact that only a few dozen visits came after the broadcast? ",[113,519,520],{},"Define, test, and turn TV advertising into a performance channel.",[12,522,523],{},"Start-ups that have started running TV advertising after maxing out their online marketing channels are challenging this “it is not possible” attitude. Especially e-commerce players and other online transaction-focused companies, such as online gaming companies, can track the immediate impact of a TV ad through their websites.",[12,525,526,527,532],{},"Evaluate your TV Ad and get the most out of with. We have analyzed many TV spots and were able to provide valuable insights to improve TV ads and support better decisions for the next campaigns. The ",[37,528,531],{"href":529,"rel":530},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fproducts\u002Ftv-advertising-effectiveness\u002F",[41],"analysis"," is beneficial on many different levels, and depending on the purpose of the campaign, the analysis provides valuable insights and supports better decisions for future campaigns to achieve more effective marketing and better performance.",[209,534,535],{"link":211,"button":212},"\nContact us and improve your sales from your TV spots.\n",{"title":76,"searchDepth":77,"depth":77,"links":537},[538,546],{"id":433,"depth":77,"text":434,"children":539},[540,541,542,543,544,545],{"id":460,"depth":389,"text":461},{"id":467,"depth":389,"text":468},{"id":474,"depth":389,"text":475},{"id":481,"depth":389,"text":482},{"id":491,"depth":389,"text":492},{"id":498,"depth":389,"text":499},{"id":59,"depth":77,"text":60},"\u002Fupload\u002Ftvmeasurement-li-banner.webp",{},"\u002Fen\u002Fblog\u002Fcan-tv-become-a-performance-channel","2020-06-24T12:00:00.000+00:00",6.145,"7 min read",[554,227],"content\u002Fen\u002Fblog\u002Fmachine-learning-in-marketing-practice.md",{"title":405,"description":410},"en\u002Fblog\u002Fcan-tv-become-a-performance-channel","Television advertising is not only brand awareness activity. Our analysis uncovers that TV Ad supports digital advertising, paid and unpaid channels very well and contributes to improved efficiency. One part of the advertising effect remains branded, yet the other creates some measurable performance.","Fgty4mD-e9Knxmu8d9Y1JrfOBJ3UnC4o0JOxypMPZRo",{"id":560,"title":561,"author":7,"body":562,"category":7,"description":566,"extension":83,"image":687,"isToc":85,"langAlt":7,"meta":688,"metaDescription":7,"navigation":88,"path":689,"published":88,"publishedAt":690,"readingTimeMinutes":691,"readingTimeText":692,"relatedArticles":7,"seo":693,"stem":694,"teaser":695,"updatedAtCustom":7,"__hash__":696},"blog_en\u002Fen\u002Fblog\u002Fconsent-mode-v2.md","Consent Mode v2",{"type":9,"value":563,"toc":680},[564,567,573,576,582,598,602,608,611,617,620,627,633,642,668,673,677],[12,565,566],{},"In response to the dynamic landscape of EU regulations, including the ePrivacy Directive, DMA, and GDPR, Google has recently rolled out updates to its EU User Consent Policy (UCP) with significant implications for advertisers and marketers. The changes, slated to be enforced by March 2024, revolve around the Consent Mode, demanding advertisers to adapt to the new Consent Mode v2 for continued access to user data while respecting their consent choices.",[244,568,570],{"id":569},"understanding-google-consent-mode",[113,571,572],{},"Understanding Google Consent Mode",[12,574,575],{},"Google Consent Mode serves as a framework for adjusting the behavior of Google tags\u002FSDKs (Google Ads, Google Analytics etc.), facilitating the collection of additional pings from users who have not granted consent on the cookie banner. These anonymous pings are then leveraged by Google to estimate missing hits and conversions, avoiding direct access to browser storage containing personal data.",[244,577,579],{"id":578},"changes-in-v2-new-consent-types-and-distinctions",[113,580,581],{},"Changes in V2: New Consent Types and Distinctions",[12,583,584,585,591,592,597],{},"To align with evolving regulations, Google introduces two new consent types alongside the existing ",[113,586,587],{},[588,589,590],"code",{},"ad_storage"," and ",[113,593,594],{},[588,595,596],{},"analytics_storage",". These new parameters, depicted in the image below, provide additional flags to indicate how collected data can be used for further processing. Furthermore, the new version introduces a distinction between Advanced and Basic consent modes, catering to varying consent scenarios.",[278,599],{"source":600,"caption":601},"\u002Fupload\u002Fnew-consents.png","New consent types with Consent Mode v2",[244,603,605],{"id":604},"the-impact-of-sticking-with-v1-or-nothing",[113,606,607],{},"The Impact of Sticking with V1 (or Nothing)",[12,609,610],{},"The specific impact of not implementing Consent Mode v2, at least in its Basic version, is not entirely known. However, it is anticipated that failure to upgrade may lead to disabled or limited features in Google marketing services, potentially affecting capabilities such as remarketing or audience building.",[244,612,614],{"id":613},"upgrade-now-how-to-implement-consent-mode-v2",[113,615,616],{},"Upgrade Now: How to Implement Consent Mode V2",[12,618,619],{},"To ensure the seamless functioning of platforms like Google Ads and Google Analytics, advertisers are urged to implement Consent Mode v2 before the March 2024 enforcement deadline. For those using third-party consent governance tools, the change may be automatic, but manual verification is recommended. Advertisers without such integrations are advised to implement the necessary Consent Types as outlined in the official documentation.",[12,621,622],{},[37,623,626],{"href":624,"rel":625},"https:\u002F\u002Fdevelopers.google.com\u002Ftag-platform\u002Fsecurity\u002Fguides\u002Fconsent?sjid=18030136410189793170-EU",[41],"Complete Documentation and Upgrade Instructions",[244,628,630],{"id":629},"verifying-implementation",[113,631,632],{},"Verifying Implementation",[12,634,635,636,641],{},"Adopting Consent Mode v2 requires a careful validation process. By simulating events sent to Google Analytics 4 and Google Advertising products, advertisers can search for the ",[113,637,638],{},[588,639,640],{},"gcd"," parameter in the payload. Different combinations of letters and numbers in the value indicate various consent states, helping advertisers ascertain whether the upgrade is successful.",[327,643,644,652,660],{},[255,645,646,651],{},[113,647,648],{},[588,649,650],{},"gcd: 11l1l1l1l1",": No Consent Mode implemented. Action needed.",[255,653,654,659],{},[113,655,656],{},[588,657,658],{},"gcd: 11t1t1l1l5",": Consent Mode v1 implemented. Upgrade to Consent Mode v2.",[255,661,662,667],{},[113,663,664],{},[588,665,666],{},"gcd: 11t1t1t1t5",": Consent Mode v2 implemented. No action required.",[12,669,670],{},[422,671,672],{},"Example: Consent Mode v1 implemented. Upgrade to Consent Mode v2",[278,674],{"source":675,"caption":676},"\u002Fupload\u002Fconsent-mode-upgrade.png","Upgrade to Consent Mode v2",[12,678,679],{},"In conclusion, staying ahead of the evolving regulatory landscape is crucial for advertisers relying on Google's marketing and analytics services. Implementing Consent Mode v2 ensures compliance and uninterrupted access to the full suite of features offered by Google's platforms.",{"title":76,"searchDepth":77,"depth":77,"links":681},[682,683,684,685,686],{"id":569,"depth":389,"text":572},{"id":578,"depth":389,"text":581},{"id":604,"depth":389,"text":607},{"id":613,"depth":389,"text":616},{"id":629,"depth":389,"text":632},"\u002Fupload\u002Fconsent-mode-v2en.webp",{"language":87},"\u002Fen\u002Fblog\u002Fconsent-mode-v2","2024-01-31T12:00:00.000+00:00",2.565,"3 min read",{"title":561,"description":566},"en\u002Fblog\u002Fconsent-mode-v2","What the change to Consent Mode v2 means and how to make the move","TWNou5EkxUbc-_PjqVVn3iIoUfcpyXYEeZXS1LSMOp8",{"id":698,"title":699,"author":7,"body":700,"category":992,"description":704,"extension":83,"image":993,"isToc":85,"langAlt":7,"meta":994,"metaDescription":7,"navigation":88,"path":995,"published":88,"publishedAt":996,"readingTimeMinutes":997,"readingTimeText":552,"relatedArticles":998,"seo":1001,"stem":1002,"teaser":1003,"updatedAtCustom":7,"__hash__":1004},"blog_en\u002Fen\u002Fblog\u002Fconversion-rate-explained.md","Conversion Rate Explained",{"type":9,"value":701,"toc":986},[702,705,708,719,723,726,730,733,736,739,743,746,749,757,760,763,766,772,775,778,782,785,788,791,794,799,802,807,810,815,826,829,834,837,840,852,856,859,864,867,871,885,889,897,901,909,913,921,925,933,937,952,955,958,961,966,972,979],[12,703,704],{},"In reality, you probably wouldn't want your site to be on one of those lists. However, there is a way to make the conversion rate really matter as a metric that can help you improve your site.",[12,706,707],{},"There are three things to review:",[252,709,710,713,716],{},[255,711,712],{},"What is the conversion rate?",[255,714,715],{},"Why isn't it the answer to all of the world's problems?",[255,717,718],{},"What can you do to make a conversion rate more meaningful?",[16,720,722],{"id":721},"what-is-conversion-rate","What is Conversion Rate?",[12,724,725],{},"The conversion rate is the percentage of visits to your site that result in a conversion. For most site owners, a conversion can be a sale or a lead of some kind, typically related to the number of visits or sessions:",[727,728,729],"note",{},"\nConversion Rate = Number of Sales \u002F Number of Visits\n",[12,731,732],{},"If your store is visited 100 times and 5 of those visits end in a sale, you have a 5% conversion rate.",[12,734,735],{},"The reason people care about that, and the big idea behind conversion optimization, is that if you can figure out how to increase your conversion percentage, you will increase sales for the same traffic costs.",[12,737,738],{},"But that isn’t exactly the case.",[16,740,742],{"id":741},"why-conversion-rate-isnt-the-answer-to-all-your-problems","Why Conversion Rate Isn't the Answer to All Your Problems",[12,744,745],{},"A higher conversion rate doesn't always mean higher performance.",[12,747,748],{},"The simplest way to explain this is with an example. Here are the stats for two days of activity on one e-commerce site:",[327,750,751,754],{},[255,752,753],{},"Day 1: 4% conversion rate. (5000 visits, 200 sales)",[255,755,756],{},"Day 2: 10% conversion rate. (1000 visits, 100 sales)",[12,758,759],{},"On the second day, the conversion was more than double the rate from day 1. Yet, it's easy to see day one was a much better day for the business (assuming all outgoing costs were the same).",[12,761,762],{},"When focusing on a conversion number, we are pretending that every visit to our site is a potential sale. Although, not all visits to your site have the potential to convert. While that might be true for a particular PPC landing page, it is very rarely true for an entire site.",[12,764,765],{},"Visitors may be checking the status of their orders, looking for your phone number, job hunting, grabbing a link to share with a friend, or any number of other activities. Focusing purely on improving the overall conversion rate from any given visit ignores scores of other possibilities.",[12,767,768,769],{},"It’s also possible that ",[113,770,771],{},"making your site more engaging may reduce your conversion rate.",[12,773,774],{},"Let's say you have an e-shop, with absolutely no content other than products. Your average customer comes to the site once a month and buys once every two months. To try and improve this, you add a blog to the site with really engaging content. Suddenly, your average customer is visiting the site twice a week.",[12,776,777],{},"To maintain your conversion rate, you'd have to persuade your longtime loyal customers to buy once per week, instead of once every two months. In other words, your site has most definitely improved, and it's very likely your headline conversion rate will go down. Conversion rates vary wildly based on the visitor type.",[16,779,781],{"id":780},"conversion-rates-vary-wildly-based-on-the-visitor-type","Conversion rates vary wildly based on the visitor type",[12,783,784],{},"A first-time visitor to your site who has never bought your products, is far, far less likely to make a purchase than an existing, proven-to-be-loyal customer. On the opposite, a very loyal customer and a regular visitor are far less likely to be influenced to make a purchase because of minor conversion tweaks.",[12,786,787],{},"Combining those two groups together is like putting first-time house buyers into a big pot with castle owners and trying to make sense of the strange average housing prices.",[12,789,790],{},"Visitors from different traffic sources also differ wildly. Direct visitors convert well as that user group tends to contain more existing customers. Likewise, brand and non-brand search terms, generic and long-tail terms vary too.",[12,792,793],{},"That’s where users come in.",[12,795,796],{},[148,797],{"alt":76,"src":798},"\u002Fupload\u002Fcolumn-rates-graph.webp",[12,800,801],{},"The thing is, growing your site will often decrease conversion rates.",[803,804,806],"h5",{"id":805},"look-at-another-example","Look at another example:",[12,808,809],{},"Here are 2 alternative tables of numbers for a site bringing in £565k in revenue over the period we're looking at.",[12,811,812],{},[148,813],{"alt":76,"src":814},"\u002Fupload\u002Fconversion-example-1.webp",[12,816,817,818,821,822,825],{},"We can see most channels convert between 1% and 3%, yet visits ",[422,819,820],{},"\"direct\""," to the site & via ",[422,823,824],{},"\"email\""," are far more likely to result in a customer purchase (25% chance and 14% chance).",[12,827,828],{},"Hence, the focus sits considerately on the best converting channels. We send out more emails, and we turn off many of the other channels:",[12,830,831],{},[148,832],{"alt":76,"src":833},"\u002Fupload\u002Fconversion-example-2.webp",[12,835,836],{},"The overall conversion rate has more than doubled. Revenue is the same, and we've probably saved a lot of advertising costs.",[12,838,839],{},"That all looks fantastic at first glance. However, we've turned off most of the growth channels of the site. Look at the second table again and ask:",[327,841,842,847],{},[255,843,844],{},[422,845,846],{},"In a year's time, will we still be able to squeeze out new sales from our same old email list?",[255,848,849],{},[422,850,851],{},"Will we be able to win back the customers our competitors have grabbed from us through their PPC and affiliate campaigns?",[16,853,855],{"id":854},"make-conversion-rates-meaningful-again","Make Conversion Rates Meaningful Again",[12,857,858],{},"Despite all of these ugly limitations (and more), the conversion is still an incredibly powerful tool. Here are some tips to make more sense of conversion and take impactful steps to improve your results.",[860,861,863],"h4",{"id":862},"measure-conversion-rates-contextually-not-literally","Measure conversion rates contextually, not literally",[12,865,866],{},"An increase in conversion rate can be caused by a vast decrease in visitors coupled with a gentler decrease in sales.",[860,868,870],{"id":869},"use-it-as-a-question-prompt-rather-than-an-answer","Use it as a question prompt rather than an answer",[12,872,873,880,881,884],{},[422,874,875,876,879],{},"\"My conversion rate has gone up 3%, ",[113,877,878],{},"why","?\""," Avoid using ",[422,882,883],{},"\"my conversion rate has gone up 3%\""," as a declaration of results.",[860,886,888],{"id":887},"it-works-really-well-for-very-specific-tasks","It works (really well) for very specific tasks",[327,890,891,894],{},[255,892,893],{},"Building individual landing pages around conversion",[255,895,896],{},"Putting together an email with conversion in mind.",[860,898,900],{"id":899},"break-your-conversion-rate-down-by-channel","Break your conversion rate down by channel",[327,902,903,906],{},[255,904,905],{},"Generally, acquisition channels like non-brand pay-per-click will convert at a far lower rate than your site average. Seeking to improve those rates individually will save you (and make you) far more money than treating it as part of a bigger 'overall conversion' number.",[255,907,908],{},"Separate out your channels, figure out which you can impact through conversion optimization, and focus on those instead of your headline conversion rate.",[860,910,912],{"id":911},"break-conversion-rate-down-by-visitor-type","Break conversion rate down by visitor type",[327,914,915,918],{},[255,916,917],{},"Split out \"new visitors\" and \"returning visitors\" (or better yet, \"previous buyers\" and \"never bought before\").",[255,919,920],{},"Remember that superficial site changes are far more likely to affect new visitors than old visitors. Your existing customers are swayed by brand, service, product quality, delivery, etc. Your new visitors are far more swayed by perception.",[860,922,924],{"id":923},"break-it-down-by-task","Break it down by task",[327,926,927,930],{},[255,928,929],{},"If your site has several key tasks (e.g. sales, customer support inquiries, leads, account top-ups) treat those as separate conversion tasks.",[255,931,932],{},"If they are important to you, split those tasks from each other, and track work to increase their rates individually.",[860,934,936],{"id":935},"focus-on-micro-conversions","Focus on micro conversions",[327,938,939,946],{},[255,940,941,942,945],{},"Instead of asking ",[422,943,944],{},"\"how can I increase the conversion rate of my site?\""," and wondering where to look first, break this down into smaller chunks.",[255,947,948,949],{},"Start with your most important pages & journeys, e.g. ",[422,950,951],{},"\"what percentage of searches result in a click to a product page? What can I change about our search results to improve that?\"",[12,953,954],{},"Increasing conversion rates has been one of our main goals and we have successfully helped our clients to improve the performance of their websites.",[12,956,957],{},"Get in touch with us and discover how we can help you increase conversions, retention rates, and performance of your marketing strategy.",[209,959,960],{"link":211,"button":212},"\n Our methodology has successfully revealed and corrected the data issue and supported the accuracy of the evaluation for multiple clients. Contact us for more information. We can ensure the accuracy of your A\u002FB testing too. \n",[12,962,963],{},[113,964,965],{},"Read more about our solutions:",[12,967,968],{},[37,969,971],{"href":529,"rel":970},[41],"Increase your TV Ad effectiveness",[12,973,974],{},[37,975,978],{"href":976,"rel":977},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fwhat-we-do\u002Fmeasurement-and-optimization\u002F",[41],"Digital measurement optimization",[12,980,981],{},[37,982,985],{"href":983,"rel":984},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fwhat-we-do\u002Fmarketing-performance-consultancy\u002F",[41],"Building and improving MAdTech Architecture",{"title":76,"searchDepth":77,"depth":77,"links":987},[988,989,990,991],{"id":721,"depth":77,"text":722},{"id":741,"depth":77,"text":742},{"id":780,"depth":77,"text":781},{"id":854,"depth":77,"text":855},"Guides","\u002Fupload\u002Fconversion-rate-article-cover.webp",{},"\u002Fen\u002Fblog\u002Fconversion-rate-explained","2020-06-25T12:00:00.000+00:00",6.83,[999,227,1000],"content\u002Fen\u002Fblog\u002Fstarting-with-waaila.md","content\u002Fen\u002Fblog\u002Fcan-tv-become-a-performance-channel.md",{"title":699,"description":704},"en\u002Fblog\u002Fconversion-rate-explained","We've all seen the articles with the headline “Top 10 Converting Websites” that made us ask ourselves, “What can I do to get my site to those stratospheric levels?”","2DjFrwqQlszU9Q5llpu91w1tIy0zCCSwfg2HmxEwmGM",{"id":1006,"title":1007,"author":7,"body":1008,"category":7,"description":1012,"extension":83,"image":1140,"isToc":85,"langAlt":7,"meta":1141,"metaDescription":7,"navigation":88,"path":1142,"published":88,"publishedAt":1143,"readingTimeMinutes":1144,"readingTimeText":1145,"relatedArticles":7,"seo":1146,"stem":1147,"teaser":1148,"updatedAtCustom":7,"__hash__":1149},"blog_en\u002Fen\u002Fblog\u002Fdata-democratization.md","Data Democratization in Data Lake",{"type":9,"value":1009,"toc":1131},[1010,1013,1016,1020,1023,1026,1029,1032,1035,1039,1042,1045,1048,1051,1055,1058,1061,1064,1067,1070,1073,1076,1079,1082,1086,1089,1092,1095,1098,1101,1105,1108,1111,1114,1118,1121,1124,1127],[12,1011,1012],{},"In today’s globalized world, data is one of the most important assets for companies, being vital for their decision making and success on the market. But despite its great value, data was traditionally  only accessible to a limited selection of people in specific departments, typically those where those working with the data would possess the skills and tools not just to extract it from sophisticated systems, but also interpret it.",[12,1014,1015],{},"With advances made in data analysis, this approach has become inefficient, and the trend has now moved towards making data available to a broader spectrum of employees in organizations, with the stated goal of supporting informed decision making. This process, known as data democratization, is quickly becoming a key factor in fostering growth in modern organizations.",[16,1017,1019],{"id":1018},"what-is-data-democratization","What is data democratization?",[12,1021,1022],{},"The objective of data democratization is to enable all employees of an organization to easily access data, regardless of their technical prowess, and use it for strategic decision making directly, without having to rely on data specialists’ insights. However, before data can be democratized, the way it is worked with needs to fundamentally change to ensure its availability in a simple and easily usable format, ensuring that end users can achieve maximum efficiency.",[12,1024,1025],{},"The Data Lake architecture is one of the key tools for efficient data management within an organization. It provides a centralized and unified platform for storing and processing data in one place. Not only does this approach simplify the process of managing data, it also facilitates easy access for users across the board.",[12,1027,1028],{},"Microsoft Azure offers several technologies which contribute to data democratization, such as Azure Data Lake Storage, Azure Synapse Analytics, or Azure Databricks, which combine scalability and flexibility to help manage and analyse data.",[278,1030],{"source":1031},"\u002Fupload\u002Fdl1.png",[12,1033,1034],{},"Azure Data Lake Storage allows the safe storage of large amounts of data in both structured and unstructured formats. Azure Synapse Analytics facilitates fast data processing, which allows users to quickly access the data when needed.",[16,1036,1038],{"id":1037},"key-aspects-of-democratization","Key aspects of democratization",[12,1040,1041],{},"Data democratization may seem simple at first glance, but the difficulty of implementing it may be considerable. One of the main obstacles is typically the isolated nature of data whose ownership is unclear. Additionally, insufficient data literacy within an organization can lead to an incorrect interpretation of data and, consequently, to misguided decisions. Thus, ensuring the quality, integrity, and security of the data in question is one of the most important tasks in the process of making data available.",[12,1043,1044],{},"However, there are other aspects beyond just ensuring access to the end repository where data is stored. Data democratization is, in fact, a much more complex approach comprised of a wide range of measures and strategies. These include the implementation of a new, security-driven data management strategy involving the implementation of advanced security measures and control mechanisms intended to prevent unauthorized access and data loss, as well as the creation of an efficient storage architecture capable both of facilitating easy access and storing data to ensure it will be readily available for a plethora of analyses. Furthermore, the simplification of often highly complex data processes (meaning how data is collected, processed, stored, and shared) is also required.",[12,1046,1047],{},"Let us take a closer look at the key aspects of data democratization:",[278,1049],{"source":1050},"\u002Fupload\u002Fdl2en.png",[244,1052,1054],{"id":1053},"data-catalogue","Data catalogue",[12,1056,1057],{},"One of the main challenges of data democratization is ensuring access to relevant data for a wide range of employees and teams in an organization. This requires a robust infrastructure capable of processing large amounts of data and providing easy access to authorized users.",[12,1059,1060],{},"In order to reach maximum efficiency, all data sources, schemas, metadata, and data quality indicators need to be carefully documented and catalogued to ensure that users have a clear overview of what data is available and how it is structured, which is helpful in ensuring data will be used correctly.",[12,1062,1063],{},"Microsoft Purview, a unified platform for data management, plays a pivotal role in this regard. Purview enables cataloguing and metadata management across an entire organization, helping users to easily search for and monitor data sources, which in turn makes it easy to access data according to users’ needs and abilities.",[12,1065,1066],{},"While working with Microsoft Purview, several practical features are readily available. One such is the automatic cataloguing of data sources, which allows for the effortless scanning of data sources such as Azure Data Lake or SQL databases, the results of which are then available in an easy-to-navigate catalogue.",[278,1068],{"source":1069},"\u002Fupload\u002Fdl3.png",[12,1071,1072],{},"Users can easily manage metadata by adding descriptions, tags, and glossary terms, which make navigating and organizing data significantly easier.",[278,1074],{"source":1075},"\u002Fupload\u002Fdl4.png",[12,1077,1078],{},"Using search and exploration tools, users can very quickly find specific data or data tables according to a given set of criteria. Azure Purview also enables the monitoring of data lineages, visualizing the flow of data across different systems. It can also be used to help ensure compliance with applicable legislation: Purview supports the identification of sensitive data and their classification as such, helping organizations to stay in line with security standards and data management rules.",[278,1080],{"source":1081},"\u002Fupload\u002Fdl5.png",[244,1083,1085],{"id":1084},"self-service-bi","Self-service BI",[12,1087,1088],{},"Another key aspect of data democratization is the implementation of self-service tools. These allow employees to access data directly on their own and make analyses without having to rely on a specialized data team.",[12,1090,1091],{},"It is important to allow users to perform different kinds of analyses, be it descriptive ones, focused on providing an overview of past events, predictive analyses, which allow for the forecasting of future trends, prescriptive analyses, which offer insights and recommendations for optimal decision making, or simply visualizations aimed at gaining a better understanding of the available data.",[12,1093,1094],{},"Aside from the purely technological aspects of this undertaking, fostering a data culture in the organization is also crucial. This includes supporting the growth of data literacy and cross-team co-operation, as well as supporting open access to data and its usage.",[12,1096,1097],{},"It is necessary to support the development of employees’ data literacy proactively through education and providing easily accessible technical support for working with BI tools. This includes educating employees on efficiently accessing data, interpreting it and using it in different contexts. It is imperative that employees be aware how and when to apply data to specific business problems and that they be sure the data they are working with is accurate and reliable. This process involves learning how to check data and how to utilize it in a secure manner.",[278,1099],{"source":1100},"\u002Fupload\u002Fdl6.png",[244,1102,1104],{"id":1103},"data-quality-and-maintenance","Data quality and maintenance",[12,1106,1107],{},"Data management tools allow organizations to oversee and protect their data sources from misuse. Additionally, data management contributes to data democratization by creating an infrastructure for the sharing of data securely and in a controlled manner. One example of such a tool is Google Cloud’s BigQuery, which offers a range of robust tools for managing and analysing large quantities of data and empowers organizations to quickly analyse their data in real time, in accordance with security standards and applicable regulation.",[12,1109,1110],{},"However, availability alone is not sufficient: users must be sure that the data they are working with is accurate and up to date. This requires implementing a robust system for checking both the data itself and its integration, and for data source maintenance. In this context, advanced tools for monitoring data quality can be useful. For example, the Waaila application allows users to set up automatic data quality testing, helping organizations identify and rectify inconsistencies before decision making is impacted.",[12,1112,1113],{},"Privacy concerns could be another challenge related to data democratization: as more people gain access to sensitive information, the risk of breaches increases. To counter this, organizations must set up protocols for handling sensitive information such as anonymization, encoding, and strict access control.",[16,1115,1117],{"id":1116},"the-future-of-data-democratization","The future of data democratization",[12,1119,1120],{},"In the future, the role of data in our lives will continue to become more and more pivotal. For organizations, this will require a commitment to a continuous development of their data infrastructure, efficient data management, and the integration of tools to facilitate handling data. As a central storage for raw data of various formats, Data Lake will play a central role in this transformation. Moreover, with the increasing importance of safeguarding personal data, ever more robust security measures and strategies will need to be applied to data management.",[12,1122,1123],{},"Last but not least, advanced analytical tools such as machine learning and AI will play a crucial role in this process in the future. These technologies will enable organizations not just to analyze data from the past, but also predict future trends and take proactive measures based on the gained insights.",[12,1125,1126],{},"The future of data democratization rests in a synthesis of new technologies, abilities, and a responsible approach to data. Organizations that accept this challenge will quickly gain a competitive advantage and, above all, will be well-equipped to handle the challenges of the dynamically evolving market.",[209,1128,1130],{"link":211,"button":1129},"Get in touch","\nExplore the benefits of data democratization and discover how modern tools such as Azure Data Lake Storage, Microsoft Purview, or Azure Synapse Analytics can transform data operations within your organization. Contact us for consulting, audits, or tailored solutions to help you maximize data efficiency and strengthen security as well as strategic decision-making.\n",{"title":76,"searchDepth":77,"depth":77,"links":1132},[1133,1134,1139],{"id":1018,"depth":77,"text":1019},{"id":1037,"depth":77,"text":1038,"children":1135},[1136,1137,1138],{"id":1053,"depth":389,"text":1054},{"id":1084,"depth":389,"text":1085},{"id":1103,"depth":389,"text":1104},{"id":1116,"depth":77,"text":1117},"\u002Fupload\u002Fdlen.png",{"language":87},"\u002Fen\u002Fblog\u002Fdata-democratization","2024-12-09T12:00:00.000+00:00",7.76,"8 min read",{"title":1007,"description":1012},"en\u002Fblog\u002Fdata-democratization","How does data democratization impact the current landscape of business intelligence?","qxmOyKmd-dxdlpzhYMY5PhTYElvEv2r6E89H1pWKDv4",{"id":1151,"title":1152,"author":7,"body":1153,"category":1334,"description":1157,"extension":83,"image":1335,"isToc":85,"langAlt":7,"meta":1336,"metaDescription":7,"navigation":88,"path":1337,"published":88,"publishedAt":1338,"readingTimeMinutes":1339,"readingTimeText":224,"relatedArticles":1340,"seo":1342,"stem":1343,"teaser":1344,"updatedAtCustom":7,"__hash__":1345},"blog_en\u002Fen\u002Fblog\u002Fdata-layer-validation-what-why-and-how.md","Data layer Validation – what, why, and how",{"type":9,"value":1154,"toc":1321},[1155,1158,1162,1169,1172,1181,1184,1187,1192,1196,1199,1202,1206,1209,1213,1216,1220,1223,1227,1230,1238,1242,1245,1249,1260,1264,1281,1284,1288,1297,1306,1313],[12,1156,1157],{},"In the world of information, relevant and accurate data make the difference, especially in saturated markets. Understanding your customers and delivering the best digital experience helps to build lasting relationships and increasing customer lifetime value (CLV). In order to extract the required information on the customers from the website\u002F e-shop, and build new strategies of more effective communication, web tracking is indispensable. To set up well-working web tracking, you need to implement a data layer.",[16,1159,1161],{"id":1160},"what-is-a-data-layer","What is a data layer?",[12,1163,1164,1165,1168],{},"In case the term ",[422,1166,1167],{},"data layer"," is new to you or just not too familiar, explaining it as a JavaScript Object will not tell you much. However, do not be discouraged. Yes, you do need to go an extra mile to implement it, and some coding is needed (you may team up with developers or hire an agency), the long-term benefits are worth it all.",[12,1170,1171],{},"Here is a simple data layer in a raw view",[1173,1174,1179],"pre",{"className":1175,"code":1177,"language":1178},[1176],"language-text","{\n    \"page\": {\n        \"type\": \"list\",\n        \"trail\": \"marketing\u002Farticles\",\n        \"list\": {\n            \"pageNumber\": 2,\n            \"filters\": {\n                \"years\": [\n                    \"2020\",\n                    \"2019\"\n                ],\n                \"keywords\": [\n                    \"affilates\",\n                    \"seo\"\n                ]\n            }\n        },\n        \"locale\": \"cs-CZ\",\n        \"currencyCode\": \"CZK\",\n        \"countryCode\": \"CZ\"\n    },\n    \"session\": {\n        \"machine\": \"external\",\n        \"deviceType\": \"mobile\",\n        \"env\": \"prod\"\n    },\n    \"user\": {\n        \"username\": \"tester123\",\n        \"id\": \"66oc39119520732e1s1f23ead6c57\",\n        \"segment\": \"customer.premium\",\n        \"transactionCount\": 2,\n        \"transactionValue\": 799.99\n    },\n    \"event\": \"page\"\n}\n","text",[588,1180,1177],{"__ignoreMap":76},[12,1182,1183],{},"Simply put, a data layer is a method of collecting and distributing data from your website. On the deeper and more technical level, a data layer is a complex structure behind the websites or mobile apps to extract timely and consistent visitor\u002Fuser information. It holds the data you need and sends it to other applications, preferably firstly to tag management system (TMS) and from there to other analytical and marketing platforms. This way, customer actions are translated into variables and dimensions. The type of data that is contained in the data layer depends on the business requirements, such as transaction, behavioral, demographic, device, and more. The more information and varieties you need, the more complex the data layer gets.",[12,1185,1186],{},"Dividing the process into layers:",[12,1188,1189],{},[148,1190],{"alt":76,"src":1191},"\u002Fupload\u002Fdatalayerillustration.webp",[16,1193,1195],{"id":1194},"why-is-a-data-layer-a-must","Why is a data layer a must?",[12,1197,1198],{},"To maximize the potential of your website, get to know your audience, and provide more personalized content, you need relevancy, consistency, and accuracy of your data in all platforms. Starting from your web via a data layer. The benefits go way beyond just knowing how much. The quality of the data is what counts.",[12,1200,1201],{},"From the perspective of practically on the background, a data layer standardizes data across technologies (analytical and marketing) and the collection maintains consistency despite changes on the web. You may know that changes on any website can drastically throw off your tracking, and if you ever experienced a measurement problem you know that the impact is even more disastrous. The data layer helps to reduce development time and the number of iterations between the development and marketers when implementing new technologies.",[244,1203,1205],{"id":1204},"sounds-great-but","Sounds great, but …",[12,1207,1208],{},"As previously said, the data layer reduces time. However, as the website is not a static but a very dynamic environment, and even a small change can cause many mistakes. To prevent mistakes, you need to check for mistakes, which can seem too complicated and time-consuming. Manual control is one way, yet not very effective.",[16,1210,1212],{"id":1211},"data-layer-validation","Data layer validation",[12,1214,1215],{},"Data layer validation should come in regularly to prevent errors and sustain web measurement the way you want it. But forget the traditional method. Some tools can help you validate easier, or at least look into your data layer, row by row.",[244,1217,1219],{"id":1218},"experience-comes-in","Experience comes in",[12,1221,1222],{},"Validating one data layer of a smaller website takes time but it is manageable. Imagine validating 10 or 100 very complex e-shops. Then you start thinking of a better solution. First, research of available tools comes in. After some time, you realize it got you nowhere, or the options are just not sufficient. We went through all the steps and more deeply to figure out how to tackle this case.",[16,1224,1226],{"id":1225},"meet-waaila-tracking-validator","Meet Waaila Tracking Validator",[12,1228,1229],{},"After trials and failures, we decided to develop our own tool for data layer validation. We put our experience with writing data layer specifications, our clients’ needs, and user experience, and released a Chrome extension that can inspect and validate your data layer through particular events and pages, just like a customer would progress on the website, which makes it easier to spot errors and, not less important, easier for the developers to understand the data layer as well.",[12,1231,1232,1237],{},[37,1233,1236],{"href":1234,"rel":1235},"https:\u002F\u002Fwaaila.com\u002Fen\u002Ftracking-validator",[41],"Waaila Tracking Validator"," extension is using JSON Schema standard, checks if your data layer on the website corresponds with the structure of the data layer defined in your custom JSON schema, and looks for inconsistencies.",[244,1239,1241],{"id":1240},"waaila-tracking-validator-in-action","Waaila Tracking Validator in action",[12,1243,1244],{},"The tool allows you to validate the data layer against custom JSON schema and it is pretty simple to use. You insert the JSON schema into the tool, confirm, and start validating.",[860,1246,1248],{"id":1247},"benefits","Benefits",[327,1250,1251,1254,1257],{},[255,1252,1253],{},"Developed for analysts who create data layer specifications",[255,1255,1256],{},"Benefits the developers who often get lost in the data layer",[255,1258,1259],{},"Lowers the number of iterations",[860,1261,1263],{"id":1262},"features","Features",[327,1265,1266,1269,1272,1275,1278],{},[255,1267,1268],{},"Automatically validate the syntax of your data layer to easily detect various typos, such as lower\u002Fupper key, spaces, etc. that are very easily overlooked.",[255,1270,1271],{},"Semi-automatic validation of semantic. You need to manually choose the context of the web page, however, the validator automatically checks the data layer against the schema.",[255,1273,1274],{},"The exact location of the error in the data layer. Being able to see where exactly the error occurs and what problems it causes helps to understand general issues of the data layer, when not implemented correctly, and speed the process of retrieval.",[255,1276,1277],{},"Error highlighting proved to be very effective in the process of implementing changes into the data layer, especially when the developers do not understand the requirements, consequently decreasing the number of discussions among teams.",[255,1279,1280],{},"The tool is quick and responsive, the validation takes only a few seconds compared to long manual crawling.",[209,1282,1283],{"link":211,"button":212},"\nWe can help you specify your data layer and implement digital measurement.\n",[244,1285,1287],{"id":1286},"got-you-hooked","Got you hooked?",[12,1289,1290,1291,1296],{},"Try the tool for free on ",[37,1292,1295],{"href":1293,"rel":1294},"https:\u002F\u002Fchrome.google.com\u002Fwebstore\u002Fdetail\u002Fwaaila-tracking-validator\u002Fjkmohgcefflkfjoemjnpigiokpjeohcl",[41],"Google Chrome store",".",[12,1298,1299,1300,1305],{},"Build your own ",[37,1301,1304],{"href":1302,"rel":1303},"https:\u002F\u002Fwaaila.com\u002Fen\u002Fdocs\u002Ftracking-validator\u002F",[41],"Validation schema",", and start validating the data layer instantly!",[12,1307,1308,1309,1296],{},"Find out more in-depth descriptions and the process in ",[37,1310,1312],{"href":1302,"rel":1311},[41],"the extensive documentation",[12,1314,1315,1320],{},[37,1316,1319],{"href":1317,"rel":1318},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fblog\u002Fzoom-in-on-measurement-hub\u002F",[41],"Read more"," about the data layer implementation.",{"title":76,"searchDepth":77,"depth":77,"links":1322},[1323,1324,1327,1330],{"id":1160,"depth":77,"text":1161},{"id":1194,"depth":77,"text":1195,"children":1325},[1326],{"id":1204,"depth":389,"text":1205},{"id":1211,"depth":77,"text":1212,"children":1328},[1329],{"id":1218,"depth":389,"text":1219},{"id":1225,"depth":77,"text":1226,"children":1331},[1332,1333],{"id":1240,"depth":389,"text":1241},{"id":1286,"depth":389,"text":1287},"Products","\u002Fupload\u002Fdata-strategy-article-cover.webp",{},"\u002Fen\u002Fblog\u002Fdata-layer-validation-what-why-and-how","2020-10-07T01:26:03.000+00:00",5.535,[1341,999],"content\u002Fen\u002Fblog\u002Fzoom-in-on-measurement-hub.md",{"title":1152,"description":1157},"en\u002Fblog\u002Fdata-layer-validation-what-why-and-how","Many websites, especially e-shops underestimate the power of well-implemented data layer. Here is why and how you should make sure it is done right.","7nW396Sw7ENACMxQjmoUxQrG9x3N1nAbt07oOefXhPM",{"id":1347,"title":1348,"author":7,"body":1349,"category":1334,"description":1666,"extension":83,"image":1667,"isToc":85,"langAlt":7,"meta":1668,"metaDescription":7,"navigation":88,"path":1669,"published":88,"publishedAt":1670,"readingTimeMinutes":1671,"readingTimeText":1672,"relatedArticles":1673,"seo":1675,"stem":1676,"teaser":1677,"updatedAtCustom":7,"__hash__":1678},"blog_en\u002Fen\u002Fblog\u002Fdocument-recognizer-to-modernize-information-processing.md","Document Recognizer to modernize information processing",{"type":9,"value":1350,"toc":1650},[1351,1361,1365,1369,1379,1383,1386,1389,1392,1406,1410,1413,1416,1420,1427,1430,1436,1440,1446,1453,1463,1466,1470,1477,1497,1500,1506,1509,1512,1519,1523,1526,1530,1540,1546,1550,1553,1568,1574,1577,1604,1607,1611,1614,1620,1629,1640,1644,1647],[12,1352,1353,1354,1357,1358],{},"Documents, such as invoices, personal ID cards, or other standardized forms, contain important information that is essential for the company’s smooth operation and growth. Therefore, fast extraction is very convenient and, in most cases, provides a serious competitive advantage. Yet, it has been a big challenge for years as the questions of accuracy, structure, and of the entire process infrastructure itself were not sufficiently answered. We have implemented an innovative solution using the ",[113,1355,1356],{},"Microsoft Azure Form Recognizer",", an automated machine learning solution for text recognition, and we want to share ",[113,1359,1360],{},"the exciting insights based on a proof-of-concept (POC) analysis.",[16,1362,1364],{"id":1363},"invoice-processing-case","Invoice processing case",[244,1366,1368],{"id":1367},"case-introduction","Case introduction",[12,1370,1371,1372,591,1375,1378],{},"An office equipment producer offers benefits to its clients based on the amount and types of products that they have purchased (office chairs and desks for example). The sales pipeline is indirect, the equipment is sold by various resellers, and the end clients must provide the invoices directly to the producer as proof of their purchases - in this case after the registration into the loyalty program. Thus, the producer receives hundreds of invoices that need to be processed to determine the benefits for each client. Processing all of the invoices manually is overwhelmingly ",[113,1373,1374],{},"time-consuming",[113,1376,1377],{},"prone to error."," The invoices often need to be checked more than once, thus further increasing the already high costs of labor. In this case, the benefit calculation is done twice a year, and the producer spends on average about 14 work-days just processing the invoices, and sometimes hiring extra help that is only for this purpose. To explain the process further, the invoices are sent in paper form via post, or are scanned and sent via email.",[244,1380,1382],{"id":1381},"standard-process","Standard process",[12,1384,1385],{},"Reforming established methods and habits is not easy, yet it can, in a way, revolutionize daily tasks that bring in positive outcomes and improve processes. In this case, handling the invoices for the benefits happened as follows:",[12,1387,1388],{},"Customers sent their invoices via email or mail to the producer before the set deadline.",[12,1390,1391],{},"Once the invoices were collected, an employee started processing them. Processing one invoice went as follow:",[252,1393,1394,1397,1400,1403],{},[255,1395,1396],{},"Open an invoice.",[255,1398,1399],{},"Copy or type the seller company name and ID, customer company name and ID, product names, quantity, and prices into an MS Excel file.",[255,1401,1402],{},"Check if all of the information is correct.",[255,1404,1405],{},"Mark the invoice as processed by saving it to the \"Done\" folder.",[244,1407,1409],{"id":1408},"obstacles","Obstacles",[12,1411,1412],{},"The process takes 4-7 minutes per invoice, depending on the number of products. During the process the employees make mistakes, which prolongs the entire process.",[12,1414,1415],{},"Invoices contain diverse information that needs to be extracted, mainly to assign the invoice to the correct client, extract information about the seller, and find all of the products that the company has produced (an illustrative invoice with labeled details is provided below). There can be a varying number of products; some invoices even include several page-long lists. Moreover, different sellers use various accounting systems to create the invoices, resulting in many differences between the invoice styles and the locations where a certain piece of information may be found. Therefore, this case required a more detailed analysis of the possible approaches.",[244,1417,1419],{"id":1418},"solution","Solution",[12,1421,1422,1423,1426],{},"We have created a custom solution for invoice processing that contains user and administration interfaces. The core of the solution is the ",[113,1424,1425],{},"Azure Form Recognizer."," The application selection process involved broad research and testing that led us to the optimal solution (read more about the technical part of the solution below).",[12,1428,1429],{},"In practice, the traditional technique was changed markedly for the people involved in the process. Now, the customers can register and upload the invoices via a user-friendly web application. The processors see all of the new invoices in the administration portal. When a new invoice is uploaded, the employee sees the tag \"New\" and is prompted to check it. However, now the role is different when the main task is to review and correct the information. Once they open the new invoice, they see the information automatically written in the necessary fields. Some fields may show a warning to double-check if the data was inserted correctly. It is easy to check as the original invoice is already uploaded and can be opened instantly.",[12,1431,1432],{},[148,1433],{"alt":1434,"src":1435,"title":1434},"Document recognizer administration interface","\u002Fupload\u002Fdocument-recognizer-interface.webp",[244,1437,1439],{"id":1438},"results","Results",[12,1441,1442,1443,1296],{},"With this approach we were not only able to ",[113,1444,1445],{},"speed up the processing, but also make it easy, simple and clear for both the administrators and the customers",[12,1447,1448,1449,1452],{},"The average invoice processing time was between 4-7 minutes, and with the document recognizer, we were able to decrease it by half, down to ",[113,1450,1451],{},"2 minutes or less",". Even when a human check is still needed, it can substantially reduce the amount of time and resources needed, decrease human errors, and standardize the process, all at the same time.",[12,1454,1455,1456,1459,1460,1296],{},"Another advantage is the change to ",[113,1457,1458],{},"continuous activity",". Shifting from processing a large volume of documents twice-a-year to quick and easy processing, provides an opportunity to process continually, for example once a week or month. Now the customers can ",[113,1461,1462],{},"receive benefits all year-long",[727,1464,1465],{},"\nWhen the number of such documents and forms is huge, investing into a custom solution that provides automated machine learning can cut the costs in half. The return on investment is usually around 1 or 2 years for hundreds of invoices processed yearly, while in the case of processing thousands of invoices, the investment returns within the first year. On top of that, it increases accuracy.\n",[16,1467,1469],{"id":1468},"form-recognizer-overview","Form Recognizer overview",[12,1471,1472,1473,1476],{},"After evaluating the available options, we selected the ",[113,1474,1475],{},"Azure Form Recognizer",", which is part of Azure Cognitive Services. It is a service for information extraction from scanned documents. As it is relatively new on the market, Microsoft provides upgrades for the product often, increasing precision and broadening its applicability by introducing new features and approaches.",[12,1478,1479,1480,1485,1486,1491,1492,1296],{},"The Azure Form Recognizer offers several options to extract values from a document, based on a highly trained AI solution. These can be divided into pre-trained models, key-value pairs extraction, and custom models. The ",[113,1481,1482],{},[422,1483,1484],{},"pre-trained models"," are highly effective, but only for the specific groups of documents they were trained on. While there is a prepared model for invoices, it is mostly trained on US data. Therefore, it is not applicable in our scenario due to significant differences in structure compared to the invoices from Central Europe. The ",[113,1487,1488],{},[422,1489,1490],{},"key-value extraction"," is best suited for extracting data from simple, well-structured office forms such as application forms. As such, we ended up with the choice that offered us the highest flexibility, the ",[113,1493,1494],{},[422,1495,1496],{},"custom models",[12,1498,1499],{},"Custom models allow us to train the AI solution based on existing invoices to form multiple models for different invoice issuers. They require a rich set of training data, detailed preparation, and thoroughness of marking the values needed on the training invoices. You can see the illustration of a labeled invoice in the Form Recognizer Labelling Tool (this tool needs to be used for the preparation of the training invoices and for marking the information that is required for extraction).",[12,1501,1502],{},[148,1503],{"alt":1504,"src":1505,"title":1504},"Invoice labeling in Form Recognizer","\u002Fupload\u002Fdocument-recognizer-invoice.webp",[12,1507,1508],{},"The outcome depends on the quality and variety of the included invoices for training the models and their labeling quality.",[12,1510,1511],{},"Extracted values from the Azure Form Recognizer may require further processing. For example, the quantities are partially extracted with the units (e.g., “2 pcs”, “1 set”), and these units need to be deleted to be able to use the quantity as a number. Further processing is mentioned in the precision evaluation analysis.",[415,1513,1514],{},[12,1515,1516],{},[422,1517,1518],{},"\"At Cross Masters, using cutting-edge AI technologies is not only a passion; it is an essential part of our work culture that requires continuous innovation. One of our latest success stories is the automation of the manual paperwork that is needed to process thousands of invoices. Thanks to Microsoft Form Recognizer’s AI engine, we were able to develop a unique customized solution for our client's invoice recognition tasks. What we find most convenient is the constant extraction quality improvement and the introduction of new features in the Form Recognizer - such as model composing or table labelling. This assures our clients competitive advantage in the market and helps elevate our product to the level of best-in-class solution.\" Jan Hornych, Head of Automation.",[16,1520,1522],{"id":1521},"precision-evaluation","Precision evaluation",[12,1524,1525],{},"We tested the extraction of the values by the Azure Form Recognizer, in combination with subsequent automatic processing of the values, and compared it to human extraction in a proof-of-concept analysis. We found two ways to optimize the results: 1) Do a comparison of extracted values to lists of values or value combinations (for example, the list of sellers’ names and corresponding IDs), and 2) Cross referencing of the total price against the sum of all of the product prices.",[244,1527,1529],{"id":1528},"_1-comparison-of-extracted-values-to-lists-of-values","1. Comparison of extracted values to lists of values",[12,1531,1532,1533,1536,1537,1296],{},"One of the critical pieces of information on the invoice is the identification of which client should receive the benefits based on a particular invoice. To maximize the precision of this identification, we extract more separate characteristics of the client; not only the name, but also the company registration ID for a legal entity, or personal ID for an individual client. We then match the extracted values with an existing client database, where the clients need to be registered to receive the benefits. If the extracted values are not matched to the same client, it shows a warning, and the invoice needs to be checked by a human. This ",[113,1534,1535],{},"automated process resulted in a higher precision"," for the client assignment than what was achieved by a human only, even though the human assignment process was checked afterward. In the graph below, you can see the comparison. Although both approaches have very high precision, the ",[113,1538,1539],{},"AI is more successful when combined with lists of value combinations",[12,1541,1542],{},[148,1543],{"alt":76,"src":1544,"title":1545},"\u002Fupload\u002Fdocument-recognizer-graph-1.webp","Difference between human and AI accuracy",[244,1547,1549],{"id":1548},"_2-check-of-total-price-against-the-sum-of-all-product-prices","2. Check of total price against the sum of all product prices",[12,1551,1552],{},"The extraction of the product information varies in precision. In general, the Azure Form Recognizer performs better on a shorter list of products with properly spaced text. The procedure can be again improved with the help of a list of possible product names. You can match the extracted products with their correct names and exclude any incorrectly extracted values.",[12,1554,1555,1556,1561,1562,1567],{},"To further verify that the products were extracted correctly, a check is introduced comparing the total price extracted from the invoice with the sum of the price and quantity multiplied for each product (hereafter CheckSum). The outcomes based on the POC are presented in the graph below. When the ",[113,1557,1558],{},[422,1559,1560],{},"CheckSum is satisfied"," (in 44.7 % of the cases), it is almost certain that the products were extracted correctly (with a 96% probability, which is higher than the average precision of human extraction). When the ",[113,1563,1564],{},[422,1565,1566],{},"CheckSum is not satisfied"," (in the remaining 55.3 % of the cases), the extracted products need to be checked by a human to verify if the products were extracted correctly.",[12,1569,1570],{},[148,1571],{"alt":1572,"src":1573,"title":1572},"Comparison of human and AI verification of CheckSum","\u002Fupload\u002Fdocument-recognizer-graph-2.webp",[12,1575,1576],{},"The CheckSum can be not satisfied despite products being correctly extracted because we only need the correct extraction of the product names and quantities, the prices are available from the database.",[12,1578,1579,1580,1585,1586,1591,1592,1597,1598,1603],{},"In more than a half of the cases that need to be checked by a human (precisely in 32.5% of all cases), the ",[113,1581,1582],{},[422,1583,1584],{},"products and"," their ",[113,1587,1588],{},[422,1589,1590],{},"quantities"," were indeed ",[113,1593,1594],{},[422,1595,1596],{},"extracted correctly",", and the check failed due to the wrong extraction of the total price, individual product prices, or their discounts. In the rest of the cases (22.8% of the cases) the extracted ",[113,1599,1600],{},[422,1601,1602],{},"product information is not completely correct"," (e.g., a product is missing or some quantity is incorrect), and the values need to be corrected or inserted by a human. Still, the people correcting the values do not need to re-type the whole invoice. They can have all the values pre-filled and just compare and correct what is necessary.",[12,1605,1606],{},"The precision of the extraction greatly depends on using a model trained on data from the same seller. While it may be impractical to provide a model for every seller, the best results can be achieved by training models for each of the largest sellers to cover the largest share of invoices with minimal cost. In the POC, 89% of the invoices were issued by a seller for whom there is a specifically trained model.",[16,1608,1610],{"id":1609},"estimation-of-time-saving-using-ai","Estimation of time saving using AI",[12,1612,1613],{},"As mentioned in the precision evaluation, the values extracted from the Azure Form Recognizer need to be partially verified. As described above, we implemented the AI document processing solution in combination with a user-friendly application that is tailored for the purpose of verifying and correcting the extracted values when necessary. Here, we demonstrate an estimation for time saving for the combination of Azure Form Recognizer and our application.",[12,1615,1616,1617,1296],{},"There are different checks that can be introduced for most of the fields. The person checking the invoices then does not need to spend time on checking all of the values and can focus only on the fields with no extracted information or checks that are not satisfied, leading to time saved on processing the documents. For example, for checking the list of products and their quantities there is no further human interaction that is necessary for invoices with product extraction verified by the CheckSum (44.7%). More than half of the remaining invoices (32.5% of all cases) only require a check of the values with no further correction, which can take up to 20 seconds on average. The last part of invoices (22.8%) requires checking and correcting at least some of the product names or quantities which can take around 1.5 minutes. Without the Document Recognizer, it can take around 4-7 minutes to set up an invoice in the database and fill in all of the necessary values. The Document Recognizer prepares the invoice, pre-fills all of the known information and marks values that require verification or correction. Using the distribution of missing values and non-satisfied checks for all of the fields from our POC, the integration of the Document Recognizer can ",[113,1618,1619],{},"save half of time spent per invoice",[12,1621,1622,1623,1628],{},"There are variable costs connected to using the Azure Form Recognizer service and fixed costs for the application interface (for the human check of the extracted values) and time spent for the training of models. The ",[37,1624,1627],{"href":1625,"rel":1626},"https:\u002F\u002Fazure.microsoft.com\u002Fen-us\u002Fpricing\u002Fdetails\u002Fcognitive-services\u002Fform-recognizer\u002F",[41],"pricing of the Azure Form Recognizer"," depends on the selected approach and the number of invoices. The entire process of training the models can take up to 4 hours (0.5 work-days) per model, as it requires selecting representative invoices for training, labeling them using Microsoft Labelling Tool, running the training, and checking the extracted results for an invoice example to verify the results. The training takes longer for invoices with poorly spaced text or varying product information (e.g., partial inclusion of discount information) because it requires more training invoices and repeated checking of the results.",[12,1630,1631,1632,1635,1636,1639],{},"The operation of the ",[113,1633,1634],{},"whole solution is cheap"," and if we only calculate the operating costs, it will pay off even for an amount in the low hundreds of invoices per year. The biggest investment is in the initial integration and training of the models, and it depends on the complexity of a particular case. While it is too costly for a very small number of different documents, it can be a dramatic difference for a larger bulk of documents. Nevertheless, in our experience, ",[113,1637,1638],{},"the solution pays off from 2,000 invoices a year",". In that case, the return on investment is 100% within two years.",[16,1641,1643],{"id":1642},"summary","Summary",[12,1645,1646],{},"To summarize, the Azure Form Recognizer is a valuable innovative tool that allows companies to automatically extract information from scanned or electronic documents. Its precision can be higher than human extraction when accompanied by additional verifications and lists of values. To maximize the amount of time saved by the AI implementation, the solution needs to be accompanied by additional automatic processing of the values and an application tailored for checking and correcting the extracted values in the case of unsatisfied checks.",[209,1648,1649],{"link":211,"button":212},"\nAre you interested in learning more about the Form Recognizer and how to solve your case? We can speed up your process of extracting information. Building and implementing custom solutions, including your own application interface, is one of our main areas of expertise. Contact us so we can discuss what is the best solution for your business. \n",{"title":76,"searchDepth":77,"depth":77,"links":1651},[1652,1659,1660,1664,1665],{"id":1363,"depth":77,"text":1364,"children":1653},[1654,1655,1656,1657,1658],{"id":1367,"depth":389,"text":1368},{"id":1381,"depth":389,"text":1382},{"id":1408,"depth":389,"text":1409},{"id":1418,"depth":389,"text":1419},{"id":1438,"depth":389,"text":1439},{"id":1468,"depth":77,"text":1469},{"id":1521,"depth":77,"text":1522,"children":1661},[1662,1663],{"id":1528,"depth":389,"text":1529},{"id":1548,"depth":389,"text":1549},{"id":1609,"depth":77,"text":1610},{"id":1642,"depth":77,"text":1643},"Documents, such as invoices, personal ID cards, or other standardized forms, contain important information that is essential for the company’s smooth operation and growth. Therefore, fast extraction is very convenient and, in most cases, provides a serious competitive advantage. Yet, it has been a big challenge for years as the questions of accuracy, structure, and of the entire process infrastructure itself were not sufficiently answered. We have implemented an innovative solution using the Microsoft Azure Form Recognizer, an automated machine learning solution for text recognition, and we want to share the exciting insights based on a proof-of-concept (POC) analysis.","\u002Fupload\u002Fform-recognizer-article-top.webp",{},"\u002Fen\u002Fblog\u002Fdocument-recognizer-to-modernize-information-processing","2021-03-05T11:32:46+00:00",14.035,"15 min read",[1674],"content\u002Fen\u002Fblog\u002Fpractical-use-of-cognitive-computing.md",{"title":1348,"description":1666},"en\u002Fblog\u002Fdocument-recognizer-to-modernize-information-processing","How many hours or days in a year do you spend on manual data extraction from documents, in paper form, or scans? How many people on your team have to tackle the same task? It is time to change the old standards!","FupC6Ns8wfWwZN7MwSQBm6WNeGVOwL_eA8HVWuMiapI",{"id":1680,"title":1681,"author":7,"body":1682,"category":7,"description":1686,"extension":83,"image":1335,"isToc":85,"langAlt":7,"meta":1826,"metaDescription":7,"navigation":88,"path":1827,"published":88,"publishedAt":996,"readingTimeMinutes":1828,"readingTimeText":398,"relatedArticles":1829,"seo":1831,"stem":1832,"teaser":1833,"updatedAtCustom":7,"__hash__":1834},"blog_en\u002Fen\u002Fblog\u002Fdon-t-let-your-data-strategy-slow-your-business-down.md","Don’t let your data strategy slow your business down",{"type":9,"value":1683,"toc":1816},[1684,1687,1694,1698,1701,1708,1711,1715,1718,1721,1724,1730,1736,1743,1747,1750,1754,1757,1761,1764,1768,1775,1779,1784,1790,1792,1795,1799,1802,1809],[12,1685,1686],{},"Incorrect decisions can have a damaging impact. Companies gather their resources to combine different data sources, new data streams with existing data, and apply analytics to find connections for better and quicker decisions.",[12,1688,1689,1690,1693],{},"Surveys conducted on the advancement of data maturity show that ",[113,1691,1692],{},"majority of companies haven’t reached their wished goals"," despite the excessive investments and numerous attempts. What most companies don’t accept is the amount of effort required to become data-driven and the time progress as well.",[16,1695,1697],{"id":1696},"common-problems","Common problems",[12,1699,1700],{},"The most frequent problems businesses face are process efficiency and insufficient improvement of customers’ experience. What can be seen as a first and fastest action to skip the process and suddenly become a data transformation is acquiring the newest and the most expensive technology, without understanding its real purpose, internal process coordination, and company culture. Employees across departments commonly struggle to gain practical insights from available information that are accurate and in time and be able to base their decision on facts, not just estimations.",[12,1702,1703,1704,1707],{},"To be able to extract valuable insights from data, ",[113,1705,1706],{},"smart investment"," in the right technology is essential while keeping in mind the data lifecycle. Moving forward, or upward requires the knowledge of the current situation.",[12,1709,1710],{},"Many companies wonder, how to up their game and grow with data. There are various options on how to ensure faster business growth via the right and individually adjusted data strategy. However, the higher and more advanced data strategy, or better known as Data Maturity, needs to be aligned with the business maturity.",[16,1712,1714],{"id":1713},"data-maturity","Data Maturity",[12,1716,1717],{},"Data Maturity measures how advance is the data analysis and data utilization of the organization. As the companies increase the use of their data, they develop more complex data analytics and processing, the higher stage they achieve.",[12,1719,1720],{},"Maturity should be seen as a long-term goal and is achieved continually, involving many actions. It is iterative and progressive; therefore, companies evolve in smaller projects, which can be broken down into smaller steps, making the progress comprehensible.",[12,1722,1723],{},"Over the years we have cooperated with companies from different stages of the Data Maturity Model, small companies that are starting to combine their data into one stream, while others have integrated advanced machine learning. From the projects we helped to grow, we have acknowledged four stages of data maturity.",[12,1725,1726,1727],{},"Companies that achieved the top level, leverage their increased agility, better partner and supplier cooperations via integration, utilizing data, and predictive analytics. They ",[113,1728,1729],{},"monetize the data and benefit from significant competitive advantage.",[12,1731,1732,1733],{},"Just naming or defining the phases may not illustrate the true height of the steps, companies have to climb to score the next stage. ",[113,1734,1735],{},"The gap is bigger than it seems.",[12,1737,1738],{},[113,1739,1740],{},[148,1741],{"alt":76,"src":1742},"\u002Fupload\u002Fdata-maturity-model.webp",[244,1744,1746],{"id":1745},"_1-data-novice","1. Data Novice",[12,1748,1749],{},"In the first stage, the company initializes the data journey with manual non-standardized reporting in different systems, different data sources. The firm recognizes the need for collecting data without building a data structure or systematic analysis. The reports are often irregular, and the business does not rely on its data. Usually, SME and startups are in this phase.",[244,1751,1753],{"id":1752},"_2-data-standardized","2. Data Standardized",[12,1755,1756],{},"Data storage is incomplete, and the company uses multiple databases, and the biggest question is data quality. The company is ready to start data initiative and is looking for know-how on how to manipulate or use the data. What can be seen here is that IT hits a wall of capacity and capability to advance the data strategy.",[244,1758,1760],{"id":1759},"_3-data-advanced","3. Data Advanced",[12,1762,1763],{},"Critical decisions are based on data. Data is being broken down throughout the entire organization and it is used as a competitive differentiator. Executive engagement is needed for reaching a higher level. Optimization of data storage and platforms is required to keep up with the demand.",[244,1765,1767],{"id":1766},"_4-data-driven","4. Data-Driven",[12,1769,1770,1771,1774],{},"A phase characterized as ",[422,1772,1773],{},"no data - no decision",". Technologies and business reached tight cooperation and are fully integrated. The company has been able to identify the processes for data analytics implementation and it became part of every company process, reaching prescriptive analytics. The speed of interactions in development increases. The data infrastructure is secure, yet it needs to be able to recognize the attacks and reacts to all the changes in real-time.",[860,1776,1778],{"id":1777},"comparison-of-each-stage-by-characteristics-and-focus","Comparison of each stage by characteristics and focus",[12,1780,1781],{},[148,1782],{"alt":76,"src":1783},"\u002Fupload\u002Fmaturiy-compared.webp",[12,1785,1786,1787],{},"For a transformation to becoming a data-driven organization, true differentiation lays in a strategic decision of leadership and treating the company’s data as a strategic asset. From the data collection throughout the whole data flow and architecture, up to its visualization, ",[113,1788,1789],{},"exploring new opportunities of modern and adequate technology separates the market leaders from the followers.",[16,1791,60],{"id":59},[12,1793,1794],{},"Rising to a higher stage of data maturity takes a greater amount of resources, especially time and investment in technology and talents. With the growing amount of data produced each day, the returns of the investment come sooner in the form of more loyal customers, higher conversions, cost reduction, and much more.",[209,1796,1798],{"link":211,"button":1797},"Just ask us!","\nDo you want to know, how far have you already come and how to move up? We can help you move up the ladder and improve your data strategy.\n",[12,1800,1801],{},"Get to know our solutions:",[12,1803,1804],{},[37,1805,1808],{"href":1806,"rel":1807},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fproducts\u002Fmeasurement-hub\u002F",[41],"Measurement Hub",[12,1810,1811],{},[37,1812,1815],{"href":1813,"rel":1814},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fwhat-we-do\u002Fmadtech\u002F",[41],"MAdTech architecture audit",{"title":76,"searchDepth":77,"depth":77,"links":1817},[1818,1819,1825],{"id":1696,"depth":77,"text":1697},{"id":1713,"depth":77,"text":1714,"children":1820},[1821,1822,1823,1824],{"id":1745,"depth":389,"text":1746},{"id":1752,"depth":389,"text":1753},{"id":1759,"depth":389,"text":1760},{"id":1766,"depth":389,"text":1767},{"id":59,"depth":77,"text":60},{},"\u002Fen\u002Fblog\u002Fdon-t-let-your-data-strategy-slow-your-business-down",4.555,[226,1674,1830],"content\u002Fen\u002Fblog\u002Fquick-trip-beyond-data-quality.md",{"title":1681,"description":1686},"en\u002Fblog\u002Fdon-t-let-your-data-strategy-slow-your-business-down","Data can answer not only business questions and delivers value. Dependable alignment between technology and business accelerates the path from data to decision. ","P1RPwQLJY0uFHr3e_e9MRYd9p-I0y_2uJMOFWtaPKcI",{"id":1836,"title":1837,"author":1838,"body":1839,"category":7,"description":1843,"extension":83,"image":3478,"isToc":85,"langAlt":3479,"meta":3480,"metaDescription":7,"navigation":88,"path":3481,"published":88,"publishedAt":3482,"readingTimeMinutes":3483,"readingTimeText":1145,"relatedArticles":7,"seo":3484,"stem":3485,"teaser":3486,"updatedAtCustom":7,"__hash__":3487},"blog_en\u002Fen\u002Fblog\u002Fga-cookies-explained.md","GA4 cookies explained","Daniil Podtesov",{"type":9,"value":1840,"toc":3467},[1841,1844,1848,1851,1866,1869,1873,1876,1879,1900,1908,1921,1924,1938,1942,1945,1948,1963,1966,1973,1976,1979,1982,1985,1988,1998,2004,2029,2032,2035,2038,2041,2048,2051,2054,2134,2137,2140,2143,2146,2149,2152,2155,2158,2161,2164,2167,2170,2172,2183,2187,2190,3448,3451,3454,3457,3460,3463],[12,1842,1843],{},"Have you ever wondered how Google distinguishes between sessions and users? How does it determine which session is engaged and which isn't? We have, and to answer these questions, we explored the purpose of the GA4 cookies stored a browser after consenting to analytical storage.",[244,1845,1847],{"id":1846},"what-are-google-cookies-and-why-is-it-important-to-understand-what-they-mean","What are Google cookies and why is it important to understand what they mean?",[12,1849,1850],{},"Google tools use different cookies for analytics and advertising purposes. In this article, we will explain Google Analytics cookies, which help collect data that allows services to understand how users interact with a particular service. Specifically, we will explore two gtag.js analytics cookies:",[252,1852,1853,1860],{},[255,1854,1855,1856,1859],{},"_",[422,1857,1858],{},"ga"," (one per device)",[255,1861,1862,1865],{},[422,1863,1864],{},"*ga","*\u003Cmeasurement_id>  (one per GA4 property)",[12,1867,1868],{},"These cookies are used to distinguish unique users and their sessions. By understanding their components, we can gain a deeper insight into how GA4 tracks user behavior. Let’s explore how each component of these cookies works.",[244,1870,1872],{"id":1871},"how-to-find-stored-cookies","How to find stored cookies?",[12,1874,1875],{},"To find cookies in your browser, go to Dev Tools (the F12 button) → Application → Cookies.",[278,1877],{"source":1878},"\u002Fupload\u002Fga-cookie1.png",[12,1880,1881,1882,1884,1887,1888,1893,1894,1896,1899],{},"As we can see in the picture, there’s more than one ",[422,1883,1864],{},[422,1885,1886],{},"\u003Cmeasurement_id> cookie but only one _","ga cookie*. Why is that? The reason is that the website ",[37,1889,1892],{"href":1890,"rel":1891},"http:\u002F\u002Fcrossmasters.com",[41],"crossmasters.com"," is being measured to more than one GA4 property and ",[422,1895,1864],{},[422,1897,1898],{},"\u003Cmeasurement_id> cookie is used by Google Analytics to identify and track each individual session of your device, whereas _","ga* is used by Google Analytics to distinguish users. Let’s explain what each cookie means.",[16,1901,1903],{"id":1902},"_ga-cookie",[113,1904,1855,1905,1907],{},[422,1906,1858],{}," cookie",[12,1909,1910,1911,1914,1915,1917,1918,1920],{},"As mentioned previously, _",[422,1912,1913],{},"ga is"," the device cookie used by Google Analytics. It enables Google Analytics to distinguish one visitor from another and lasts for 400 days. Any site that implements Google Analytics, including Google services, uses the _",[422,1916,1858],{}," cookie and each _",[422,1919,1858],{}," cookie is unique to the specific device. It’s important to mention that this cookie is stored only in cases when a user has consented to analytics storage.",[12,1922,1923],{},"This cookie’s value is composed of several components:",[252,1925,1926,1929,1932,1935],{},[255,1927,1928],{},"Google Analytics 4 version",[255,1930,1931],{},"Domain level",[255,1933,1934],{},"Random number",[255,1936,1937],{},"Cookie created timestamp",[278,1939],{"source":1940,"style":1941},"\u002Fupload\u002Fga-cookie2.png","width:500px",[12,1943,1944],{},"The first digit is fairly easy to understand: it reflects the GA4 version used in tracking.",[278,1946],{"source":1947,"style":1941},"\u002Fupload\u002Fga-cookie3.png",[12,1949,1950,1951,1956,1957,1962],{},"Domain Level is a number that indicates the level of the domain. For example, \"",[37,1952,1955],{"href":1953,"rel":1954},"http:\u002F\u002Fexample.com\u002F",[41],"example.com","\" has a level of 1, while \"",[37,1958,1961],{"href":1959,"rel":1960},"http:\u002F\u002Fsub.example.com\u002F",[41],"sub.example.com","\" has a level of 2. This information helps us understand the structure of a website and its subdomains.",[278,1964],{"source":1965,"style":1941},"\u002Fupload\u002Fga-cookie4.png",[12,1967,1968,1969,1972],{},"The next parameter doesn’t really have any particular informational value ",[422,1970,1971],{},"per se"," but it plays a very important part in the cookie by ensuring the user can be uniquely identified. The Random number generated by GA4 identifies and distinguishes the given visitor on a website.",[278,1974],{"source":1975,"style":1941},"\u002Fupload\u002Fga-cookie5.png",[12,1977,1978],{},"The last parameter of the _ga cookie is the Cookie Creation Timestamp, a timestamp of the moment the cookie was created. In simpler terms, it is the moment when a visitor created the cookie by visiting a website for the first time in 2 years, or after clearing the cookies in their browser.",[278,1980],{"source":1981,"style":1941},"\u002Fupload\u002Fga-cookie6.png",[12,1983,1984],{},"As previously mentioned, GA4 uses a cookie as an identifier for a specific device. When the random number and timestamp (the third and fourth components) are extracted from the cookie, this is referred to as the “Effective User ID.” Why is this important? Because if you’ve ever examined the “user_pseudo_id” parameter in BigQuery, you'll notice it has the same structure. Therefore, if you’ve ever wanted to compare GA4 data with BigQuery for the same user or analyze web behavior in BigQuery, you now know which cookie to reference.",[278,1986],{"source":1987,"style":1941},"\u002Fupload\u002Fga-cookie7.png",[16,1989,1991],{"id":1990},"gameasurement_id-cookie",[113,1992,1993,1997],{},[422,1994,1995],{},[422,1996,1858],{},"\u003Cmeasurement_id> cookie",[12,1999,2000,2001,2003],{},"The second cookie we will be looking at is ",[422,2002,1864],{},"*\u003Cmeasurement_id> (one per GA4 property). This cookie value is composed of several components:",[252,2005,2006,2009,2011,2014,2017,2020,2023,2026],{},[255,2007,2008],{},"GA4 version",[255,2010,1931],{},[255,2012,2013],{},"Session start timestamp",[255,2015,2016],{},"Session count",[255,2018,2019],{},"Engaged session",[255,2021,2022],{},"Last event timestamp",[255,2024,2025],{},"60-sec countdown",[255,2027,2028],{},"Two unidentified parameters",[278,2030],{"source":2031,"style":1941},"\u002Fupload\u002Fga-cookie8.png",[12,2033,2034],{},"This cookie’s value thus contains 8 distinct parts, each representing a specific piece of information about the user interaction. The first two numbers (GA4 version and Domain level) are already explained in the previous cookie description, so let’s skip them.",[278,2036],{"source":2037,"style":1941},"\u002Fupload\u002Fga-cookie9.png",[278,2039],{"source":2040,"style":1941},"\u002Fupload\u002Fga-cookie10.png",[12,2042,2043,2044,2047],{},"Sessions are the core of web analytics. In GA4 Session ID is a Session Start Timestamp which is the number of seconds elapsed from the 1st of January 1970. It’s also worth mentioning that because, theoretically, multiple sessions can have the same Session Start Timestamp, so to uniquely identify a session Google merges device ID (concatenation of Random number and Cookie Creation Timestamp of the ",[422,2045,2046],{},"_ga"," cookie) and Session Start Timestamp value.",[278,2049],{"source":2050,"style":1941},"\u002Fupload\u002Fga-cookie11.png",[12,2052,2053],{},"Let’s look on our the example and confirm that it is indeed timestamp of the session.",[1173,2055,2059],{"className":2056,"code":2057,"language":2058,"meta":76,"style":76},"language-jsx shiki shiki-themes material-theme-ocean","v = new Date(1690013078*1000)\nSat Jul 22 2023 10:04:38 GMT+0200 (Central European Summer Time)\n","jsx",[588,2060,2061,2097],{"__ignoreMap":76},[2062,2063,2066,2070,2074,2077,2081,2084,2088,2091,2094],"span",{"class":2064,"line":2065},"line",1,[2062,2067,2069],{"class":2068},"s0W1g","v ",[2062,2071,2073],{"class":2072},"sAklC","=",[2062,2075,2076],{"class":2072}," new",[2062,2078,2080],{"class":2079},"sdLwU"," Date",[2062,2082,2083],{"class":2068},"(",[2062,2085,2087],{"class":2086},"sx098","1690013078",[2062,2089,2090],{"class":2072},"*",[2062,2092,2093],{"class":2086},"1000",[2062,2095,2096],{"class":2068},")\n",[2062,2098,2099,2102,2105,2108,2111,2114,2117,2119,2122,2125,2128,2131],{"class":2064,"line":77},[2062,2100,2101],{"class":2068},"Sat Jul ",[2062,2103,2104],{"class":2086},"22",[2062,2106,2107],{"class":2086}," 2023",[2062,2109,2110],{"class":2086}," 10",[2062,2112,2113],{"class":2068},":",[2062,2115,2116],{"class":2086},"04",[2062,2118,2113],{"class":2068},[2062,2120,2121],{"class":2086},"38",[2062,2123,2124],{"class":2068}," GMT",[2062,2126,2127],{"class":2072},"+",[2062,2129,2130],{"class":2086},"0200",[2062,2132,2133],{"class":2068}," (Central European Summer Time)\n",[12,2135,2136],{},"The 2-digit Sessions Count shows how many sessions a user has engaged in. Each session represents a unique period of user activity on the website which can be set up in your GA4 admin settings to fit your purposes.",[278,2138],{"source":2139,"style":1941},"\u002Fupload\u002Fga-cookie12.png",[12,2141,2142],{},"For example, in our case session expires when a user is inactive for 30 minutes straight.",[278,2144],{"source":2145},"\u002Fupload\u002Fga-cookie13.png",[12,2147,2148],{},"The Engaged Session metric is a critical tool used to measure whether website users are actively engaged (1) or not (0). Essentially, it functions as a test to gauge the level of interest in your content. By tracking this metric, you can determine the extent to which your website visitors are engaging with your content. If they are sticking around and viewing the various pages on your site, it's a good indication that your content is engaging and relevant to their interests.",[278,2150],{"source":2151,"style":1941},"\u002Fupload\u002Fga-cookie14.png",[12,2153,2154],{},"One of the key components of the cookie is the Last Event Timestamp. This information reveals when the most recent event took place during the session, providing a snapshot of user activity over time.",[278,2156],{"source":2157,"style":1941},"\u002Fupload\u002Fga-cookie15.png",[12,2159,2160],{},"Another important component of the cookie is the 60-second Countdown. This feature assists in measuring the length of time users spend on a page, providing valuable insights into user engagement. Please keep in mind, that the meaning behind this parameter was only tested experimentally and wasn’t confirmed by the official GA4 documentation.",[278,2162],{"source":2163,"style":1941},"\u002Fupload\u002Fga-cookie16.png",[12,2165,2166],{},"Unfortunately it was the last parameter for us that we were able to decipher. The last two parts of the cookie remain unknown.",[278,2168],{"source":2169,"style":1941},"\u002Fupload\u002Fga-cookie17.png",[244,2171,60],{"id":59},[12,2173,2174,2175,591,2177,2179,2180,2182],{},"Understanding the ",[422,2176,1858],{},[422,2178,1858],{},"\u003Cmeasurement_id> cookies in GA4 is crucial for optimizing website performance and user experience. By analyzing its components, we can gain valuable insights into user behavior and engagement. This information can help businesses and content creators make data-driven decisions that improve their digital presence. We hope this article has provided you with a clear understanding of each component of the ",[422,2181,1858],{},"\u003Cmeasurement_id> cookie and its significance in modern web analytics.",[16,2184,2186],{"id":2185},"bonus","Bonus",[12,2188,2189],{},"So, for those of you who kept reading until the end and who have a feeling that these cookies can help you with a problem you’re facing right now, we prepared a solution that allows you to explore your cookies by yourself in a much simpler form. Below is a script that will do the job for you:",[1173,2191,2193],{"className":2056,"code":2192,"language":2058,"meta":76,"style":76},"function parseGaCookies() {\n    const getCookie = (name) => {\n        const value = \"; \" + document.cookie;\n        const parts = value.split(\"; \" + name + \"=\");\n        if (parts.length == 2) return parts.pop().split(\";\").shift();\n    }\n\n    const gaCookies = document.cookie.split('; ').filter(cookie => cookie.startsWith('_ga_'));\n    const parsedCookies = [];\n\n    gaCookies.forEach(cookie => {\n        const cookieParts = cookie.split('=');\n        const cookieNameParts = cookieParts[0].split('_');\n        const rawStreamIds = cookieNameParts[2];\n        const streamIds = rawStreamIds.split(',').map(id => id.startsWith('G-') ? id : 'G-' + id);\n        const duplicateStream = streamIds.length > 1;\n        const cookieValue = getCookie('_ga_' + rawStreamIds);\n\n        if(cookieValue.startsWith('GS1')) {\n            const components = cookieValue.split('.');\n\n            if (components.length !== 9) {\n                console.log(\"Invalid cookie format. Please make sure to provide a valid GA4 cookie.\");\n                return;\n            }\n\n            const version = components[0].replace('GS', '');\n            const domainLevel = components[1];\n            const sessionStartAt = new Date(components[2] * 1000);\n            const sessionsCount = components[3];\n            const engagedSession = components[4];\n            const lastEventAt = new Date(components[5] * 1000);\n            const countdown = components[6];\n            const mysteryZero1 = components[7];\n            const mysteryZero2 = components[8];\n            const engagedTime = Math.round((lastEventAt - sessionStartAt) \u002F 1000);\n\n            parsedCookies.push({\n                \"Measurement IDs\": streamIds,\n                \"Version\": version,\n                \"Domain Level\": domainLevel,\n                \"Session Start At\": sessionStartAt.toISOString(),\n                \"Sessions Count\": sessionsCount,\n                \"Engaged Session\": engagedSession,\n                \"Last Event At\": lastEventAt.toISOString(),\n                \"Engaged Time\": engagedTime,\n                \"Countdown\": countdown,\n                \"Mystery Zero 1\": mysteryZero1,\n                \"Mystery Zero 2\": mysteryZero2,\n                \"Duplicate Stream\": duplicateStream\n            });\n        }\n    });\n\n    console.log(JSON.stringify(parsedCookies, null, 2));\n    return parsedCookies;\n}\n\n\u002F\u002F Example usage:\nparseGaCookies();\n",[588,2194,2195,2210,2236,2270,2313,2375,2381,2387,2450,2465,2470,2489,2517,2554,2575,2655,2679,2707,2712,2741,2770,2775,2800,2824,2832,2838,2843,2884,2905,2939,2960,2981,3014,3035,3056,3077,3117,3122,3137,3155,3171,3187,3210,3226,3242,3264,3280,3296,3312,3328,3343,3353,3359,3369,3374,3410,3420,3426,3431,3438],{"__ignoreMap":76},[2062,2196,2197,2201,2204,2207],{"class":2064,"line":2065},[2062,2198,2200],{"class":2199},"sJ14y","function",[2062,2202,2203],{"class":2079}," parseGaCookies",[2062,2205,2206],{"class":2072},"()",[2062,2208,2209],{"class":2072}," {\n",[2062,2211,2212,2215,2218,2221,2224,2228,2231,2234],{"class":2064,"line":77},[2062,2213,2214],{"class":2199},"    const",[2062,2216,2217],{"class":2068}," getCookie",[2062,2219,2220],{"class":2072}," =",[2062,2222,2223],{"class":2072}," (",[2062,2225,2227],{"class":2226},"s7ZW3","name",[2062,2229,2230],{"class":2072},")",[2062,2232,2233],{"class":2199}," =>",[2062,2235,2209],{"class":2072},[2062,2237,2238,2241,2244,2246,2249,2253,2256,2259,2262,2264,2267],{"class":2064,"line":389},[2062,2239,2240],{"class":2199},"        const",[2062,2242,2243],{"class":2068}," value",[2062,2245,2220],{"class":2072},[2062,2247,2248],{"class":2072}," \"",[2062,2250,2252],{"class":2251},"sfyAc","; ",[2062,2254,2255],{"class":2072},"\"",[2062,2257,2258],{"class":2072}," +",[2062,2260,2261],{"class":2068}," document",[2062,2263,1296],{"class":2072},[2062,2265,2266],{"class":2068},"cookie",[2062,2268,2269],{"class":2072},";\n",[2062,2271,2273,2275,2278,2280,2282,2284,2287,2290,2292,2294,2296,2298,2301,2303,2305,2307,2309,2311],{"class":2064,"line":2272},4,[2062,2274,2240],{"class":2199},[2062,2276,2277],{"class":2068}," parts",[2062,2279,2220],{"class":2072},[2062,2281,2243],{"class":2068},[2062,2283,1296],{"class":2072},[2062,2285,2286],{"class":2079},"split",[2062,2288,2083],{"class":2289},"s-wAU",[2062,2291,2255],{"class":2072},[2062,2293,2252],{"class":2251},[2062,2295,2255],{"class":2072},[2062,2297,2258],{"class":2072},[2062,2299,2300],{"class":2068}," name",[2062,2302,2258],{"class":2072},[2062,2304,2248],{"class":2072},[2062,2306,2073],{"class":2251},[2062,2308,2255],{"class":2072},[2062,2310,2230],{"class":2289},[2062,2312,2269],{"class":2072},[2062,2314,2316,2320,2322,2325,2327,2330,2333,2336,2339,2342,2344,2346,2349,2351,2353,2355,2357,2359,2362,2364,2366,2368,2371,2373],{"class":2064,"line":2315},5,[2062,2317,2319],{"class":2318},"s6cf3","        if",[2062,2321,2223],{"class":2289},[2062,2323,2324],{"class":2068},"parts",[2062,2326,1296],{"class":2072},[2062,2328,2329],{"class":2068},"length",[2062,2331,2332],{"class":2072}," ==",[2062,2334,2335],{"class":2086}," 2",[2062,2337,2338],{"class":2289},") ",[2062,2340,2341],{"class":2318},"return",[2062,2343,2277],{"class":2068},[2062,2345,1296],{"class":2072},[2062,2347,2348],{"class":2079},"pop",[2062,2350,2206],{"class":2289},[2062,2352,1296],{"class":2072},[2062,2354,2286],{"class":2079},[2062,2356,2083],{"class":2289},[2062,2358,2255],{"class":2072},[2062,2360,2361],{"class":2251},";",[2062,2363,2255],{"class":2072},[2062,2365,2230],{"class":2289},[2062,2367,1296],{"class":2072},[2062,2369,2370],{"class":2079},"shift",[2062,2372,2206],{"class":2289},[2062,2374,2269],{"class":2072},[2062,2376,2378],{"class":2064,"line":2377},6,[2062,2379,2380],{"class":2072},"    }\n",[2062,2382,2384],{"class":2064,"line":2383},7,[2062,2385,2386],{"emptyLinePlaceholder":88},"\n",[2062,2388,2390,2392,2395,2397,2399,2401,2403,2405,2407,2409,2412,2414,2416,2418,2420,2423,2425,2427,2429,2431,2433,2436,2438,2440,2443,2445,2448],{"class":2064,"line":2389},8,[2062,2391,2214],{"class":2199},[2062,2393,2394],{"class":2068}," gaCookies",[2062,2396,2220],{"class":2072},[2062,2398,2261],{"class":2068},[2062,2400,1296],{"class":2072},[2062,2402,2266],{"class":2068},[2062,2404,1296],{"class":2072},[2062,2406,2286],{"class":2079},[2062,2408,2083],{"class":2289},[2062,2410,2411],{"class":2072},"'",[2062,2413,2252],{"class":2251},[2062,2415,2411],{"class":2072},[2062,2417,2230],{"class":2289},[2062,2419,1296],{"class":2072},[2062,2421,2422],{"class":2079},"filter",[2062,2424,2083],{"class":2289},[2062,2426,2266],{"class":2226},[2062,2428,2233],{"class":2199},[2062,2430,1907],{"class":2068},[2062,2432,1296],{"class":2072},[2062,2434,2435],{"class":2079},"startsWith",[2062,2437,2083],{"class":2289},[2062,2439,2411],{"class":2072},[2062,2441,2442],{"class":2251},"_ga_",[2062,2444,2411],{"class":2072},[2062,2446,2447],{"class":2289},"))",[2062,2449,2269],{"class":2072},[2062,2451,2453,2455,2458,2460,2463],{"class":2064,"line":2452},9,[2062,2454,2214],{"class":2199},[2062,2456,2457],{"class":2068}," parsedCookies",[2062,2459,2220],{"class":2072},[2062,2461,2462],{"class":2289}," []",[2062,2464,2269],{"class":2072},[2062,2466,2468],{"class":2064,"line":2467},10,[2062,2469,2386],{"emptyLinePlaceholder":88},[2062,2471,2473,2476,2478,2481,2483,2485,2487],{"class":2064,"line":2472},11,[2062,2474,2475],{"class":2068},"    gaCookies",[2062,2477,1296],{"class":2072},[2062,2479,2480],{"class":2079},"forEach",[2062,2482,2083],{"class":2289},[2062,2484,2266],{"class":2226},[2062,2486,2233],{"class":2199},[2062,2488,2209],{"class":2072},[2062,2490,2492,2494,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515],{"class":2064,"line":2491},12,[2062,2493,2240],{"class":2199},[2062,2495,2496],{"class":2068}," cookieParts",[2062,2498,2220],{"class":2072},[2062,2500,1907],{"class":2068},[2062,2502,1296],{"class":2072},[2062,2504,2286],{"class":2079},[2062,2506,2083],{"class":2289},[2062,2508,2411],{"class":2072},[2062,2510,2073],{"class":2251},[2062,2512,2411],{"class":2072},[2062,2514,2230],{"class":2289},[2062,2516,2269],{"class":2072},[2062,2518,2520,2522,2525,2527,2529,2532,2535,2538,2540,2542,2544,2546,2548,2550,2552],{"class":2064,"line":2519},13,[2062,2521,2240],{"class":2199},[2062,2523,2524],{"class":2068}," cookieNameParts",[2062,2526,2220],{"class":2072},[2062,2528,2496],{"class":2068},[2062,2530,2531],{"class":2289},"[",[2062,2533,2534],{"class":2086},"0",[2062,2536,2537],{"class":2289},"]",[2062,2539,1296],{"class":2072},[2062,2541,2286],{"class":2079},[2062,2543,2083],{"class":2289},[2062,2545,2411],{"class":2072},[2062,2547,1855],{"class":2251},[2062,2549,2411],{"class":2072},[2062,2551,2230],{"class":2289},[2062,2553,2269],{"class":2072},[2062,2555,2557,2559,2562,2564,2566,2568,2571,2573],{"class":2064,"line":2556},14,[2062,2558,2240],{"class":2199},[2062,2560,2561],{"class":2068}," rawStreamIds",[2062,2563,2220],{"class":2072},[2062,2565,2524],{"class":2068},[2062,2567,2531],{"class":2289},[2062,2569,2570],{"class":2086},"2",[2062,2572,2537],{"class":2289},[2062,2574,2269],{"class":2072},[2062,2576,2578,2580,2583,2585,2587,2589,2591,2593,2595,2598,2600,2602,2604,2607,2609,2612,2614,2617,2619,2621,2623,2625,2628,2630,2632,2635,2637,2640,2643,2645,2647,2649,2651,2653],{"class":2064,"line":2577},15,[2062,2579,2240],{"class":2199},[2062,2581,2582],{"class":2068}," streamIds",[2062,2584,2220],{"class":2072},[2062,2586,2561],{"class":2068},[2062,2588,1296],{"class":2072},[2062,2590,2286],{"class":2079},[2062,2592,2083],{"class":2289},[2062,2594,2411],{"class":2072},[2062,2596,2597],{"class":2251},",",[2062,2599,2411],{"class":2072},[2062,2601,2230],{"class":2289},[2062,2603,1296],{"class":2072},[2062,2605,2606],{"class":2079},"map",[2062,2608,2083],{"class":2289},[2062,2610,2611],{"class":2226},"id",[2062,2613,2233],{"class":2199},[2062,2615,2616],{"class":2068}," id",[2062,2618,1296],{"class":2072},[2062,2620,2435],{"class":2079},[2062,2622,2083],{"class":2289},[2062,2624,2411],{"class":2072},[2062,2626,2627],{"class":2251},"G-",[2062,2629,2411],{"class":2072},[2062,2631,2338],{"class":2289},[2062,2633,2634],{"class":2072},"?",[2062,2636,2616],{"class":2068},[2062,2638,2639],{"class":2072}," :",[2062,2641,2642],{"class":2072}," '",[2062,2644,2627],{"class":2251},[2062,2646,2411],{"class":2072},[2062,2648,2258],{"class":2072},[2062,2650,2616],{"class":2068},[2062,2652,2230],{"class":2289},[2062,2654,2269],{"class":2072},[2062,2656,2658,2660,2663,2665,2667,2669,2671,2674,2677],{"class":2064,"line":2657},16,[2062,2659,2240],{"class":2199},[2062,2661,2662],{"class":2068}," duplicateStream",[2062,2664,2220],{"class":2072},[2062,2666,2582],{"class":2068},[2062,2668,1296],{"class":2072},[2062,2670,2329],{"class":2068},[2062,2672,2673],{"class":2072}," >",[2062,2675,2676],{"class":2086}," 1",[2062,2678,2269],{"class":2072},[2062,2680,2682,2684,2687,2689,2691,2693,2695,2697,2699,2701,2703,2705],{"class":2064,"line":2681},17,[2062,2683,2240],{"class":2199},[2062,2685,2686],{"class":2068}," cookieValue",[2062,2688,2220],{"class":2072},[2062,2690,2217],{"class":2079},[2062,2692,2083],{"class":2289},[2062,2694,2411],{"class":2072},[2062,2696,2442],{"class":2251},[2062,2698,2411],{"class":2072},[2062,2700,2258],{"class":2072},[2062,2702,2561],{"class":2068},[2062,2704,2230],{"class":2289},[2062,2706,2269],{"class":2072},[2062,2708,2710],{"class":2064,"line":2709},18,[2062,2711,2386],{"emptyLinePlaceholder":88},[2062,2713,2715,2717,2719,2722,2724,2726,2728,2730,2733,2735,2738],{"class":2064,"line":2714},19,[2062,2716,2319],{"class":2318},[2062,2718,2083],{"class":2289},[2062,2720,2721],{"class":2068},"cookieValue",[2062,2723,1296],{"class":2072},[2062,2725,2435],{"class":2079},[2062,2727,2083],{"class":2289},[2062,2729,2411],{"class":2072},[2062,2731,2732],{"class":2251},"GS1",[2062,2734,2411],{"class":2072},[2062,2736,2737],{"class":2289},")) ",[2062,2739,2740],{"class":2072},"{\n",[2062,2742,2744,2747,2750,2752,2754,2756,2758,2760,2762,2764,2766,2768],{"class":2064,"line":2743},20,[2062,2745,2746],{"class":2199},"            const",[2062,2748,2749],{"class":2068}," components",[2062,2751,2220],{"class":2072},[2062,2753,2686],{"class":2068},[2062,2755,1296],{"class":2072},[2062,2757,2286],{"class":2079},[2062,2759,2083],{"class":2289},[2062,2761,2411],{"class":2072},[2062,2763,1296],{"class":2251},[2062,2765,2411],{"class":2072},[2062,2767,2230],{"class":2289},[2062,2769,2269],{"class":2072},[2062,2771,2773],{"class":2064,"line":2772},21,[2062,2774,2386],{"emptyLinePlaceholder":88},[2062,2776,2778,2781,2783,2786,2788,2790,2793,2796,2798],{"class":2064,"line":2777},22,[2062,2779,2780],{"class":2318},"            if",[2062,2782,2223],{"class":2289},[2062,2784,2785],{"class":2068},"components",[2062,2787,1296],{"class":2072},[2062,2789,2329],{"class":2068},[2062,2791,2792],{"class":2072}," !==",[2062,2794,2795],{"class":2086}," 9",[2062,2797,2338],{"class":2289},[2062,2799,2740],{"class":2072},[2062,2801,2803,2806,2808,2811,2813,2815,2818,2820,2822],{"class":2064,"line":2802},23,[2062,2804,2805],{"class":2068},"                console",[2062,2807,1296],{"class":2072},[2062,2809,2810],{"class":2079},"log",[2062,2812,2083],{"class":2289},[2062,2814,2255],{"class":2072},[2062,2816,2817],{"class":2251},"Invalid cookie format. Please make sure to provide a valid GA4 cookie.",[2062,2819,2255],{"class":2072},[2062,2821,2230],{"class":2289},[2062,2823,2269],{"class":2072},[2062,2825,2827,2830],{"class":2064,"line":2826},24,[2062,2828,2829],{"class":2318},"                return",[2062,2831,2269],{"class":2072},[2062,2833,2835],{"class":2064,"line":2834},25,[2062,2836,2837],{"class":2072},"            }\n",[2062,2839,2841],{"class":2064,"line":2840},26,[2062,2842,2386],{"emptyLinePlaceholder":88},[2062,2844,2846,2848,2851,2853,2855,2857,2859,2861,2863,2866,2868,2870,2873,2875,2877,2880,2882],{"class":2064,"line":2845},27,[2062,2847,2746],{"class":2199},[2062,2849,2850],{"class":2068}," version",[2062,2852,2220],{"class":2072},[2062,2854,2749],{"class":2068},[2062,2856,2531],{"class":2289},[2062,2858,2534],{"class":2086},[2062,2860,2537],{"class":2289},[2062,2862,1296],{"class":2072},[2062,2864,2865],{"class":2079},"replace",[2062,2867,2083],{"class":2289},[2062,2869,2411],{"class":2072},[2062,2871,2872],{"class":2251},"GS",[2062,2874,2411],{"class":2072},[2062,2876,2597],{"class":2072},[2062,2878,2879],{"class":2072}," ''",[2062,2881,2230],{"class":2289},[2062,2883,2269],{"class":2072},[2062,2885,2887,2889,2892,2894,2896,2898,2901,2903],{"class":2064,"line":2886},28,[2062,2888,2746],{"class":2199},[2062,2890,2891],{"class":2068}," domainLevel",[2062,2893,2220],{"class":2072},[2062,2895,2749],{"class":2068},[2062,2897,2531],{"class":2289},[2062,2899,2900],{"class":2086},"1",[2062,2902,2537],{"class":2289},[2062,2904,2269],{"class":2072},[2062,2906,2908,2910,2913,2915,2917,2919,2921,2923,2925,2927,2930,2932,2935,2937],{"class":2064,"line":2907},29,[2062,2909,2746],{"class":2199},[2062,2911,2912],{"class":2068}," sessionStartAt",[2062,2914,2220],{"class":2072},[2062,2916,2076],{"class":2072},[2062,2918,2080],{"class":2079},[2062,2920,2083],{"class":2289},[2062,2922,2785],{"class":2068},[2062,2924,2531],{"class":2289},[2062,2926,2570],{"class":2086},[2062,2928,2929],{"class":2289},"] ",[2062,2931,2090],{"class":2072},[2062,2933,2934],{"class":2086}," 1000",[2062,2936,2230],{"class":2289},[2062,2938,2269],{"class":2072},[2062,2940,2942,2944,2947,2949,2951,2953,2956,2958],{"class":2064,"line":2941},30,[2062,2943,2746],{"class":2199},[2062,2945,2946],{"class":2068}," sessionsCount",[2062,2948,2220],{"class":2072},[2062,2950,2749],{"class":2068},[2062,2952,2531],{"class":2289},[2062,2954,2955],{"class":2086},"3",[2062,2957,2537],{"class":2289},[2062,2959,2269],{"class":2072},[2062,2961,2963,2965,2968,2970,2972,2974,2977,2979],{"class":2064,"line":2962},31,[2062,2964,2746],{"class":2199},[2062,2966,2967],{"class":2068}," engagedSession",[2062,2969,2220],{"class":2072},[2062,2971,2749],{"class":2068},[2062,2973,2531],{"class":2289},[2062,2975,2976],{"class":2086},"4",[2062,2978,2537],{"class":2289},[2062,2980,2269],{"class":2072},[2062,2982,2984,2986,2989,2991,2993,2995,2997,2999,3001,3004,3006,3008,3010,3012],{"class":2064,"line":2983},32,[2062,2985,2746],{"class":2199},[2062,2987,2988],{"class":2068}," lastEventAt",[2062,2990,2220],{"class":2072},[2062,2992,2076],{"class":2072},[2062,2994,2080],{"class":2079},[2062,2996,2083],{"class":2289},[2062,2998,2785],{"class":2068},[2062,3000,2531],{"class":2289},[2062,3002,3003],{"class":2086},"5",[2062,3005,2929],{"class":2289},[2062,3007,2090],{"class":2072},[2062,3009,2934],{"class":2086},[2062,3011,2230],{"class":2289},[2062,3013,2269],{"class":2072},[2062,3015,3017,3019,3022,3024,3026,3028,3031,3033],{"class":2064,"line":3016},33,[2062,3018,2746],{"class":2199},[2062,3020,3021],{"class":2068}," countdown",[2062,3023,2220],{"class":2072},[2062,3025,2749],{"class":2068},[2062,3027,2531],{"class":2289},[2062,3029,3030],{"class":2086},"6",[2062,3032,2537],{"class":2289},[2062,3034,2269],{"class":2072},[2062,3036,3038,3040,3043,3045,3047,3049,3052,3054],{"class":2064,"line":3037},34,[2062,3039,2746],{"class":2199},[2062,3041,3042],{"class":2068}," mysteryZero1",[2062,3044,2220],{"class":2072},[2062,3046,2749],{"class":2068},[2062,3048,2531],{"class":2289},[2062,3050,3051],{"class":2086},"7",[2062,3053,2537],{"class":2289},[2062,3055,2269],{"class":2072},[2062,3057,3059,3061,3064,3066,3068,3070,3073,3075],{"class":2064,"line":3058},35,[2062,3060,2746],{"class":2199},[2062,3062,3063],{"class":2068}," mysteryZero2",[2062,3065,2220],{"class":2072},[2062,3067,2749],{"class":2068},[2062,3069,2531],{"class":2289},[2062,3071,3072],{"class":2086},"8",[2062,3074,2537],{"class":2289},[2062,3076,2269],{"class":2072},[2062,3078,3080,3082,3085,3087,3090,3092,3095,3098,3101,3104,3106,3108,3111,3113,3115],{"class":2064,"line":3079},36,[2062,3081,2746],{"class":2199},[2062,3083,3084],{"class":2068}," engagedTime",[2062,3086,2220],{"class":2072},[2062,3088,3089],{"class":2068}," Math",[2062,3091,1296],{"class":2072},[2062,3093,3094],{"class":2079},"round",[2062,3096,3097],{"class":2289},"((",[2062,3099,3100],{"class":2068},"lastEventAt",[2062,3102,3103],{"class":2072}," -",[2062,3105,2912],{"class":2068},[2062,3107,2338],{"class":2289},[2062,3109,3110],{"class":2072},"\u002F",[2062,3112,2934],{"class":2086},[2062,3114,2230],{"class":2289},[2062,3116,2269],{"class":2072},[2062,3118,3120],{"class":2064,"line":3119},37,[2062,3121,2386],{"emptyLinePlaceholder":88},[2062,3123,3125,3128,3130,3133,3135],{"class":2064,"line":3124},38,[2062,3126,3127],{"class":2068},"            parsedCookies",[2062,3129,1296],{"class":2072},[2062,3131,3132],{"class":2079},"push",[2062,3134,2083],{"class":2289},[2062,3136,2740],{"class":2072},[2062,3138,3140,3143,3146,3148,3150,3152],{"class":2064,"line":3139},39,[2062,3141,3142],{"class":2072},"                \"",[2062,3144,3145],{"class":2289},"Measurement IDs",[2062,3147,2255],{"class":2072},[2062,3149,2113],{"class":2072},[2062,3151,2582],{"class":2068},[2062,3153,3154],{"class":2072},",\n",[2062,3156,3158,3160,3163,3165,3167,3169],{"class":2064,"line":3157},40,[2062,3159,3142],{"class":2072},[2062,3161,3162],{"class":2289},"Version",[2062,3164,2255],{"class":2072},[2062,3166,2113],{"class":2072},[2062,3168,2850],{"class":2068},[2062,3170,3154],{"class":2072},[2062,3172,3174,3176,3179,3181,3183,3185],{"class":2064,"line":3173},41,[2062,3175,3142],{"class":2072},[2062,3177,3178],{"class":2289},"Domain Level",[2062,3180,2255],{"class":2072},[2062,3182,2113],{"class":2072},[2062,3184,2891],{"class":2068},[2062,3186,3154],{"class":2072},[2062,3188,3190,3192,3195,3197,3199,3201,3203,3206,3208],{"class":2064,"line":3189},42,[2062,3191,3142],{"class":2072},[2062,3193,3194],{"class":2289},"Session Start At",[2062,3196,2255],{"class":2072},[2062,3198,2113],{"class":2072},[2062,3200,2912],{"class":2068},[2062,3202,1296],{"class":2072},[2062,3204,3205],{"class":2079},"toISOString",[2062,3207,2206],{"class":2289},[2062,3209,3154],{"class":2072},[2062,3211,3213,3215,3218,3220,3222,3224],{"class":2064,"line":3212},43,[2062,3214,3142],{"class":2072},[2062,3216,3217],{"class":2289},"Sessions Count",[2062,3219,2255],{"class":2072},[2062,3221,2113],{"class":2072},[2062,3223,2946],{"class":2068},[2062,3225,3154],{"class":2072},[2062,3227,3229,3231,3234,3236,3238,3240],{"class":2064,"line":3228},44,[2062,3230,3142],{"class":2072},[2062,3232,3233],{"class":2289},"Engaged Session",[2062,3235,2255],{"class":2072},[2062,3237,2113],{"class":2072},[2062,3239,2967],{"class":2068},[2062,3241,3154],{"class":2072},[2062,3243,3245,3247,3250,3252,3254,3256,3258,3260,3262],{"class":2064,"line":3244},45,[2062,3246,3142],{"class":2072},[2062,3248,3249],{"class":2289},"Last Event At",[2062,3251,2255],{"class":2072},[2062,3253,2113],{"class":2072},[2062,3255,2988],{"class":2068},[2062,3257,1296],{"class":2072},[2062,3259,3205],{"class":2079},[2062,3261,2206],{"class":2289},[2062,3263,3154],{"class":2072},[2062,3265,3267,3269,3272,3274,3276,3278],{"class":2064,"line":3266},46,[2062,3268,3142],{"class":2072},[2062,3270,3271],{"class":2289},"Engaged Time",[2062,3273,2255],{"class":2072},[2062,3275,2113],{"class":2072},[2062,3277,3084],{"class":2068},[2062,3279,3154],{"class":2072},[2062,3281,3283,3285,3288,3290,3292,3294],{"class":2064,"line":3282},47,[2062,3284,3142],{"class":2072},[2062,3286,3287],{"class":2289},"Countdown",[2062,3289,2255],{"class":2072},[2062,3291,2113],{"class":2072},[2062,3293,3021],{"class":2068},[2062,3295,3154],{"class":2072},[2062,3297,3299,3301,3304,3306,3308,3310],{"class":2064,"line":3298},48,[2062,3300,3142],{"class":2072},[2062,3302,3303],{"class":2289},"Mystery Zero 1",[2062,3305,2255],{"class":2072},[2062,3307,2113],{"class":2072},[2062,3309,3042],{"class":2068},[2062,3311,3154],{"class":2072},[2062,3313,3315,3317,3320,3322,3324,3326],{"class":2064,"line":3314},49,[2062,3316,3142],{"class":2072},[2062,3318,3319],{"class":2289},"Mystery Zero 2",[2062,3321,2255],{"class":2072},[2062,3323,2113],{"class":2072},[2062,3325,3063],{"class":2068},[2062,3327,3154],{"class":2072},[2062,3329,3331,3333,3336,3338,3340],{"class":2064,"line":3330},50,[2062,3332,3142],{"class":2072},[2062,3334,3335],{"class":2289},"Duplicate Stream",[2062,3337,2255],{"class":2072},[2062,3339,2113],{"class":2072},[2062,3341,3342],{"class":2068}," duplicateStream\n",[2062,3344,3346,3349,3351],{"class":2064,"line":3345},51,[2062,3347,3348],{"class":2072},"            }",[2062,3350,2230],{"class":2289},[2062,3352,2269],{"class":2072},[2062,3354,3356],{"class":2064,"line":3355},52,[2062,3357,3358],{"class":2072},"        }\n",[2062,3360,3362,3365,3367],{"class":2064,"line":3361},53,[2062,3363,3364],{"class":2072},"    }",[2062,3366,2230],{"class":2289},[2062,3368,2269],{"class":2072},[2062,3370,3372],{"class":2064,"line":3371},54,[2062,3373,2386],{"emptyLinePlaceholder":88},[2062,3375,3377,3380,3382,3384,3386,3389,3391,3394,3396,3399,3401,3404,3406,3408],{"class":2064,"line":3376},55,[2062,3378,3379],{"class":2068},"    console",[2062,3381,1296],{"class":2072},[2062,3383,2810],{"class":2079},[2062,3385,2083],{"class":2289},[2062,3387,3388],{"class":2068},"JSON",[2062,3390,1296],{"class":2072},[2062,3392,3393],{"class":2079},"stringify",[2062,3395,2083],{"class":2289},[2062,3397,3398],{"class":2068},"parsedCookies",[2062,3400,2597],{"class":2072},[2062,3402,3403],{"class":2072}," null,",[2062,3405,2335],{"class":2086},[2062,3407,2447],{"class":2289},[2062,3409,2269],{"class":2072},[2062,3411,3413,3416,3418],{"class":2064,"line":3412},56,[2062,3414,3415],{"class":2318},"    return",[2062,3417,2457],{"class":2068},[2062,3419,2269],{"class":2072},[2062,3421,3423],{"class":2064,"line":3422},57,[2062,3424,3425],{"class":2072},"}\n",[2062,3427,3429],{"class":2064,"line":3428},58,[2062,3430,2386],{"emptyLinePlaceholder":88},[2062,3432,3434],{"class":2064,"line":3433},59,[2062,3435,3437],{"class":3436},"sC9rS","\u002F\u002F Example usage:\n",[2062,3439,3441,3444,3446],{"class":2064,"line":3440},60,[2062,3442,3443],{"class":2079},"parseGaCookies",[2062,3445,2206],{"class":2068},[2062,3447,2269],{"class":2072},[12,3449,3450],{},"To use that script you have to copy it, open the website you want to explore and go to: Dev Tools (F12) → Console. In console you have to paste the script and press Enter",[278,3452],{"source":3453},"\u002Fupload\u002Fga-cookie18.png",[12,3455,3456],{},"After that the script will automatically identify the cookies you have stored in your browser on the website you’re visiting and will describe them for you.",[278,3458],{"source":3459},"\u002Fupload\u002Fga-cookie19.png",[12,3461,3462],{},"As for us, we hope that you will find our solution useful 🙂",[3464,3465,3466],"style",{},"html pre.shiki code .s0W1g, html code.shiki .s0W1g{--shiki-default:#BABED8}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .s7ZW3, html code.shiki .s7ZW3{--shiki-default:#BABED8;--shiki-default-font-style:italic}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .s6cf3, html code.shiki .s6cf3{--shiki-default:#89DDFF;--shiki-default-font-style:italic}html pre.shiki code .sC9rS, html code.shiki .sC9rS{--shiki-default:#464B5D;--shiki-default-font-style:italic}",{"title":76,"searchDepth":77,"depth":77,"links":3468},[3469,3470,3471,3473,3477],{"id":1846,"depth":389,"text":1847},{"id":1871,"depth":389,"text":1872},{"id":1902,"depth":77,"text":3472},"_ga cookie",{"id":1990,"depth":77,"text":3474,"children":3475},"ga\u003Cmeasurement_id> cookie",[3476],{"id":59,"depth":389,"text":60},{"id":2185,"depth":77,"text":2186},"\u002Fupload\u002Fga-cookie-en.png","ga-cookies-snadno-rychle",{},"\u002Fen\u002Fblog\u002Fga-cookies-explained","2024-08-19T16:15:00.000+00:00",7.64,{"title":1837,"description":1843},"en\u002Fblog\u002Fga-cookies-explained","What cookies Google uses and why it’s important to understand what they mean","rueWVz7yHXzKaHTMrJSGEDrULtlzAvkVDYe9K9Xjs7s",{"id":3489,"title":3490,"author":7,"body":3491,"category":1334,"description":76,"extension":83,"image":3666,"isToc":85,"langAlt":7,"meta":3667,"metaDescription":7,"navigation":88,"path":3668,"published":88,"publishedAt":3669,"readingTimeMinutes":3670,"readingTimeText":224,"relatedArticles":3671,"seo":3672,"stem":3673,"teaser":3674,"updatedAtCustom":7,"__hash__":3675},"blog_en\u002Fen\u002Fblog\u002Fgetting-the-most-out-of-permission-marketing.md","Getting the most out of Permission Marketing",{"type":9,"value":3492,"toc":3653},[3493,3497,3500,3504,3507,3511,3522,3526,3546,3550,3557,3564,3568,3579,3583,3594,3598,3602,3605,3609,3612,3616,3619,3623,3630,3632,3635,3650],[16,3494,3496],{"id":3495},"defining-permission-marketing","Defining permission marketing",[12,3498,3499],{},"Permission marketing is based on customers' anticipation, personalization, and relevancy to build lasting customer relationships, and lead successful campaigns through utilizing customers' consent. The concept was introduced by Seth Godin, who discovered that successful marketing campaigns succeed because of seeking customer's consent. As a non-traditional marketing approach (opposed to direct or interruption marketing) it contributes vitally to your overall brand image.",[16,3501,3503],{"id":3502},"interruption-marketing","Interruption marketing",[12,3505,3506],{},"On the contrary, interruption marketing is a well-known and heavily practiced type of marketing messaging that customers did not ask to receive. With new privacy laws it is now being pushed back, however, there are still some popular examples such as radio ads, video ads, billboards, flyers, that might be disturbing to the customers. This approach is quick, can target large audiences at once, and can be a fast way to increase temporary sales, yet it is perceived too pushy and the retention is quite low. On the other hand, permission marketing is respectful toward the customer’s privacy, emphasizing the relationship value.",[16,3508,3510],{"id":3509},"benefits-of-permission-marketing","Benefits of permission marketing",[12,3512,3513,3514,3517,3518,3521],{},"Permission marketing, in its true application, provides more benefits than one might think. ",[113,3515,3516],{},"Targeting only interested groups"," of customers lowers marketing costs, boosts the engagement, and subsequently increases conversion rates, hence not wasting resources on those, who find their interest elsewhere, or prefer different offers. Besides, it ",[113,3519,3520],{},"also demonstrates an ethical form of marketing",". Thus it mostly helps to build lasting relationships based on trust, resulting in positive customer lifetime value.",[244,3523,3525],{"id":3524},"the-main-benefits-of-actively-using-consent-management-are","The main benefits of actively using consent management are:",[327,3527,3528,3531,3534,3537,3540,3543],{},[255,3529,3530],{},"Visibility to interested groups, right audience",[255,3532,3533],{},"Increased customer engagement",[255,3535,3536],{},"Growing conversion rates",[255,3538,3539],{},"Increased retention and loyalty",[255,3541,3542],{},"Strong relationships built on trust",[255,3544,3545],{},"Better customers lifetime value",[16,3547,3549],{"id":3548},"customers-intent-is-an-opportunity","Customers’ intent is an opportunity",[12,3551,3552,3553,3556],{},"Many companies have already adopted, or at least tried, some form of permission marketing. Since the enforcement of various data privacy regulations, e.g. GDPR or CCPA, companies are now obliged to ask permission to use their customers' data, respect their privacy while using the data, and extend the right to opt-out. When the regulations were introduced, the majority of the organizations perceived them as an unnecessary business obstacle, excessive costs, something that would decelerate their marketing and communication efforts. ",[113,3554,3555],{},"Choosing to look at it as a threat, is a wasted opportunity."," In our experience, changing the perception and incorporating permission marketing into marketing activities is much more beneficial than only being aligned with the law without further thinking.",[12,3558,3559,3560,3563],{},"Leveraging, what customers have to say about their interests, is a ",[113,3561,3562],{},"competitive advantage"," in every industry, especially in such an oversaturated market of online shopping. However, there is much more to it than just choosing yes or no.",[16,3565,3567],{"id":3566},"right-approach","Right approach",[12,3569,3570,3571,3574,3575,3578],{},"The key is to ",[113,3572,3573],{},"present more granular"," choices of opting-in. From the customer point of view, having only two extreme options might invoke the negative one in order to avoid constant marketing 'invasion' from all sides. Eventually causing a lose-lose scenario. Whereas being able to choose, for example, channels, frequency, and specific offers will ",[113,3576,3577],{},"ease the pressure",", in addition to helping them find what they really want.",[16,3580,3582],{"id":3581},"let-your-customers-know-that-you-care","Let your customers know that you care",[12,3584,3585,3586,3589,3590,3593],{},"The results from our research uncover that customers prefer to have control over the settings, be able to choose what they want to be communicated and how often. The customers appreciate being asked about their interests. It demonstrates that the company notices them as individuals and care for them. ",[113,3587,3588],{},"Just the question itself increases the probability of the purchase,"," for example, when asking a customer if they plan to buy a car, instead of not asking it. Continually working with their preferences, being able to detect when it changes, and immediately considering it, ",[113,3591,3592],{},"positively impact their attitude toward the brand"," and the company. The initial investment is small compared to the overall increased revenues. The outcome can be visible soon after the first steps, whereas the effect is long-term.",[16,3595,3597],{"id":3596},"permission-marketing-best-practices","Permission marketing best practices",[860,3599,3601],{"id":3600},"clear-instructions","Clear instructions",[12,3603,3604],{},"One of the first steps toward effective permission marketing is transparency and clear communication. Let your customers know how and where they can consent or opt out when they change their preferences.",[860,3606,3608],{"id":3607},"tell-them-your-intentions-upfront","Tell them your intentions upfront",[12,3610,3611],{},"Customers will appreciate knowing, how often you will contact them, what topics you will present. It helps them decide what is relevant and what they like.",[860,3613,3615],{"id":3614},"preference-management","Preference management",[12,3617,3618],{},"Let the customer choose the right option or the combination of marketing communication, for example weekly or bi-weekly. They might feel overwhelmed or want to be contacted differently, they may change their preferences, and providing them with space where they can do so helps the business to target the relevant audience and the customers to find what they need.",[16,3620,3622],{"id":3621},"effective-management","Effective management",[12,3624,3625,3626,3629],{},"Although permission marketing seems easy, setting it up correctly and harvesting the most out of it from the beginning can be quite challenging. The crucial part of the process is ",[113,3627,3628],{},"collecting the necessary permissions via marketing automation",". However, the differentiation lays in managing it all effectively.",[16,3631,60],{"id":59},[12,3633,3634],{},"Permission marketing brings many benefits not only to the customers but it certainly strengthens the relationships between them and the brand. Implementing this approach ensures customer loyalty and increases customer lifetime value. Privacy is not a threat, it is an opportunity to get to know your audience better and deliver relevant content with appreciated communication.",[12,3636,3637,3638,3645,3646,3649],{},"The good news is you do not have to tackle it by yourself. We have solved many similar problems for our clients by implementing ",[37,3639,3642],{"href":3640,"rel":3641},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fproducts\u002Fwecoma\u002F",[41],[113,3643,3644],{},"Wecoma",", our Web Consent Management product, which is principally developed to adjust the company's permission settings. ",[113,3647,3648],{},"Wecoma creates new opportunities for marketing strategy."," This product advances not only web marketing, but also emailing, mails, text messages, and other forms of communication.",[209,3651,3652],{"link":211,"button":212},"\nTo understand more deeply, how this marketing approach can help your business to grow, get in touch with us today!\n",{"title":76,"searchDepth":77,"depth":77,"links":3654},[3655,3656,3657,3660,3661,3662,3663,3664,3665],{"id":3495,"depth":77,"text":3496},{"id":3502,"depth":77,"text":3503},{"id":3509,"depth":77,"text":3510,"children":3658},[3659],{"id":3524,"depth":389,"text":3525},{"id":3548,"depth":77,"text":3549},{"id":3566,"depth":77,"text":3567},{"id":3581,"depth":77,"text":3582},{"id":3596,"depth":77,"text":3597},{"id":3621,"depth":77,"text":3622},{"id":59,"depth":77,"text":60},"\u002Fupload\u002Fpermmision-marketing-article-cover.webp",{},"\u002Fen\u002Fblog\u002Fgetting-the-most-out-of-permission-marketing","2020-04-29T12:00:00.000+00:00",5.215,[999,554],{"title":3490,"description":76},"en\u002Fblog\u002Fgetting-the-most-out-of-permission-marketing","Sending nicely prepared newsletters to inform about new products and great offers continuously, yet still reaching low engagement and unsatisfactory conversion rate? Well, the problem might be in not embracing your customers' intent.","bFNH-LcP3x15yvAs2-eodhnqFaofgL5WGYgxxILgbVc",{"id":3677,"title":3678,"author":7,"body":3679,"category":992,"description":3683,"extension":83,"image":4257,"isToc":88,"langAlt":7,"meta":4258,"metaDescription":7,"navigation":88,"path":4266,"published":88,"publishedAt":4267,"readingTimeMinutes":4268,"readingTimeText":4269,"relatedArticles":4270,"seo":4272,"stem":4273,"teaser":4274,"updatedAtCustom":7,"__hash__":4275},"blog_en\u002Fen\u002Fblog\u002Fgoogle-analytics-4-brief-introduction-and-vision.md","Google Analytics 4 – Brief Introduction And Vision",{"type":9,"value":3680,"toc":4237},[3681,3684,3694,3698,3744,3747,3753,3757,3760,3764,3767,3771,3774,3778,3803,3807,3816,3823,3829,3909,3915,3918,3925,3929,3961,3964,3970,3976,3983,3986,3990,3997,4000,4040,4044,4047,4055,4066,4069,4072,4126,4135,4137,4140,4149,4154,4157,4163,4168,4171,4177,4182,4185,4191,4196,4199,4205,4210,4213,4219,4224,4227,4234],[12,3682,3683],{},"This is not an easy task and it is certainly not achieved by just replacing the measurement script. The new event-driven concept, data streaming functionalities, and the possibility to integrate Google Analytics with the Google Cloud Platform will ensure a far better understanding of customer behavior and provide actionable insights. This flexibility, however, is a trade-off with complexity so LOOK BEFORE YOU LEAP, or maybe just read our thoughts on what Google Analytics 4 (GA4) is going to bring.",[12,3685,3686,3687,3690,3691,1296],{},"Google Analytics 4 brings a totally different concept of User-centric event-based analytics, many new functions, and exciting features of stream data processing. As of today, many of the existing Google Analytics (Universal Analytics) features are in GA4 not available, and it is uncertain whether all of them will be ported, or replaced by something else. Although it is very difficult to make a prediction with such ",[113,3688,3689],{},"uncertainty",", it does not mean you have to sit and wait. This is certainly a less risky strategy, but you will not learn anything. Many specialists (including us) are still hesitant to throw out Universal Analytics entirely and only use GA4 for web projects, on the other side we certainly see the benefit of GA4 for some projects, especially where Google Cloud specialists are available. So which path should one choose? This article is for those who would like to understand the benefits of early GA4 adoption and the limitations it still has. To ease the effort, we have ",[113,3692,3693],{},"compiled an important set of information we consider most relevant",[16,3695,3697],{"id":3696},"quick-insight-for-those-who-have-landed-here","Quick insight for those who have landed here",[327,3699,3700,3706,3713,3716,3719,3722,3729,3732,3735,3738,3741],{},[255,3701,3702,3705],{},[113,3703,3704],{},"Google Analytics 4 (GA4)"," is a new version of Google Analytics.",[255,3707,3708,3709,3712],{},"The current version called ",[113,3710,3711],{},"Universal Analytics (UA)"," will still be available for some time",[255,3714,3715],{},"Google is not yet forcing anybody to migrate to the new GA4 version.",[255,3717,3718],{},"It is uncertain how historical data will be migrated; we believe that there will be an option to do it. Even Google uses the data and needs some continuity.",[255,3720,3721],{},"Turning on GA4 without a plan that assures it will meet all of the business needs would be very unwise.",[255,3723,3724,3725,3728],{},"Google Analytics 4 is finally leaving the legacy concept of sessions and pageview and switching to ",[113,3726,3727],{},"User-centric context-aware event analytics."," What this means will be further explained later in this article.",[255,3730,3731],{},"GA4 is still under development and is not a finished product. New releases and new features are released very often - and are quickly removed once Google realizes they were wrong. This is actually a good sign as it indicates that Google is investing a lot.",[255,3733,3734],{},"Some features that are part of UA will not be migrated over. It is unclear now which ones will be, but you can already get some sense and indications.",[255,3736,3737],{},"GA4 offers much wider flexibility to collect and process data, but better quality checks and practices will need to be followed.",[255,3739,3740],{},"The GA4 data model is incompatible with the UA data model. Turning on the new tracking pixel will not solve the migration problem.",[255,3742,3743],{},"As UA and GA4 are built with a different philosophy, it will not be possible to match the results. Each system will describe the same situation differently.",[12,3745,3746],{},"We would like to stress this again. No one is going to turn off UA next month. DO NOT WORRY, BUT GET PREPARED! The new tool is not fully fledged, and it will still require several months of development to make it match the functionality of its predecessor. On the other hand, no one knows when UA is going to be deprecated, so it is a good time to start learning the new approach.",[727,3748,3749,3752],{},[422,3750,3751],{},"Google suggests implementing GA4 along with the existing Universal Analytics for learning and testing purposes to better understand the measurement differences and to explore implementation procedures.","\n This is however not to be taken as the replacement installation. So be prepared to throw out any data collected in this experimentation phase.\n",[16,3754,3756],{"id":3755},"who-should-read-this-article","Who should read this article?",[12,3758,3759],{},"As was already mentioned earlier, this article is suitable for anyone who would like to build an opinion on the new GA4 and is familiar with the current version. We often compare both versions, to describe what changed, what we believe will not be migrated over, or what awaits users. This is not, however, a full tutorial on GA4. We are only offering a set of practical opinions we believe are worthy of considering before you make any decision, in hopes that it will help you prepare a better migration plan. It is aimed at people who are using or implementing Universal Analytics and have already heard about the new version (GA4).",[16,3761,3763],{"id":3762},"brief-history","Brief history",[12,3765,3766],{},"The first version of Google Analytics under the Google hood was called Classic Analytics and it was released in 2008 (it was actually the 6th version of Urchin). It does not exist anymore and was replaced in 2013 by a newer version called Universal Analytics, which most of you are using. The backend data model did not evolve a lot and practically remained the same for both versions. The client-side tracking did change a lot though.",[278,3768],{"source":3769,"caption":3770},"\u002Fupload\u002Fgoogle-analytics-timeline.webp","Picture 1 - Google Analytics timeline",[12,3772,3773],{},"As mobile applications started to grow in importance, there was a need to have a similar solution to track activities and build reports. Similar to Urchin, Google acquired another company that was developing a product called Firebase. In 2016, Google came out with a new analytics solution for integrated mobile applications. Anybody who had to work with user analytics was surely annoyed with the fact that website data were sitting in a different database than the mobile app data, and were not easily merged. This was a great disadvantage because both major competitors, Adobe Analytics and Piano Analytics, were able to unify them. A decision to align website data and mobile data into one platform in 2019 was the reason behind something weirdly named Google Analytics: Web + App or GAv2.",[278,3775],{"source":3776,"caption":3777},"\u002Fupload\u002Fgoogle-analytics-evolution.webp","Picture 2 - Google Analytics evolution",[12,3779,3780,3781,3784,3785,3788,3789,3792,3793,3784,3796,3799,3800],{},"The advantage of combining both data streams has a caveat. At least some collected events must have the same meaning to plot them together, otherwise, it would make no sense to do it. That is where the problem begins. A traditional ",[422,3782,3783],{},"pageview"," or ",[422,3786,3787],{},"session"," does not make sense for a mobile application, as analogically an ",[422,3790,3791],{},"activity"," is hardly understandable for a web application. The beauty of a unified platform lies in sharing the same context model - simply naming the identical events on both platforms the same way. This means that one tool will need to adopt the naming strategy of the other, and because Firebase was more flexible in matching its events to reality, the old GA model has to be thrown out. Unfortunately, Google did not decide to throw out the mobile measurement model too and the “same” things like ",[422,3794,3795],{},"page_view",[422,3797,3798],{},"screen_view"," are named differently. The requirement to align data from two diverse yet similar streams, while keeping the backward compatibility, resulted in the new Google Analytics 4 platform in 2020. The possibility to create custom events is an amazing feature as on one side you do not need to stick to something that does not make any sense to you. On the other hand, it might end up in a situation where each GA4 implementation is different. We are big proponents of a Command Query Responsibility Segregation (CQRS) architecture and believe this was the right move, especially in a situation when ",[113,3801,3802],{},"GA4 events could be consumed in real-time by the Google Cloud.",[16,3804,3806],{"id":3805},"conceptual-differences-between-universal-analytics-and-ga4","Conceptual differences between Universal Analytics and GA4",[244,3808,3810],{"id":3809},"data-model",[3811,3812,3815],"icon-heading",{"icon":3813,"tooltip":3814},"up","Positive change","Data model",[12,3817,3818,3819,3822],{},"Google Analytics is, in the GA4 version, shifting from a strictly defined data model to a ",[113,3820,3821],{},"more flexible structure",". It also simplifies the way data are sent. Hits will just become events. So, for instance, a page view hit will be an event, and e-commerce hits are events. Besides the predefined set of events, you can create your own, but keep in mind that only 500 distinctly named events are allowed.",[12,3824,3825,3826],{},"Each event can have up to 25 parameters, while some parameters are already set for predefined events, and for others it is up to you. ",[113,3827,3828],{},"Deciding what parameters to use and how to name them is considered the biggest challenge.",[3830,3831,3832],"figure",{},[3833,3834,3837,3838,3837,3843,3837,3860,3837],"table",{"className":3835},[3836],"two-columns"," ",[3839,3840,3842],"caption",{"style":3841},"caption-side:bottom","Table 1 - Comparing various hit types to events",[3844,3845,3837,3846],"thead",{},[3847,3848,3849,3855],"tr",{},[3850,3851,3852],"th",{},[113,3853,3854],{},"Universal Analytics hit  types",[3850,3856,3857],{},[113,3858,3859],{},"GA 4 event names",[3861,3862,3863,3876,3888,3899],"tbody",{},[3847,3864,3865,3871],{},[3866,3867,3868],"td",{},[422,3869,3870],{},"hit:pageview",[3866,3872,3873],{},[422,3874,3875],{},"event:page_view",[3847,3877,3878,3883],{},[3866,3879,3880],{},[422,3881,3882],{},"hit:event",[3866,3884,3885],{},[422,3886,3887],{},"event:{custom name}",[3847,3889,3890,3895],{},[3866,3891,3892],{},[422,3893,3894],{},"hit:social",[3866,3896,3897],{},[422,3898,3887],{},[3847,3900,3901,3906],{},[3866,3902,3903],{},[422,3904,3905],{},"….",[3866,3907,3908],{},"....",[244,3910,3912],{"id":3911},"cross-platform-tracking",[3811,3913,3914],{"icon":3813,"tooltip":3814},"Cross-platform tracking",[12,3916,3917],{},"GA4 was built on the principle of FireBase measurement, and those of you who have implemented mobile application measurement via FireBase have already encountered the GA4 property before. Google has not allowed the creation of mobile application properties for over a year and all of the new measurements must be in GA4.",[12,3919,3920,3921,3924],{},"You still have a choice for new website measurement and we hope that while GA4 lacks UA functionalities this will remain so. Just be careful when creating a new property. ",[113,3922,3923],{},"By default, GA4 is pre-checked",", and you have to change it manually.",[278,3926],{"source":3927,"caption":3928},"\u002Fupload\u002Fgoogle-analytics-web-and-app.webp","Picture 3 - Google Analytics Web and App tracking options",[3830,3930,3931],{},[3833,3932,3934,3937,3837,3951,3837],{"className":3933},[3836],[3839,3935,3936],{"style":3841},"Table 2 - Comparison Web\u002FApp tracking",[3844,3938,3837,3939],{},[3847,3940,3941,3946],{},[3850,3942,3943],{},[113,3944,3945],{},"Universal  Analytics",[3850,3947,3948],{},[113,3949,3950],{},"GA4",[3861,3952,3953],{},[3847,3954,3955,3958],{},[3866,3956,3957],{},"Web and mobile apps are measured  separately into disconnected properties.",[3866,3959,3960],{},"Web and mobile are measured into one  property.",[12,3962,3963],{},"Now having both Mobile App and Web data in one property is beneficial for User Cross-Device analysis. If your users are able to log in, you can track them with their User ID. This must be configured in the Reporting Identity.",[244,3965,3967],{"id":3966},"user-analytics-instead-of-session-analytics",[3811,3968,3969],{"icon":3813,"tooltip":3814},"User analytics instead of session analytics",[12,3971,3972,3973],{},"The lack of User reporting functionalities in Universal Analytics forced us to do it with other tools. For instance, using BigQuery with visualizations in Data Studio or Power Bi. As GA4 is changing the approach, ",[113,3974,3975],{},"more user analytics insights might be accomplished directly in its UI.",[12,3977,3978,3979,3982],{},"Why is it so important? Consider for instance the following scenario, where the fallacy of the session approach is quite visible. All of you know a Conversion ratio, which is calculated as ",[422,3980,3981],{},"#conversions\u002F#sessions"," in UA. The higher it is the better. You now decide to improve it by increasing the brand and product awareness. What is happening? You attract more sessions and as more prospects come to find out about what you have to offer, your conversion ratio is declining. Oh, no! Well, building awareness has an impact on conversion, but it takes more time, and users need to come more often. So a better metric to evaluate such activity would be calculated as #conversions\u002F#users.",[12,3984,3985],{},"Another similar metric fallacy is the Bounce rate, which, if not linked to the content that the user is interacting with, has little practical benefit.",[278,3987],{"source":3988,"caption":3989},"\u002Fupload\u002Fcustomer-centric-approach.webp","Picture 4 - Customer Centric Approach",[12,3991,3992,3993,3996],{},"Therefore, your analytical approach should change to some extent. Forget KPIs built on sessions. Your main KPIs should be based on User metrics. Moreover, you should pay more attention to the ",[113,3994,3995],{},"details of the customer journey"," and analyze the sequence of individual events within the user's life cycle.",[12,3998,3999],{},"Above, we mentioned changes in the conceptual approach that you will have to adapt to, but your business goals and processes must be adjusted as well. However, this approach is not directly related to GA4 only. A user-centric and event-based approach has been around for years, and GA4 is just adopting it now. You can choose to be user-centric even with Universal Analytics, but GA4 will lead you to it.",[3830,4001,4002],{},[3833,4003,3837,4005,3837,4008,3837,4020,3837],{"className":4004},[3836],[3839,4006,4007],{"style":3841},"Table 3 - Comparison of approaches",[3844,4009,3837,4010],{},[3847,4011,4012,4016],{},[3850,4013,4014],{},[113,4015,3945],{},[3850,4017,4018],{},[113,4019,3950],{},[3861,4021,4022],{},[3847,4023,4024,4027],{},[3866,4025,4026],{},"In Universal Analytics, everything revolves around sessions or page views. These are the primary entities in most of the default reports. In Universal Analytics it is possible to use a user scoped dimension user ID, but even with creating a duplicate and special user view, the benefit is cumbersome. To calculate any user metric from session or hit level metrics is not possible in UA itself.",[3866,4028,4029,4030,4033,4034,3837,4037,1296],{},"User metrics become the primary metrics. The menu in the interface of the new GA4 itself is ",[113,4031,4032],{},"strongly user-oriented",". The main reports are located under the “Life cycle” tab, and the individual items in this menu refer to ",[113,4035,4036],{},"the individual steps in the user's",[113,4038,4039],{},"life cycle",[278,4041],{"source":4042,"caption":4043},"\u002Fupload\u002Fga4-life-cycle.webp","Picture 5 - Life cycle menu in Google Analytics 4",[12,4045,4046],{},"In GA4, you will not find a custom dimension on a session-level scope at this moment. Although the session concept is still available, and even used in some default reports, it is no longer dominant.",[244,4048,4050],{"id":4049},"reporting-and-data-explorations",[3811,4051,4054],{"icon":4052,"tooltip":4053},"indif","Neutral change","Reporting and data explorations",[12,4056,4057,4058,4061,4062,4065],{},"GA4 is not yet suitable for someone who is used to doing exploratory analysis in the reporting interface. On the other hand, its ",[113,4059,4060],{},"reporting functionality is more simple for common users"," who got the system configured by someone else. If you use the Web Analytics tools to continuously check a single KPI, you might be ok. If you need a bit more information about what is happening, meaning you go into Analytics to understand specific changes or want to analyze some trends, it will take you much longer to do it with GA4. You will need to build the analysis in the Analysis hub first, and then you can play with the data. However, if you are a veteran data analyst, you might enjoy the Analysis Hub functionality. This tool ",[113,4063,4064],{},"provides a querying and reporting interface"," that allows analyses that are impossible to do in Universal Analytics without first exporting data to an external database.",[12,4067,4068],{},"Feedback from other early adopters is that you either love or hate the new GA4 reporting interface. If you plan to use Analysis Hub or BigQuery and nothing else, you will be happy. If you are used to the default reports in Universal Analytics, you will miss a lot of features.",[12,4070,4071],{},"We are uncertain whether GA4 will ever have as rich of reporting possibilities as Universal Analytics. Without knowledge of Data Studio or BigQuery, or the option to make default reports from Analysis Hub, it is now not as useful.",[3830,4073,4074],{},[3833,4075,3837,4077,3837,4080,3837,4092,3837],{"className":4076},[3836],[3839,4078,4079],{"style":3841},"Table 4 - Comparison of reporting and analysis capabilities",[3844,4081,3837,4082],{},[3847,4083,4084,4088],{},[3850,4085,4086],{},[113,4087,3945],{},[3850,4089,4090],{},[113,4091,3950],{},[3861,4093,4094,4102,4110,4118],{},[3847,4095,4096,4099],{},[3866,4097,4098],{},"Default reports are usable to start with. Default reports allow for various sets of data visualization.",[3866,4100,4101],{},"Default reports are not as usable without configuration. It has a static set of charts with limited interactivity.",[3847,4103,4104,4107],{},[3866,4105,4106],{},"The custom reporting functionality allows for building quick reports and sharing them.",[3866,4108,4109],{},"The custom reporting functionality is not available.",[3847,4111,4112,4115],{},[3866,4113,4114],{},"It has basic exploratory analysis in default or custom reports.",[3866,4116,4117],{},"Basic exploratory analysis is not possible, and you have to use the complex Analysis Hub.",[3847,4119,4120,4123],{},[3866,4121,4122],{},"Deeper Exploratory analysis, however, is not possible.",[3866,4124,4125],{},"Deeper Exploratory analysis is possible in Analysis Hub or in BigQuery.",[4127,4128,4131,4132],"external-link",{"title":4129,"link":4130,"button":1319},"Functionalities comparison","https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fblog\u002Fgoogle-analytics-4-ultimate-testing-and-comparison-report\u002F","\nIf you would like to know more details and the difference between various the features and modules of both versions of Google Analytics, read the article \n",[422,4133,4134],{},"Google Analytics 4 - The Ultimate Testing and Comparison Report.",[16,4136,1643],{"id":1642},[12,4138,4139],{},"Although there are some missing functionalities, GA4 is ready for light usage and if you still do not know how to start adopting it, below are some quick recommendation steps.",[244,4141,4143,3837,4146],{"id":4142},"step-1-ga4-as-a-playground",[113,4144,4145],{},"Step 1)",[113,4147,4148],{},"GA4 as a playground",[12,4150,4151],{},[422,4152,4153],{},"The duration between 2 and 5 months",[12,4155,4156],{},"Start collecting data into the GA4 property as soon as possible. This will give you the touch and feel of the difference between UA and GA4 and you will know which features you are still missing for production adoption. Use the default measurement (page views and automatic enhanced measurement). Do not spend time configuring events. This will come later and will require much more effort and preparation. Focus on data quality and verification where the default measurement differs from your measurement configuration. Look for sessions and traffic differences especially.",[244,4158,4160],{"id":4159},"step-2-ga4-as-a-playground-for-advanced-features",[113,4161,4162],{},"Step 2) GA4 as a playground for advanced features",[12,4164,4165],{},[422,4166,4167],{},"The duration between 3 and 6 months",[12,4169,4170],{},"Start thinking about conversion events. These might be purchases, time spent on pages, etc. It should be anything essential for the KPI evaluation you currently use in UA. This step will require some implementation effort. At this stage, you must consider the user-centric analytical philosophy. Some legacy KPIs will not be reproducible in the new environment. You will need to adapt and learn this new approach. Prepare others for philosophical differences between UA and GA4.",[244,4172,4174],{"id":4173},"step-3-ga4-production-ready-for-basic-functionalities",[113,4175,4176],{},"Step 3) GA4 production-ready for basic functionalities",[12,4178,4179],{},[422,4180,4181],{},"The duration between 1 week and 1 month",[12,4183,4184],{},"GA4 is now at the stage where you might start using it for production purposes. You will most likely still need to use UA, but GA4 should be ready to take over some of the requirements. Before you make GA4 production-ready, decide if the old data collected have some value or if they were polluted, and not worthy of keeping. Most of the analysts or companies we interviewed start with a fresh new property and delete the low-quality garbage later. After this stage GA4 is now in production mode for your usage.",[244,4186,4188],{"id":4187},"step-4-ga4-becoming-the-primary-web-analytics-tool",[113,4189,4190],{},"Step 4) GA4 becoming the primary Web Analytics tool",[12,4192,4193],{},[422,4194,4195],{},"The duration between 4 months and 1 year",[12,4197,4198],{},"Start by porting over other remaining measurements that could be moved into GA4. As of today, depending on the usage maturity, GA4 covers between 30% and 80% of UA functionalities. It is critical to understand what others are using in UA and what they need before sunsetting UA. While getting more data and configuration on GA4, pay attention to the data quality. This is not the playing phase (Step 1 and Step 2 are) you might quickly ruin both your and the GA4’s reputation in your company, or at the minimum, unnecessarily prolong this stage. Train others on the philosophical differences and advocate for the new approach. This is the hardest part that requires some time.",[244,4200,4202],{"id":4201},"step-5-waiting-for-google-to-enhance-ga4",[113,4203,4204],{},"Step 5) Waiting for Google to enhance GA4",[12,4206,4207],{},[422,4208,4209],{},"The duration is unknown, and we expect Google to get the tool there by mid-2023",[12,4211,4212],{},"At this stage, GA4 should provide functionalities that will match its predecessor. If you do not use UA to its maximum potential, you will likely reach saturation sooner. At this moment, from a technical perspective, the new version is equivalent to its predecessor. You should start forcing the remaining UA users to make the switch. Maybe removing credentials in the old UA would be a gentle push to start the move.",[244,4214,4216],{"id":4215},"step-6-sunset-ua",[113,4217,4218],{},"Step 6) Sunset UA",[12,4220,4221],{},[422,4222,4223],{},"The duration from 0 days up to two years",[12,4225,4226],{},"We recommend having at least 2 years of good quality data covering all your needs in GA4 before it is safe to sunset UA.",[12,4228,4229,4230,4233],{},"If you start with ",[113,4231,4232],{},"Step 1",", the minimal time required to fully switch to GA4 is at least one year with fast adoption. The more realistic scenario for bigger companies and more users is about two years. We do not know any heavy UA users that have reached Step 4 (March 2021). Adding to that, it looks like the realistic estimate that companies could be ready to sunset UA with the required amount of data you have to collect is within a 2.5 to 3-year time frame, so potentially after Christmas 2023. We expect that Google will provide information about when they plan to sunset UA, but we do not know that at the moment.",[209,4235,4236],{"link":211,"button":212},"\n We have successfully implemented digital measurement and Google Analytics for many of our clients. Contact us and we can ensure the smooth transition from Universal  Analytics to Google Analytics 4.\n",{"title":76,"searchDepth":77,"depth":77,"links":4238},[4239,4240,4241,4242,4248],{"id":3696,"depth":77,"text":3697},{"id":3755,"depth":77,"text":3756},{"id":3762,"depth":77,"text":3763},{"id":3805,"depth":77,"text":3806,"children":4243},[4244,4245,4246,4247],{"id":3809,"depth":389,"text":3815},{"id":3911,"depth":389,"text":3914},{"id":3966,"depth":389,"text":3969},{"id":4049,"depth":389,"text":4054},{"id":1642,"depth":77,"text":1643,"children":4249},[4250,4252,4253,4254,4255,4256],{"id":4142,"depth":389,"text":4251},"Step 1) GA4 as a playground",{"id":4159,"depth":389,"text":4162},{"id":4173,"depth":389,"text":4176},{"id":4187,"depth":389,"text":4190},{"id":4201,"depth":389,"text":4204},{"id":4215,"depth":389,"text":4218},"\u002Fupload\u002Fga-4-intro-and-vision.webp",{"externalLinks":4259},[4260,4263],{"url":4261,"name":4262},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fblog\u002Fnew-data-api-for-google-analytics-4","New Data API for Google Analytics 4",{"url":4264,"name":4265},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fblog\u002Fnotes-on-new-features-of-google-analytics-reporting-api-v4\u002F","Notes on new features of Google Analytics Reporting API V4","\u002Fen\u002Fblog\u002Fgoogle-analytics-4-brief-introduction-and-vision","2021-06-29T08:05:00+00:00",16.745,"17 min read",[1341,4271],"content\u002Fen\u002Fblog\u002Fdata-layer-validation-what-why-and-how.md",{"title":3678,"description":3683},"en\u002Fblog\u002Fgoogle-analytics-4-brief-introduction-and-vision","There is a lot of buzz about the new Google Analytics 4. You might even get the perception that not migrating now will cause you a lot of trouble in the future. DO NOT PANIC! GA4 is indeed going to change the future of “free” web analytics, however, this change will only come after you throw out the old measurement paradigm.","5w2c3ZhS1lV6pcjEVpL6CQ1Yhqm6MKcKohdCDkOONwc",{"id":4277,"title":4278,"author":7,"body":4279,"category":992,"description":4283,"extension":83,"image":5654,"isToc":88,"langAlt":7,"meta":5655,"metaDescription":7,"navigation":88,"path":5660,"published":88,"publishedAt":5661,"readingTimeMinutes":5662,"readingTimeText":5663,"relatedArticles":5664,"seo":5665,"stem":5666,"teaser":5667,"updatedAtCustom":7,"__hash__":5668},"blog_en\u002Fen\u002Fblog\u002Fgoogle-analytics-4-ultimate-testing-and-comparison-report.md","Google Analytics 4 – Ultimate Testing and Comparison Report",{"type":9,"value":4280,"toc":5629},[4281,4284,4293,4296,4299,4302,4356,4363,4404,4408,4414,4418,4425,4429,4432,4437,4440,4494,4501,4504,4581,4588,4592,4598,4604,4663,4670,4676,4679,4697,4702,4705,4715,4719,4737,4741,4744,4748,4751,4757,4760,4806,4812,4818,4821,4824,4884,4888,4894,4901,4955,4962,4965,5017,5023,5026,5029,5121,5127,5130,5168,5174,5181,5235,5239,5242,5249,5255,5309,5313,5320,5323,5338,5388,5394,5400,5459,5465,5472,5540,5547,5550,5553,5557,5560,5564,5567,5571,5578,5582,5585,5589,5592,5595,5599,5605,5608,5611,5615,5618,5622,5624,5627],[12,4282,4283],{},"In this article, we do not provide any recommendations or conclusions only merely compare the various modules and functionality of the old Universal Analytics (UA) and the new Google Analytics 4 (GA4).",[4127,4285,4288,4289,4292],{"title":4286,"link":4287,"button":1319},"Google analytics 4 introduction and vision","https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fblog\u002Fgoogle-analytics-4-brief-introduction-and-vision\u002F","\nThis article is an extension of our previous article \n",[422,4290,4291],{},"Google Analytics 4 - Brief Introduction And Vision.","\n If you haven't read it, we recommend you read it before reading our comparison below.\n",[12,4294,4295],{},"As Google Analytics 4 is still under development the content of this section is continually evolving and should not be considered final.",[3811,4297,4298],{"icon":4052,"tooltip":4053},"\nCustom reporting\n",[12,4300,4301],{},"In UA, it is possible to create custom reports or dashboards. Dashboards do contain various elements like charts, tables, etc. Custom reports allow you to choose from three different kinds: a table with a time-series graph (Explorer), just a table (Flat Table), and a map (Map Overlay). The approach to customizations is different in GA4. It is not possible to build custom reports based on existing reports, which is very limiting and might certainly change in the future. It is not possible to add custom reports to already existing default reports. Dashboard functionality is missing in GA4 as well. The new option is to create analyses in Analysis Hub, which are suitable for power users. It is unclear to us why it is not possible to create reports from analyses, and we hope this will be added in the future.",[3830,4303,4304],{},[3833,4305,3837,4307,3837,4310,3837,4322,3837],{"className":4306},[3836],[3839,4308,4309],{"style":3841},"Table 1 - Comparison of custom reporting",[3844,4311,3837,4312],{},[3847,4313,4314,4318],{},[3850,4315,4316],{},[113,4317,3945],{},[3850,4319,4320],{},[113,4321,3950],{},[3861,4323,4324,4332,4340,4348],{},[3847,4325,4326,4329],{},[3866,4327,4328],{},"Dashboards are available.",[3866,4330,4331],{},"Dashboards do not exist, and we do not miss them.",[3847,4333,4334,4337],{},[3866,4335,4336],{},"Dashboard gallery.",[3866,4338,4339],{},"Custom Reports do not exist, although this functionality can be mimicked to a certain degree with Analysis Hub.",[3847,4341,4342,4345],{},[3866,4343,4344],{},"Custom Reports are available; can be easily created from existing reports.",[3866,4346,4347],{},"Exploratory Analysis in GA4 is amazing and can be accomplished in a new tool called Analyses Hub.",[3847,4349,4350,4353],{},[3866,4351,4352],{},"Exploratory Analysis reports are doable from BigQuery or API Query tools only - Data Studio, Power Bi or [Waaila](www.waaila.com).",[3866,4354,4355],{},"Analysis Hub reports can be shared with all users within the property you have access to; reports can be shared with external users, although it is unclear why since there is no possibility to customize them.",[16,4357,4359],{"id":4358},"views-and-filters",[3811,4360,4362],{"icon":4052,"tooltip":4361},"Negative change","Views and filters",[3830,4364,4365],{},[3833,4366,3837,4368,3837,4371,3837,4383,3837],{"className":4367},[3836],[3839,4369,4370],{"style":3841},"Table 2 - Comparison of view\u002Ffilters functionalities",[3844,4372,3837,4373],{},[3847,4374,4375,4379],{},[3850,4376,4377],{},[113,4378,3945],{},[3850,4380,4381],{},[113,4382,3950],{},[3861,4384,4385,4393],{},[3847,4386,4387,4390],{},[3866,4388,4389],{},"Everyone that uses Universal Analytics probably knows that the best practice is to have at least two views on each property: \"Raw\" without any filters and the \"Master\" or “Main” view used for business users. Additionally, we often use a “Test” view to assure changes are okay before doing them on the “Master” view.",[3866,4391,4392],{},"In GA4 there are no views.",[3847,4394,4395,4398],{},[3866,4396,4397],{},"Collected hits can be removed or modified with complex filtering functionality.",[3866,4399,4400,4401,1296],{},"A very limited filtering functionality is available. We believe this is not the final set of filters and that it will be enriched in the future. At this moment it is only possible to remove internal or developer traffic. It is ",[113,4402,4403],{},"not possible to filter based on dimensions",[278,4405],{"source":4406,"caption":4407},"\u002Fupload\u002Fga4-choose-filter-type.webp","Picture 1 - Choosing filter type",[12,4409,4410,4413],{},[113,4411,4412],{},"Filters are no longer used to modify collected data."," A new approach to modify collected events has been introduced, and we believe this tool will have much greater potential in the future. At this moment it is only possible to replace some data with a constant value and not allowing any data-driven transformations.",[278,4415],{"source":4416,"caption":4417},"\u002Fupload\u002Fga4-modify-existing-events.webp","Picture 2 - Modifying existing events Google Analytics 4",[12,4419,4420,4421,4424],{},"New event creation functionality allows deriving events from already collected events. This is a desired functionality, which is available in any professional Web Analytics tools, that allows event enrichment configuration in the user interface. If this functionality will be further enriched it will not be necessary to ",[113,4422,4423],{},"modify the web measurement"," or modify events in BigQuery.",[278,4426],{"source":4427,"caption":4428},"\u002Fupload\u002Fga4-create-new-events.webp","Picture 3 - Creating new events in Google Analytics 4",[12,4430,4431],{},"Removing views that were used for testing filters before applying them to the production view is not possible. It is uncertain how Google is planning to do Quality Assurance without damaging production data. One approach might be to send data in parallel to another property, which could be accomplished by Connected Site Tags when using gtag. For another kind of implementation, it would be more complicated than before.",[16,4433,4434],{"id":3787},[3811,4435,4436],{"icon":3813,"tooltip":3814},"Session",[12,4438,4439],{},"The Session is so special that each Web Analytics tool treats it differently. The basic rule is that it expires after 30 minutes of inactivity (it can be configured). However, it can expire in some other situations as well and this where most of the differences pop up. We can assure you that sessions between GA4 and your existing GA implementation will differ, and it makes no sense to align them. You will need to invest a lot into educating others about what has changed, especially to those who consider Universal Analytics as the golden standard for acquisition analysis.",[3830,4441,4442],{},[3833,4443,3837,4445,3837,4448,3837,4460,3837],{"className":4444},[3836],[3839,4446,4447],{"style":3841},"Table 3 - Comparison of session definition",[3844,4449,3837,4450],{},[3847,4451,4452,4456],{},[3850,4453,4454],{},[113,4455,3945],{},[3850,4457,4458],{},[113,4459,3950],{},[3861,4461,4462,4470,4478,4486],{},[3847,4463,4464,4467],{},[3866,4465,4466],{},"A Session is interrupted at midnight, so the maximum session length might be 24 hours.",[3866,4468,4469],{},"A session is not interrupted at midnight, and it has no time limit, e.g., someone who interacts with the web every 5 minutes might have a year-long session and still be in their first session.",[3847,4471,4472,4475],{},[3866,4473,4474],{},"A Session is interrupted after a defined time of inactivity (session timeout) and is configurable (between 30 minutes and 4.5 hours is the default).",[3866,4476,4477],{},"Session timeout is set for 30 minutes (timeout is configurable only for an app).",[3847,4479,4480,4483],{},[3866,4481,4482],{},"A session is interrupted when the source changes.",[3866,4484,4485],{},"A session is not interrupted when new source changes.",[3847,4487,4488,4491],{},[3866,4489,4490],{},"-",[3866,4492,4493],{},"The Engaged Session is introduced.",[16,4495,4497],{"id":4496},"traffic-attribution",[3811,4498,4500],{"icon":4499,"tooltip":4361},"down","Traffic attribution",[12,4502,4503],{},"Traffic detections in both versions are based on UTM parameters or GCLID (Google Click Identifier or known as Google Ads ID) in the URL.",[3830,4505,4506],{},[3833,4507,3837,4509,3837,4512,3837,4524],{"className":4508},[3836],[3839,4510,4511],{"style":3841},"Table 4 - Comparison of traffic attribution",[3844,4513,3837,4514],{},[3847,4515,4516,4520],{},[3850,4517,4518],{},[113,4519,3945],{},[3850,4521,4522],{},[113,4523,3950],{},[3861,4525,4526,4534,4542,4550,4558,4566,4574],{},[3847,4527,4528,4531],{},[3866,4529,4530],{},"UA has 5 default dimensions: Source (utm_source), Medium (utm_medium), Campaign (utm_campaign), Content (utm_content), and Term (utm_term).",[3866,4532,4533],{},"With GA4, Content (utm_content) and Term (utm_term) are missing. It might be that these will be added in the future, as the tracking script is parsing them. Now it is possible to read them from event parameters and map them into custom dimensions. Interestingly, the term parameter is already available in the BigQuery export for organic traffic. ",[3847,4535,4536,4539],{},[3866,4537,4538],{},"Campaign Code (utm_id) and campaign imports are possible.",[3866,4540,4541],{},"Campaign Code (utm_id) is missing and campaign imports are not possible.",[3847,4543,4544,4547],{},[3866,4545,4546],{},"Campaign attributes are stored on the sessions level only.",[3866,4548,4549],{},"Events are enriched by calculated acquisition attributes, which are taken from source parameters. The Campaign, Source, and Medium parameters have a value for each model - For example: Event Campaign {model}.",[3847,4551,4552,4555],{},[3866,4553,4554],{},"It has default and custom channel grouping.",[3866,4556,4557],{},"Only Default channel grouping is available, whereas custom channel grouping cannot be set.",[3847,4559,4560,4563],{},[3866,4561,4562],{},"It has campaign timeout, which is the time that the campaign could be attributed to the user's subsequent sessions from the time that the user comes from this campaign (by default, it is 6 months, and_it is customizable).",[3866,4564,4565],{},"Campaign timeout does not exist.",[3847,4567,4568,4571],{},[3866,4569,4570],{},"UA has a default attribution called Last click (non-direct) and selection of several basic attribution models.",[3866,4572,4573],{},"The default attribution is the Last click (non-direct), and there are three other models (biased towards google).",[3847,4575,4576,4578],{},[3866,4577,4490],{},[3866,4579,4580],{},"New calculated user-level acquisition dimensions are available. For instance, User Campaign (the first campaign of the first session), though of course it is calculated with Google’s “attribution” model.",[12,4582,4583,4584,4587],{},"Although it looks like the reporting sources settings are similar, the results will be very different. It is mostly due to the ",[113,4585,4586],{},"different session definitions"," and missing campaign timeout.",[278,4589],{"source":4590,"caption":4591},"\u002Fupload\u002Ftrafficattribution.webp","Picture 4 - Comparison of Traffic Attribution",[16,4593,4595],{"id":4594},"custom-dimensions-and-metrics",[3811,4596,4597],{"icon":3813,"tooltip":3814},"Custom dimensions and metrics",[12,4599,4600,4601],{},"As you probably know, there is a big difference in the number of custom dimensions available in the free version of Universal Analytics and in its paid version (GA 360). GA4 has added more dimensions than to the previous version. In addition to this, GA4 has separated the collection logic (event parameters) from reporting logic (dimensions\u002Fmetrics). ",[113,4602,4603],{},"Event parameters can be mapped to dimensions or metrics.",[3830,4605,4606],{},[3833,4607,3837,4609,3837,4612,4624],{"className":4608},[3836],[3839,4610,4611],{"style":3841},"Table 5 - Comparison of custom dimensions and metrics",[3844,4613,3837,4614],{},[3847,4615,4616,4620],{},[3850,4617,4618],{},[113,4619,3945],{},[3850,4621,4622],{},[113,4623,3950],{},[3861,4625,4626,4640,4648,4655],{},[3847,4627,4628,4631],{},[3866,4629,4630],{},"20 custom dimensions available over 4 scopes: Hit (event), Session, User, Product",[3866,4632,4633,4634,4637,4639],{},"50 event scoped dimensions and 50 event scoped metrics, comparable to dimensions and metrics in UA at hit scope",[4635,4636],"br",{},[4635,4638],{},"25 user scope dimensions comparable to dimensions in UA at user scope",[3847,4641,4642,4645],{},[3866,4643,4644],{},"20 custom metrics",[3866,4646,4647],{},"Metrics can have assigned units",[3847,4649,4650,4653],{},[3866,4651,4652],{},"5 custom content groups per view",[3866,4654,4490],{},[3847,4656,4657,4660],{},[3866,4658,4659],{},"3 default dimensions for an event (Event Category, Event Action, Event Label)",[3866,4661,4662],{},"500 unique events (Event name) excluding default events – we no longer use the classic classification of 3 dimensions (Event Category, Event Action, and Event Label) for events. However, nothing prevents us from creating a similar structure using event scope dimensions. Thanks to customization, you can significantly adapt it to your needs.",[16,4664,4666],{"id":4665},"segmentation",[3811,4667,4669],{"icon":4052,"tooltip":4668},"Some good and some bad changes","Segmentation",[860,4671,4673],{"id":4672},"universal-analytics",[113,4674,4675],{},"Universal Analytics",[12,4677,4678],{},"Universal Analytics used Segments as the default segmentation logic across all reports and even in the API.",[327,4680,4681,4689],{},[255,4682,4683,4686,4688],{},[113,4684,4685],{},"By Segments",[4635,4687],{},"Anyone who uses Universal Analytics more intensively for exploratory analysis gets the benefit of segments (unless you have a lot of data where sampling makes this feature useless). Segments can be used in UA in any report, whether it is a default report or a custom report. The Segment must be created and saved before being used. The Segment may be applied to historical data. Segments might be shared across properties.",[255,4690,4691,4694,4696],{},[113,4692,4693],{},"By Audiences",[4635,4695],{},"Audiences are similar to segments with one important addition, in that they can be distributed to other systems (Google Ads) and are linked to the current property. It has a membership duration, the time for which users in the given audience are kept.",[860,4698,4700],{"id":4699},"ga4",[113,4701,3950],{},[12,4703,4704],{},"GA4 has introduced various segmentation approaches and has simplified certain features for daily reporting tasks.",[327,4706,4707],{},[255,4708,4709,4712,4714],{},[113,4710,4711],{},"By Comparison",[4635,4713],{},"\nIt might be that we stick to the previous approach of Segments from UA a bit too much and expected the same functionality from comparisons. This is not the case. You can, in comparison, do very simple segmentation based on dimensions. There is no option to do sequences, etc. If you would like to do it, you have to first define the audience and then use it in there. This is a bit more complicated and is limiting as well because the audience does not look backward. If you used segments a lot, you might not like it.",[278,4716],{"source":4717,"caption":4718},"\u002Fupload\u002Fga4-build-comparison.webp","Picture 5 - Building comparions in Google Analytics 4",[327,4720,4721,4729],{},[255,4722,4723,4726,4728],{},[113,4724,4725],{},"Segments in Analysis Hub",[4635,4727],{},"\nIn case you would like to compare the behavior of two segments in the past, the only option is to use the Analysis Hub. You can create a custom segment within the custom reports, which can be saved. Unfortunately, any segment that is created is just saved in the analysis and cannot be shared or reused, unless you create an audience from it. We believe this is just a bug and will be fixed later.",[255,4730,4731,4734,4736],{},[113,4732,4733],{},"Audiences",[4635,4735],{},"Audiences have the same meaning, usage, and a similar creation interface as Segments in UA. It looks like they are meant to be used as Segments. So be careful! They start collecting data from the moment you create them. Audiences can be shared with Google Ads.",[278,4738],{"source":4739,"caption":4740},"\u002Fupload\u002Fga4-organic-users.webp","Picture 6 - Organic users in Google Analytics 4",[12,4742,4743],{},"You can easily use predefined audiences for segmentation in any reports using the Comparisons functionality mentioned above.",[278,4745],{"source":4746,"caption":4747},"\u002Fupload\u002Fga4-build-comparison-2.webp","Picture 7 - Building comparions 2 in Google Analytics 4",[12,4749,4750],{},"Because of the Audiences limitation for historical comparisons, we suggest creating them early on. Think carefully about what you will need because once created, an Audience cannot be updated. Since Audiences are always calculated after they are created, we believe the sampling issues will go away.",[16,4752,4754],{"id":4753},"sampling",[3811,4755,4756],{"icon":3813,"tooltip":3814},"Sampling",[12,4758,4759],{},"Sampling means that your metrics are estimated based on a sample (random subset) of your data. For anyone who analyzed bigger accounts, this causes a constant headache. Combining more dimensions with segments often resulted in making completely wrong decisions. Even the paid version is not much better at avoiding sampling issues and the option to export data to BigQuery saves it. GA4 offers to export to BigQuery by default, so we expect that any sampling issue will be addressed by the export as well. Actually, that opens an interesting question of what would be the real benefit of a paid version if such exports are now possible in the free version. It might be that the revenue stream generated by the Google Cloud consumption from GA users will surpass the revenue from the GA 360 version.",[3830,4761,4762],{},[3833,4763,3837,4765,3837,4768,3837,4780,3837],{"className":4764},[3836],[3839,4766,4767],{"style":3841},"Table 6 - Comparison of sampling",[3844,4769,3837,4770],{},[3847,4771,4772,4776],{},[3850,4773,4774],{},[113,4775,3945],{},[3850,4777,4778],{},[113,4779,3950],{},[3861,4781,4782,4790,4798],{},[3847,4783,4784,4787],{},[3866,4785,4786],{},"The interface and simple reports are okay, but using customized reports, adding custom dimensions, or segmentation by segments has resulted in terrifying sampling errors.",[3866,4788,4789],{},"The interface, simpler standard reports, and inability to use calculated Segments will most likely not cause sampling issues. As for Analysis Hub, we expect it to be better tuned for processing complex queries and avoiding sampling issues.",[3847,4791,4792,4795],{},[3866,4793,4794],{},"With the API, even on very large data sets, it is possible to retrieve unsampled data.",[3866,4796,4797],{},"With the API, we do not expect much change here compared to the UA API. The cost of queries, however, is calculated differently and other limits are applicable. There is no longer the need to use API to export all data.",[3847,4799,4800,4803],{},[3866,4801,4802],{},"Exporting data view API querying, and cross-dimension combination, mostly by third-party tools, allowed for the export of unsampled data.",[3866,4804,4805],{},"The Data Exports Option to export unsampled data to BigQuery is for free. This is a killer feature.",[12,4807,4808,4809],{},"It is very difficult to compare sampling as data are queried differently. In general, we expect the GA4 sampling issues will be less frequent. ",[113,4810,4811],{},"The possibility to export data to BigQuery is an amazing feature that makes GA4 very actionable and opens wider customizations in Data Studio or other visualization tools.",[16,4813,4815],{"id":4814},"goals-transactions-conversions",[3811,4816,4817],{"icon":3813,"tooltip":3814},"Goals \u002F Transactions \u002F Conversions",[12,4819,4820],{},"Conversions in Universal Analytics are either Goals or Transactions. In GA4 the approach is similar, as conversions are just special events (like a purchase) or any other event you say is a conversion (checkbox in the menu). In Universal Analytics, conversions are created after you configure them and enable recording, which is similar to the GA4 interface.",[278,4822],{"source":4416,"caption":4823},"Picture 8 - Existing events in Google Analytics 4",[3830,4825,4826],{},[3833,4827,3837,4829,3837,4832,4844],{"className":4828},[3836],[3839,4830,4831],{"style":3841},"Table 7 - Comparison of conversions",[3844,4833,3837,4834],{},[3847,4835,4836,4840],{},[3850,4837,4838],{},[113,4839,3945],{},[3850,4841,4842],{},[113,4843,3950],{},[3861,4845,4846,4854,4862,4870,4877],{},[3847,4847,4848,4851],{},[3866,4849,4850],{},"UA has 20 custom-based goals.",[3866,4852,4853],{},"GA4 has 30 custom conversion events, and any event can be marked as a conversion.",[3847,4855,4856,4859],{},[3866,4857,4858],{},"Goals can be based on a destination (URL), Duration, Pages per session, and Smart goals.",[3866,4860,4861],{},"You cannot set goals based on Duration, Session Aggregates, or Smart goals, but you can create a conversion based on any event parameter, dimension, or metric.",[3847,4863,4864,4867],{},[3866,4865,4866],{},"Funnels are part of standardized reporting.",[3866,4868,4869],{},"Funnels are created in the Analysis Hub only and have amazing reporting possibilities for someone more skilled as it is not that simple to create them. These analyses can be shared.",[3847,4871,4872,4875],{},[3866,4873,4874],{},"Each goal can have a single value, which then acts as a metric for that goal.",[3866,4876,4490],{},[3847,4878,4879,4881],{},[3866,4880,4490],{},[3866,4882,4883],{},"When using Audience, conversions can be created as a sequence of events.",[278,4885],{"source":4886,"caption":4887},"\u002Fupload\u002Fga4-funnel-analysis.webp","Picture 9 - Example of fully customized funnel",[12,4889,4890,4891],{},"Events that are suitable for conversions can be created in the data collection JavaScript. You can derive them from existing events (after filtering) or create them from Audience membership creation. ",[113,4892,4893],{},"Conversion events based on Audiences can be even sequence-based.",[16,4895,4897],{"id":4896},"date-time-dimensions",[3811,4898,4900],{"icon":4499,"tooltip":4899},"Negative changes","Date & Time dimensions",[3830,4902,4903],{},[3833,4904,3837,4906,3837,4909,4921],{"className":4905},[3836],[3839,4907,4908],{"style":3841},"Table 8 - Comparison of date & time dimensions",[3844,4910,3837,4911],{},[3847,4912,4913,4917],{},[3850,4914,4915],{},[113,4916,3945],{},[3850,4918,4919],{},[113,4920,3950],{},[3861,4922,4923,4931,4939,4947],{},[3847,4924,4925,4928],{},[3866,4926,4927],{},"Year, Week, Day, Hour, Minute, Hour of Day Dimension, and more are available.",[3866,4929,4930],{},"Many Date\u002FTime dimensions are missing and you are not able to go on granularity under YYYYMMDD.",[3847,4932,4933,4936],{},[3866,4934,4935],{},"If you need more precise collection time, you can set a custom dimension to hold the value up to the second. With only 50k unique values per day, it is not suitable for a high volume of events.",[3866,4937,4938],{},"Until event collection date is available in API, you have to use custom dimension or Big Query Export.",[3847,4940,4941,4944],{},[3866,4942,4943],{},"You can retrieve dateHourMinute from the API.",[3866,4945,4946],{},"The most granular time dimension you can retrieve from API is dateHour.",[3847,4948,4949,4952],{},[3866,4950,4951],{},"The hit collection time is up to the minute in BigQuery export (paid version only).",[3866,4953,4954],{},"The event collection time event_timestamp is up to the millisecond in BigQuery exports (be careful with derived or audience-based events, where time is date of calculation).",[16,4956,4958],{"id":4957},"subject-identifiers",[3811,4959,4961],{"icon":4052,"tooltip":4960},"Some cool description","Subject identifiers",[12,4963,4964],{},"Subject IDs are unavailable in the interface for both versions, unless you duplicate them into a custom dimension. However, you can retrieve them from API or BigQuery.",[3830,4966,4967],{},[3833,4968,3837,4970,3837,4973,3837,4985,3837],{"className":4969},[3836],[3839,4971,4972],{"style":3841},"Table 9 - Comparison of subject identifiers",[3844,4974,3837,4975],{},[3847,4976,4977,4981],{},[3850,4978,4979],{},[113,4980,3945],{},[3850,4982,4983],{},[113,4984,3950],{},[3861,4986,4987,4994,5002,5009],{},[3847,4988,4989,4992],{},[3866,4990,4991],{},"Client ID - not available by default",[3866,4993,4991],{},[3847,4995,4996,4999],{},[3866,4997,4998],{},"Session ID - not available by default",[3866,5000,5001],{},"Session ID - not relevant",[3847,5003,5004,5007],{},[3866,5005,5006],{},"User ID - not available by default",[3866,5008,5006],{},[3847,5010,5011,5014],{},[3866,5012,5013],{},"Available in BigQuery export (paid version only)",[3866,5015,5016],{},"Available in BigQuery export",[16,5018,5020],{"id":5019},"data-api",[3811,5021,5022],{"icon":3813,"tooltip":4960},"Data API",[12,5024,5025],{},"Universal Analytics’ latest API is V4, which often leads to confusion that the V4 is for GA4, and this is actually not correct. The latest version is Universal Analytics API V4 and GA4 API V1. Both APIs’ requests and responses are very similar.",[5027,5028],"external-links",{},[3830,5030,5031],{},[3833,5032,3837,5034,3837,5037,3837,5049,3837],{"className":5033},[3836],[3839,5035,5036],{"style":3841},"Table 10 - Comparison of data API",[3844,5038,3837,5039],{},[3847,5040,5041,5045],{},[3850,5042,5043],{},[113,5044,3945],{},[3850,5046,5047],{},[113,5048,3950],{},[3861,5050,5051,5058,5066,5074,5082,5090,5098,5106,5114],{},[3847,5052,5053,5056],{},[3866,5054,5055],{},"The API provides real-time and reporting functionalities.",[3866,5057,5055],{},[3847,5059,5060,5063],{},[3866,5061,5062],{},"The API provides management functionalities. Not everything is possible to configure - you still need to go to the UI to configure things.",[3866,5064,5065],{},"The API provides management functionalities. As the GA4 is different and still evolving, it is hard to tell how much it fully covers.",[3847,5067,5068,5071],{},[3866,5069,5070],{},"Quota management is based on the count of requests per time.",[3866,5072,5073],{},"The Quota management to limit API queries is different. Instead of the count of requests, the complexity of the query is considered. The positive thing is that you can estimate the cost of a query before you execute it.",[3847,5075,5076,5079],{},[3866,5077,5078],{},"The filtering functionality is basic. Though not very often, you might be limited by this.",[3866,5080,5081],{},"The filtering functionality is more complex and suitable. It is possible to create various AND\u002FOR combinations.",[3847,5083,5084,5087],{},[3866,5085,5086],{},"The API allows four various request kinds: cohort, pivot, histogram, and a regular table.",[3866,5088,5089],{},"The API allows for four various request kinds: cohort, pivot, histogram, and a regular table. The regular request is similar, Cohort is slightly improved and Pivot is implemented differently.",[3847,5091,5092,5095],{},[3866,5093,5094],{},"No new features are added.",[3866,5096,5097],{},"New features are introduced quite regularly. ",[3847,5099,5100,5103],{},[3866,5101,5102],{},"Sampling often affects the result, especially when there is too granular of a request.",[3866,5104,5105],{},"Sampling is gone.",[3847,5107,5108,5111],{},[3866,5109,5110],{},"Segments can be used in the API.",[3866,5112,5113],{},"Audiences can be used in filters.",[3847,5115,5116,5119],{},[3866,5117,5118],{},"There are 10,000 rows per request and pagination.",[3866,5120,5118],{},[16,5122,5124],{"id":5123},"e-commerce",[3811,5125,5126],{"icon":4499,"tooltip":4899},"E-commerce",[12,5128,5129],{},"Both Google Analytics versions have a predefined set of e-commerce measurements. The huge difference is that in GA4 you are not able to visualize collected data in Default Reports. Luckily you can use Analysis Hub.",[3830,5131,5132],{},[3833,5133,3837,5135,3837,5138,3837,5150,3837],{"className":5134},[3836],[3839,5136,5137],{"style":3841},"Table 11 - Comparison of E-commerce",[3844,5139,3837,5140],{},[3847,5141,5142,5146],{},[3850,5143,5144],{},[113,5145,3945],{},[3850,5147,5148],{},[113,5149,3950],{},[3861,5151,5152,5160],{},[3847,5153,5154,5157],{},[3866,5155,5156],{},"E-commerce events, Product Impressions, Product Clicks, Product Detail Impressions, Add\u002FRemove from Cart, Promotion Impressions, Promotion Clicks, Checkout, Purchases, Refunds",[3866,5158,5159],{},"E-commerce events, Product\u002FItem List Views\u002FImpressions, Product\u002FItem List Clicks, Product\u002FItem Detail Views, Adds\u002FRemoves from Cart, Promotion Views\u002FImpressions, Promotion Clicks, Checkouts, Purchases, Refunds",[3847,5161,5162,5165],{},[3866,5163,5164],{},"Default Reporting - several different reports in the e-commerce section of the interface",[3866,5166,5167],{},"Default Reporting is not available",[16,5169,5171],{"id":5170},"alerts-notifications-custom-insights",[3811,5172,5173],{"icon":3813},"Alerts \u002F Notifications \u002F Custom insights",[12,5175,5176,5177,5180],{},"From our perspective alerting is an underused functionality. We saw many problems that could have been avoided with property configured Alerts. In addition to custom alerts, ",[113,5178,5179],{},"Google generates Notifications and Insights."," As Notifications are mostly suggestions to upgrade to Premium versions and lack any practical use, insights are much more useful and do suggest some interesting facts. In GA4, alerts and insights merge into one feature and the tools assist a lot while creating alerts. Unfortunately, the UI is still limited in building more granular triggers. We also would expect more AI-driven functionalities and features, and Google-generated insights for our UA properties containing the same data, as we do send properties to GA4 that are not very useful. Maybe it is just a matter of where Google utilizes its computational resources, and GA4 still does not get enough.",[3830,5182,5183],{},[3833,5184,3837,5186,3837,5189,3837,5201,3837],{"className":5185},[3836],[3839,5187,5188],{"style":3841},"Table 12 - Comparison of Alerts\u002FNotifications\u002FCustom insights",[3844,5190,3837,5191],{},[3847,5192,5193,5197],{},[3850,5194,5195],{},[113,5196,3945],{},[3850,5198,5199],{},[113,5200,3950],{},[3861,5202,5203,5211,5219,5227],{},[3847,5204,5205,5208],{},[3866,5206,5207],{},"Alerts - weak UI and configuration options, just rigid thresholds",[3866,5209,5210],{},"Alerts are Custom insights, which provide much richer UI options, AI-supported alert creation, and anomaly detection. It is still not possible to have many granular triggers.",[3847,5212,5213,5216],{},[3866,5214,5215],{},"Notifications - overloaded with impractical information; No alerting possible for some important notifications",[3866,5217,5218],{},"Notifications are not available.",[3847,5220,5221,5224],{},[3866,5222,5223],{},"Insights - interesting recommendations and quick UI navigations",[3866,5225,5226],{},"Insights are Google calculated. For properties where we do collect identical data, GA4 insights are worse. Although the user interfaces in UA has the GA4 look and feel, it does not work that well in GA4. It is limited and does not provide such functionalities and AI-supported navigation.",[3847,5228,5229,5232],{},[3866,5230,5231],{},"Not possible to create Alerts over API",[3866,5233,5234],{},"It is not possible to create Alerts over API.",[278,5236],{"source":5237,"caption":5238},"\u002Fupload\u002Fga4-create-custom-insights.webp","Picture 10 - Creating custom insights in Google Analytics 4",[12,5240,5241],{},"If you miss a more robust feature for incident detection you can try this tool.",[16,5243,5245],{"id":5244},"predictive-analytics",[3811,5246,5248],{"icon":3813,"tooltip":5247},"Positive changes","Predictive analytics",[12,5250,5251,5252,1296],{},"UA is very limited in terms of predictive reports. There are only a few metrics that are calculated and we are often skeptical about their results. On the contrary, GA4 is much more intelligent. It provides a large set of predictive metrics which are available in the Analysis Hub. Compared to UA, the results look much more trustworthy. Although we used to calculate these metrics on the BigQuery ML modules for UA, now these are part of GA4. If you would like to utilize them outside GA4, there is no API available and even the documentation is sporadic in terms of how these are calculated. ",[113,5253,5254],{},"The lack of such features in UA made it seem more like a toy than a serious Web Analytics tool, so we are happy it has gotten more serious again",[3830,5256,5257],{},[3833,5258,3837,5260,3837,5263,3837,5275,3837],{"className":5259},[3836],[3839,5261,5262],{"style":3841},"Table 13 - Comparison of predictive analytics",[3844,5264,3837,5265],{},[3847,5266,5267,5271],{},[3850,5268,5269],{},[113,5270,3945],{},[3850,5272,5273],{},[113,5274,3950],{},[3861,5276,5277,5285,5293,5301],{},[3847,5278,5279,5282],{},[3866,5280,5281],{},"Session Quality report (only available in GA 360) – evaluates sessions based on how close it was to a transaction. This is a posterior calculation and on the sessions level, we do not see much benefit there.",[3866,5283,5284],{},"The Session Quality report is not available. As GA4 is user-centric and the UA reports are technically useless, we hope this will not be even included. ",[3847,5286,5287,5290],{},[3866,5288,5289],{},"Conversion Probability report (only available in GA 360) – evaluates how close users are to transactions. As this is a posterior calculation, we do not see much benefit there. In many UA views where we evaluated these calculations, the results were often so skewed that we did not see any benefit there.",[3866,5291,5292],{},"The Conversion Probability report is included in the predictive User Lifetime analysis.",[3847,5294,5295,5298],{},[3866,5296,5297],{},"External ML models - it is possible to easily calculate predictive metrics in BigQuery (360 version only) or external tools based on API extracted data.",[3866,5299,5300],{},"Analysis Hub - the User Lifetime analysis technique provides a ton of various metrics, like churn prediction, Purchase probability, etc.",[3847,5302,5303,5306],{},[3866,5304,5305],{},"Anomaly detection is not possible.",[3866,5307,5308],{},"Anomaly detection is possible.",[278,5310],{"source":5311,"caption":5312},"\u002Fupload\u002Fga4-anomaly-detection.webp","Picture 11 - Anomaly detection in Google Analytics 4",[16,5314,5316],{"id":5315},"google-cloud-integration",[3811,5317,5319],{"icon":3813,"tooltip":5318},"Very positive changes","Google Cloud integration",[12,5321,5322],{},"We are really excited about this feature. We even decided to rate this section with two thumbs up. The free version of UA is very limiting when you need to export the data for other processing. Even though there are external tools that you use to export UA data into other database solutions, having an option to turn it on in GA4 is a huge plus. Of course, you will have to pay for BigQuery, but the prices are decent, between 10 EUR and 100 EUR for most websites. If you do not need to keep data for more than 60 days you can even have a free sandbox environment.",[5324,5325,5326,5327,5331,5332,5337],"tip",{},"\nThe price for BigQuery can be estimated based on your data. You can use the BigQuery price calculator in Waaila to estimate it for you for \n",[37,5328,4675],{"href":5329,"rel":5330},"https:\u002F\u002Fapp.waaila.com\u002F#\u002Ftemplate-gallery\u002Fwaaila-ga-bigquery-cost-calculator",[41],"\n and \n",[37,5333,5336],{"href":5334,"rel":5335},"https:\u002F\u002Fapp.waaila.com\u002F#\u002Ftemplate-gallery\u002Fwaaila-ga4-bigquery-cost-calculator",[41],"Google Analytics 4","\n.\n",[3830,5339,5340],{},[3833,5341,3837,5344,3837,5347,3837,5365,3837],{"className":5342},[5343],"three-columns",[3839,5345,5346],{"style":3841},"Table 14 - Comparison of Google Cloud integration",[3844,5348,3837,5349],{},[3847,5350,5351,5356,5361],{},[3850,5352,5353,5355],{},[113,5354,3945],{}," (Free)",[3850,5357,5358,5360],{},[113,5359,3945],{}," 360",[3850,5362,5363],{},[113,5364,3950],{},[3861,5366,5367,5378],{},[3847,5368,5369,5372,5375],{},[3866,5370,5371],{},"BigQuery is not available natively, which means third-party tools need to be used.",[3866,5373,5374],{},"BigQuery is integrated natively and you can enable one export per view. Both real-time and daily data are exported.",[3866,5376,5377],{},"BigQuery export is integrated natively and you can enable one export per property. Real-time data can be streamed to BigQuery when billing is enabled.",[3847,5379,5380,5383,5385],{},[3866,5381,5382],{},"Streaming events to another cloud consumer is not possible.",[3866,5384,5382],{},[3866,5386,5387],{},"Google Cloud Functions are integrated. Events collected can be in near real-time, streamed, and processed. This is an amazing functionality.",[16,5389,5391],{"id":5390},"other-google-products-integration",[3811,5392,5393],{"icon":4499,"tooltip":4899},"Other Google products integration",[12,5395,5396,5397],{},"The marketing ecosystem for an individual company consists of dozens of tools that, when integrated, provide much greater potential. Of course, there is a constant rivalry between the major vendors and you cannot expect Google to provide integration of competing technologies. It would be sufficient to at least be able to integrate all of the products from one vendor and this is the situation where GA4 provides horrible support. With the exception of Google Ads and the previously mentioned BigQuery, it does not provide any other integration. You can ",[113,5398,5399],{},"forget Search Console, which is not a big deal anyway, however the inability to connect Google Optimize is a huge deficiency.",[3830,5401,5402],{},[3833,5403,3837,5405,3837,5408,5420],{"className":5404},[5343],[3839,5406,5407],{"style":3841},"Table 15 - Comparison of Google products integration",[3844,5409,3837,5410],{},[3847,5411,5412,5416],{},[3850,5413,5414,5360],{},[113,5415,3945],{},[3850,5417,5418],{},[113,5419,3950],{},[3861,5421,5422],{},[3847,5423,5424,5454],{},[3866,5425,5426,5427,5429,5430,5432,5433,5435,5436,5438,5439,5441,5442,5444,5445,5447,5448,5450,5451,5453],{},"•\tAdSense",[4635,5428],{},"•\tAdExchange",[4635,5431],{},"•\tBigQuery (paid version)",[4635,5434],{},"•\tCampaign Manager 360",[4635,5437],{},"•\tDisplay & Video 360",[4635,5440],{},"•\tGoogle Ads",[4635,5443],{},"•\tGoogle Optimize",[4635,5446],{},"•\tPostbacks",[4635,5449],{},"•\tSearch Ads 360",[4635,5452],{},"•\tSearch Console",[3866,5455,5456,5457,5441],{},"•\tBigQuery",[4635,5458],{},[16,5460,5462],{"id":5461},"data-imports",[3811,5463,5464],{"icon":4499,"tooltip":4899},"Data imports",[12,5466,5467,5468,5471],{},"Sometimes it makes sense to enhance or enrich Google Analytics data with data imports. For some clients who use an external database, or those who are cautious about providing sensitive data to Google, this has a little benefit. For those who use this feature a lot, ",[113,5469,5470],{},"GA4 provides very limited functionality",". Not all UA imports are available now and the worst thing is that only manual imports are possible. We believe that imports will be enriched in the future.",[3830,5473,5474],{},[3833,5475,3837,5477,3837,5480,5492],{"className":5476},[5343],[3839,5478,5479],{"style":3841},"Table 16 - Comparison of data imports",[3844,5481,3837,5482],{},[3847,5483,5484,5488],{},[3850,5485,5486],{},[113,5487,3945],{},[3850,5489,5490],{},[113,5491,3950],{},[3861,5493,5494,5526,5533],{},[3847,5495,5496,5520],{},[3866,5497,5498,5499,5501,5502,5504,5505,5507,5508,5510,5511,5513,5514,5516,5517,5519],{},"•\tRefund data",[4635,5500],{},"•\tUser data",[4635,5503],{},"•\tCampaign data",[4635,5506],{},"•\tGeography data",[4635,5509],{},"•\tContent data",[4635,5512],{},"•\tProduct data",[4635,5515],{},"•\tCustom data",[4635,5518],{},"•\tCost data",[3866,5521,5522,5523,5525],{},"•\tUser data import (by client ID or by user ID)",[4635,5524],{},"•\tItem data import",[3847,5527,5528,5531],{},[3866,5529,5530],{},"Manual upload",[3866,5532,5530],{},[3847,5534,5535,5538],{},[3866,5536,5537],{},"Automated upload",[3866,5539,4490],{},[16,5541,5543],{"id":5542},"implementation",[3811,5544,5546],{"icon":3813,"tooltip":5545},"Easy","Implementation",[12,5548,5549],{},"This section is special, and we decided not to make a comparison between UA and GA4. We assume that you are familiar with UA implementations so we just stressed the new approaches or areas where it is important to be careful.",[12,5551,5552],{},"There are 2 main options for how to implement GA4.",[244,5554,5556],{"id":5555},"gtagjs","gtag.js",[12,5558,5559],{},"This approach has been available for more than a year and can be used for other Google products, like the previous version of Google Analytics UA, Google Ads, or Double Click. If you have gtag included in your application, you can start using it for GA4 as well. Of course, you have to identify all of the events you want to collect manually.",[860,5561,5563],{"id":5562},"connected-site-tags","Connected site tags",[12,5565,5566],{},"This method offers a very fast integration of existing measurements. GA4 can listen to your existing UA measurements implemented by gtag. You can start listening by providing the property ID into the connected tag configuration. This is also very handy when you would like to test your configuration first.",[278,5568],{"source":5569,"caption":5570},"\u002Fupload\u002Fga4-connected-site-tags.webp","Picture 16 - Connected site tags in Google Analytics 4",[727,5572,5573,5574,5577],{},"\nWe only recommend this solution if you want to test out the new GA4. \n",[113,5575,5576],{},"Please DO NOT consider Connected Site Tags to be a full implementation!","\n It does not take into account a new approach to event measurement and a new data model.\n",[244,5579,5581],{"id":5580},"google-tag-manager","Google Tag Manager",[12,5583,5584],{},"Setting up GTM for GA4 is very simple unless you want to measure something extra. As the whole logic is hidden in the tag, you just use the Stream ID (Measurement ID) and configure the corresponding templates.",[244,5586,5588],{"id":5587},"enhanced-measurement","Enhanced Measurement",[12,5590,5591],{},"An exciting part of GA4 is called Enhanced Measurement. In the settings of your GA4, you will find data streams which are measurement streams from several sources.",[12,5593,5594],{},"For the web stream, you will find the Enhanced measurement setting. You can set many commonly used measurements with this setting, such as scroll measurement, outbound clicks, and more. Also, the tracking script gets automatically updated.",[278,5596],{"source":5597,"caption":5598},"\u002Fupload\u002Fga4-enhanced-measurement.webp","Picture 17 - Enhanced measurement in Google Analytics 4",[16,5600,5602],{"id":5601},"debugging",[3811,5603,5604],{"icon":3813,"tooltip":5247},"Debugging",[12,5606,5607],{},"In UA, you could either check the measurements directly on the website using various browser extensions or in the real-time view. Validating measured results fully requires you to wait for a few hours or even a day. Any changes you wanted to verify were limited by these time delays.",[12,5609,5610],{},"GA4 is very advanced in this regard. You can do more on validation and assure higher quality data. Part of the GA4 is a tool called Debugger, which can be found directly in the main menu. To activate it you must visit your web page with ?gtm_debug=x parameter. This will render a dialog in the lower right corner that will tell you more.",[278,5612],{"source":5613,"caption":5614},"\u002Fupload\u002Fga4-not-connected.webp","Picture 19 - Error message in Google Analytics 4",[12,5616,5617],{},"After you start an activity, events will flow into your debug view in the GA4 interface.",[278,5619],{"source":5620,"caption":5621},"\u002Fupload\u002Fga4-debug-device.webp","Picture 19 - Google Analytics 4 Debug device",[16,5623,1643],{"id":1642},[12,5625,5626],{},"Although we have spent a huge number of hours on GA4 testing and consolidating our findings into this article, it is still not a full comparison list. Between the time we started writing it and now, many things have already changed. As the new Google Analytics version is continuously being updated, it might be that some missing features or functionalities were already introduced.",[209,5628,4236],{"link":211,"button":212},{"title":76,"searchDepth":77,"depth":77,"links":5630},[5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5652,5653],{"id":4358,"depth":77,"text":4362},{"id":3787,"depth":77,"text":4436},{"id":4496,"depth":77,"text":4500},{"id":4594,"depth":77,"text":4597},{"id":4665,"depth":77,"text":4669},{"id":4753,"depth":77,"text":4756},{"id":4814,"depth":77,"text":4817},{"id":4896,"depth":77,"text":4900},{"id":4957,"depth":77,"text":4961},{"id":5019,"depth":77,"text":5022},{"id":5123,"depth":77,"text":5126},{"id":5170,"depth":77,"text":5173},{"id":5244,"depth":77,"text":5248},{"id":5315,"depth":77,"text":5319},{"id":5390,"depth":77,"text":5393},{"id":5461,"depth":77,"text":5464},{"id":5542,"depth":77,"text":5546,"children":5648},[5649,5650,5651],{"id":5555,"depth":389,"text":5556},{"id":5580,"depth":389,"text":5581},{"id":5587,"depth":389,"text":5588},{"id":5601,"depth":77,"text":5604},{"id":1642,"depth":77,"text":1643},"\u002Fupload\u002Fga-4-compare.webp",{"externalLinks":5656},[5657,5659],{"url":5658,"name":4262},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fblog\u002Fnew-data-api-for-google-analytics-4\u002F",{"url":4264,"name":4265},"\u002Fen\u002Fblog\u002Fgoogle-analytics-4-ultimate-testing-and-comparison-report","2021-06-29T12:59:39+00:00",25.46,"26 min read",[1341,4271],{"title":4278,"description":4283},"en\u002Fblog\u002Fgoogle-analytics-4-ultimate-testing-and-comparison-report","Are you wondering what new functionalities is Google Analytics 4 bringing and if your favorite feature from Universal Analytics is still there? We tested them for you.","VicXSPHx9wPycIyhExXDHqLQJvg1fJoNkoCxneJ75Jc",{"id":5670,"title":5671,"author":5672,"body":5673,"category":7,"description":5794,"extension":83,"image":5795,"isToc":85,"langAlt":5796,"meta":5797,"metaDescription":7,"navigation":88,"path":5798,"published":88,"publishedAt":5799,"readingTimeMinutes":5800,"readingTimeText":398,"relatedArticles":7,"seo":5801,"stem":5802,"teaser":5803,"updatedAtCustom":7,"__hash__":5804},"blog_en\u002Fen\u002Fblog\u002Fgoogle-analytics-bigquery-export-calculator.md","Google Analytics BigQuery Export Calculator","Oliver Vesely",{"type":9,"value":5674,"toc":5791},[5675,5684,5693,5707,5716,5719,5723,5733,5743,5753,5763,5766],[12,5676,5677,5678,5683],{},"Free version of Google Analytics 4, allows you to activate continuous exports to BigQuery. This is a new functionality that was not available in the non-paid version of Universal Analytics. However, before you ",[37,5679,5682],{"href":5680,"rel":5681},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Yrls-PFVxcQ",[41],"activate such an export",", it is important to note that BigQuery is a paid service and this export will not be for free. Unless your website is visited by only a handful of people per day, it is evident that you will pay.",[12,5685,5686,5687,5692],{},"Estimating the cost, however, is not at all easy. If you've played with the cost calculator provided by Google itself, you probably know what I mean. There are a number of variables that go into the calculation that need to be factored into the cost calculation. But how does one know what to set there. Unfortunately, the parameters that the cost calculator for BigQuery works with are not easy for a web analyst to grasp, so we decided to create a calculator that we published to a ",[37,5688,5691],{"href":5689,"rel":5690},"https:\u002F\u002Fapp.waaila.com",[41],"Waaila app",". The calculator will do this estimation for you, directly from the data you have in Google Analytics. So you don't have to enter anything and, more importantly, you don't have to pay anything for such calculation.",[327,5694,5695,5701],{},[255,5696,5697],{},[37,5698,5700],{"href":5329,"rel":5699},[41],"Calculate BigQuery cost based on Universal Analytics hits",[255,5702,5703],{},[37,5704,5706],{"href":5334,"rel":5705},[41],"Calculate BigQuery cost based on Google Analytics 4 events",[727,5708,5709,5710,5715],{},"\nYou may be familiar with \n",[37,5711,5714],{"href":5712,"rel":5713},"https:\u002F\u002Fwaaila.com",[41],"Waaila","\n as an AI-powered community driven web measurement analyzer that is programmed to detect anomalies and inconsistencies. For this case, Waaila will be turned into an intelligent cost estimator of the GA to BigQuery export. \n",[12,5717,5718],{},"If you want to get even more accurate estimation, don't go to Waaila yet, read this article to understand how to play around with parameters in the calculator settings.",[16,5720,5722],{"id":5721},"frequently-asked-questions-about-the-price-of-the-bigquery-database","Frequently asked questions about the price of the BigQuery database",[12,5724,5725,5728,5730],{},[113,5726,5727],{},"Will I pay for exporting data from the free version of Google Analytics to BigQuery?",[4635,5729],{},[422,5731,5732],{},"Google Analytics 4 offers two types of exports, one exports all collected events for the previous day. Exporting up to 1 million events is free of charge (up to 1 billion events in the paid version). If you have more events than 1 million in Google Analytics, the daily export cannot be used and you have to export the data via streaming mode, which is paid but has no limit on the volume of data.",[12,5734,5735,5738,5740],{},[113,5736,5737],{},"Should I get BigQuery with flat-rate payment or should I pay for on-demand use?",[4635,5739],{},[422,5741,5742],{},"If you are considering using BigQuery for the first time and only for Google Analytics data, flat-rate payment doesn't make any sense to you.",[12,5744,5745,5748,5750],{},[113,5746,5747],{},"Will I also pay for the data I leave stored in BigQuery?",[4635,5749],{},[422,5751,5752],{},"BigQuery differentiates the costs according to how the data is handled, unless you make any changes to the tables exported from Google Analytics (and don't really do that directly to these tables) the data is stored in active storage for 90 days and then moved to long-term storage. So for example, out of a year's history of GA4 data, it will have 90 days stored in active storage and the remaining 275 days in long term storage.",[12,5754,5755,5758,5760],{},[113,5756,5757],{},"Will I pay for connecting Power BI or Data Studio to BigQuery?",[4635,5759],{},[422,5761,5762],{},"Power BI allows you to read data in two ways. Import the data to the Power BI server or use direct queries to BigQuery. In the case of import, this is a one-time data retrieval and you only pay for this retrieval. For using Power BI's server sync, the payments will not be that significant. In the case of direct queries, it depends on how many tables are linked and how complex the report is. Updating a single report may then mean several queries. Data Studio works similarly, each report can have multiple queries. Furthermore, the key is to have an idea of how many users will actively use the report and how often. But in general, it can be recommended that the data is aggregated first and the reporting tool connects to these aggregated tables.",[12,5764,5765],{},"If you plan to work with raw data and you have not yet considered exporting events to BigQuery, keep in mind that Google Analytics 4 has a very strict data retention policy and if you do not have this export activated, you will not be able to access these data after 14 months. On the other side the price of BigQuery is very convenient and will be bellow 100 € for most clients. So go ahead, now you will be able to fine tune the Waaila parameters even more precisely.",[5767,5768,5771,5772,5771,5781,5771,5788],"div",{"className":5769},[5770],"calc-waailaTemplates","\n  ",[37,5773,5776,5777,5771],{"title":5774,"target":5775,"href":5329},"Get the UA BQ Price Calculator template","_blank","\n    ",[148,5778],{"alt":5779,"src":5780},"Waaila template for UA BQ Price Calculator","\u002Fupload\u002Fblog-gabq.webp",[37,5782,5776,5784,5771],{"title":5783,"target":5775,"href":5334},"Get the GA4 BQ Price Calculator template",[148,5785],{"alt":5786,"src":5787},"Waaila template for GA4 BQ Price Calculator","\u002Fupload\u002Fblog-ga4bq.webp",[3464,5789,5790],{},"\n    .calc-waailaTemplates {\n      display: grid;\n      grid-template-columns: 1fr;\n      grid-gap: 20px;\n      margin: 30px 0 0;\n    }\n    .calc-waailaTemplates a {\n      max-width: 400px;\n    }\n    @media screen and (min-width: 600px) {\n      .calc-waailaTemplates {\n        grid-template-columns: 1fr 1fr;\n      }\n      .calc-waailaTemplates a {\n        max-width: 100%;\n      }\n    }\n    .calc-waailaTemplates a img {\n      transition: all .3s;\n    }\n    .calc-waailaTemplates a img {\n      margin: 0;\n      display: block;\n    }\n    .calc-waailaTemplates a:hover img {\n      box-shadow: 0 2px 7px 0 rgb(0 0 0 \u002F 15%);\n    }\n  ",{"title":76,"searchDepth":77,"depth":77,"links":5792},[5793],{"id":5721,"depth":77,"text":5722},"Free version of Google Analytics 4, allows you to activate continuous exports to BigQuery. This is a new functionality that was not available in the non-paid version of Universal Analytics. However, before you activate such an export, it is important to note that BigQuery is a paid service and this export will not be for free. Unless your website is visited by only a handful of people per day, it is evident that you will pay.","\u002Fupload\u002Fblog-ga4-bigquery-calculator.webp","google-analytics-bigquery-export-kalkulacka",{},"\u002Fen\u002Fblog\u002Fgoogle-analytics-bigquery-export-calculator","2022-07-08T11:09:00.000+00:00",4.68,{"title":5671,"description":5794},"en\u002Fblog\u002Fgoogle-analytics-bigquery-export-calculator","Migrating to Google Analytics 4 often leads to considerations whether to start using Google Cloud BigQuery or not. The answer is clear, definitely yes! But how much it will it cost? This article describes how such calculator can be configured.","8KkkfklXeR78viB3lm-Ola8VUVtbTFxW46Z4SAaetmg",{"id":5806,"title":5807,"author":5808,"body":5809,"category":5935,"description":5813,"extension":83,"image":5936,"isToc":85,"langAlt":5937,"meta":5938,"metaDescription":5939,"navigation":88,"path":5940,"published":88,"publishedAt":5941,"readingTimeMinutes":5942,"readingTimeText":224,"relatedArticles":7,"seo":5943,"stem":5944,"teaser":5945,"updatedAtCustom":7,"__hash__":5946},"blog_en\u002Fen\u002Fblog\u002Fgoogle-analytics-proxy.md","Comment on the CNIL statement for the use of Google Analytics","Jan Hornych",{"type":9,"value":5810,"toc":5930},[5811,5814,5817,5821,5824,5827,5831,5839,5847,5856,5864,5872,5880,5888,5892,5895,5903,5915],[12,5812,5813],{},"The French Data Protection Authority, the CNIL issued a statement in its FAQ on how to use Google Analytics to comply with the General Data Protection Regulation (2016\u002F679 GDPR).",[12,5815,5816],{},"The original issue, why local authorities in Austria, France and Liechtenstein banned the use of Google Analytics (even in the anonymous mode) was related to unauthorized transfer of personal data outside of the EU. Google responded to this shortcoming with a solution that the collection servers will be located close to the location of the measured IP address*. According to CNIL this is not sufficient and therefore they issued a list of rules under which Google Analytics can be used in the EU.",[278,5818],{"source":5819,"caption":5820},"\u002Fupload\u002Fblog-ga-ip-location.png","\nFor example, when testing this on June 10th 2022 and accessing the web page from a EU region (Prague), the request goes to a server with the address region1.google-analytics.com, which has IP 216.239.32.36 and according to ip address lookup it is a server located in Google Data Center in California. But a week earlier, the requests went to servers in the EU. Source: whatismyipaddress.com\n",[12,5822,5823],{},"According to a statement made by the French authority, even this procedure (if it would work, which it doesn't seem to, see image above) is insufficient, and therefore they created a set of explicit rules that must be met to ensure  the use of Google Analytics** complies with the GDPR regulation and ensure that no personal data is sent outside the EU.",[12,5825,5826],{},"The Authority's recommendation is therefore not to send data to Google Analytics directly, but to use an intermediary system to cleanse the data before sending it to GA. A so-called proxy server. Below are listed rules required by the authority, including my personal comment.",[16,5828,5830],{"id":5829},"to-comply-with-gdpr-this-proxy-must-provide-the-following-functionality","To comply with GDPR, this proxy must provide the following functionality",[12,5832,5833,5836],{},[113,5834,5835],{},"IP addresses must not be sent to servers belonging to the measurement tool.",[122,5837,5838],{},"I would, here, rather respect Google's claim that once it has cut the last Byte of an IP address, it will never link that data again and that last Byte will be forgotten forever. But so be it, if I send in the IP address already cut off, that's better. In fact, this was even suggested by Google in their presentation. They suggested to use SGMT in a docker running outside of the Google Cloud.",[12,5840,5841,5844],{},[113,5842,5843],{},"The device identifier (visitorId, in GA's case _ga cookies) and any user identifier must be replaced.",[122,5845,5846],{},"This is logical. The text also mentions that pseudo-anonymization is acceptable, but only if the algorithm does not run on the measuring platform's server and the platform cannot access it.",[12,5848,5849,5852,5853],{},[113,5850,5851],{},"Information about what page the user came to the site from must be deleted",".\n",[122,5854,5855],{},"We're talking about the document.referrer parameter here and that's probably too strict, I can't think of a case (except in some extremely unlikely scenarios) where this parameter, if it's just a domain, could help in identifying the user.",[12,5857,5858,5861],{},[113,5859,5860],{},"All parameters in the URL must be deleted when the page is submitted.",[122,5862,5863],{},"As with the previous case, if the parameter is aggregated, I wouldn't consider it as data that can help with subject identification. Some pages might semantically differ depending on what parameter they have, for example ?filter=newproducts. I guess this can be solved by some subsequent mapping to virtual pages. They also mentioned not to send utm parameters along with the page. Again, if it contains an aggregated identifier, such as a campaign ID, I find it pretty harmless. On the other hand, why should one send such parametr in the page path and not in a custom dimension.",[12,5865,5866,5869],{},[113,5867,5868],{},"Additional techniques that will lead to enrichment of the data collected must not be used. For example, fingerprinting, user agent detection, etc.",[122,5870,5871],{},"This is logical, so no comment",[12,5873,5874,5877],{},[113,5875,5876],{},"No other cross site identifiers should be sent.",[122,5878,5879],{},"I don't know exactly what they mean by this The only dangerous think I can think of is link the visitor behavior between different sites. Probably something like 3rd party cookie parameters?",[12,5881,5882,5852,5885],{},[113,5883,5884],{},"No other data that will lead to the identification of the subject",[122,5886,5887],{},"They just repeat what is already mentioned by the regulation itself.",[244,5889,5891],{"id":5890},"other-comments","Other comments",[12,5893,5894],{},"Finally, the authority requires that the proxy server must run in an environment that ensures that collected not redacted data, are not in reach of the measurement platform and further to ensure that the proxy server itself is not running outside of the EU. So this is perfectly logical, perhaps to prevent someone from thinking of running the Proxy server in AWS, Azure, Heroku or any other cloud environment in a data center located in the US. The Google Cloud itself, regardless of location, is out of the question because it is not technically possible to gurantee Gooogle will not be able to link the data. The proxy must therefore run in EU lcoated datacenter or on internal servers.",[12,5896,5897,5898,1296],{},"My knowledge of French is at such a level that this layman's translation can be considered only as my personal atempt to bring the rules to other non french speaking audience. For those interested to read it in french, here is the ",[37,5899,5902],{"href":5900,"rel":5901},"https:\u002F\u002Fwww.cnil.fr\u002Ffr\u002Fcookies-et-autres-traceurs\u002Fregles\u002Fgoogle-analytics-et-transferts-de-donnees-comment-mettre-son-outil-de-mesure-daudience-en-conformite",[41],"original",[12,5904,5905,5906,5910,5911,5913],{},"I have tried to be as objective as possible, but the fact that our product portfolio includes a product ",[37,5907,70],{"href":5908,"rel":5909},"https:\u002F\u002Fmhubcloud.com\u002Fcs",[41]," which is such proxy, it is possible that, albeit unintentionally, my view is influenced.\n",[4635,5912],{},[4635,5914],{},[12,5916,2090,5917,5924,5926,5927],{},[422,5918,5919],{},[37,5920,5923],{"href":5921,"rel":5922},"https:\u002F\u002Fsupport.google.com\u002Fanalytics\u002Fanswer\u002F11598602",[41],"Google Analytics - Regional data collection",[4635,5925],{},"\n**",[422,5928,5929],{},"CNIL refers to Google Analytics, but of course this also applies to other web analytics platforms where there is a risk of data transfer outside the EU.",{"title":76,"searchDepth":77,"depth":77,"links":5931},[5932],{"id":5829,"depth":77,"text":5830,"children":5933},[5934],{"id":5890,"depth":389,"text":5891},"GDPR","\u002Fupload\u002Fblog-cnil-ga.webp","google-analytics-proxy",{},"Finally, the rules on how to use Google Analytics legally in the EU have been clarified. A detailed description of the rules with commentary on how to resolve.","\u002Fen\u002Fblog\u002Fgoogle-analytics-proxy","2022-06-08T11:37:00.000+00:00",5.145,{"title":5807,"description":5813},"en\u002Fblog\u002Fgoogle-analytics-proxy","After long discussions, the rules under which Google Analytics can be used legally in the EU have finally been clarified. As we have already announced, the solution will lead to the use of an independent system (proxy), which ensures that no personal data will not arrive into Google Analytics.","GHYJSXNyqkE-NRtNcJDyvOZBowOCM2jmB04v5SfNh_s",{"id":5948,"title":5949,"author":5950,"body":5951,"category":7,"description":5955,"extension":83,"image":6102,"isToc":85,"langAlt":6103,"meta":6104,"metaDescription":7,"navigation":88,"path":6105,"published":88,"publishedAt":6106,"readingTimeMinutes":6107,"readingTimeText":398,"relatedArticles":7,"seo":6108,"stem":6109,"teaser":6110,"updatedAtCustom":7,"__hash__":6111},"blog_en\u002Fen\u002Fblog\u002Fgtm-issue-en.md","The secret GTM release","Jan Brzobohatý",{"type":9,"value":5952,"toc":6097},[5953,5956,5959,5968,5981,5984,5988,5997,6001,6004,6007,6010,6013,6016,6019,6023,6026,6029,6032,6035,6038,6042,6045,6048,6052,6055,6058,6061,6064,6067,6070,6073,6076,6078,6087,6090],[12,5954,5955],{},"Do you use Google Tag Manager? Have you implemented some JavaScript code there? If yes, this article should be of great interest to you. If you have a lot of JavaScript logic in your GTM, you have probably already noticed issues. This article will try to give a more detailed explanation of just exactly what on earth went wrong on 20th May 2024 at 21:00.",[12,5957,5958],{},"The story already begins around 7th May, when Google began to release a new GTM version for 5 per cent of traffic. If you were lucky enough to not have any JS code in your GTM that could be impacted by the release, it likely did not affect you in any way. If not, your entire GTM collapsed, or, in the worst-case scenario, the release led to your entire website getting stuck as the JS code inside GTM got stuck in an endless loop.",[12,5960,5961,5962,5967],{},"This issue was incredibly hard to analyse and debug because at that point, the issue only occurred in 5 per cent of cases. Releasing an update to 5 per cent of traffic before a full release is a common practice for Google, which looks for potential breaking issues before releasing the update for all traffic. However, this time, the mechanism failed, simply because Google did not announce any release, and has not admitted that a release has taken place even after the fact. The last release in the ",[37,5963,5966],{"href":5964,"rel":5965},"https:\u002F\u002Fsupport.google.com\u002Ftagmanager\u002Fanswer\u002F4620708?hl=en",[41],"official Google release notes"," is dated October 2023.",[12,5969,5970,5971,5976,5977,5980],{},"The full release for 100 per cent of traffic came on 25th May at 21:00 CEST. This was the moment when the majority of people finally began noticing the issue; until that time, the issue only occurred in 5 per cent of cases, which, in web analytics, is typically too insignificant to notice. Most of our clients have set up an alerting system via the ",[37,5972,5975],{"href":5973,"rel":5974},"https:\u002F\u002Fwaaila.com\u002F",[41],"Waaila tool",", which allowed us to notice the issue even during the partial release, giving us a head-start for mitigating the impending damage that the full release would cause. Even in spite of that, we were not completely ready, simply because we did not know when the full release would happen, nor ",[422,5978,5979],{},"that"," it would happen. In the end, it was left up to us to figure out what the issue was.",[12,5982,5983],{},"Now let’s dive into the particular issues.",[16,5985,5987],{"id":5986},"issue-1-this","Issue # 1: “this”",[12,5989,5990,5991,5993,5994,5996],{},"Using ",[422,5992,42],{}," as a reference to the context of the current object is now broken. If your GTM variables return an object that works with a ",[422,5995,42],{}," reference, it most likely will not work. This is better illustrated in the following example. Let me first show how the JS code is supposed to work (and currently works in the browser console):",[278,5998],{"source":5999,"style":6000},"\u002Fupload\u002Fgtmissue-this1.png","width:400px",[12,6002,6003],{},"This is correct. Now I will try to replicate this in GTM.",[12,6005,6006],{},"First, I create a variable:",[278,6008],{"source":6009},"\u002Fupload\u002Fgtmissue-this2.png",[12,6011,6012],{},"Then use it in a tag:",[278,6014],{"source":6015},"\u002Fupload\u002Fgtmissue-this3.png",[12,6017,6018],{},"And the result is:",[278,6020],{"source":6021,"style":6022},"\u002Fupload\u002Fgtmissue-this4.png","width:250px",[12,6024,6025],{},"The reference to this is completely broken, as the context has been lost somewhere in the GTM variable implementation. Now let me show you a fix:",[278,6027],{"source":6028},"\u002Fupload\u002Fgtmissue-this5.png",[12,6030,6031],{},"The result:",[278,6033],{"source":6034,"style":6022},"\u002Fupload\u002Fgtmissue-this6.png",[12,6036,6037],{},"My poor programmer’s heart weeps at the sight, but at least it works.",[16,6039,6041],{"id":6040},"issue-2-window-scope","Issue # 2: window scope",[12,6043,6044],{},"The global context, “window”, is getting lost. It looks like GTM began to make copies of objects instead of keeping references to an instance of an object. This is better illustrated below:",[12,6046,6047],{},"First, let’s see the expected behaviour in the console:",[278,6049],{"source":6050,"style":6051},"\u002Fupload\u002Fgtmissue-window1.png","width:300px",[12,6053,6054],{},"The final object correctly contains both parameters, because I have been working with the same instance of the object the whole time. Now let’s create a variable in GTM and see what it does:",[278,6056],{"source":6057},"\u002Fupload\u002Fgtmissue-window2.png",[12,6059,6060],{},"Let’s try to use the variable in a tag and augment it.",[278,6062],{"source":6063},"\u002Fupload\u002Fgtmissue-window3.png",[12,6065,6066],{},"And the result:",[278,6068],{"source":6069,"style":6051},"\u002Fupload\u002Fgtmissue-window4.png",[12,6071,6072],{},"That looks okay, right? But there is an issue: the global window.check variable is a completely different instance than the one we are using in the tag itself, which is just a copy.",[278,6074],{"source":6075,"style":6051},"\u002Fupload\u002Fgtmissue-window5.png",[16,6077,60],{"id":59},[12,6079,6080,6081,6086],{},"We cannot say with certainty that we have discovered all the issues that were introduced in this release. The issues encountered are dependent on the types of JS constructs used and it is entirely possible that there are more issues. I will be more than happy if anyone ",[37,6082,6085],{"href":6083,"rel":6084},"https:\u002F\u002Fcz.linkedin.com\u002Fin\u002Fjan-brzobohaty",[41],"lets me know"," about other issues they have encountered.",[12,6088,6089],{},"It is clear to me that this article will not help anyone at this point. But I think it is quite sad that the issue has been largely ignored on the Internet and I would find it upsetting if it were allowed to fizzle out. From communications with many others in the field I know that we were by far not the only ones impacted by this. Doing a release without letting anyone know or at least acknowledging it after the fact is, in my opinion, a grave IT sin.",[12,6091,6092,6093,6096],{},"And the message for Google? Dear Google, if you can hear me up there 🙏, please let us know next time you are planning to publish a new version and tell us what you are changing. I promise to visit Google Cloud ⛪ ",[422,6094,6095],{},"at least"," once a week if you do.",{"title":76,"searchDepth":77,"depth":77,"links":6098},[6099,6100,6101],{"id":5986,"depth":77,"text":5987},{"id":6040,"depth":77,"text":6041},{"id":59,"depth":77,"text":60},"\u002Fupload\u002FGTM ISSUE.png","gtm-issue",{},"\u002Fen\u002Fblog\u002Fgtm-issue-en","2024-06-24T11:37:00.000+00:00",4.54,{"title":5949,"description":5955},"en\u002Fblog\u002Fgtm-issue-en","What happened to GTM on 20th May 2024?","xaj5fjsXEvdsHZQ_fMZW62axjFwlbVIJAa4RnMmtv1M",{"id":6113,"title":6114,"author":5950,"body":6115,"category":7,"description":6123,"extension":83,"image":6161,"isToc":85,"langAlt":6162,"meta":6163,"metaDescription":7,"navigation":88,"path":6164,"published":88,"publishedAt":6165,"readingTimeMinutes":6166,"readingTimeText":692,"relatedArticles":7,"seo":6167,"stem":6168,"teaser":6169,"updatedAtCustom":7,"__hash__":6170},"blog_en\u002Fen\u002Fblog\u002Fgtm-tag-coverage.md","Tag coverage in GTM",{"type":9,"value":6116,"toc":6157},[6117,6121,6124,6127,6130,6133,6136,6139,6142,6144,6147,6151,6154],[6118,6119,6114],"h1",{"id":6120},"tag-coverage-in-gtm",[12,6122,6123],{},"Have you been seeing this notification in GTM recently, are unnerved by it and don’t know where the problem is?",[278,6125],{"source":6126},"\u002Fupload\u002Ftag-coverage-1.png",[278,6128],{"source":6129},"\u002Fupload\u002Ftag-coverage-2.png",[12,6131,6132],{},"In that case, you are in the right place. In this article, we will go through Google’s intentions with the so-called Tag Coverage feature, evaluate how it has turned out so far, and how you should react to notifications related to tag coverage.",[12,6134,6135],{},"If we look at the notification detail, we see a list of pages which, according to GTM, are currently not tagged. Right after that, we go and check whether this is actually true and what Google means by it. You will very likely discover that GTM is in fact correctly implemented on the page, along with Google Ads and Google Analytics.",[278,6137],{"source":6138},"\u002Fupload\u002Ftag-coverage-3.png",[12,6140,6141],{},"So what is the problem? The issue lies in the way Google determines whether measurement is properly working on a page. Google knows every corner of your website (every URL) thanks to bots which periodically go through your website. The way these bots are programmed, however, ensures that they do not trigger any measurement, making it very difficult or straight up impossible for them to detect the implementation of GTM on a page. Thus, bots only update the list of pages on your website. Detecting the tag coverage of a page is left up to actual users who visit your website, which is where the problem lies. If there is a page on your website which was identified by a bot and added to the page list, but which has not been visited by a human user who actually triggered GTM measurement, it will be marked as untagged.",[16,6143,60],{"id":59},[12,6145,6146],{},"Google had a good idea aimed at improving data quality. We can hope that they will not abandon it and continue to improve the Tag Coverage tool. However, the truth is that, at this time, this tool is hard to use and, rather than provide users with actual insights, it tends to swamp them with false alerts instead.\nIn this article, we showed examples from Google Tag Manager for simplicity and consistency’s sake. However, the exact same interface, with the exact same functions and issues, also exists in Google Analytics and Google Ads.",[16,6148,6150],{"id":6149},"recommendations","Recommendations",[12,6152,6153],{},"If you have a website with a constantly expanding list of URLs, the best approach at this point is to learn to ignore Tag Coverage warnings. On the other hand, if your website is relatively static over time, this tool might make sense for you and actually function quite correctly. In this case, you should select all pages which are typically not visited by many users, and set them as ignored.",[278,6155],{"source":6156},"\u002Fupload\u002Ftag-coverage-4.png",{"title":76,"searchDepth":77,"depth":77,"links":6158},[6159,6160],{"id":59,"depth":77,"text":60},{"id":6149,"depth":77,"text":6150},"\u002Fupload\u002Ftag_coverage_in_gtm_en.png","gtm-pokryti-znackami",{},"\u002Fen\u002Fblog\u002Fgtm-tag-coverage","2024-07-22T12:24:00.000+00:00",2.41,{"title":6114,"description":6123},"en\u002Fblog\u002Fgtm-tag-coverage","Is the Tag Coverage tool in Google Tag Manager useful?","_Byki65Jbufy7tch1OKEx9-FdGYwBRydSD99dyu3F1U",{"id":6172,"title":6173,"author":7,"body":6174,"category":992,"description":76,"extension":83,"image":7123,"isToc":85,"langAlt":7,"meta":7124,"metaDescription":7,"navigation":88,"path":7128,"published":88,"publishedAt":7129,"readingTimeMinutes":7130,"readingTimeText":4269,"relatedArticles":7131,"seo":7133,"stem":7134,"teaser":7135,"updatedAtCustom":7136,"__hash__":7137},"blog_en\u002Fen\u002Fblog\u002Fhow-to-optimize-utm-for-uniform-campaign-typology.md","How to optimize UTM for uniform campaign typology & tagging",{"type":9,"value":6175,"toc":7105},[6176,6180,6183,6190,6193,6198,6202,6205,6208,6211,6225,6229,6232,6252,6256,6262,6271,6278,6289,6300,6304,6318,6321,6325,6331,6345,6349,6353,6360,6377,6383,6386,6391,6419,6424,6444,6448,6455,6460,6482,6487,6524,6528,6545,6549,6556,6560,6563,6594,6598,6618,6622,6628,6648,6652,6663,6668,6685,6691,6701,6705,6708,6728,6731,6734,6760,6764,6771,6783,6795,6799,6809,6816,6823,6826,6869,6874,6963,6967,6970,6975,6979,6982,6987,6990,6996,7006,7010,7022,7033,7036,7083,7091,7093,7099,7102],[16,6177,6179],{"id":6178},"introduction","Introduction",[12,6181,6182],{},"Over years we spent countless hours optimizing online campaigns to make them truly effective. To be able to do so we required a much richer set of campaign parameters available for analyses. One solution how to pass such information for further processing is the traditional UTM parameters. In cooperation with major performance and media agencies and several PPC specialists, we were looking for data entities that could have an impact on performance. Now, our meta-model covers over 60 different entities with hundreds of dimensions. For basic performance tuning you do not need all of them, the maximum, we think is practical, covers roughly 40 dimensions. As there are only five UTM parameters we had to develop a technique to squeeze more information into what is available (Google Analytics 4 has only three parameters) to satisfy our needs. This guide is our approach to how to address the limitation and how to assure consistency and unification of campaign tagging.",[12,6184,6185,6186,6189],{},"There are two options how to address this problem, ",[113,6187,6188],{},"either you combine more parameters into each UTM parameter, or you generate a unique id"," for each dimension combination and keep its metadata in an external system. The external metadata repository is not a simple solution as it requires complex data integration and is thus not suitable for the majority of online spenders. This guide is developed for those using Google Analytics as their primary web analytics tool and other tools besides Google Ads (this can be natively linked to GA and you do not need UTM).",[12,6191,6192],{},"Combining more dimensions about the campaign in its name UTM parameter can provide you with insight into how targeting, message type, location, etc. impact your performance. You can use these dimensions to filter or compare results between campaigns. In practice, this means that you can easily compare campaign performance when targeting new versus existing customers. Differences between search and retargeting campaigns or when tagging is unified, so you can easily test and evaluate the performance of your channel mix.",[12,6194,6195],{},[148,6196],{"alt":76,"src":6197},"\u002Fupload\u002Fcampaign_tagging_utm.webp",[16,6199,6201],{"id":6200},"how-can-the-typology-of-online-campaigns-help-you","How can the typology of online campaigns help you?",[12,6203,6204],{},"Tagged campaigns bear special information that can tell you, from where your visitors are coming to your site or which of your campaigns are delivering the best results. With web analytics tools like Google Analytics, you can use information from UTM parameters as dimensions to analyze such detail. If you want to identify how many visitors came to your site from a specific Facebook or Twitter post, you must include these UTM tags in these links as well.",[12,6206,6207],{},"By tagging individual campaigns, you can distinguish how many people came from specific posts or a specific banner. You can also specify UTM parameters within e-mailing campaigns, cost-per-click (CPC) campaigns, or on your blog. There are many options.",[12,6209,6210],{},"This article will help you unify the configuration of each campaign URL and parameter so that you can simply:",[327,6212,6213,6219],{},[255,6214,6215,6218],{},[113,6216,6217],{},"Universally filter data"," in Google Analytics according to various criteria and get maximum insight into the success of individual campaigns and traffic on your site.",[255,6220,6221,6224],{},[113,6222,6223],{},"Link costs and revenues"," from individual campaigns. So, you will see not only how each campaign performed, but also how much money it brought, i.e. ROI.",[16,6226,6228],{"id":6227},"lets-start-with-the-general-principles","Let's start with the general principles!",[12,6230,6231],{},"Consider these rules below as our recommendation, they are based on our experience and years of practice. If you stick to this guideline, it will minimize the number of errors while tagging campaigns, help you to be more effective in analyzing a large campaign portfolio, and will yield deeper insight. Simply it will allow you to make better decisions.",[727,6233,6234,6235,6240,6241,6246,6247,5337],{},"\nThe \"text\" written in { } brackets everywhere in this document indicates that it is a \"text\" that must be replaced with a \"specific expression\" when used in practical terms. For example, \n",[113,6236,6237],{},[588,6238,6239],{},"p_ {product category}","\n refers to a campaign that will have its own name for each product category, which you add yourself based on the type of campaign being prepared, e.g. \n",[113,6242,6243],{},[588,6244,6245],{},"p_shoes","\n or \n",[113,6248,6249],{},[588,6250,6251],{},"p_glasses",[244,6253,6255],{"id":6254},"use-delimiters-correctly","Use delimiters correctly",[860,6257,6259,6260],{"id":6258},"underscore-_","Underscore ",[588,6261,1855],{},[12,6263,6264,6267,6268,1296],{},[113,6265,6266],{},"Do not use spaces!"," If you have already used them, replace them with an underscore. For instance, rename the campaign called \"summer sale\" to",[588,6269,6270],{},"summer_sale",[860,6272,6274,6275],{"id":6273},"tilde","Tilde ",[588,6276,6277],{},"~",[12,6279,6280,6281,6284,6285,6288],{},"The wavy line is reserved as a ",[113,6282,6283],{},"component separator,"," from which the given UTM parameter is composed. Therefore, if you want to separate the campaign name from the report name in the UTM parameter, you can do so as follows: ",[588,6286,6287],{},"brand~scott",". It indicates the \"brand\" campaign and a group (adGroup, report) named \"scott\". Or, if you buy ads via an RTB platform, you can identify the RTB platform type through the source parameter.",[122,6290,6291,6294,6296,6299],{},[113,6292,6293],{},"Example",[4635,6295],{},[588,6297,6298],{},"ihned.cz~adf","\n, where “ihned.cz” is the website on which the ad is displayed and ”adf” is the name of the platform (Adform).\n",[244,6301,6303],{"id":6302},"use-lowercase-letters-without-accents","Use lowercase letters without accents",[12,6305,6306,6307,6310,6311,6314,6315,1296],{},"Google Analytics distinguishes between uppercase and lowercase letters. The campaign name ",[588,6308,6309],{},"summer sale"," is not the same as the ",[588,6312,6313],{},"Summer_sale",". Google Analytics evaluates such tags as two different campaigns. Therefore, we recommend ",[113,6316,6317],{},"using lowercase for campaign names",[12,6319,6320],{},"While it is possible to insert accented characters into UTM parameters, we do not recommend you to do so. In fact, when copying, importing, etc., the sign may be lost or misinterpreted if the encoding is set incorrectly.",[244,6322,6324],{"id":6323},"unify-the-names-of-the-campaigns-and-values-sent-in-utm-parameters","Unify the names of the campaigns and values sent in UTM parameters",[12,6326,6327,6328],{},"UTM parameters serve as the keys to connect Google Analytics and marketing or advertising platforms (Sklik, AdWords, etc.). If the platform can't export the configured UTM parameters (and this is often the case), or if the UTM parameters don't match the campaign name, then we can't link data from these platforms. Therefore, you ought to assign the same names to campaigns, adGroups, and other parameters that you also use in  UTM parameters. ",[113,6329,6330],{},"The same campaign should be named the same on different platforms.",[122,6332,6333,6335,6337,6338,6341,6342,5337],{},[113,6334,6293],{},[4635,6336],{},"\n\n\nIf the campaign management system (like Sklik) allows you to use auto-tagging via UTM parameters, then you can, for example, create \n",[588,6339,6340],{},"utm_campaign","\n as \n",[588,6343,6344],{},"{campaign}~{adgroup}",[16,6346,6348],{"id":6347},"utm-parameters","UTM parameters",[244,6350,6352],{"id":6351},"source-utm_source","Source (utm_source)",[12,6354,6355,6356,6359],{},"In the \"source\" parameter, we always insert the name of the website where the ad is displayed or the name of the company (platform) through which the ad space is served. In the \"source\" parameter, the word \"direct\" etc. can also appear as a reserved word in Google Analytics, so these reserved values should not be used in UTM parameters. Google Analytics automatically recognizes different sources of visits and if the source is not explicitly defined, it must be set. For example, when a visitor comes from an organic source, the source is assigned to the company that manages that search engine. In order to analyze the impact of a specific company on the traffic\u002Fprofit on your website, ",[113,6357,6358],{},"we recommend using the company name instead of the platform name"," when buying visits from multiple platforms (e.g. AdWords or Sklik), for example:",[327,6361,6362,6368,6374],{},[255,6363,6364,6367],{},[113,6365,6366],{},"Google"," - the label for Google SERP (Search Engine Result Page), AdWords or merchant",[255,6369,6370,6373],{},[113,6371,6372],{},"Seznam"," -the label for Seznam.cz, Zboží.cz or Sklik.cz",[255,6375,6376],{},"other",[12,6378,6379,6380,1296],{},"Often it is good to hide the source from which the customers came. The source is therefore identified by a code stored in an external table or added to the transformation filters in Google Analytics. Such a code is indicated by the prefix ",[588,6381,6382],{},"xd_",[12,6384,6385],{},"In case you use one or more platforms for ad distribution, it is necessary to distinguish through which tool the ad was purchased. In order to compare the performance of the platforms, the ad placement is created in the \"source\" as a combination of the platform name and the publisher's site name. The platform code should be then part of the \"source\" or alternatively inserted in the \"medium\".",[12,6387,6388],{},[113,6389,6390],{},"Platforms:",[327,6392,6393,6396,6399,6402,6405,6408,6411,6414,6417],{},[255,6394,6395],{},"adf (adform)",[255,6397,6398],{},"adb (adobe)",[255,6400,6401],{},"dtx (dataXu)",[255,6403,6404],{},"xnt (Xa.NET)",[255,6406,6407],{},"svp (silverpop)",[255,6409,6410],{},"unc (unica)",[255,6412,6413],{},"mch (Mail Chimp)",[255,6415,6416],{},"bee (PPC Bee)",[255,6418,6376],{},[12,6420,6421],{},[113,6422,6423],{},"Examples of use",[327,6425,6426,6429,6432,6435,6438,6441],{},[255,6427,6428],{},"utm_source = google",[255,6430,6431],{},"utm_source = list",[255,6433,6434],{},"utm_source = heureka.cz",[255,6436,6437],{},"utm_source = xd_145eer47",[255,6439,6440],{},"utm_source = list~adf",[255,6442,6443],{},"utm_source = internal~svp (internal emails sent via Silverpop, if internal is too general and the purpose is, for example, to promote between internal websites, it can be replaced by the domain or company name from which the email addresses were obtained)",[244,6445,6447],{"id":6446},"medium-utm_medium","Medium (utm_medium)",[12,6449,6450,6451,6454],{},"\"Medium\" refers to the medium or ",[113,6452,6453],{},"technology through which the visitor was brought to the site",". It also indicates the type of payment model used to pay for advertising. For example, when auto-tagging is turned on in AdWords, Google uses the CPC label but does not display any information about what medium was used. This information is passed between AdWords and Google Analytics internally. Some platforms use different codes for the same thing - CPM and CPT, for example. We, therefore, recommend that you standardize this terminology and use consistent codes. It is generally preferred to use the name of the medium for \"medium\" rather than the payment model type. This is because the medium has a higher information value for subsequent evaluation. For systems where there is no internal data aggregation, it will provide a wider range of information in return.",[12,6456,6457],{},[113,6458,6459],{},"Payment models",[327,6461,6462,6465,6468,6471,6474,6477,6480],{},[255,6463,6464],{},"CPC (cost per click)",[255,6466,6467],{},"CPM (cost per thousand)",[255,6469,6470],{},"CPT (cost per thousand)",[255,6472,6473],{},"CPV (cost per view)",[255,6475,6476],{},"CPA (cost per acquisition)",[255,6478,6479],{},"CPP (cost per point, price per affected population)",[255,6481,6376],{},[12,6483,6484],{},[113,6485,6486],{},"Medium",[327,6488,6489,6492,6495,6498,6501,6504,6507,6510,6513,6516,6519,6522],{},[255,6490,6491],{},"product",[255,6493,6494],{},"email",[255,6496,6497],{},"affiliate",[255,6499,6500],{},"display \u002F banner",[255,6502,6503],{},"discount",[255,6505,6506],{},"social",[255,6508,6509],{},"offline",[255,6511,6512],{},"paid",[255,6514,6515],{},"post",[255,6517,6518],{},"job post (job advertisement)",[255,6520,6521],{},"fix (paid at a fixed price regardless of the number of impressions or clicks)",[255,6523,6376],{},[12,6525,6526],{},[113,6527,6423],{},[327,6529,6530,6533,6536,6539,6542],{},[255,6531,6532],{},"utm_medium = cpc",[255,6534,6535],{},"utm_medium = cpa",[255,6537,6538],{},"utm_medium = email",[255,6540,6541],{},"utm_medium = social",[255,6543,6544],{},"utm_medium = banner",[244,6546,6548],{"id":6547},"campaign-utm_campaign","Campaign (utm_campaign)",[12,6550,6551,6552,6555],{},"\"Campaign\" is a complex attribute that should contain ",[113,6553,6554],{},"information about how, to whom, when, where, and for what purpose the ad was displayed",". For example, the objective of a campaign may be to promote brand, product, or service. It is important that the name of the campaign in the marketing platform is the same as the name in the UTM parameter. We recommend creating the campaign name as a composite attribute that contains metadata about the campaign itself, which will allow it to be compared with similar campaigns. For example, a campaign displayed in a SERP has a different performance than a campaign displayed as a banner on a web page.",[860,6557,6559],{"id":6558},"display-type","Display type",[12,6561,6562],{},"Campaigns are classified by type and location:",[327,6564,6565,6571,6577,6582,6588],{},[255,6566,6567,6570],{},[113,6568,6569],{},"s"," (search) - The ad is displayed in response to data provided by a user (SERP on Google or List).",[255,6572,6573,6576],{},[113,6574,6575],{},"d"," (display, visual advertisement) - The advertisement is displayed in the form of a graphic or text element, the display is based on information collected about the user or about the website where the advertisement is displayed.",[255,6578,6579,6581],{},[113,6580,12],{}," (product, product search) - This is a combination of searches where a user enters a keyword and then displays a predominantly graphic element with an advertisement for a product or service.",[255,6583,6584,6587],{},[113,6585,6586],{},"m"," (message) - A form of a paid message sent mainly on social media, such as Facebook's \"promoted page post\" or LinkedIn \"sponsored updates\".",[255,6589,6590,6593],{},[113,6591,6592],{},"v"," (video) - A video ad shown on television programs or on YouTube that allows direct measuring.",[860,6595,6597],{"id":6596},"targeting-type","Targeting type",[327,6599,6600,6606,6612],{},[255,6601,6602,6605],{},[113,6603,6604],{},"r"," (remarketing \u002F retargeting, re-targeting) - re-targeting an already recognized visitor. This is the use of customer behavior information. For example, if a visitor abandons a cart, they are subsequently communicated via a display ad showing the content of their cart.",[255,6607,6608,6611],{},[113,6609,6610],{},"bhv"," - behavioral targeting based on user’s behavior across the internet, their intent, interests, etc.",[255,6613,6614,6617],{},[113,6615,6616],{},"src"," - search targeting based on user’s intent expressed by submitting specific keywords to search console.",[860,6619,6621],{"id":6620},"segment-type","Segment type",[12,6623,6624,6625],{},"It is necessary to distinguish whether the advertisement is intended to ",[113,6626,6627],{},"attract new visitors (acquisitions) or existing customers (retention).",[327,6629,6630,6636,6642],{},[255,6631,6632,6635],{},[113,6633,6634],{},"l"," (lead) - Acquisition advertising aimed to acquire new contacts",[255,6637,6638,6641],{},[113,6639,6640],{},"n"," (new) - Acquisition advertising aimed to acquire new customers",[255,6643,6644,6647],{},[113,6645,6646],{},"c"," (customer) - Retention advertising aimed to maximize customer value",[860,6649,6651],{"id":6650},"advertising-target","Advertising target",[12,6653,6654,6655,6658,6659,6662],{},"Advertising target ",[113,6656,6657],{},"specifies the subject of the advertisement that is being offered"," to the customer or ",[113,6660,6661],{},"indicates the customer's expected actions",". For a general advertisement for the sale of goods that targets by category, the category name will suffice; the higher level of detail can be specified at the report\u002Fadgroup level.",[122,6664,6665,6667],{},[113,6666,6293],{},"\n\nIf an advertisement promotes hats, then you can use the word \"hats\" in the name.  It can also be a category, collection, brand, product, other, or a specific product name or a combination of the above.\n",[12,6669,6670,6671,6674,6675,6678,6679,3784,6682,1296],{},"Another option is to state the objective of the ad describing the customer behavior you want to achieve. Examples include campaigns aimed at completing an order or repurchasing. In this case, the name of the campaign should contain the phase of the shopping cycle in which the customer is currently located or the goal that he should achieve, respectively. what he should do, such as ",[588,6672,6673],{},"order_completion",", ",[588,6676,6677],{},"order_delivery_type",", etc. Similarly, it can be an action a visitor should take, such as ",[588,6680,6681],{},"register_demo",[588,6683,6684],{},"download_study",[12,6686,6687,6690],{},[113,6688,6689],{},"You should always follow a terminology hierarchy"," - from left to right and from general to specific. However, the target of the ad can also be a group of search parameters that are included in a campaign.",[5324,6692,6693,6694,6697,6698],{},"\nIn a campaign to get the right keywords \n",[588,6695,6696],{},"s_broad","\n, campaign titles should always be in a single language. \n",[113,6699,6700],{},"We recommend using English names.",[860,6702,6704],{"id":6703},"brand-advertising","Brand advertising",[12,6706,6707],{},"There are several types of brand campaigns. It is either an advertisement of your own brand, product promotion, or takeover of the competition.",[327,6709,6710,6716,6722],{},[255,6711,6712,6715],{},[113,6713,6714],{},"brand or {brand}"," is an ad promoting your own brand",[255,6717,6718,6721],{},[113,6719,6720],{},"interbrand_ {competing brand name}"," is an advertisement that captures visits to a competing brand",[255,6723,6724,6727],{},[113,6725,6726],{},"intrabrand_ {product}"," is an ad for promoting products through the brand name of the product",[860,6729,6730],{"id":6376},"Other",[12,6732,6733],{},"In \"Other\", provide further details of the campaign, such as:",[327,6735,6736,6742,6748,6754],{},[255,6737,6738,6741],{},[113,6739,6740],{},"type of motivator"," - eg \"sale\", \"promo\", \"bonus\",",[255,6743,6744,6747],{},[113,6745,6746],{},"ad launch time"," - such as emails that are sent daily or weekly.",[255,6749,6750,6753],{},[113,6751,6752],{},"campaign location"," - eg \"brno\", \"prague\", then e.g. \"branches\" or \"cz\"",[255,6755,6756,6759],{},[113,6757,6758],{},"targeting"," men or women, etc.",[860,6761,6763],{"id":6762},"reports-adgroup-advertisement","reports | adgroup | advertisement",[12,6765,6766,6767,6770],{},"Different platforms allow you to split campaigns into subgroups, reports, etc. A campaign is then a ",[113,6768,6769],{},"collection of different subsets",", for example, an AdGroup in AdWords. The parameter sent in the UTM should therefore include both the campaign name and the report name.",[122,6772,6773,6775,6777,6778,6780],{},[113,6774,6293],{},[4635,6776],{},"\n\n\nIf you have a campaign used for text search, it will be made of subgroups and its goal is to promote a brand, then the name of the campaign might look something like this for illustration:\n",[4635,6779],{},[588,6781,6782],{},"s_interbrand~{encrypted code of competing company}",[122,6784,6785,6787,6789,6790,6792],{},[113,6786,6293],{},[4635,6788],{},"\n\n\nA campaign that targets incomplete orders through remarketing could be named like this:\n",[4635,6791],{},[588,6793,6794],{},"dr_order_complete",[860,6796,6798],{"id":6797},"date","Date",[12,6800,6801,6802,6805,6806,1296],{},"For recurring campaigns, ",[113,6803,6804],{},"we recommend adding the date the campaign was activated to the name of the campaign."," In an email campaign with the name \"Newsletter\", it is difficult to distinguish when specific emails were sent out. So for recurring email campaigns, we advise using the date as an additional parameter. In basic form, it is sufficient to have the code in YYMMDD format, but for better evaluation directly in Google Analytics, it is more efficient to extend the date code. Then you will be able to directly evaluate cyclical segments, for example, to compare the performance of a specific day. For ",[113,6807,6808],{},"campaigns sent weekly, we recommend using a code containing the week number",[122,6810,6811,6813,6815],{},[113,6812,6293],{},[4635,6814],{},"\n\n\nCampaigns coded code 21w46tu and 21w46we are sent in the 46th week (ISO week is used) on Tuesday, and Wednesday.\n",[122,6817,6818,6820,6822],{},[113,6819,6293],{},[4635,6821],{},"\n\n\nMonthly campaigns are assigned a code. For example, the 21m09w2tu campaign is a campaign submitted in September, the second week, and on Tuesday.\n",[12,6824,6825],{},"Codes to indicate the days of the week",[327,6827,6828,6834,6840,6846,6851,6857,6863],{},[255,6829,6830,6833],{},[113,6831,6832],{},"mo"," (Monday)",[255,6835,6836,6839],{},[113,6837,6838],{},"tu"," (Tuesday)",[255,6841,6842,6845],{},[113,6843,6844],{},"we"," (Wednesday)",[255,6847,6848,6850],{},[113,6849,3850],{}," (Thursday)",[255,6852,6853,6856],{},[113,6854,6855],{},"fr"," (Friday)",[255,6858,6859,6862],{},[113,6860,6861],{},"sa"," (Saturday)",[255,6864,6865,6868],{},[113,6866,6867],{},"su"," (Sunday)",[12,6870,6871],{},[113,6872,6873],{},"Values for the campaign name",[3830,6875,6876],{},[3833,6877,6878,6899],{},[3844,6879,6880],{},[3847,6881,6882,6888,6893],{},[3850,6883,6884,6885,6884],{},"  ",[113,6886,6887],{},"Attribute name",[3850,6889,6884,6890,6884],{},[113,6891,6892],{},"Allowed values",[3850,6894,6884,6895,6898],{},[113,6896,6897],{},"Parameter","   ",[3861,6900,6901,6910,6919,6928,6937,6945,6955],{},[3847,6902,6903,6905,6908],{},[3866,6904,6559],{},[3866,6906,6907],{},"s,d,p,m,v",[3866,6909,6340],{},[3847,6911,6912,6914,6917],{},[3866,6913,6597],{},[3866,6915,6916],{},"r,src,bhv",[3866,6918,6340],{},[3847,6920,6921,6923,6926],{},[3866,6922,6621],{},[3866,6924,6925],{},"n,l,c",[3866,6927,6340],{},[3847,6929,6930,6932,6935],{},[3866,6931,6651],{},[3866,6933,6934],{},"See above for different values",[3866,6936,6340],{},[3847,6938,6939,6941,6943],{},[3866,6940,6730],{},[3866,6942,6934],{},[3866,6944,6340],{},[3847,6946,6947,6950,6953],{},[3866,6948,6949],{},"Separator",[3866,6951,6952],{},"\\~",[3866,6954,6340],{},[3847,6956,6957,6959,6961],{},[3866,6958,6798],{},[3866,6960,6934],{},[3866,6962,6340],{},[244,6964,6966],{"id":6965},"content-utm_content","Content (utm_content)",[12,6968,6969],{},"\"Content\" contains variations of sizes and texts in advertisements, types of banners used, etc. This parameter is useful for testing content.",[4127,6971,6974],{"title":6972,"link":5712,"button":6973},"Waaila homepage","Go to Waaila","\nCheck your parameters with Waaila and validate your UTM tagging.\n",[244,6976,6978],{"id":6977},"term-utm_term","Term (utm_term)",[12,6980,6981],{},"\"Term\" contains the keyword that was used for the search. The name of the website where the ad was displayed can be inserted in this parameter as well. You can also add the category of content that the visitor was browsing before clicking on the ad. For some types of campaigns, such as paid search, it is added automatically.",[12,6983,6984],{},[113,6985,6986],{},"Data transformation",[12,6988,6989],{},"A number of businesses use various distribution points or kiosks. A website visit from such a kiosk should therefore be recorded as a special campaign or medium. Such detection is done the best via a special Google Analytics setting.",[12,6991,6992,6993,1296],{},"A similar case are paid ads, where for some reason the use of the UTM parameters is not appropriate. For example, it could spoil the site's reputation or arouse suspicion among visitors. So if it is not appropriate to use UTM parameters, then the data transformation is done for example from ",[588,6994,6995],{},"document.referrer",[122,6997,6998,7000,7002,7005],{},[113,6999,6293],{},[4635,7001],{},[588,7003,7004],{},"_bulbs.heureka.cz_","\n is transformed by inserting “bulbs” into the campaign name and to referrer path a custom variable is inserted.\n",[244,7007,7009],{"id":7008},"id-utm_id","Id (utm_id)",[12,7011,7012,7013,7019,7020,1296],{},"Some companies are developing complex campaign tagging logic causing high complexity in values of utm parameters. A lot of information covered in URLs can be confusing for users and it may contain sensitive data about the marketing strategy of the company. Also, a number of utm parameters might not be sufficient and more campaign dimensions are needed for proper analysis. ",[113,7014,7015,7016],{},"The complexity of sending all utm parameters can be avoided by using parameter ",[588,7017,7018],{},"utm_id",". It is an Id assigned to a specific campaign performed. In URL only this Id is sent, all additional parameters are stored separately in a table where you can store both standard and custom campaign dimensions. You can import this mapping table to Google Analytics and assign all the dimensions to specific ",[588,7021,7018],{},[122,7023,7024,7026,7028,7029,7032],{},[113,7025,6293],{},[4635,7027],{},"\n\n\nYou perform emailing campaign on discounted bulbs with a link to a specific product on your website. When assigning tags, instead of all utm parameters, you add \n",[588,7030,7031],{},"utm_id=123xyz","\n to URL of the link.\n",[12,7034,7035],{},"Then a table with mapping of your campaign dimensions needs to be created in the following structure:",[3830,7037,7038],{},[3833,7039,3837,7040,3837,7062,3837],{},[3844,7041,3837,7042],{},[3847,7043,7044,7047,7050,7053,7056,7059],{},[3850,7045,7046],{},"ga:campaignCode  ",[3850,7048,7049],{},"ga:source  ",[3850,7051,7052],{},"ga:medium  ",[3850,7054,7055],{},"ga:campaign  ",[3850,7057,7058],{},"ga:content  ",[3850,7060,7061],{},"ga:dimension11",[3861,7063,7064],{},[3847,7065,7066,7069,7071,7074,7077,7080],{},[3866,7067,7068],{},"123xyz",[3866,7070,6494],{},[3866,7072,7073],{},"newsletter",[3866,7075,7076],{},"m\\~bulb\\~disc",[3866,7078,7079],{},"bulbs",[3866,7081,7082],{},"competitor_name",[12,7084,7085,7086,1296],{},"To import the data in Google Analytics, you can either import it as .csv file or use management API. Detailed information about the campaign data import can be found ",[37,7087,7090],{"href":7088,"rel":7089},"https:\u002F\u002Fsupport.google.com\u002Fanalytics\u002Fanswer\u002F4522476?hl=en",[41],"here",[16,7092,60],{"id":59},[12,7094,7095,7096,1296],{},"Congratulations, you read the article to the end! We believe that the information has been beneficial to you and helped you orient yourself in the wild waters of the campaign naming typology. The most important thing to remember is: ",[113,7097,7098],{},"stay consistent and aligned with marketing strategy",[12,7100,7101],{},"Thanks to mutual discussion and feedback, we can inspire each other and be one step further. Share with us your observation, knowledge, tips, and original solutions from your experience.",[209,7103,7104],{"link":211,"button":212},"\nIf you do not fully understand something listed here or would like to s discuss specific issues, contact us. We can answer your questions and help you with your campaign tagging.\n",{"title":76,"searchDepth":77,"depth":77,"links":7106},[7107,7108,7109,7114,7122],{"id":6178,"depth":77,"text":6179},{"id":6200,"depth":77,"text":6201},{"id":6227,"depth":77,"text":6228,"children":7110},[7111,7112,7113],{"id":6254,"depth":389,"text":6255},{"id":6302,"depth":389,"text":6303},{"id":6323,"depth":389,"text":6324},{"id":6347,"depth":77,"text":6348,"children":7115},[7116,7117,7118,7119,7120,7121],{"id":6351,"depth":389,"text":6352},{"id":6446,"depth":389,"text":6447},{"id":6547,"depth":389,"text":6548},{"id":6965,"depth":389,"text":6966},{"id":6977,"depth":389,"text":6978},{"id":7008,"depth":389,"text":7009},{"id":59,"depth":77,"text":60},"\u002Fupload\u002Futm-parameters-illustration.webp",{"externalLinks":7125},[7126],{"url":7127,"name":1808},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fproducts\u002Fmeasurement-hub","\u002Fen\u002Fblog\u002Fhow-to-optimize-utm-for-uniform-campaign-typology","2012-10-14T09:38:00.000+00:00",16.5,[226,7132],"content\u002Fen\u002Fblog\u002Fnew-data-api-for-google-analytics-4.md",{"title":6173,"description":76},"en\u002Fblog\u002Fhow-to-optimize-utm-for-uniform-campaign-typology","Advance online campaign management with UTM parameters, structure unification, and enrichment for more detailed performance evaluation.","2021-05-23T10:00:00.000+00:00","_IXRpSI1KvvsQqvbLoNJQ96SB05Q8MNokWoDAJkBXgQ",{"id":7139,"title":7140,"author":7,"body":7141,"category":992,"description":7145,"extension":83,"image":7398,"isToc":85,"langAlt":7,"meta":7399,"metaDescription":7,"navigation":88,"path":7400,"published":88,"publishedAt":7401,"readingTimeMinutes":7402,"readingTimeText":7403,"relatedArticles":7404,"seo":7405,"stem":7406,"teaser":7407,"updatedAtCustom":7,"__hash__":7408},"blog_en\u002Fen\u002Fblog\u002Fhumanize-digital-customer-experience.md","Humanize Digital Customer Experience",{"type":9,"value":7142,"toc":7385},[7143,7146,7149,7156,7165,7169,7182,7196,7200,7203,7210,7213,7217,7228,7232,7239,7242,7257,7261,7268,7271,7274,7278,7284,7291,7301,7306,7311,7315,7322,7329,7336,7341,7344,7348,7351,7358,7363,7366,7369,7371,7379,7382],[12,7144,7145],{},"Digital transformation is a central component in the digital world, and digital experience will account for far more interactions in the future than we encounter now. We delegate tasks to devices, applications, and systems, we find ourselves in the middle of chatbots, AI, IoT, ML …",[12,7147,7148],{},"According to McKinsey Global Institute, data-driven organizations are 23 times more likely to acquire customers, 6 times as likely to retain customers, and 19 times as likely to be profitable as a result.",[12,7150,7151,7152,7155],{},"Even with all the connections, it seems to be harder to balance the right customer experience. Fortunately, more companies realize that digital transformation is not equal to customer experience. ",[113,7153,7154],{},"Appealing to your customers’ emotions in an authentic way"," contributes to building long-term relationships.",[727,7157,7158,7159,7164],{},"\nWe have talked about \n",[37,7160,7163],{"href":7161,"rel":7162},"https:\u002F\u002Fcrossmasters.com\u002Fen\u002Fblog\u002Fincrease-conversions-with-category-page-product-ranking\u002F",[41],"the importance of personalization and how your customers want to receive the most relevant offers","\n. Here, in this article, we will continue the conversation and add more on top of the personalization.\n",[16,7166,7168],{"id":7167},"what-is-humanization","What is humanization?",[12,7170,7171,7172,3837,7175,3837,7178,7181],{},"Humanization (or anthropomorphism) is putting a face to a brand and attributing human-like qualities, such as empathy. It ",[113,7173,7174],{},"adds the human element across all stages of the",[113,7176,7177],{},"customer journey",[113,7179,7180],{},"and product lifecycle",". This enables businesses to connect with customers and delivers key benefits:",[327,7183,7184,7190],{},[255,7185,7186,7189],{},[113,7187,7188],{},"Enhanced customer experience"," – customers are interested in connecting with your brand and want to identify common values. Mainly younger generations, for example, millennials, seek to know what your brand stands for.",[255,7191,7192,7195],{},[113,7193,7194],{},"Increased satisfaction, retention, loyalty"," – positive experience builds trust and creates returning customers, eventually making your brand their first choice.",[16,7197,7199],{"id":7198},"take-your-time-to-know-your-customers","Take your time to know your customers",[12,7201,7202],{},"Traditionally, marketing involves segmenting people collectively into groups, based on static information e.g., age, gender, zip code. However, if you think about yourself personally, do you have the same interest, opinions, or preferred communication channel as most of your peers or neighbors?",[122,7204,7205,7207,7209],{},[113,7206,6293],{},[4635,7208],{},"\n\n\nA retail company segments customers for their advertisement on a video streaming platform based on stereotypes. Therefore, I keep seeing ads for kids’ nutrition or a new revolutionary stroller, despite the fact I have no children. This company placed me in a segment group based on my demographics when they should learn more about my interests. Resulting in wasted resources and a very ineffective campaign.\n",[12,7211,7212],{},"In such oversaturated online market, personalization is inevitable in retaining lasting loyal customers. Try to learn more about your audience, understand them, invest time into more sophisticated customer insights solutions or just simply ask them what they like.",[16,7214,7216],{"id":7215},"make-customer-centric-approach-a-priority","Make Customer-Centric Approach a priority",[12,7218,7219,7220,7223,7224,7227],{},"To become a customer-centric business, your customers are literally in the ",[113,7221,7222],{},"center of your strategies",", throughout their entire journey and after the purchase as well. The first step is to ",[113,7225,7226],{},"define all the touchpoints"," and focus on the unified communication (marketing and support).",[244,7229,7231],{"id":7230},"data-density-for-better-customer-journey-tracking","Data density for better customer journey tracking",[12,7233,7234,7235,7238],{},"An important part of delivering a great customer experience is keeping up with your customer’s journey. To become memorable, you need to keep up. A key part of increasing the accuracy of insights and improving relevancy is ",[113,7236,7237],{},"data density",". The more data you collect the richer you want them to be. It can help you know your customers more deeply, including the type of interactions and their behavior during all of them.",[12,7240,7241],{},"Example: A customer goes on a vacation, spends there a week relaxing. After they return back home and continue their standard internet browsing, they keep seeing the same advertisement for the resort they already went to. What is the chance they will take the exact same holidays and even in a near future? The customer's recent purchase demonstrates a lack of data density, the company is not keeping up. Instead, the company should use this information and recommend different destinations, new exciting adventures, or for example, a weekend getaway nearby.",[12,7243,7244,7245,7248,7249,7252,7253,7256],{},"Embedding the human component means ",[113,7246,7247],{},"focusing on long-term relationships"," and on true partnerships with your customers. That is more influential and more durable. To become a partner, you might need to modify your mindset. Replace the immediate sales goals of the past with proactive interactions that align with the goals that customers have for themselves. Simply put, shift your thinking away from achieving ",[422,7250,7251],{},"your"," goals to supporting customers in achieving ",[422,7254,7255],{},"their"," goals.",[244,7258,7260],{"id":7259},"don-be-afraid-to-just-ask","Don’ be afraid to just ask",[12,7262,7263,7264,7267],{},"Remember to ",[113,7265,7266],{},"incorporate a customer feedback"," loop to keep the continuous improvement. When you create a 360 view of your customer, you are provided with broad information that you can use to enhance their experience.",[12,7269,7270],{},"Although there are many things on the checklist to accomplish before becoming customer-centric, you can start small.",[5324,7272,7273],{},"\nStart by focusing on what customers need and how they want to interact with your business\u002Fbrand - not your products, their features, or revenue model. By designing your company from the customer’s perspective, your organization will be able to meet the customer’s needs and deliver a positive experience.\n",[16,7275,7277],{"id":7276},"harmonize-digital-and-human-elements","Harmonize digital and human elements",[12,7279,7280,7281,1296],{},"Full integration of human and digital parts can be time-consuming but very impactful. It drives sales, and it is vital in oversaturated markets. Remember that the ",[113,7282,7283],{},"customers are people in the first place",[12,7285,7286,7287,7290],{},"Consolidating Artificial Intelligence (AI) into your customer experience process allows you to have a deeper understanding of the individual customer. Yet, it lacks the flair in the activity, that humans feel to satisfy the needs; and ",[113,7288,7289],{},"overuse of AI can have the opposite effect",". One of the good practices is to identify key areas to balance AI-based support and human support. Automate the predictive, common, or easy areas and provide human support for complex or difficult situations.",[12,7292,7293,7294,3837,7297,7300],{},"Generally, make sure your service values are provided the way humans can feel. For example, communicating stories your customer can relate to can make a huge difference. ",[113,7295,7296],{},"Use the data for the insight and",[113,7298,7299],{},"add a personal touch"," to otherwise impersonal messages to expand the experience.",[122,7302,7303,7305],{},[113,7304,6293],{},"\n Customers receive machine-written emails daily. Be more creative with your messages.\n",[12,7307,7308],{},[148,7309],{"alt":76,"src":7310},"\u002Fupload\u002Femail-books.webp",[16,7312,7314],{"id":7313},"anticipate-customers-need","Anticipate customers’ need",[12,7316,7317,7318,7321],{},"Most customers are not 100% sure what exactly they want nor they want to explain what they seek. Successful businesses know their customers and foresee their needs in advance. They ",[113,7319,7320],{},"make continuous changes"," to their products or services to match the demand and proactively provide personalized recommendations. All of it must be supported by relevant data and communicated the way, customers can absorb and make the most of it. Adapt business strategy to customers’ preferences and revolve around their experience.",[12,7323,7324,7325,7328],{},"One of the examples can be ",[113,7326,7327],{},"looking for the next problem to"," solve for them, instead of looking at what next product you need to sell.",[122,7330,7331,7333,7335],{},[113,7332,6293],{},[4635,7334],{},"\n\n\nInstead of just sending an automated email of booking confirmation, be creating and show you care, for example, let the customer know you appreciate they travel with their family or ease their stress of forgetting something by informing them about your little shop.\n",[12,7337,7338],{},[148,7339],{"alt":76,"src":7340},"\u002Fupload\u002Femail-trip.webp",[12,7342,7343],{},"A combination of a good knowledge of customers‘ needs, problems, and where are they on their customer journey, together with understanding your product portfolio, delivers great results. Then the WOW effect comes.",[244,7345,7347],{"id":7346},"tie-it-with-a-big-bow","Tie it with a big bow",[12,7349,7350],{},"A customer-centric approach with full data density lays the foundation for creative action. Real-time and AI-driven then build on them and make it happen for you. Connected experiences tie everything together to humanize the digital customer experience. It all comes down to the situations, where the customers actually get to experience the benefits.",[122,7352,7353,7355,7357],{},[113,7354,6293],{},[4635,7356],{},"\n\n\nFor VIP customers, a hotel brand usually presents some welcome packages upon their arrival in one of their hotels, with a card saying: “Thank you for being our VIP customer. Let us know, how we can make your stay perfect”. Instead, you can use their information from the previous stay, build personalized gifts and say: “Welcome again! Your gym towel is ready, the yoga classes start at 7 am, and your favorite Pinot Noir is waiting for you in the fridge. Cheers.”\n",[12,7359,7360],{},[148,7361],{"alt":76,"src":7362},"\u002Fupload\u002Fthank-you-card.webp",[12,7364,7365],{},"Connected experiences are the ability to connect with your customer on their multi-device, multi-channel journey, in the digital and physical world and provide a seamless and continuous experience.",[12,7367,7368],{},"Final example: As a platinum customer with a hotel brand, my check-in at one of their hotels in a new location is not limited to “Thank you for being a platinum customer, which newspaper would you like?” Rather, “Your gym towel is in your room, the Wi-Fi code has been enabled for your devices, your favorite Pinot Noir will be brought up to the room, and we have an opening for a massage between 8 pm and 9 pm. Shall I book you in?” Bottoms up!",[16,7370,1643],{"id":1642},[415,7372,7373],{},[12,7374,7375,7378],{},[422,7376,7377],{},"\"The essential difference in service is not machines or 'things.' The essential difference are minds, hearts, spirits and souls.\""," - founder of Southwest Airlines, Herb Kelleher",[12,7380,7381],{},"Balancing user-focused technology and highly personalized human connection let you truly drive emotional engagement with your customers. A humanized customer experience begins with understanding the emotions of your customers and providing individual-level services. By considering and implementing the feedback and keeping a customer-centric attitude, or planning your marketing based on customer behavior, you can deliver the seamless experience your customers want with a genuine human touch. Remember, connected experiences nourish long-term customer relationships and build loyalty. And nonetheless, it all helps to grow NPS and long-term customer value.",[209,7383,7384],{"link":211,"button":212},"\n Our clients have successfully transformed their strategy and balances technology and personal touch with us. We can enhance the use of the technology and bring your brand closer to your customers. Let’s discuss the best solution for you.\n",{"title":76,"searchDepth":77,"depth":77,"links":7386},[7387,7388,7389,7393,7394,7397],{"id":7167,"depth":77,"text":7168},{"id":7198,"depth":77,"text":7199},{"id":7215,"depth":77,"text":7216,"children":7390},[7391,7392],{"id":7230,"depth":389,"text":7231},{"id":7259,"depth":389,"text":7260},{"id":7276,"depth":77,"text":7277},{"id":7313,"depth":77,"text":7314,"children":7395},[7396],{"id":7346,"depth":389,"text":7347},{"id":1642,"depth":77,"text":1643},"\u002Fupload\u002Fhuman-ai-collaboration-banner.webp",{},"\u002Fen\u002Fblog\u002Fhumanize-digital-customer-experience","2021-07-20T07:12:15.000+00:00",8.265,"9 min read",[1000,227,226],{"title":7140,"description":7145},"en\u002Fblog\u002Fhumanize-digital-customer-experience","Marketing automation provides new amazing opportunities to connect with your customers and increase their engagement. Yet, too much of everything may be counterproductive in the sense of decreased personal and emotional touch. Try these tips to humanize your customer experience.","r1hzqnjCaJwzvPPaqlttIukZNc4clQ0ywEDfDFWVw7g",{"id":7410,"title":7411,"author":7,"body":7412,"category":1334,"description":76,"extension":83,"image":7588,"isToc":85,"langAlt":7,"meta":7589,"metaDescription":7,"navigation":88,"path":7590,"published":88,"publishedAt":7591,"readingTimeMinutes":7592,"readingTimeText":1145,"relatedArticles":7593,"seo":7597,"stem":7598,"teaser":7599,"updatedAtCustom":7,"__hash__":7600},"blog_en\u002Fen\u002Fblog\u002Fimprove-google-ads-strategy-with-profit-data.md","Improve Google Ads strategy with Profit data",{"type":9,"value":7413,"toc":7580},[7414,7418,7425,7429,7432,7447,7454,7457,7460,7467,7471,7478,7485,7492,7496,7500,7506,7527,7530,7541,7551,7555,7562,7568,7570,7577],[16,7415,7417],{"id":7416},"google-ads-bidding","Google Ads bidding",[12,7419,7420,7421,7424],{},"Simply put, Google Ads advertising serves one purpose only: invest sources to get conversions. However, in practices, the “science” behind it is not that simple. You are bidding over your competitors thousands of times every second. Every time the ad space is available (a person search something on Google or opens a page), Google carries out an auction and decides which particular ad will be shown to that particular person. Some cookies (users) are more worthy for you than others. ",[113,7422,7423],{},"Automatic smart bidding algorithm learns from your data using AI",", which cookies (users) are likely to convert, and it uses the information for decisions of automatic bidding.",[16,7426,7428],{"id":7427},"you-need-data-but-what-data","You need data. But what data?",[12,7430,7431],{},"Google Ads automated smart bidding AI needs conversion data to learn and optimize its strategy to function properly. However, sending orders to Google Ads has two dimensions.",[252,7433,7434,7441],{},[255,7435,7436,7437,7440],{},"The first is to record ",[113,7438,7439],{},"the order"," as such that it has been actually made by a user.",[255,7442,7443,7444,1296],{},"But the second dimension is ",[113,7445,7446],{},"the value of the order",[12,7448,7449,7450,7453],{},"The simplest and at the same time the most widespread solution is to send data on orders with their turnover. Turnover is publicly known information displayed on your website, so it is easily available and at the same time you do not have to be afraid to send it anywhere. However, if you have ever encountered product pricing at least marginally, then you must know that turnover is actually the worst value on which to optimize a marketing algorithm. It is more ",[113,7451,7452],{},"optimal to build the algorithm on the profit or at least on margin",", as that is the value you get your earnings from, at the end of the day. The order with the highest turnover is often not the one with the highest profit. However, obtaining the profitability of orders is not an easy task and requires a non-trivial infrastructure and implementation of processes in the company.",[727,7455,7456],{},"\nThis article does not explains calculating the profitability of orders, but it is a necessary condition before you can send profit to Google Ads.\n",[12,7458,7459],{},"By default, order turnovers are sent directly from the website frontend, which unknowingly solves one of the other important tasks for you. Because the order is sent from the frontend, Google can link the order with a specific user or with a specific click on the advertisement via cookies, which it needs to optimize its algorithm.",[12,7461,7462,7463,7466],{},"The problem is that profitability is not an information you would like to expose publicly or directly to your competition. And whatever is sent from the frontend of the site is completely available for anyone to see. Our solution sends only a part of the information from the website frontend and connects them with the profit in backend processes, thus ",[113,7464,7465],{},"the profit on individual order is passed on in a secure, non-public way",". Also, the order’s profit changes over time and thus it is not even possible to send the final profit from the frontend once the order is completed.",[16,7468,7470],{"id":7469},"before-you-start","Before you start",[12,7472,7473,7474,7477],{},"There is only one, but very challenging, condition before you send profit to Google Ads: ",[113,7475,7476],{},"You must have the calculated profit (or margin) on each individual order."," If may seem like a simple task at first, but trust us, it is not. From the experience of working with many clients, profit calculation can sometimes take longer than the solution implementation itself.",[12,7479,7480,7481,7484],{},"However, the profit must be calculated ",[113,7482,7483],{},"correctly, reliably and on time",". All three of these aspects are key to managing Google Ads profitability. There will always be something missing from the profit calculation. It is not possible to have real-time profit calculation, nonetheless, the more accurate and faster you can calculate it, the better your Google Ads targeting will work.",[12,7486,7487,7488,7491],{},"For clients with ",[113,7489,7490],{},"longer customer journey"," like banks, automotive, B2B, traveling and so on, just sending so called real conversion could be a huge step in bidding effectivity. If you are sending conversion into Google Ads, which has less than 80 % probability to be profitable, then it is your case. This is mostly happening in cases when conversion sent into the Google Ads is just a lead, and someone must take another action to pursued the user to really want the product or service. If you start sending data on the leads that actually converted into Google, your bidding effectivity will rise significantly, you will save more money and get more conversions. Everything we describe in the following parts of the article can by applied on these cases as well.",[16,7493,7495],{"id":7494},"how-it-works","How it works",[278,7497],{"source":7498,"caption":7499},"\u002Fupload\u002Fmhubcloud-simple.webp","mHub Cloud system data flow",[12,7501,7502,7503,7505],{},"For processing and connecting data, you can use our tool called ",[113,7504,70],{},". This tool manages backend measurement into several marketing platforms including Google Ads.",[122,7507,7508,7509,7512,7513,7516,7517,7520,7521,7523,7524],{},"\nmHub Cloud enables backend data processing and connects them to marketing platforms. The main advantage is integrating different data sources, as each platform requires different approach. A part of mHub Cloud is \n",[113,7510,7511],{},"data preparation","\n including deduplication and other cleaning mechanisms. It also includes consent processing and \n",[113,7514,7515],{},"sophisticated alerting system","\n. The \n",[113,7518,7519],{},"data is thus better protected","\n because it is no longer publicly visible and therefore less attackable.\n",[4635,7522],{},"\n\n\nThanks to mHub cloud you \n",[113,7525,7526],{},"gain more control over your data which you can enrich and increase the performance of your campaigns.",[12,7528,7529],{},"In theory, the process is simple, as shown on the picture above. We'll take data from two sources, combine them, and send them to Google Ads. In practice, it is a matter of integrating several very different data sources and non-trivial data cleaning. The process includes deduplication, attribution and additional cleanup mechanisms that prepare the data for proper processing by Google Ads.",[12,7531,7532,7533,7536,7537,7540],{},"The fundamental issue of the whole technique is that the ",[113,7534,7535],{},"profit changes and is actually more and more accurate in time",". For example, because you already know that the order has been paid for and collected, it can no longer be returned or claimed, etc. All these events affect the resulting profit. On the contrary, from an accounting point of view, until the order has been paid, the profit is 0. Which, in case of a cash payment, the actual profit will be delayed for a few days. That's too late for Google Ads. For this reason, ",[113,7538,7539],{},"we recommend calculating the profit on the order immediately after completing the order."," Otherwise, Google Ads receives a large number of zero values ​​that keeps the bidding algorithm grounded. Another extreme situation is when the algorithm is encouraged to bid unnecessarily, as some orders will not be paid in the end.",[12,7542,7543,7544,7547,7548,7550],{},"The solution to this conflict is ",[113,7545,7546],{},"prediction, which greatly improves the effectivity of the bidding algorithm",". The calculation of profit prediction using AI takes place inside the ",[113,7549,70],{},". The prediction is used especially when the order has not yet been paid, or when 14 days have not elapsed since the order was picked up (due to possible returns). In the moment that the order is canceled, returned, etc., the predicted value is replaced by the real profit value directly from your system.",[16,7552,7554],{"id":7553},"error-alerts","Error Alerts",[12,7556,7557,7558,7561],{},"The cherry on top is a ",[113,7559,7560],{},"consistent assurance that everything is going smoothly",". mHub Cloud has an already integrated sophisticated alerting, which monitors data at various levels. If there is an error or even a data failure at any level, we will know immediately, and we can react in a reasonable time and fix the problem.",[12,7563,7564,7565,1296],{},"A short-term outage is not critical for the entire system. If the system fails for one or two days, then it doesn’t have to be critical. The bidding algorithm in Google Ads will continue to work and a few days outage will only slightly affect it, still keeping within the campaign plans. However, a multi-day outage could be critical, effecting the bidding severely, as the algorithm will begin to affect each day more and more. Therefore, having a ",[113,7566,7567],{},"system of warnings that scans the data for correct retrieval makes a difference",[16,7569,60],{"id":59},[12,7571,7572,7573,7576],{},"Sending profit to your Google Ads instead of turnover can make a significant change in terms of optimizing your marketing budget, hence increasing performance of marketing campaign, simply by not wasting resources on nonprofitable products, or draining your budget due to false orders. The easiest, secure and better in a long-term way as well, is ",[113,7574,7575],{},"integrating the information on the backend and sending clean and enriched data to Google Ads",". mHub Cloud is a quick and easy solution that may help you overcome more obstacles. The anonymization, predictions and alerting system opens new opportunities how you can use the data you already have and achieve better outcomes.",[209,7578,7579],{"link":211,"button":212},"\n Contact us if you are ready to change the way you are bidding now.\n",{"title":76,"searchDepth":77,"depth":77,"links":7581},[7582,7583,7584,7585,7586,7587],{"id":7416,"depth":77,"text":7417},{"id":7427,"depth":77,"text":7428},{"id":7469,"depth":77,"text":7470},{"id":7494,"depth":77,"text":7495},{"id":7553,"depth":77,"text":7554},{"id":59,"depth":77,"text":60},"\u002Fupload\u002Fbidding-illustration.webp",{},"\u002Fen\u002Fblog\u002Fimprove-google-ads-strategy-with-profit-data","2021-06-16T09:07:00+00:00",7.735,[7594,7595,7596],"content\u002Fen\u002Fblog\u002Fconversion-rate-explained.md","content\u002Fen\u002Fblog\u002Fhow-to-optimize-utm-for-uniform-campaign-typology.md","content\u002Fen\u002Fblog\u002Fare-the-results-of-your-a-b-testing-accurate.md",{"title":7411,"description":76},"en\u002Fblog\u002Fimprove-google-ads-strategy-with-profit-data","Are you using smart bidding in Google Ads? Are you sending into the Google Ads conversions with turnover? Or even worse, are you sending conversions into the Google Ads that are not real conversions, like for example not paid order or just a lead from a web form? If you answered yes, then you are at right place and reading this article will be worthy for you.","MlUOR-3CnXPZV9Q5TqOJyMNvzLFmmH7F3HSvmV1mM-c",{"id":7602,"title":7603,"author":7,"body":7604,"category":7816,"description":7608,"extension":83,"image":7817,"isToc":85,"langAlt":7,"meta":7818,"metaDescription":7,"navigation":88,"path":7819,"published":88,"publishedAt":7820,"readingTimeMinutes":7821,"readingTimeText":7822,"relatedArticles":7823,"seo":7824,"stem":7825,"teaser":7826,"updatedAtCustom":7,"__hash__":7827},"blog_en\u002Fen\u002Fblog\u002Fincrease-conversions-with-category-page-product-ranking.md","Increase conversions with category page product ranking",{"type":9,"value":7605,"toc":7803},[7606,7609,7616,7620,7623,7627,7630,7634,7637,7641,7644,7648,7651,7656,7660,7663,7667,7670,7672,7675,7679,7682,7686,7689,7693,7696,7699,7703,7706,7710,7713,7717,7720,7768,7770,7773,7790,7793,7800],[12,7607,7608],{},"Traditionally, e-commerce retailers and marketers pay most of their attention to developing product pages and checkout pages, because that is where the sales happen. However, we need to look at the previous steps, before the checkout. Customers use category pages to understand the offers of the e-shop, in other words, category pages become the attraction locations.",[12,7610,7611,7612,7615],{},"When a customer comes to an e-shop and looks for a product, category pages drive the majority of the site product discovery ranging between 50 - 70%, compared with other options, search results and recommendation sites bring around 10% each. This may seem like a lot and that there is not much to be improved. Nevertheless, t",[113,7613,7614],{},"he issue is in the progress from the category page."," When the category page is not compelling enough, customers are unlikely to reach the individual product page. Less than half of that traffic really proceeds to the product page. Customers probably did not find what they were looking for, the products were not relevant or outside their price range. By optimizing category pages, you can double the product discovery and increase the profit. Additionally, it builds a website structure, improves SEO, and subsequent remarketing advertising.",[16,7617,7619],{"id":7618},"improving-category-pages","Improving category pages",[12,7621,7622],{},"Driving targeted traffic to category pages has been a topic of many marketers’ discussion. Commonly they have already adopted some improvements. The “science” behind the sales-driving category pages lies in displaying the optimal combination of selected products, counting on the limited number of the showed pieces. Here are just two examples, how usually e-shops try to tackle category pages:",[860,7624,7626],{"id":7625},"manual-optimization","Manual optimization",[12,7628,7629],{},"The cooperation with many e-commerce businesses helped us understand that many e-shops are trying to optimize the category pages, however, they do it manually and rely on their own intuition rather than customer’s behavior. Manual arrangements can take days resulting in wasted resources; energy, time, and finances. The outcome of such activities costs more than they actually bring. Secondly, the changes cannot be applied fast enough to satisfy the customers’ needs.",[860,7631,7633],{"id":7632},"category-page-ads","Category Page Ads",[12,7635,7636],{},"Targeting traffic via ads is another option of how to increase conversion rates. If done correctly it can bring a significant increase. On the other hand, the actual return on the investment is lower, taking the ad spent into consideration.",[16,7638,7640],{"id":7639},"how-to-optimize-category-pages-deliver-better-results","How to optimize category pages & deliver better results",[12,7642,7643],{},"The optimization of category pages can be crucial in getting more website traffic, converting it to sales, and creating loyal customers from first-time shoppers. It is important to provide a valuable digital experience. When the category page doesn’t deliver what the customers expected, they leave without a purchase, not finding what they wanted. Relevancy is what matters. A crucial prerequisite to any calculation is historical data on products, sales, segments, etc. Without enough data, the results cannot be as satisfying.",[244,7645,7647],{"id":7646},"personalization-and-product-recommendations","Personalization and product recommendations",[12,7649,7650],{},"The category pages need to be personalized to be able to achieve different goals for different segments. Adding a layer of personalization to different audiences’ levels up simple segmentation and yields higher returns. With first-time customers, you will probably focus on conversion rate while with loyal customers you can highlight a particular brand based on brand affinity, new products to complement already purchased ones, or something a little more diverse, depending on the customer profile. Assigning different products to each segment, based on the customer’s behavior on-site increases customer engagement. Tracking how the customer acts on the websites helps to understand their needs and display relevant items. If two people are looking for backpacks, they might be looking for a different kind. If one person is shopping for notepads, writing supplies, it is likely they will also need a school backpack. A different customer is looking at hiking boots and camping gear and might need a hiking backpack.",[12,7652,7653],{},[148,7654],{"alt":76,"src":7655},"\u002Fupload\u002Fproduct-recomendation-illustration.jpg",[860,7657,7659],{"id":7658},"sorting","Sorting",[12,7661,7662],{},"Sorting products on the site in specific order or sequence based on their attributes, performance metrics, and their combination. The attributes can be price, size, brand, availability, etc. Metrics can be, for example, conversion rate, margin, revenue per impression, or inventory information. Attributes and metrics rely on the data about the products and the customers, collected from the website and internal databases. By adjusting the weights of the values, it is possible to promote and demote products in the sequence causing the relocation of the product on the page.",[860,7664,7666],{"id":7665},"highlighting","Highlighting",[12,7668,7669],{},"Choosing to highlight specific products or groups of products, seasonal or campaign offers at the top of the category page supports marketing efforts. Placing some products on the most engaging and prominent spots on the sites creates a store-like experience. It is commonly used to promote new products, collaborations, and ranges. Highlighting can work for limited offers (discounts or weekend sales) and display products for a certain time period. Scheduling this should be aligned with marketing campaigns. Another option to adjust highlighting can be based on different business goals, chosen metrics, like profitability or liquidity.",[860,7671,4669],{"id":4665},[12,7673,7674],{},"Segmenting your customers should happen on top of sorting and highlighting products. It allows creating category pages with specific product sequences that vary among different audiences. The marketing approach differs by different types of customers, their preferences, affinity, and different shopping stages, therefore category pages should be aligned with that as well.",[860,7676,7678],{"id":7677},"personalization","Personalization",[12,7680,7681],{},"Showing the customers what they want to buy, the right time, the right product – like a personal shopper. It helps customers to discover items they really want. In e-commerce, personalization has a more significant impact and is an important part of modern shopping. It provides relevant recommendations for the particular customer segment (or with advanced algorithms, even down to each individual customer). Personalization creates an experience based on the customer’s behavior.",[16,7683,7685],{"id":7684},"using-machine-learning-for-relevant-product-displaying","Using Machine Learning for relevant product displaying",[12,7687,7688],{},"Powering product recommendation with Machine learning allows you to be dynamic and automatically adapt to the changes. What customers want to see is what they really need, ideally on the very first page. Long searching is demotivating. Using historic purchases, similar customer behavior, or other factors can significantly change the way your customers interact with your e-shop.",[244,7690,7692],{"id":7691},"product-ranking-based-on-customers-behavior-and-other-factors","Product ranking based on customers behavior and other factors",[12,7694,7695],{},"Product ranking in a sense of algorithms is a process of product scoring based on what the customers like. Additionally, the score can be evaluated based on the factors the e-shop defines, for example, storage availability (the more pieces of each product you have and need to sell, the higher score it gets). What we have found as an effective method is to look more deeply and find the optimal combination of the products display next to each other. Our procedure usually consists of data integration from various systems, followed by advanced analytics and machine learning algorithms for continual improvement.",[727,7697,7698],{},"\nTo understand what product ranking is, think of it as product ranking from the system perspective, not as customer review. The ranking that you calculate helps the algorithm to show the right products on the category page.\n",[244,7700,7702],{"id":7701},"testing-and-optimization","Testing and optimization",[12,7704,7705],{},"Finding an optimal solution isn’t an easy task, especially when personalization and merchandising are dynamic, evolving processes requiring repetition, calculation, and testing. AB Testing is a great approach for detecting the most profitable adjustments. It helps to discover the performance of different category pages or the effectiveness of product highlighting. It allows you to test competing strategies and make informed decisions for elevated results. It is possible to test a whole customer base or just a smaller part. With testing on different groups, you can experiment with bold ideas. You can see if sorting by high converting products is better than sorting by high-profit products. Or, you can assess if personalization delivers higher results than no personalization on category pages.",[244,7707,7709],{"id":7708},"continuous-improvement","Continuous improvement",[12,7711,7712],{},"Once you set up the algorithms for relevant product displaying, you are not done yet. It is only a first step but not the last. Actually, the process is evolving, and you cannot stay static. Sometimes the results are oversimplified or too generalized, and you need to use more contextual data to improve the relevance. Thinking of it in the context of the customer journey helps to maintain the dynamics within the product associations.",[16,7714,7716],{"id":7715},"what-to-think-about-before-diving-in","What to think about before diving in",[12,7718,7719],{},"Are you hooked yet? Ready to dive your e-commerce business into the ocean of personalization? Slow down a little bit. There are a few things to think about before you do any action.",[327,7721,7722,7730,7736,7744,7752,7760],{},[255,7723,7724,7727,7729],{},[113,7725,7726],{},"Make sure your website is ready!",[4635,7728],{},"Some technology can decrease performance. Even if the personalization is great, it should not be implemented if the usability is diminished.",[255,7731,7732,7733,7735],{},"**Don’t change the entire website!",[4635,7734],{},"\n**Structural elements cannot be personalized, they should remain the same (cart, navigation panel, etc.)",[255,7737,7738,7741,7743],{},[113,7739,7740],{},"Less is more!",[4635,7742],{},"Too much of everything is confusing, too dynamic can be misleading. The key is not to look at personalization.",[255,7745,7746,7749,7751],{},[113,7747,7748],{},"Prepare your data!",[4635,7750],{},"Before you start the analyses and evaluations, gather all relevant data, the more historic data the better.",[255,7753,7754,7757,7759],{},[113,7755,7756],{},"Identify key factors!",[4635,7758],{},"Figure out, how you want to score\u002Frank\u002Frecommend the content. Do you need to clear your warehouse or promote more trendy items? What about seasonal stuff? Segmented or more individualized? More factors and segments, the more complicated and expensive it gets.",[255,7761,7762,7765,7767],{},[113,7763,7764],{},"Start small!",[4635,7766],{},"Try only a few changes first, test them, and then you can see if it is worth it to advance or not.",[16,7769,1643],{"id":1642},[12,7771,7772],{},"Successful category pages drive performance and contribute to growing conversion and return ratios. Optimizing them generates a competitive advantage and brings multiple benefits to your e-commerce business and customers.",[327,7774,7775,7778,7781,7784,7787],{},[255,7776,7777],{},"Resource savings with automatization",[255,7779,7780],{},"Better performance with category pages optimization",[255,7782,7783],{},"Relevant experiences with personalization",[255,7785,7786],{},"Achieving more than one target with optimization and testing",[255,7788,7789],{},"Easy to scale with a growing product portfolio",[12,7791,7792],{},"It may seem super easy, just to set up a few rules and you are good to go. However, working with a large amount of data and continuous training of the algorithms is tricky. Rather than DIY everything, cooperating with more experienced professionals prevents the risk of “breaking it all” and losing your customers to it.",[12,7794,7795,7796,7799],{},"We have effectively set up the product ranking and relevant recommendations on category pages for many of our clients and helped them to ",[113,7797,7798],{},"achieve a 15-27% increase"," in the conversion only a few weeks after implementing the solution. We have been able to customize the solution based on different business needs and continuously improve the solution thanks to testing.",[209,7801,7802],{"link":211,"button":212},"\nCome to us today and help your customers to find the desired item tomorrow.\n",{"title":76,"searchDepth":77,"depth":77,"links":7804},[7805,7806,7809,7814,7815],{"id":7618,"depth":77,"text":7619},{"id":7639,"depth":77,"text":7640,"children":7807},[7808],{"id":7646,"depth":389,"text":7647},{"id":7684,"depth":77,"text":7685,"children":7810},[7811,7812,7813],{"id":7691,"depth":389,"text":7692},{"id":7701,"depth":389,"text":7702},{"id":7708,"depth":389,"text":7709},{"id":7715,"depth":77,"text":7716},{"id":1642,"depth":77,"text":1643},"Company","\u002Fupload\u002Fcategoryranking-article-cover.webp",{},"\u002Fen\u002Fblog\u002Fincrease-conversions-with-category-page-product-ranking","2020-11-06T10:10:50.000+00:00",9.12,"10 min read",[227,554],{"title":7603,"description":7608},"en\u002Fblog\u002Fincrease-conversions-with-category-page-product-ranking","Online market is becoming very saturated and crowded with hundreds of e-shops, and the number is increasing. To keep up with the competition, every internet store must create a unique approach, provide enjoyable shopping and know its customers.","jo4l7QC10gq9zQLNdkKbEgxJz9GV44x0803c8Kv8BkM",{"id":7829,"title":7830,"author":7,"body":7831,"category":7816,"description":7835,"extension":83,"image":8063,"isToc":85,"langAlt":7,"meta":8064,"metaDescription":7,"navigation":88,"path":8065,"published":88,"publishedAt":8066,"readingTimeMinutes":8067,"readingTimeText":7403,"relatedArticles":8068,"seo":8069,"stem":8070,"teaser":8071,"updatedAtCustom":7,"__hash__":8072},"blog_en\u002Fen\u002Fblog\u002Fmachine-learning-in-marketing-practice.md","Machine Learning in Marketing Practice",{"type":9,"value":7832,"toc":8051},[7833,7836,7839,7843,7846,7850,7853,7873,7876,7879,7884,7888,7891,7894,7898,7903,7928,7931,7934,7945,7954,7957,7960,7965,7968,7973,7980,7984,7987,7991,7994,7997,8002,8006,8009,8017,8020,8025,8029,8032,8035,8040,8042,8045,8048],[12,7834,7835],{},"While businesses are beginning to fully realize the potential of Machine Learning (ML), building ML models requires advanced data science skills and is a very tedious and time-consuming process. Automated ML focuses on improving the productivity of data scientists by recommending good ML models in a very short period of time and enabling data analysts, BI professionals, developers, and domain experts to build ML models without understanding the complexity of feature engineering, algorithm selection, and hyperparameter tuning. During a three-hour-long session, we highlighted several Machine Learning technologies and automated capabilities, to help understand the value it provides.",[12,7837,7838],{},"At the very beginning, we overviewed interesting and innovative technologies and applications of AI, mostly on the theoretical level, and gave a good introduction to the following practical presentations given by our Marketing Data Science experts.",[16,7840,7842],{"id":7841},"part-1-azure-machine-learning","Part 1 | Azure Machine Learning",[12,7844,7845],{},"The first practical part of the workshop focused on Azure Machine Learning (AML). A short tool overview was followed by a business case of how to use ML to effectively motivate customers with discounts taking into consideration that some customers do not need to be given discounts, which in the end can bring significant savings.",[244,7847,7849],{"id":7848},"introducing-azure-machine-learning","Introducing Azure Machine Learning",[12,7851,7852],{},"Azure Machine Learning is a tool developed by Microsoft providing a comprehensive solution for managing the whole process of creating machine learning models. This tool provides an option to create ML models for various professional levels:",[327,7854,7855,7861,7867],{},[255,7856,7857,7860],{},[422,7858,7859],{},"Notebooks"," for data scientists who love coding in Python\u002FR",[255,7862,7863,7866],{},[422,7864,7865],{},"Designer"," for analysts with knowledge of modeling process",[255,7868,7869,7872],{},[422,7870,7871],{},"Automated ML"," option is useful especially for marketers and managers",[12,7874,7875],{},"It is possible to create models based on “standard” structured tabular data and also custom algorithms for text analytics and object recognition based on textual files or pictures. AML supports deployment of the models as a web service which is easily approachable via simple REST API or as a batch service for batch modeling within databases. Powerful computing ensures quick response, stability, and high accessibility.",[12,7877,7878],{},"AML covers the whole process of creating ML models:",[12,7880,7881],{},[148,7882],{"alt":76,"src":7883},"\u002Fupload\u002Fml-process.webp",[244,7885,7887],{"id":7886},"business-case-optimizing-discount-popup","Business Case - Optimizing discount popup",[12,7889,7890],{},"One of our clients has an e-shop with apparel. They decided to run a campaign to motivate visitors to make a purchase on their website by offering them a 10% discount via a popup message when visiting the e-shop.",[12,7892,7893],{},"The current solution was not effective as it did not differentiate between various types of intents visitors could have and treated them equally. This led to a loss of interest resulting in loss of money!",[860,7895,7897],{"id":7896},"more-efficient-solution-with-machine-learning","More efficient solution with Machine Learning",[12,7899,7900],{},[113,7901,7902],{},"Before:",[327,7904,7905,7911,7917],{},[255,7906,7907,7910],{},[422,7908,7909],{},"Visitor A"," visited the website to see some inspiration and check offers. They were not interested in purchasing anything at that moment and they actually did not buy anything in the end (red cross). It would be more suitable to engage them via some inspirational content.",[255,7912,7913,7916],{},[422,7914,7915],{},"Visitor B"," visited the web page after some investigation of its offer on product comparators, however, they were still hesitating. The discount stimulated them to purchase the shoes they always wanted.",[255,7918,7919,7922,7923,7925],{},[422,7920,7921],{},"Visitor C"," visited the website with a clear intent to buy a specific product, they would buy regardless of the discount. In the end, they bought the product with a 10% discount. This is an additional cost for the e-shop.",[4635,7924],{},[148,7926],{"alt":76,"src":7927},"\u002Fupload\u002Fbefore-ml-model.webp",[12,7929,7930],{},"The goal of the ML model is to make the popup content more efficient by predicting customers’ intent. To do so, visitors are divided into four groups based on the decision process funnel and the probability of their intent.",[12,7932,7933],{},"Each group receives personalized content in the popup. This solution can save money by not offering a discount to those visitors who would purchase the product anyway and moreover it moves down through the funnel all visitors that are in earlier stages of the decision process.",[12,7935,7936,7937,7940,7941,7944],{},"Visitors recognized as in the ",[422,7938,7939],{},"“Attention”"," stage with conversion probability below 25% are provided with inspirational content, increasing their engagement and moving them towards the ",[422,7942,7943],{},"“Interest”"," stage",[12,7946,7936,7947,7949,7950,7953],{},[422,7948,7943],{}," or “Desire” stage with conversion probability between 25% and 75% are offered a newsletter subscription which will tell them more about specific products and increase their motivation to move to the final ",[422,7951,7952],{},"“Action”"," stage.",[12,7955,7956],{},"Visitors recognized as in the “Action” stage with conversion probability between 75% and 90% are provided with a 10% discount voucher to motivate them to finish the conversion process.",[12,7958,7959],{},"Visitors recognized as in the “Action” stage with a conversion probability of over 90% are not provided with any offer, the model expects they would convert anyway, and no additional stimulation is needed.",[12,7961,7962],{},[148,7963],{"alt":76,"src":7964},"\u002Fupload\u002Ffunnel.webp",[12,7966,7967],{},"This particular model was trained on exemplary data of customers and their behavior on the web (from what channel they approach the website, what was the landing page, if they ever purchased something etc.).",[12,7969,7970],{},[148,7971],{"alt":76,"src":7972},"\u002Fupload\u002Fafter-ml-model.webp",[12,7974,7975,7976,7979],{},"After the deployment of the model, each user is provided with suited content leading to a ",[113,7977,7978],{},"30% profit increase"," and an escalated number of visitors moving through the decision process towards the action.",[16,7981,7983],{"id":7982},"part-2-azure-databricks","Part 2 | Azure Databricks",[12,7985,7986],{},"The second practical part of the workshop concentrated on Azure Databricks. As an introduction, we went over the tool overview and continued with two business cases: effective product recommendation and optimizing smart bidding.",[244,7988,7990],{"id":7989},"introducing-azure-databricks","Introducing Azure Databricks",[12,7992,7993],{},"Azure Databricks is an Azure service providing a very broad spectrum of possible uses. Serving people from many data-utilizing areas, it can process data from a wide range of sources and can output results into many other services. Incorporating the Apache Spark for data processing, Azure Databricks is constructed for simple and optimized use of big data.",[12,7995,7996],{},"Another main advantage of Databricks is allowing cooperation even at the same time and within the same notebook which is further enhanced by the support of multiple programming languages (Python, Scala, R, SQL, Java). The security is ensured by role-based access and integration of Azure Key Vault service for safe work with sensitive information. The usefulness of Azure Databricks is illustrated in two selected cases below.",[12,7998,7999],{},[148,8000],{"alt":76,"src":8001},"\u002Fupload\u002Fimage.webp",[244,8003,8005],{"id":8004},"business-case-product-ranking","Business Case - Product ranking",[12,8007,8008],{},"Due to a generally high number of product pages, e-shops need to sort their products to ensure that customers do not need to search through many pages before finding the most favorite pieces. There are several ways to approach sorting which can be selected based on the company's needs and data availability.",[327,8010,8011,8014],{},[255,8012,8013],{},"Sorting based on a single metric, like impressions and conversions would lead to fixing the same products on the top of the list and thus driving away bored customers. Therefore, when sorting based on product parameters, it is important to include other metrics, like past trends and profit margin to respond to trends and to optimize based on profit.",[255,8015,8016],{},"Alternatively, sorting can be personalized based on either related products to those a customer has already viewed or related customers by offering products they have shown interest in. Personalization may provide more tailored recommendations but requires significantly more data and more time and space for computation. By incorporating Azure Databricks into your solution you have the benefit of optimized big data processing along with the possibility to process data in real-time.",[12,8018,8019],{},"To evaluate the selected sorting of products, the A\u002FB test allows you to compare two groups of randomly divided customers which helps you to avoid interpreting the evaluation without mistaking the effect of improved sorting with unrelated external influence. If the first version of product ranking is successful (as is visible on the result from the A\u002FB test below), the continual improvement and subsequent testing can proceed.",[12,8021,8022],{},[148,8023],{"alt":76,"src":8024},"\u002Fupload\u002Fgraph.webp",[244,8026,8028],{"id":8027},"business-case-improving-google-ads-smart-bidding-algorithm","Business Case - Improving Google Ads Smart Bidding Algorithm",[12,8030,8031],{},"The smart Bidding Algorithm for Google Ads is optimizing advertisement strategy by investing in ads that bring more profit. For this optimization, the algorithm needs to have correct and timely information about the profits from orders. However, this is often a problem e.g. due to returned orders or due to buying the products to store only after a customer has paid for them. For this reason, the Smart Bidding Algorithm calculates with revenues, assuming the simple constant margin and constant return rate for all products. This can be improved by predicting the profits - either using a complex model for the profit or separating profit into a multiplication of revenue, margin, and return rate where revenue is known, average margin can be taken from the database, and return rate can be predicted using a binary model.",[12,8033,8034],{},"Azure Databricks helps you combine the necessary data both from real-time streams and a regularly updated database. Predicted profits are loaded into Google Ads so that Smart Bidding Algorithm can improve the advertising in the browser and bring more customers and more future profit.",[12,8036,8037],{},[148,8038],{"alt":76,"src":8039},"\u002Fupload\u002Fgoogleads-smart-bidding.webp",[16,8041,1643],{"id":1642},[12,8043,8044],{},"In summary, we showcased three practical uses of Machine Learning in e-Commerce, yet the number of ML applications is far bigger. With an increasing number of different tools providing automated algorithms it is always good to know what your data is flowing through before deciding on a specific option. With Azure, you can not only ensure security, but also it can be very easily connected to cloud storage and other tools that overall create one well-working and inter-connected environment, built for your convenience and, more importantly, increasing customer engagement and returns.",[12,8046,8047],{},"We have applied similar and many more solutions. Marketing combined with Data Science experience and technical expertise provides us with a competitive advantage to build custom solutions for each project.",[209,8049,8050],{"link":211,"button":212},"\nLet us know, how we can help you grow.\n",{"title":76,"searchDepth":77,"depth":77,"links":8052},[8053,8057,8062],{"id":7841,"depth":77,"text":7842,"children":8054},[8055,8056],{"id":7848,"depth":389,"text":7849},{"id":7886,"depth":389,"text":7887},{"id":7982,"depth":77,"text":7983,"children":8058},[8059,8060,8061],{"id":7989,"depth":389,"text":7990},{"id":8004,"depth":389,"text":8005},{"id":8027,"depth":389,"text":8028},{"id":1642,"depth":77,"text":1643},"\u002Fupload\u002Fmachine-learning-marketing-banner.webp",{},"\u002Fen\u002Fblog\u002Fmachine-learning-in-marketing-practice","2020-10-07T01:49:55.000+00:00",8.2,[226],{"title":7830,"description":7835},"en\u002Fblog\u002Fmachine-learning-in-marketing-practice","A few months ago, we organized an online workshop on the practical use of Machine Learning. We talked about how to open new opportunities with Machine Learning in marketing as well as in other fields.","Sxt_6uoFUTDWOfF7FQ8d1O_IHFvxlepp4_lDBbuCfNU",{"id":8074,"title":4262,"author":7,"body":8075,"category":7,"description":12193,"extension":83,"image":12194,"isToc":85,"langAlt":7,"meta":12195,"metaDescription":12196,"navigation":88,"path":12197,"published":88,"publishedAt":12198,"readingTimeMinutes":12199,"readingTimeText":12200,"relatedArticles":12201,"seo":12203,"stem":12204,"teaser":12205,"updatedAtCustom":12206,"__hash__":12207},"blog_en\u002Fen\u002Fblog\u002Fnew-data-api-for-google-analytics-4.md",{"type":9,"value":8076,"toc":12177},[8077,8091,8098,8107,8115,8118,8122,8134,8140,8143,8182,8187,8430,8435,8686,8690,8693,8733,8738,9176,9181,9688,9691,9695,9699,9702,9728,9932,9936,9943,9964,9967,9989,10445,10474,10478,10493,10496,10499,10505,11039,11048,11052,11066,11071,11074,11079,11083,11093,11096,11451,11455,11471,11474,11477,11501,11765,11826,11832,11836,11839,11850,11877,11884,11893,11901,11909,12140,12142,12145,12172,12174],[12,8078,8079,8080,8083,8084,8086,8087,8090],{},"The ",[113,8081,8082],{},"new version of Google Analytics"," with an innovative approach to data structure has been introduced in summer 2019, under the name Google Analytics App + Web. In autumn 2020 Google released it from the beta version and rebranded it as ",[113,8085,5336],{},". While it is still not recommended to transfer your whole data measurement to the new version as it is being gradually improved, it definitely deserves increased attention as Google is introducing many new features there. The new Google Analytics 4 is based on events and their parameters. As its previous name implies, it combines data from apps and web analytics in one property. Moreover, it serves as a flexible tool ",[113,8088,8089],{},"for cross-platform analysis",". To learn more about Google Analytics 4, follow our blog for an upcoming article in which we will discuss changes and new features of the GA4, extensively.",[727,8092,8093,8094,5337],{},"\nThis article describes the use of Data API for the new version of Google Analytics, GA4. If you are interested in the GA Reporting API V4 used for the Universal Google Analytics, check out \n",[37,8095,8097],{"href":4264,"rel":8096},[41],"the article dedicated to UA API",[12,8099,8100,8101,8106],{},"In this article, we speak about approaches to query data from Google Analytics 4 using the Google Analytics Data API (further abbreviated as GA4 API). The GA4 API is still available only in the ",[113,8102,8103],{},[422,8104,8105],{},"beta version"," but it is never too early to study its features and learn how to benefit from them. We present the API mainly using examples of the JSON-structured request body that can be used in a cURL, HTTP request, or in JavaScript. At the end of the article, you will find a sample code to run a query in Python using the library google-analytics-data prepared directly from Google.",[5324,8108,8109,8110,8114],{},"\nFor testing queries to the GA4 API you can also use the \n",[37,8111,8113],{"href":5973,"rel":8112,"title":5714},[41],"WAAILA","\n application. WAAILA is a comprehensive tool for data quality control that allows you to access data from multiple analytical data providers, including Google Analytics 4. The extracted data can be further evaluated in WAAILA using pre-built or custom tests to monitor measurement quality and recognize potential data issues in time.\n",[12,8116,8117],{},"Remember that this article is only about the Data API, which means the API for querying the measured information about your sites. Google is also introducing a new Admin API for displaying and changing the settings of Google Analytics. We will investigate that in a future article.",[16,8119,8121],{"id":8120},"one-simple-query-querying-data-using-runreport-method","One simple query - querying data using runReport method",[12,8123,8124,8125,8128,8129,8133],{},"The easiest way to extract data is using the ",[113,8126,8127],{},"runReport"," method which allows running a single request to data in order to receive a single set of results. To obtain data a POST request is sent to URL ",[37,8130,8131],{"href":8131,"rel":8132},"https:\u002F\u002Fanalyticsdata.googleapis.com\u002Fv1beta\u002F",[41],"\u003CGA4_PROPERTY_ID>:runReport where you need to replace the placeholder \u003CGA4_PROPERTY_ID> with your GA 4 property ID. The basic parameters of a single query have a very similar structure to queries constructed for the Universal Analytics API (further denoted as original API). Therefore, if you are now using the original API with the basic functionality of the API queries, there will be only minor adjustments needed. Bigger differences to the original API lie in its further options and extensions, for example, quotas report or a special request for pivot data. These will be presented in further sections of the article.",[244,8135,8137],{"id":8136},"differences-between-data-queries",[113,8138,8139],{},"Differences between data queries",[12,8141,8142],{},"To illustrate the similarities and differences we show an example of a simple query of sessions over 3 days. This query gives you information about how your sessions have evolved in the last three days. Below we include the request body for both the GA4 API and the original API. As you can see below, there are some differences between the queries.",[252,8144,8145,8148,8165],{},[255,8146,8147],{},"The easiest noticeable difference is that there is no parameter with view ID or property ID in the query. This information is passed directly into the request url (as mentioned above).",[255,8149,8150,8151,8154,8155,8157,8158,8161,8162,8164],{},"The GA4 API introduced ",[113,8152,8153],{},"consistency"," between specifying dimensions’ and metrics’ names because names of both metrics and dimensions are specified in parameter ",[588,8156,2227],{},", not ",[588,8159,8160],{},"expression"," for metrics and ",[588,8163,2227],{}," for dimensions as before.",[255,8166,8167,8168,8171,8172,8175,8176,3837,8178,8181],{},"Lastly, the ",[588,8169,8170],{},"orderBys"," has a slightly different structure, where you ",[113,8173,8174],{},"differentiate"," if you order by ",[113,8177,37],{},[113,8179,8180],{},"dimension, a metric, or a pivot group"," and you specify the direction of ordering for all listed columns together.",[12,8183,8184],{},[422,8185,8186],{},"The query for GA4 example",[1173,8188,8192],{"className":8189,"code":8190,"language":8191,"meta":76,"style":76},"language-json shiki shiki-themes material-theme-ocean","{\n  \"dateRanges\": [\n    {\n      \"startDate\": \"2021-01-04\",\n      \"endDate\": \"2021-01-06\"\n    }\n  ],\n  \"metrics\": [\n    {\n      \"name\": \"sessions\"\n    }\n  ],\n  \"dimensions\": [\n    {\n      \"name\": \"date\"\n    }\n  ],\n  \"orderBys\": [\n    {\n      \"metric\": {\n        \"metricName\": \"sessions\"\n      },\n      \"desc\": true\n    }\n  ]\n}\n","json",[588,8193,8194,8198,8213,8218,8240,8259,8263,8268,8281,8285,8302,8306,8310,8323,8327,8343,8347,8351,8363,8367,8380,8398,8403,8417,8421,8426],{"__ignoreMap":76},[2062,8195,8196],{"class":2064,"line":2065},[2062,8197,2740],{"class":2072},[2062,8199,8200,8203,8206,8208,8210],{"class":2064,"line":77},[2062,8201,8202],{"class":2072},"  \"",[2062,8204,8205],{"class":2199},"dateRanges",[2062,8207,2255],{"class":2072},[2062,8209,2113],{"class":2072},[2062,8211,8212],{"class":2072}," [\n",[2062,8214,8215],{"class":2064,"line":389},[2062,8216,8217],{"class":2072},"    {\n",[2062,8219,8220,8223,8227,8229,8231,8233,8236,8238],{"class":2064,"line":2272},[2062,8221,8222],{"class":2072},"      \"",[2062,8224,8226],{"class":8225},"s5Dmg","startDate",[2062,8228,2255],{"class":2072},[2062,8230,2113],{"class":2072},[2062,8232,2248],{"class":2072},[2062,8234,8235],{"class":2251},"2021-01-04",[2062,8237,2255],{"class":2072},[2062,8239,3154],{"class":2072},[2062,8241,8242,8244,8247,8249,8251,8253,8256],{"class":2064,"line":2315},[2062,8243,8222],{"class":2072},[2062,8245,8246],{"class":8225},"endDate",[2062,8248,2255],{"class":2072},[2062,8250,2113],{"class":2072},[2062,8252,2248],{"class":2072},[2062,8254,8255],{"class":2251},"2021-01-06",[2062,8257,8258],{"class":2072},"\"\n",[2062,8260,8261],{"class":2064,"line":2377},[2062,8262,2380],{"class":2072},[2062,8264,8265],{"class":2064,"line":2383},[2062,8266,8267],{"class":2072},"  ],\n",[2062,8269,8270,8272,8275,8277,8279],{"class":2064,"line":2389},[2062,8271,8202],{"class":2072},[2062,8273,8274],{"class":2199},"metrics",[2062,8276,2255],{"class":2072},[2062,8278,2113],{"class":2072},[2062,8280,8212],{"class":2072},[2062,8282,8283],{"class":2064,"line":2452},[2062,8284,8217],{"class":2072},[2062,8286,8287,8289,8291,8293,8295,8297,8300],{"class":2064,"line":2467},[2062,8288,8222],{"class":2072},[2062,8290,2227],{"class":8225},[2062,8292,2255],{"class":2072},[2062,8294,2113],{"class":2072},[2062,8296,2248],{"class":2072},[2062,8298,8299],{"class":2251},"sessions",[2062,8301,8258],{"class":2072},[2062,8303,8304],{"class":2064,"line":2472},[2062,8305,2380],{"class":2072},[2062,8307,8308],{"class":2064,"line":2491},[2062,8309,8267],{"class":2072},[2062,8311,8312,8314,8317,8319,8321],{"class":2064,"line":2519},[2062,8313,8202],{"class":2072},[2062,8315,8316],{"class":2199},"dimensions",[2062,8318,2255],{"class":2072},[2062,8320,2113],{"class":2072},[2062,8322,8212],{"class":2072},[2062,8324,8325],{"class":2064,"line":2556},[2062,8326,8217],{"class":2072},[2062,8328,8329,8331,8333,8335,8337,8339,8341],{"class":2064,"line":2577},[2062,8330,8222],{"class":2072},[2062,8332,2227],{"class":8225},[2062,8334,2255],{"class":2072},[2062,8336,2113],{"class":2072},[2062,8338,2248],{"class":2072},[2062,8340,6797],{"class":2251},[2062,8342,8258],{"class":2072},[2062,8344,8345],{"class":2064,"line":2657},[2062,8346,2380],{"class":2072},[2062,8348,8349],{"class":2064,"line":2681},[2062,8350,8267],{"class":2072},[2062,8352,8353,8355,8357,8359,8361],{"class":2064,"line":2709},[2062,8354,8202],{"class":2072},[2062,8356,8170],{"class":2199},[2062,8358,2255],{"class":2072},[2062,8360,2113],{"class":2072},[2062,8362,8212],{"class":2072},[2062,8364,8365],{"class":2064,"line":2714},[2062,8366,8217],{"class":2072},[2062,8368,8369,8371,8374,8376,8378],{"class":2064,"line":2743},[2062,8370,8222],{"class":2072},[2062,8372,8373],{"class":8225},"metric",[2062,8375,2255],{"class":2072},[2062,8377,2113],{"class":2072},[2062,8379,2209],{"class":2072},[2062,8381,8382,8385,8388,8390,8392,8394,8396],{"class":2064,"line":2772},[2062,8383,8384],{"class":2072},"        \"",[2062,8386,8387],{"class":2086},"metricName",[2062,8389,2255],{"class":2072},[2062,8391,2113],{"class":2072},[2062,8393,2248],{"class":2072},[2062,8395,8299],{"class":2251},[2062,8397,8258],{"class":2072},[2062,8399,8400],{"class":2064,"line":2777},[2062,8401,8402],{"class":2072},"      },\n",[2062,8404,8405,8407,8410,8412,8414],{"class":2064,"line":2802},[2062,8406,8222],{"class":2072},[2062,8408,8409],{"class":8225},"desc",[2062,8411,2255],{"class":2072},[2062,8413,2113],{"class":2072},[2062,8415,8416],{"class":2072}," true\n",[2062,8418,8419],{"class":2064,"line":2826},[2062,8420,2380],{"class":2072},[2062,8422,8423],{"class":2064,"line":2834},[2062,8424,8425],{"class":2072},"  ]\n",[2062,8427,8428],{"class":2064,"line":2840},[2062,8429,3425],{"class":2072},[12,8431,8432],{},[422,8433,8434],{},"The query for UA for comparison",[1173,8436,8438],{"className":8189,"code":8437,"language":8191,"meta":76,"style":76},"{\n  \"viewId\": \"XXXXXXXXX\",\n  \"dateRanges\": [\n    {\n      \"startDate\": \"2021-01-04\",\n      \"endDate\": \"2021-01-06\"\n    }\n  ],\n  \"metrics\": [\n    {\n      \"expression\": \"ga:sessions\",\n      \"alias\": \"\"\n    }\n  ],\n  \"dimensions\": [\n    {\n      \"name\": \"ga:date\"\n    }\n  ],\n  \"orderBys\": [\n    {\n      \"sortOrder\": \"DESCENDING\",\n      \"fieldName\": \"ga:users\"\n    }\n  ]\n}\n",[588,8439,8440,8444,8464,8476,8480,8498,8514,8518,8522,8534,8538,8557,8571,8575,8579,8591,8595,8612,8616,8620,8632,8636,8656,8674,8678,8682],{"__ignoreMap":76},[2062,8441,8442],{"class":2064,"line":2065},[2062,8443,2740],{"class":2072},[2062,8445,8446,8448,8451,8453,8455,8457,8460,8462],{"class":2064,"line":77},[2062,8447,8202],{"class":2072},[2062,8449,8450],{"class":2199},"viewId",[2062,8452,2255],{"class":2072},[2062,8454,2113],{"class":2072},[2062,8456,2248],{"class":2072},[2062,8458,8459],{"class":2251},"XXXXXXXXX",[2062,8461,2255],{"class":2072},[2062,8463,3154],{"class":2072},[2062,8465,8466,8468,8470,8472,8474],{"class":2064,"line":389},[2062,8467,8202],{"class":2072},[2062,8469,8205],{"class":2199},[2062,8471,2255],{"class":2072},[2062,8473,2113],{"class":2072},[2062,8475,8212],{"class":2072},[2062,8477,8478],{"class":2064,"line":2272},[2062,8479,8217],{"class":2072},[2062,8481,8482,8484,8486,8488,8490,8492,8494,8496],{"class":2064,"line":2315},[2062,8483,8222],{"class":2072},[2062,8485,8226],{"class":8225},[2062,8487,2255],{"class":2072},[2062,8489,2113],{"class":2072},[2062,8491,2248],{"class":2072},[2062,8493,8235],{"class":2251},[2062,8495,2255],{"class":2072},[2062,8497,3154],{"class":2072},[2062,8499,8500,8502,8504,8506,8508,8510,8512],{"class":2064,"line":2377},[2062,8501,8222],{"class":2072},[2062,8503,8246],{"class":8225},[2062,8505,2255],{"class":2072},[2062,8507,2113],{"class":2072},[2062,8509,2248],{"class":2072},[2062,8511,8255],{"class":2251},[2062,8513,8258],{"class":2072},[2062,8515,8516],{"class":2064,"line":2383},[2062,8517,2380],{"class":2072},[2062,8519,8520],{"class":2064,"line":2389},[2062,8521,8267],{"class":2072},[2062,8523,8524,8526,8528,8530,8532],{"class":2064,"line":2452},[2062,8525,8202],{"class":2072},[2062,8527,8274],{"class":2199},[2062,8529,2255],{"class":2072},[2062,8531,2113],{"class":2072},[2062,8533,8212],{"class":2072},[2062,8535,8536],{"class":2064,"line":2467},[2062,8537,8217],{"class":2072},[2062,8539,8540,8542,8544,8546,8548,8550,8553,8555],{"class":2064,"line":2472},[2062,8541,8222],{"class":2072},[2062,8543,8160],{"class":8225},[2062,8545,2255],{"class":2072},[2062,8547,2113],{"class":2072},[2062,8549,2248],{"class":2072},[2062,8551,8552],{"class":2251},"ga:sessions",[2062,8554,2255],{"class":2072},[2062,8556,3154],{"class":2072},[2062,8558,8559,8561,8564,8566,8568],{"class":2064,"line":2491},[2062,8560,8222],{"class":2072},[2062,8562,8563],{"class":8225},"alias",[2062,8565,2255],{"class":2072},[2062,8567,2113],{"class":2072},[2062,8569,8570],{"class":2072}," \"\"\n",[2062,8572,8573],{"class":2064,"line":2519},[2062,8574,2380],{"class":2072},[2062,8576,8577],{"class":2064,"line":2556},[2062,8578,8267],{"class":2072},[2062,8580,8581,8583,8585,8587,8589],{"class":2064,"line":2577},[2062,8582,8202],{"class":2072},[2062,8584,8316],{"class":2199},[2062,8586,2255],{"class":2072},[2062,8588,2113],{"class":2072},[2062,8590,8212],{"class":2072},[2062,8592,8593],{"class":2064,"line":2657},[2062,8594,8217],{"class":2072},[2062,8596,8597,8599,8601,8603,8605,8607,8610],{"class":2064,"line":2681},[2062,8598,8222],{"class":2072},[2062,8600,2227],{"class":8225},[2062,8602,2255],{"class":2072},[2062,8604,2113],{"class":2072},[2062,8606,2248],{"class":2072},[2062,8608,8609],{"class":2251},"ga:date",[2062,8611,8258],{"class":2072},[2062,8613,8614],{"class":2064,"line":2709},[2062,8615,2380],{"class":2072},[2062,8617,8618],{"class":2064,"line":2714},[2062,8619,8267],{"class":2072},[2062,8621,8622,8624,8626,8628,8630],{"class":2064,"line":2743},[2062,8623,8202],{"class":2072},[2062,8625,8170],{"class":2199},[2062,8627,2255],{"class":2072},[2062,8629,2113],{"class":2072},[2062,8631,8212],{"class":2072},[2062,8633,8634],{"class":2064,"line":2772},[2062,8635,8217],{"class":2072},[2062,8637,8638,8640,8643,8645,8647,8649,8652,8654],{"class":2064,"line":2777},[2062,8639,8222],{"class":2072},[2062,8641,8642],{"class":8225},"sortOrder",[2062,8644,2255],{"class":2072},[2062,8646,2113],{"class":2072},[2062,8648,2248],{"class":2072},[2062,8650,8651],{"class":2251},"DESCENDING",[2062,8653,2255],{"class":2072},[2062,8655,3154],{"class":2072},[2062,8657,8658,8660,8663,8665,8667,8669,8672],{"class":2064,"line":2802},[2062,8659,8222],{"class":2072},[2062,8661,8662],{"class":8225},"fieldName",[2062,8664,2255],{"class":2072},[2062,8666,2113],{"class":2072},[2062,8668,2248],{"class":2072},[2062,8670,8671],{"class":2251},"ga:users",[2062,8673,8258],{"class":2072},[2062,8675,8676],{"class":2064,"line":2826},[2062,8677,2380],{"class":2072},[2062,8679,8680],{"class":2064,"line":2834},[2062,8681,8425],{"class":2072},[2062,8683,8684],{"class":2064,"line":2840},[2062,8685,3425],{"class":2072},[244,8687,8689],{"id":8688},"differences-between-results","Differences between results",[12,8691,8692],{},"The results have a comparable structure as well, where the tendency of the GA4 API seems to make the results more consistent and reduce additional information unless directly queried. Below we present the results for the data queries, specified above, and list the differences between them.",[252,8694,8695,8702,8726],{},[255,8696,8697,8698,8701],{},"The values for ",[113,8699,8700],{},"dimensions and metrics have the same structure"," in GA4 API in contrast to the original API, where dimension values are presented in an array while metrics are in an object with an array of values. This simplifies the extraction of the data.",[255,8703,8704,8707,8708,8711,8712,6674,8715,6674,8718,8721,8722,8725],{},[113,8705,8706],{},"The summary values are not included"," automatically in the GA4 API. To receive any aggregated metrics, you need to specify which aggregation you need in a new parameter ",[588,8709,8710],{},"metricAggregations"," with options ",[588,8713,8714],{},"TOTAL",[588,8716,8717],{},"MINIMUM",[588,8719,8720],{},"MAXIMUM",", and ",[588,8723,8724],{},"COUNT",". Therefore, you can receive the same information as through the original API but you won’t get it automatically.",[255,8727,8728,8729,8732],{},"The column header is separated for metrics and dimensions but in contrast to the original API it has the same structure for both metrics and dimensions. This corresponds to the introduced ",[113,8730,8731],{},"consistency in presenting values"," and in querying the names of metrics and dimensions.",[12,8734,8735],{},[422,8736,8737],{},"The results from GA4 example:",[1173,8739,8741],{"className":8189,"code":8740,"language":8191,"meta":76,"style":76},"{\n  \"metricHeaders\": [\n    {\n      \"name\": \"sessions\",\n      \"type\": \"TYPE_INTEGER\"\n    }\n  ],\n  \"rows\": [\n    {\n      \"dimensionValues\": [\n        {\n          \"value\": \"20210104\"\n        }\n      ],\n      \"metricValues\": [\n        {\n          \"value\": \"12900\"\n        }\n      ]\n    },\n    {\n      \"dimensionValues\": [\n        {\n          \"value\": \"20210105\"\n        }\n      ],\n      \"metricValues\": [\n        {\n          \"value\": \"10700\"\n        }\n      ]\n    },\n    {\n      \"dimensionValues\": [\n        {\n          \"value\": \"20210106\"\n        }\n      ],\n      \"metricValues\": [\n        {\n          \"value\": \"11300\"\n        }\n      ]\n    }\n  ],\n  \"metadata\": {},\n  \"dimensionHeaders\": [\n    {\n      \"name\": \"date\"\n    }\n  ],\n  \"rowCount\": 3\n}\n",[588,8742,8743,8747,8760,8764,8782,8800,8804,8808,8821,8825,8838,8843,8862,8866,8871,8884,8888,8905,8909,8914,8919,8923,8935,8939,8956,8960,8964,8976,8980,8997,9001,9005,9009,9013,9025,9029,9046,9050,9054,9066,9070,9087,9091,9095,9099,9103,9117,9130,9134,9150,9154,9158,9172],{"__ignoreMap":76},[2062,8744,8745],{"class":2064,"line":2065},[2062,8746,2740],{"class":2072},[2062,8748,8749,8751,8754,8756,8758],{"class":2064,"line":77},[2062,8750,8202],{"class":2072},[2062,8752,8753],{"class":2199},"metricHeaders",[2062,8755,2255],{"class":2072},[2062,8757,2113],{"class":2072},[2062,8759,8212],{"class":2072},[2062,8761,8762],{"class":2064,"line":389},[2062,8763,8217],{"class":2072},[2062,8765,8766,8768,8770,8772,8774,8776,8778,8780],{"class":2064,"line":2272},[2062,8767,8222],{"class":2072},[2062,8769,2227],{"class":8225},[2062,8771,2255],{"class":2072},[2062,8773,2113],{"class":2072},[2062,8775,2248],{"class":2072},[2062,8777,8299],{"class":2251},[2062,8779,2255],{"class":2072},[2062,8781,3154],{"class":2072},[2062,8783,8784,8786,8789,8791,8793,8795,8798],{"class":2064,"line":2315},[2062,8785,8222],{"class":2072},[2062,8787,8788],{"class":8225},"type",[2062,8790,2255],{"class":2072},[2062,8792,2113],{"class":2072},[2062,8794,2248],{"class":2072},[2062,8796,8797],{"class":2251},"TYPE_INTEGER",[2062,8799,8258],{"class":2072},[2062,8801,8802],{"class":2064,"line":2377},[2062,8803,2380],{"class":2072},[2062,8805,8806],{"class":2064,"line":2383},[2062,8807,8267],{"class":2072},[2062,8809,8810,8812,8815,8817,8819],{"class":2064,"line":2389},[2062,8811,8202],{"class":2072},[2062,8813,8814],{"class":2199},"rows",[2062,8816,2255],{"class":2072},[2062,8818,2113],{"class":2072},[2062,8820,8212],{"class":2072},[2062,8822,8823],{"class":2064,"line":2452},[2062,8824,8217],{"class":2072},[2062,8826,8827,8829,8832,8834,8836],{"class":2064,"line":2467},[2062,8828,8222],{"class":2072},[2062,8830,8831],{"class":8225},"dimensionValues",[2062,8833,2255],{"class":2072},[2062,8835,2113],{"class":2072},[2062,8837,8212],{"class":2072},[2062,8839,8840],{"class":2064,"line":2472},[2062,8841,8842],{"class":2072},"        {\n",[2062,8844,8845,8848,8851,8853,8855,8857,8860],{"class":2064,"line":2491},[2062,8846,8847],{"class":2072},"          \"",[2062,8849,8850],{"class":2086},"value",[2062,8852,2255],{"class":2072},[2062,8854,2113],{"class":2072},[2062,8856,2248],{"class":2072},[2062,8858,8859],{"class":2251},"20210104",[2062,8861,8258],{"class":2072},[2062,8863,8864],{"class":2064,"line":2519},[2062,8865,3358],{"class":2072},[2062,8867,8868],{"class":2064,"line":2556},[2062,8869,8870],{"class":2072},"      ],\n",[2062,8872,8873,8875,8878,8880,8882],{"class":2064,"line":2577},[2062,8874,8222],{"class":2072},[2062,8876,8877],{"class":8225},"metricValues",[2062,8879,2255],{"class":2072},[2062,8881,2113],{"class":2072},[2062,8883,8212],{"class":2072},[2062,8885,8886],{"class":2064,"line":2657},[2062,8887,8842],{"class":2072},[2062,8889,8890,8892,8894,8896,8898,8900,8903],{"class":2064,"line":2681},[2062,8891,8847],{"class":2072},[2062,8893,8850],{"class":2086},[2062,8895,2255],{"class":2072},[2062,8897,2113],{"class":2072},[2062,8899,2248],{"class":2072},[2062,8901,8902],{"class":2251},"12900",[2062,8904,8258],{"class":2072},[2062,8906,8907],{"class":2064,"line":2709},[2062,8908,3358],{"class":2072},[2062,8910,8911],{"class":2064,"line":2714},[2062,8912,8913],{"class":2072},"      ]\n",[2062,8915,8916],{"class":2064,"line":2743},[2062,8917,8918],{"class":2072},"    },\n",[2062,8920,8921],{"class":2064,"line":2772},[2062,8922,8217],{"class":2072},[2062,8924,8925,8927,8929,8931,8933],{"class":2064,"line":2777},[2062,8926,8222],{"class":2072},[2062,8928,8831],{"class":8225},[2062,8930,2255],{"class":2072},[2062,8932,2113],{"class":2072},[2062,8934,8212],{"class":2072},[2062,8936,8937],{"class":2064,"line":2802},[2062,8938,8842],{"class":2072},[2062,8940,8941,8943,8945,8947,8949,8951,8954],{"class":2064,"line":2826},[2062,8942,8847],{"class":2072},[2062,8944,8850],{"class":2086},[2062,8946,2255],{"class":2072},[2062,8948,2113],{"class":2072},[2062,8950,2248],{"class":2072},[2062,8952,8953],{"class":2251},"20210105",[2062,8955,8258],{"class":2072},[2062,8957,8958],{"class":2064,"line":2834},[2062,8959,3358],{"class":2072},[2062,8961,8962],{"class":2064,"line":2840},[2062,8963,8870],{"class":2072},[2062,8965,8966,8968,8970,8972,8974],{"class":2064,"line":2845},[2062,8967,8222],{"class":2072},[2062,8969,8877],{"class":8225},[2062,8971,2255],{"class":2072},[2062,8973,2113],{"class":2072},[2062,8975,8212],{"class":2072},[2062,8977,8978],{"class":2064,"line":2886},[2062,8979,8842],{"class":2072},[2062,8981,8982,8984,8986,8988,8990,8992,8995],{"class":2064,"line":2907},[2062,8983,8847],{"class":2072},[2062,8985,8850],{"class":2086},[2062,8987,2255],{"class":2072},[2062,8989,2113],{"class":2072},[2062,8991,2248],{"class":2072},[2062,8993,8994],{"class":2251},"10700",[2062,8996,8258],{"class":2072},[2062,8998,8999],{"class":2064,"line":2941},[2062,9000,3358],{"class":2072},[2062,9002,9003],{"class":2064,"line":2962},[2062,9004,8913],{"class":2072},[2062,9006,9007],{"class":2064,"line":2983},[2062,9008,8918],{"class":2072},[2062,9010,9011],{"class":2064,"line":3016},[2062,9012,8217],{"class":2072},[2062,9014,9015,9017,9019,9021,9023],{"class":2064,"line":3037},[2062,9016,8222],{"class":2072},[2062,9018,8831],{"class":8225},[2062,9020,2255],{"class":2072},[2062,9022,2113],{"class":2072},[2062,9024,8212],{"class":2072},[2062,9026,9027],{"class":2064,"line":3058},[2062,9028,8842],{"class":2072},[2062,9030,9031,9033,9035,9037,9039,9041,9044],{"class":2064,"line":3079},[2062,9032,8847],{"class":2072},[2062,9034,8850],{"class":2086},[2062,9036,2255],{"class":2072},[2062,9038,2113],{"class":2072},[2062,9040,2248],{"class":2072},[2062,9042,9043],{"class":2251},"20210106",[2062,9045,8258],{"class":2072},[2062,9047,9048],{"class":2064,"line":3119},[2062,9049,3358],{"class":2072},[2062,9051,9052],{"class":2064,"line":3124},[2062,9053,8870],{"class":2072},[2062,9055,9056,9058,9060,9062,9064],{"class":2064,"line":3139},[2062,9057,8222],{"class":2072},[2062,9059,8877],{"class":8225},[2062,9061,2255],{"class":2072},[2062,9063,2113],{"class":2072},[2062,9065,8212],{"class":2072},[2062,9067,9068],{"class":2064,"line":3157},[2062,9069,8842],{"class":2072},[2062,9071,9072,9074,9076,9078,9080,9082,9085],{"class":2064,"line":3173},[2062,9073,8847],{"class":2072},[2062,9075,8850],{"class":2086},[2062,9077,2255],{"class":2072},[2062,9079,2113],{"class":2072},[2062,9081,2248],{"class":2072},[2062,9083,9084],{"class":2251},"11300",[2062,9086,8258],{"class":2072},[2062,9088,9089],{"class":2064,"line":3189},[2062,9090,3358],{"class":2072},[2062,9092,9093],{"class":2064,"line":3212},[2062,9094,8913],{"class":2072},[2062,9096,9097],{"class":2064,"line":3228},[2062,9098,2380],{"class":2072},[2062,9100,9101],{"class":2064,"line":3244},[2062,9102,8267],{"class":2072},[2062,9104,9105,9107,9110,9112,9114],{"class":2064,"line":3266},[2062,9106,8202],{"class":2072},[2062,9108,9109],{"class":2199},"metadata",[2062,9111,2255],{"class":2072},[2062,9113,2113],{"class":2072},[2062,9115,9116],{"class":2072}," {},\n",[2062,9118,9119,9121,9124,9126,9128],{"class":2064,"line":3282},[2062,9120,8202],{"class":2072},[2062,9122,9123],{"class":2199},"dimensionHeaders",[2062,9125,2255],{"class":2072},[2062,9127,2113],{"class":2072},[2062,9129,8212],{"class":2072},[2062,9131,9132],{"class":2064,"line":3298},[2062,9133,8217],{"class":2072},[2062,9135,9136,9138,9140,9142,9144,9146,9148],{"class":2064,"line":3314},[2062,9137,8222],{"class":2072},[2062,9139,2227],{"class":8225},[2062,9141,2255],{"class":2072},[2062,9143,2113],{"class":2072},[2062,9145,2248],{"class":2072},[2062,9147,6797],{"class":2251},[2062,9149,8258],{"class":2072},[2062,9151,9152],{"class":2064,"line":3330},[2062,9153,2380],{"class":2072},[2062,9155,9156],{"class":2064,"line":3345},[2062,9157,8267],{"class":2072},[2062,9159,9160,9162,9165,9167,9169],{"class":2064,"line":3355},[2062,9161,8202],{"class":2072},[2062,9163,9164],{"class":2199},"rowCount",[2062,9166,2255],{"class":2072},[2062,9168,2113],{"class":2072},[2062,9170,9171],{"class":2086}," 3\n",[2062,9173,9174],{"class":2064,"line":3361},[2062,9175,3425],{"class":2072},[12,9177,9178],{},[422,9179,9180],{},"The results from UA for comparison:",[1173,9182,9184],{"className":8189,"code":9183,"language":8191,"meta":76,"style":76},"{\n    \"columnHeader\": {\n        \"dimensions\": [\"ga:date\"],\n        \"metricHeader\": {\n            \"metricHeaderEntries\": [{\n                    \"name\": \"ga:sessions\",\n                    \"type\": \"INTEGER\"\n                }\n            ]\n        }\n    },\n    \"data\": {\n        \"rows\": [{\n                \"dimensions\": [\"20210104\"],\n                \"metrics\": [{\n                        \"values\": [\"12900\"]\n                    }\n                ]\n            }, {\n                \"dimensions\": [\"20210105\"],\n                \"metrics\": [{\n                        \"values\": [\"10700\"]\n                    }\n                ]\n            }, {\n                \"dimensions\": [\"20210106\"],\n                \"metrics\": [{\n                        \"values\": [\"11300\"]\n                    }\n                ]\n            }\n        ],\n        \"totals\": [{\n                \"values\": [\"34900\"]\n            }\n        ],\n        \"rowCount\": 3,\n        \"minimums\": [{\n                \"values\": [\"10700\"]\n            }\n        ],\n        \"maximums\": [{\n                \"values\": [\"12900\"]\n            }\n        ]\n    }\n}\n",[588,9185,9186,9190,9204,9226,9239,9254,9273,9290,9295,9300,9304,9308,9321,9333,9353,9365,9388,9393,9398,9405,9425,9437,9457,9461,9465,9471,9491,9503,9523,9527,9531,9535,9540,9553,9574,9578,9582,9597,9610,9630,9634,9638,9651,9671,9675,9680,9684],{"__ignoreMap":76},[2062,9187,9188],{"class":2064,"line":2065},[2062,9189,2740],{"class":2072},[2062,9191,9192,9195,9198,9200,9202],{"class":2064,"line":77},[2062,9193,9194],{"class":2072},"    \"",[2062,9196,9197],{"class":2199},"columnHeader",[2062,9199,2255],{"class":2072},[2062,9201,2113],{"class":2072},[2062,9203,2209],{"class":2072},[2062,9205,9206,9208,9210,9212,9214,9217,9219,9221,9223],{"class":2064,"line":389},[2062,9207,8384],{"class":2072},[2062,9209,8316],{"class":8225},[2062,9211,2255],{"class":2072},[2062,9213,2113],{"class":2072},[2062,9215,9216],{"class":2072}," [",[2062,9218,2255],{"class":2072},[2062,9220,8609],{"class":2251},[2062,9222,2255],{"class":2072},[2062,9224,9225],{"class":2072},"],\n",[2062,9227,9228,9230,9233,9235,9237],{"class":2064,"line":2272},[2062,9229,8384],{"class":2072},[2062,9231,9232],{"class":8225},"metricHeader",[2062,9234,2255],{"class":2072},[2062,9236,2113],{"class":2072},[2062,9238,2209],{"class":2072},[2062,9240,9241,9244,9247,9249,9251],{"class":2064,"line":2315},[2062,9242,9243],{"class":2072},"            \"",[2062,9245,9246],{"class":2086},"metricHeaderEntries",[2062,9248,2255],{"class":2072},[2062,9250,2113],{"class":2072},[2062,9252,9253],{"class":2072}," [{\n",[2062,9255,9256,9259,9261,9263,9265,9267,9269,9271],{"class":2064,"line":2377},[2062,9257,9258],{"class":2072},"                    \"",[2062,9260,2227],{"class":2289},[2062,9262,2255],{"class":2072},[2062,9264,2113],{"class":2072},[2062,9266,2248],{"class":2072},[2062,9268,8552],{"class":2251},[2062,9270,2255],{"class":2072},[2062,9272,3154],{"class":2072},[2062,9274,9275,9277,9279,9281,9283,9285,9288],{"class":2064,"line":2383},[2062,9276,9258],{"class":2072},[2062,9278,8788],{"class":2289},[2062,9280,2255],{"class":2072},[2062,9282,2113],{"class":2072},[2062,9284,2248],{"class":2072},[2062,9286,9287],{"class":2251},"INTEGER",[2062,9289,8258],{"class":2072},[2062,9291,9292],{"class":2064,"line":2389},[2062,9293,9294],{"class":2072},"                }\n",[2062,9296,9297],{"class":2064,"line":2452},[2062,9298,9299],{"class":2072},"            ]\n",[2062,9301,9302],{"class":2064,"line":2467},[2062,9303,3358],{"class":2072},[2062,9305,9306],{"class":2064,"line":2472},[2062,9307,8918],{"class":2072},[2062,9309,9310,9312,9315,9317,9319],{"class":2064,"line":2491},[2062,9311,9194],{"class":2072},[2062,9313,9314],{"class":2199},"data",[2062,9316,2255],{"class":2072},[2062,9318,2113],{"class":2072},[2062,9320,2209],{"class":2072},[2062,9322,9323,9325,9327,9329,9331],{"class":2064,"line":2519},[2062,9324,8384],{"class":2072},[2062,9326,8814],{"class":8225},[2062,9328,2255],{"class":2072},[2062,9330,2113],{"class":2072},[2062,9332,9253],{"class":2072},[2062,9334,9335,9337,9339,9341,9343,9345,9347,9349,9351],{"class":2064,"line":2556},[2062,9336,3142],{"class":2072},[2062,9338,8316],{"class":2086},[2062,9340,2255],{"class":2072},[2062,9342,2113],{"class":2072},[2062,9344,9216],{"class":2072},[2062,9346,2255],{"class":2072},[2062,9348,8859],{"class":2251},[2062,9350,2255],{"class":2072},[2062,9352,9225],{"class":2072},[2062,9354,9355,9357,9359,9361,9363],{"class":2064,"line":2577},[2062,9356,3142],{"class":2072},[2062,9358,8274],{"class":2086},[2062,9360,2255],{"class":2072},[2062,9362,2113],{"class":2072},[2062,9364,9253],{"class":2072},[2062,9366,9367,9370,9373,9375,9377,9379,9381,9383,9385],{"class":2064,"line":2657},[2062,9368,9369],{"class":2072},"                        \"",[2062,9371,9372],{"class":2289},"values",[2062,9374,2255],{"class":2072},[2062,9376,2113],{"class":2072},[2062,9378,9216],{"class":2072},[2062,9380,2255],{"class":2072},[2062,9382,8902],{"class":2251},[2062,9384,2255],{"class":2072},[2062,9386,9387],{"class":2072},"]\n",[2062,9389,9390],{"class":2064,"line":2681},[2062,9391,9392],{"class":2072},"                    }\n",[2062,9394,9395],{"class":2064,"line":2709},[2062,9396,9397],{"class":2072},"                ]\n",[2062,9399,9400,9403],{"class":2064,"line":2714},[2062,9401,9402],{"class":2072},"            },",[2062,9404,2209],{"class":2072},[2062,9406,9407,9409,9411,9413,9415,9417,9419,9421,9423],{"class":2064,"line":2743},[2062,9408,3142],{"class":2072},[2062,9410,8316],{"class":2086},[2062,9412,2255],{"class":2072},[2062,9414,2113],{"class":2072},[2062,9416,9216],{"class":2072},[2062,9418,2255],{"class":2072},[2062,9420,8953],{"class":2251},[2062,9422,2255],{"class":2072},[2062,9424,9225],{"class":2072},[2062,9426,9427,9429,9431,9433,9435],{"class":2064,"line":2772},[2062,9428,3142],{"class":2072},[2062,9430,8274],{"class":2086},[2062,9432,2255],{"class":2072},[2062,9434,2113],{"class":2072},[2062,9436,9253],{"class":2072},[2062,9438,9439,9441,9443,9445,9447,9449,9451,9453,9455],{"class":2064,"line":2777},[2062,9440,9369],{"class":2072},[2062,9442,9372],{"class":2289},[2062,9444,2255],{"class":2072},[2062,9446,2113],{"class":2072},[2062,9448,9216],{"class":2072},[2062,9450,2255],{"class":2072},[2062,9452,8994],{"class":2251},[2062,9454,2255],{"class":2072},[2062,9456,9387],{"class":2072},[2062,9458,9459],{"class":2064,"line":2802},[2062,9460,9392],{"class":2072},[2062,9462,9463],{"class":2064,"line":2826},[2062,9464,9397],{"class":2072},[2062,9466,9467,9469],{"class":2064,"line":2834},[2062,9468,9402],{"class":2072},[2062,9470,2209],{"class":2072},[2062,9472,9473,9475,9477,9479,9481,9483,9485,9487,9489],{"class":2064,"line":2840},[2062,9474,3142],{"class":2072},[2062,9476,8316],{"class":2086},[2062,9478,2255],{"class":2072},[2062,9480,2113],{"class":2072},[2062,9482,9216],{"class":2072},[2062,9484,2255],{"class":2072},[2062,9486,9043],{"class":2251},[2062,9488,2255],{"class":2072},[2062,9490,9225],{"class":2072},[2062,9492,9493,9495,9497,9499,9501],{"class":2064,"line":2845},[2062,9494,3142],{"class":2072},[2062,9496,8274],{"class":2086},[2062,9498,2255],{"class":2072},[2062,9500,2113],{"class":2072},[2062,9502,9253],{"class":2072},[2062,9504,9505,9507,9509,9511,9513,9515,9517,9519,9521],{"class":2064,"line":2886},[2062,9506,9369],{"class":2072},[2062,9508,9372],{"class":2289},[2062,9510,2255],{"class":2072},[2062,9512,2113],{"class":2072},[2062,9514,9216],{"class":2072},[2062,9516,2255],{"class":2072},[2062,9518,9084],{"class":2251},[2062,9520,2255],{"class":2072},[2062,9522,9387],{"class":2072},[2062,9524,9525],{"class":2064,"line":2907},[2062,9526,9392],{"class":2072},[2062,9528,9529],{"class":2064,"line":2941},[2062,9530,9397],{"class":2072},[2062,9532,9533],{"class":2064,"line":2962},[2062,9534,2837],{"class":2072},[2062,9536,9537],{"class":2064,"line":2983},[2062,9538,9539],{"class":2072},"        ],\n",[2062,9541,9542,9544,9547,9549,9551],{"class":2064,"line":3016},[2062,9543,8384],{"class":2072},[2062,9545,9546],{"class":8225},"totals",[2062,9548,2255],{"class":2072},[2062,9550,2113],{"class":2072},[2062,9552,9253],{"class":2072},[2062,9554,9555,9557,9559,9561,9563,9565,9567,9570,9572],{"class":2064,"line":3037},[2062,9556,3142],{"class":2072},[2062,9558,9372],{"class":2086},[2062,9560,2255],{"class":2072},[2062,9562,2113],{"class":2072},[2062,9564,9216],{"class":2072},[2062,9566,2255],{"class":2072},[2062,9568,9569],{"class":2251},"34900",[2062,9571,2255],{"class":2072},[2062,9573,9387],{"class":2072},[2062,9575,9576],{"class":2064,"line":3058},[2062,9577,2837],{"class":2072},[2062,9579,9580],{"class":2064,"line":3079},[2062,9581,9539],{"class":2072},[2062,9583,9584,9586,9588,9590,9592,9595],{"class":2064,"line":3119},[2062,9585,8384],{"class":2072},[2062,9587,9164],{"class":8225},[2062,9589,2255],{"class":2072},[2062,9591,2113],{"class":2072},[2062,9593,9594],{"class":2086}," 3",[2062,9596,3154],{"class":2072},[2062,9598,9599,9601,9604,9606,9608],{"class":2064,"line":3124},[2062,9600,8384],{"class":2072},[2062,9602,9603],{"class":8225},"minimums",[2062,9605,2255],{"class":2072},[2062,9607,2113],{"class":2072},[2062,9609,9253],{"class":2072},[2062,9611,9612,9614,9616,9618,9620,9622,9624,9626,9628],{"class":2064,"line":3139},[2062,9613,3142],{"class":2072},[2062,9615,9372],{"class":2086},[2062,9617,2255],{"class":2072},[2062,9619,2113],{"class":2072},[2062,9621,9216],{"class":2072},[2062,9623,2255],{"class":2072},[2062,9625,8994],{"class":2251},[2062,9627,2255],{"class":2072},[2062,9629,9387],{"class":2072},[2062,9631,9632],{"class":2064,"line":3157},[2062,9633,2837],{"class":2072},[2062,9635,9636],{"class":2064,"line":3173},[2062,9637,9539],{"class":2072},[2062,9639,9640,9642,9645,9647,9649],{"class":2064,"line":3189},[2062,9641,8384],{"class":2072},[2062,9643,9644],{"class":8225},"maximums",[2062,9646,2255],{"class":2072},[2062,9648,2113],{"class":2072},[2062,9650,9253],{"class":2072},[2062,9652,9653,9655,9657,9659,9661,9663,9665,9667,9669],{"class":2064,"line":3212},[2062,9654,3142],{"class":2072},[2062,9656,9372],{"class":2086},[2062,9658,2255],{"class":2072},[2062,9660,2113],{"class":2072},[2062,9662,9216],{"class":2072},[2062,9664,2255],{"class":2072},[2062,9666,8902],{"class":2251},[2062,9668,2255],{"class":2072},[2062,9670,9387],{"class":2072},[2062,9672,9673],{"class":2064,"line":3228},[2062,9674,2837],{"class":2072},[2062,9676,9677],{"class":2064,"line":3244},[2062,9678,9679],{"class":2072},"        ]\n",[2062,9681,9682],{"class":2064,"line":3266},[2062,9683,2380],{"class":2072},[2062,9685,9686],{"class":2064,"line":3282},[2062,9687,3425],{"class":2072},[12,9689,9690],{},"Overall, as you can see in the included example the structure of both the query and the resulting response is very similar with some steps towards consistency between dimensions’ and metrics’ specification and presentation. Therefore, there does not seem to be an obstacle from moving from simple queries in the original API to the simple queries in the GA4 API. So, let us investigate what the GA4 API brings additionally.",[16,9692,9694],{"id":9693},"further-parameters-in-a-single-query","Further parameters in a single query",[244,9696,9698],{"id":9697},"quotas-report","Quotas report",[12,9700,9701],{},"One of the new features offered by the GA4 API is the option to view the quotas for a given property. This information serves as a warning if you are nearing any of the thresholds or for informative purposes about the number of tokens consumed by a given request because requests in GA4 API cost a different amount of tokens based on their complexity. If you run too many complex requests, you will reach the limit of your available quotas and may need to wait for the next hour or the next day, depending on the type of quota you have reached.",[12,9703,9704,9705,9708,9709,9712,9713,9716,9717,591,9720,9723,9724,9727],{},"The quotas information can be received by setting the optional parameter ",[588,9706,9707],{},"returnPropertyQuotas"," to true. This results in an additional object in the results added on the same level as rows or headers. The results contain 5 quotas information. First, they inform you about the number of ",[113,9710,9711],{},"tokens consumed"," by the current query ",[113,9714,9715],{},"and remaining"," tokens per day and per hour. According to the quotas report in the included example, standard property has in total 25,000 tokens per day and 5,000 tokens per hour available for the GA4 API. The current request that queried this information along with other data consumed 5 tokens from the limits. Additionally, it provides information about the remaining ",[113,9718,9719],{},"permitted concurrent requests",[113,9721,9722],{},"permitted server errors"," for the given project. There can be only 10 requests running in parallel and there can be no more than 10 server errors (responses with code 500 or 503) in an hour for the whole project, otherwise, Google allows no further queries to be processed until the hour passes. Lastly, up to 120 requests with ",[113,9725,9726],{},"potentially thresholded dimensions"," per hour are allowed. Aomng the potentially thresholded dimensions belongs userAgeBracket, userGender, brandingInterest, audienceId, and audienceName. This limit is imposed to prevent inference of user demographics or interests.",[1173,9729,9731],{"className":8189,"code":9730,"language":8191,"meta":76,"style":76},"        \"propertyQuota\": {\n            \"tokensPerDay\": {\n                \"consumed\": 5,\n                \"remaining\": 24986\n            },\n            \"tokensPerHour\": {\n                \"consumed\": 5,\n                \"remaining\": 4990\n            },\n            \"concurrentRequests\": {\n                \"remaining\": 10\n            },\n            \"serverErrorsPerProjectPerHour\": {\n                \"remaining\": 10\n            },\n            \"potentiallyThresholdedRequestsPerHour\": {\n                \"remaining\": 120\n            }\n        }\n",[588,9732,9733,9747,9760,9776,9790,9795,9808,9822,9835,9839,9852,9865,9869,9882,9894,9898,9911,9924,9928],{"__ignoreMap":76},[2062,9734,9735,9737,9740,9742,9745],{"class":2064,"line":2065},[2062,9736,8384],{"class":2072},[2062,9738,9739],{"class":2251},"propertyQuota",[2062,9741,2255],{"class":2072},[2062,9743,9744],{"class":2068},": ",[2062,9746,2740],{"class":2072},[2062,9748,9749,9751,9754,9756,9758],{"class":2064,"line":77},[2062,9750,9243],{"class":2072},[2062,9752,9753],{"class":2199},"tokensPerDay",[2062,9755,2255],{"class":2072},[2062,9757,2113],{"class":2072},[2062,9759,2209],{"class":2072},[2062,9761,9762,9764,9767,9769,9771,9774],{"class":2064,"line":389},[2062,9763,3142],{"class":2072},[2062,9765,9766],{"class":8225},"consumed",[2062,9768,2255],{"class":2072},[2062,9770,2113],{"class":2072},[2062,9772,9773],{"class":2086}," 5",[2062,9775,3154],{"class":2072},[2062,9777,9778,9780,9783,9785,9787],{"class":2064,"line":2272},[2062,9779,3142],{"class":2072},[2062,9781,9782],{"class":8225},"remaining",[2062,9784,2255],{"class":2072},[2062,9786,2113],{"class":2072},[2062,9788,9789],{"class":2086}," 24986\n",[2062,9791,9792],{"class":2064,"line":2315},[2062,9793,9794],{"class":2072},"            },\n",[2062,9796,9797,9799,9802,9804,9806],{"class":2064,"line":2377},[2062,9798,9243],{"class":2072},[2062,9800,9801],{"class":2199},"tokensPerHour",[2062,9803,2255],{"class":2072},[2062,9805,2113],{"class":2072},[2062,9807,2209],{"class":2072},[2062,9809,9810,9812,9814,9816,9818,9820],{"class":2064,"line":2383},[2062,9811,3142],{"class":2072},[2062,9813,9766],{"class":8225},[2062,9815,2255],{"class":2072},[2062,9817,2113],{"class":2072},[2062,9819,9773],{"class":2086},[2062,9821,3154],{"class":2072},[2062,9823,9824,9826,9828,9830,9832],{"class":2064,"line":2389},[2062,9825,3142],{"class":2072},[2062,9827,9782],{"class":8225},[2062,9829,2255],{"class":2072},[2062,9831,2113],{"class":2072},[2062,9833,9834],{"class":2086}," 4990\n",[2062,9836,9837],{"class":2064,"line":2452},[2062,9838,9794],{"class":2072},[2062,9840,9841,9843,9846,9848,9850],{"class":2064,"line":2467},[2062,9842,9243],{"class":2072},[2062,9844,9845],{"class":2199},"concurrentRequests",[2062,9847,2255],{"class":2072},[2062,9849,2113],{"class":2072},[2062,9851,2209],{"class":2072},[2062,9853,9854,9856,9858,9860,9862],{"class":2064,"line":2472},[2062,9855,3142],{"class":2072},[2062,9857,9782],{"class":8225},[2062,9859,2255],{"class":2072},[2062,9861,2113],{"class":2072},[2062,9863,9864],{"class":2086}," 10\n",[2062,9866,9867],{"class":2064,"line":2491},[2062,9868,9794],{"class":2072},[2062,9870,9871,9873,9876,9878,9880],{"class":2064,"line":2519},[2062,9872,9243],{"class":2072},[2062,9874,9875],{"class":2199},"serverErrorsPerProjectPerHour",[2062,9877,2255],{"class":2072},[2062,9879,2113],{"class":2072},[2062,9881,2209],{"class":2072},[2062,9883,9884,9886,9888,9890,9892],{"class":2064,"line":2556},[2062,9885,3142],{"class":2072},[2062,9887,9782],{"class":8225},[2062,9889,2255],{"class":2072},[2062,9891,2113],{"class":2072},[2062,9893,9864],{"class":2086},[2062,9895,9896],{"class":2064,"line":2577},[2062,9897,9794],{"class":2072},[2062,9899,9900,9902,9905,9907,9909],{"class":2064,"line":2657},[2062,9901,9243],{"class":2072},[2062,9903,9904],{"class":2199},"potentiallyThresholdedRequestsPerHour",[2062,9906,2255],{"class":2072},[2062,9908,2113],{"class":2072},[2062,9910,2209],{"class":2072},[2062,9912,9913,9915,9917,9919,9921],{"class":2064,"line":2681},[2062,9914,3142],{"class":2072},[2062,9916,9782],{"class":8225},[2062,9918,2255],{"class":2072},[2062,9920,2113],{"class":2072},[2062,9922,9923],{"class":2086}," 120\n",[2062,9925,9926],{"class":2064,"line":2709},[2062,9927,2837],{"class":2072},[2062,9929,9930],{"class":2064,"line":2714},[2062,9931,3358],{"class":2072},[244,9933,9935],{"id":9934},"notes-on-filters","Notes on filters",[12,9937,9938,9939,9942],{},"Next, we include a comment on the filters in the GA4 API. The filters for metrics and dimensions are separated in the same way as for the original API. There is no ",[588,9940,9941],{},"filtersExpression"," parameter that would allow simple filters to be written in one line.",[12,9944,9945,9946,9949,9950,9953,9954,6674,9957,591,9960,9963],{},"However, the dimension and metric filters are now much more flexible regarding combinations of multiple filters together. In the original API, you could combine multiple filters on only one level, specifying that either all filters should hold (using the ",[588,9947,9948],{},"and"," operator) or that it is sufficient for only one of the filters to be satisfied (using the ",[588,9951,9952],{},"or"," operator). In the GA4 API, there is an option to chain several of these operators using a set of the following parameters successively: ",[588,9955,9956],{},"andGroup",[588,9958,9959],{},"orGroup",[588,9961,9962],{},"notExpression",". For example, if you need to analyze multiple groups of visitors or events where at least one group is specified by more than one condition (e.g. people who visited a certain page using a mobile phone or when an error occurred for people coming from a particular source), you can easily do it in the GA4 API while you would need separate requests using the original API.",[12,9965,9966],{},"Below you can find an example of the dimension filter with multiple chained conditions. This query can be used to checking multiple reported device-specific events at once. The conditions can be simplified into:",[122,9968,9969,9971,9973,9974,9976,9979,9981,9982,9984,9987],{},[113,9970,6293],{},[4635,9972],{},"\n\n\nEITHER\n",[4635,9975],{},[588,9977,9978],{},"(deviceCategory == \"Mobile\" AND pagePath == \"\u002Fpath-to-page\")",[4635,9980],{},"\n\n\nOR\n",[4635,9983],{},[588,9985,9986],{},"(deviceCategory == \"Tablet\" AND pagePath == \"\u002Fpath-to-another-page\")",[4635,9988],{},[1173,9990,9992],{"className":8189,"code":9991,"language":8191,"meta":76,"style":76},"{\n    \"dimensionFilter\": {\n      \"orGroup\": {\n        \"expressions\": [\n          {\n            \"andGroup\": {\n              \"expressions\": [\n                {\n                  \"filter\": {\n                    \"stringFilter\": {\n                      \"value\": \"Mobile\"\n                    },\n                    \"fieldName\": \"deviceCategory\"\n                  }\n                },\n                {\n                  \"filter\": {\n                    \"stringFilter\": {\n                      \"value\": \"\u002Fpath-to-page\"\n                    },\n                    \"fieldName\": \"pagePath\"\n                  }\n                }\n              ]\n            }\n          }, \n        {\n            \"andGroup\": {\n              \"expressions\": [\n                {\n                  \"filter\": {\n                    \"stringFilter\": {\n                      \"value\": \"Tablet\"\n                    },\n                    \"fieldName\": \"deviceCategory\"\n                  }\n                },\n                {\n                  \"filter\": {\n                    \"stringFilter\": {\n                      \"value\": \"\u002Fpath-to-different-page\"\n                    },\n                    \"fieldName\": \"pagePath\"\n                  }\n                }\n              ]\n            }\n          }\n        ]\n      }\n    }\n  }\n",[588,9993,9994,9998,10011,10023,10036,10041,10053,10067,10072,10085,10099,10117,10122,10139,10144,10149,10153,10165,10177,10194,10198,10215,10219,10223,10228,10232,10240,10244,10256,10268,10272,10284,10296,10313,10317,10333,10337,10341,10345,10357,10369,10386,10390,10406,10410,10414,10418,10422,10427,10431,10436,10440],{"__ignoreMap":76},[2062,9995,9996],{"class":2064,"line":2065},[2062,9997,2740],{"class":2072},[2062,9999,10000,10002,10005,10007,10009],{"class":2064,"line":77},[2062,10001,9194],{"class":2072},[2062,10003,10004],{"class":2199},"dimensionFilter",[2062,10006,2255],{"class":2072},[2062,10008,2113],{"class":2072},[2062,10010,2209],{"class":2072},[2062,10012,10013,10015,10017,10019,10021],{"class":2064,"line":389},[2062,10014,8222],{"class":2072},[2062,10016,9959],{"class":8225},[2062,10018,2255],{"class":2072},[2062,10020,2113],{"class":2072},[2062,10022,2209],{"class":2072},[2062,10024,10025,10027,10030,10032,10034],{"class":2064,"line":2272},[2062,10026,8384],{"class":2072},[2062,10028,10029],{"class":2086},"expressions",[2062,10031,2255],{"class":2072},[2062,10033,2113],{"class":2072},[2062,10035,8212],{"class":2072},[2062,10037,10038],{"class":2064,"line":2315},[2062,10039,10040],{"class":2072},"          {\n",[2062,10042,10043,10045,10047,10049,10051],{"class":2064,"line":2377},[2062,10044,9243],{"class":2072},[2062,10046,9956],{"class":2289},[2062,10048,2255],{"class":2072},[2062,10050,2113],{"class":2072},[2062,10052,2209],{"class":2072},[2062,10054,10055,10058,10061,10063,10065],{"class":2064,"line":2383},[2062,10056,10057],{"class":2072},"              \"",[2062,10059,10029],{"class":10060},"s9WhI",[2062,10062,2255],{"class":2072},[2062,10064,2113],{"class":2072},[2062,10066,8212],{"class":2072},[2062,10068,10069],{"class":2064,"line":2389},[2062,10070,10071],{"class":2072},"                {\n",[2062,10073,10074,10077,10079,10081,10083],{"class":2064,"line":2452},[2062,10075,10076],{"class":2072},"                  \"",[2062,10078,2422],{"class":2079},[2062,10080,2255],{"class":2072},[2062,10082,2113],{"class":2072},[2062,10084,2209],{"class":2072},[2062,10086,10087,10089,10093,10095,10097],{"class":2064,"line":2467},[2062,10088,9258],{"class":2072},[2062,10090,10092],{"class":10091},"sbqyR","stringFilter",[2062,10094,2255],{"class":2072},[2062,10096,2113],{"class":2072},[2062,10098,2209],{"class":2072},[2062,10100,10101,10104,10106,10108,10110,10112,10115],{"class":2064,"line":2472},[2062,10102,10103],{"class":2072},"                      \"",[2062,10105,8850],{"class":2199},[2062,10107,2255],{"class":2072},[2062,10109,2113],{"class":2072},[2062,10111,2248],{"class":2072},[2062,10113,10114],{"class":2251},"Mobile",[2062,10116,8258],{"class":2072},[2062,10118,10119],{"class":2064,"line":2491},[2062,10120,10121],{"class":2072},"                    },\n",[2062,10123,10124,10126,10128,10130,10132,10134,10137],{"class":2064,"line":2519},[2062,10125,9258],{"class":2072},[2062,10127,8662],{"class":10091},[2062,10129,2255],{"class":2072},[2062,10131,2113],{"class":2072},[2062,10133,2248],{"class":2072},[2062,10135,10136],{"class":2251},"deviceCategory",[2062,10138,8258],{"class":2072},[2062,10140,10141],{"class":2064,"line":2556},[2062,10142,10143],{"class":2072},"                  }\n",[2062,10145,10146],{"class":2064,"line":2577},[2062,10147,10148],{"class":2072},"                },\n",[2062,10150,10151],{"class":2064,"line":2657},[2062,10152,10071],{"class":2072},[2062,10154,10155,10157,10159,10161,10163],{"class":2064,"line":2681},[2062,10156,10076],{"class":2072},[2062,10158,2422],{"class":2079},[2062,10160,2255],{"class":2072},[2062,10162,2113],{"class":2072},[2062,10164,2209],{"class":2072},[2062,10166,10167,10169,10171,10173,10175],{"class":2064,"line":2709},[2062,10168,9258],{"class":2072},[2062,10170,10092],{"class":10091},[2062,10172,2255],{"class":2072},[2062,10174,2113],{"class":2072},[2062,10176,2209],{"class":2072},[2062,10178,10179,10181,10183,10185,10187,10189,10192],{"class":2064,"line":2714},[2062,10180,10103],{"class":2072},[2062,10182,8850],{"class":2199},[2062,10184,2255],{"class":2072},[2062,10186,2113],{"class":2072},[2062,10188,2248],{"class":2072},[2062,10190,10191],{"class":2251},"\u002Fpath-to-page",[2062,10193,8258],{"class":2072},[2062,10195,10196],{"class":2064,"line":2743},[2062,10197,10121],{"class":2072},[2062,10199,10200,10202,10204,10206,10208,10210,10213],{"class":2064,"line":2772},[2062,10201,9258],{"class":2072},[2062,10203,8662],{"class":10091},[2062,10205,2255],{"class":2072},[2062,10207,2113],{"class":2072},[2062,10209,2248],{"class":2072},[2062,10211,10212],{"class":2251},"pagePath",[2062,10214,8258],{"class":2072},[2062,10216,10217],{"class":2064,"line":2777},[2062,10218,10143],{"class":2072},[2062,10220,10221],{"class":2064,"line":2802},[2062,10222,9294],{"class":2072},[2062,10224,10225],{"class":2064,"line":2826},[2062,10226,10227],{"class":2072},"              ]\n",[2062,10229,10230],{"class":2064,"line":2834},[2062,10231,2837],{"class":2072},[2062,10233,10234,10237],{"class":2064,"line":2840},[2062,10235,10236],{"class":2072},"          },",[2062,10238,10239],{"class":2068}," \n",[2062,10241,10242],{"class":2064,"line":2845},[2062,10243,8842],{"class":2072},[2062,10245,10246,10248,10250,10252,10254],{"class":2064,"line":2886},[2062,10247,9243],{"class":2072},[2062,10249,9956],{"class":2289},[2062,10251,2255],{"class":2072},[2062,10253,2113],{"class":2072},[2062,10255,2209],{"class":2072},[2062,10257,10258,10260,10262,10264,10266],{"class":2064,"line":2907},[2062,10259,10057],{"class":2072},[2062,10261,10029],{"class":10060},[2062,10263,2255],{"class":2072},[2062,10265,2113],{"class":2072},[2062,10267,8212],{"class":2072},[2062,10269,10270],{"class":2064,"line":2941},[2062,10271,10071],{"class":2072},[2062,10273,10274,10276,10278,10280,10282],{"class":2064,"line":2962},[2062,10275,10076],{"class":2072},[2062,10277,2422],{"class":2079},[2062,10279,2255],{"class":2072},[2062,10281,2113],{"class":2072},[2062,10283,2209],{"class":2072},[2062,10285,10286,10288,10290,10292,10294],{"class":2064,"line":2983},[2062,10287,9258],{"class":2072},[2062,10289,10092],{"class":10091},[2062,10291,2255],{"class":2072},[2062,10293,2113],{"class":2072},[2062,10295,2209],{"class":2072},[2062,10297,10298,10300,10302,10304,10306,10308,10311],{"class":2064,"line":3016},[2062,10299,10103],{"class":2072},[2062,10301,8850],{"class":2199},[2062,10303,2255],{"class":2072},[2062,10305,2113],{"class":2072},[2062,10307,2248],{"class":2072},[2062,10309,10310],{"class":2251},"Tablet",[2062,10312,8258],{"class":2072},[2062,10314,10315],{"class":2064,"line":3037},[2062,10316,10121],{"class":2072},[2062,10318,10319,10321,10323,10325,10327,10329,10331],{"class":2064,"line":3058},[2062,10320,9258],{"class":2072},[2062,10322,8662],{"class":10091},[2062,10324,2255],{"class":2072},[2062,10326,2113],{"class":2072},[2062,10328,2248],{"class":2072},[2062,10330,10136],{"class":2251},[2062,10332,8258],{"class":2072},[2062,10334,10335],{"class":2064,"line":3079},[2062,10336,10143],{"class":2072},[2062,10338,10339],{"class":2064,"line":3119},[2062,10340,10148],{"class":2072},[2062,10342,10343],{"class":2064,"line":3124},[2062,10344,10071],{"class":2072},[2062,10346,10347,10349,10351,10353,10355],{"class":2064,"line":3139},[2062,10348,10076],{"class":2072},[2062,10350,2422],{"class":2079},[2062,10352,2255],{"class":2072},[2062,10354,2113],{"class":2072},[2062,10356,2209],{"class":2072},[2062,10358,10359,10361,10363,10365,10367],{"class":2064,"line":3157},[2062,10360,9258],{"class":2072},[2062,10362,10092],{"class":10091},[2062,10364,2255],{"class":2072},[2062,10366,2113],{"class":2072},[2062,10368,2209],{"class":2072},[2062,10370,10371,10373,10375,10377,10379,10381,10384],{"class":2064,"line":3173},[2062,10372,10103],{"class":2072},[2062,10374,8850],{"class":2199},[2062,10376,2255],{"class":2072},[2062,10378,2113],{"class":2072},[2062,10380,2248],{"class":2072},[2062,10382,10383],{"class":2251},"\u002Fpath-to-different-page",[2062,10385,8258],{"class":2072},[2062,10387,10388],{"class":2064,"line":3189},[2062,10389,10121],{"class":2072},[2062,10391,10392,10394,10396,10398,10400,10402,10404],{"class":2064,"line":3212},[2062,10393,9258],{"class":2072},[2062,10395,8662],{"class":10091},[2062,10397,2255],{"class":2072},[2062,10399,2113],{"class":2072},[2062,10401,2248],{"class":2072},[2062,10403,10212],{"class":2251},[2062,10405,8258],{"class":2072},[2062,10407,10408],{"class":2064,"line":3228},[2062,10409,10143],{"class":2072},[2062,10411,10412],{"class":2064,"line":3244},[2062,10413,9294],{"class":2072},[2062,10415,10416],{"class":2064,"line":3266},[2062,10417,10227],{"class":2072},[2062,10419,10420],{"class":2064,"line":3282},[2062,10421,2837],{"class":2072},[2062,10423,10424],{"class":2064,"line":3298},[2062,10425,10426],{"class":2072},"          }\n",[2062,10428,10429],{"class":2064,"line":3314},[2062,10430,9679],{"class":2072},[2062,10432,10433],{"class":2064,"line":3330},[2062,10434,10435],{"class":2072},"      }\n",[2062,10437,10438],{"class":2064,"line":3345},[2062,10439,2380],{"class":2072},[2062,10441,10442],{"class":2064,"line":3355},[2062,10443,10444],{"class":2072},"  }\n",[12,10446,10447,10448,6674,10451,6674,10453,6674,10456,591,10459,10462,10463,591,10465,10467,10468,10470,10471,10473],{},"For the individual dimension or metric filter there are several options for filter types: ",[588,10449,10450],{},"nullFilter",[588,10452,10092],{},[588,10454,10455],{},"inListFilter",[588,10457,10458],{},"numericFilter",[588,10460,10461],{},"betweenFilter",". While these are not entirely innovative, they present a more systematic way of selecting the type by separating ",[588,10464,10455],{},[588,10466,10461],{}," from the classical numeric and string filters. The ",[588,10469,10450],{}," offers an option to check for null values in a dimension. It can be accompanied by ",[588,10472,9962],{}," to exclude all rows with null values in a certain dimension.",[244,10475,10477],{"id":10476},"cohorts","Cohorts",[12,10479,10480,10481,10485,10486,10489,10490,10492],{},"Cohorts were possible to analyze already in the original API. To learn more about that, check our article on extended options in the ",[37,10482,10484],{"href":4264,"rel":10483},[41],"original API version v4",". The options to run cohort report requests haven’t changed so much yet. It is still only possible to define a cohort by the time of their first visit, by setting the cohort dimension to ",[588,10487,10488],{},"firstTouchDate",". You further specify a name to denote the cohort group and the date range for the ",[588,10491,10488],{}," that defines the cohort.",[12,10494,10495],{},"An improvement over the previous state is the flexibility to define the period for which the cohort should be observed. Unlike before, you specify the granularity of the report, and by setting the start and end offset and choose for how many of these granularity time periods the report should extend. The original API selects the observation period for you automatically.",[12,10497,10498],{},"We show an example of how you can compare weekly cohorts that come first in various weeks before Christmas and determine whether the people that come closer before Christmas stay active in a similar proportion to people who come long before Christmas. The query asks for the proportion of active users several weeks after their first visit. The results contain data for users with first visits in one of the three selected weeks (second week of October, the second week of November, and second week of December). You can see how many of them returned one to four weeks after their first visit where the weeks are depicted on the horizontal axis and the returning share on the vertical axis. As you can see from the graph, there is a difference between people from the selected weeks. In this case, people with first visits closer to Christmas came in a higher share in the next week, however, in the longer term, they have a lower retention rate.",[12,10500,10501],{},[148,10502],{"alt":76,"src":10503,"title":10504},"\u002Fupload\u002Fcohort.webp","Cohort Comparison",[1173,10506,10508],{"className":8189,"code":10507,"language":8191,"meta":76,"style":76},"    {\n        \"dimensions\": [\n            {\n                \"name\": \"cohort\"\n            },\n            {\n                \"name\": \"cohortNthWeek\"\n            }\n        ],\n        \"metrics\": [\n        {\n          \"name\": \"cohortRetentionFraction\",\n          \"expression\": \"cohortActiveUsers\u002FcohortTotalUsers\"\n        }\n      ],\n        \"cohortSpec\": {\n            \"cohorts\": [\n                {\n                    \"name\": \"20-10-02\",\n                    \"dimension\": \"firstTouchDate\",\n                    \"dateRange\": {\n                        \"startDate\": \"2020-10-05\",\n                        \"endDate\": \"2020-10-11\"\n                    }\n                },\n                {\n                    \"name\": \"20-11-02\",\n                    \"dimension\": \"firstTouchDate\",\n                    \"dateRange\": {\n                        \"startDate\": \"2020-11-09\",\n                        \"endDate\": \"2020-11-15\"\n                    }\n                },\n                {\n                    \"name\": \"20-12-02\",\n                    \"dimension\": \"firstTouchDate\",\n                    \"dateRange\": {\n                        \"startDate\": \"2020-12-08\",\n                        \"endDate\": \"2020-12-14\"\n                    }\n                }\n            ],\n            \"cohortsRange\": {\n                \"granularity\": \"WEEKLY\",\n                \"startOffset\": 0,\n                \"endOffset\": 4\n            }\n        }\n    }\n",[588,10509,10510,10514,10526,10531,10548,10552,10556,10573,10577,10581,10593,10597,10616,10633,10637,10641,10654,10666,10670,10689,10708,10721,10740,10757,10761,10765,10769,10788,10806,10818,10837,10854,10858,10862,10866,10885,10903,10915,10934,10951,10955,10959,10964,10977,10997,11013,11027,11031,11035],{"__ignoreMap":76},[2062,10511,10512],{"class":2064,"line":2065},[2062,10513,8217],{"class":2072},[2062,10515,10516,10518,10520,10522,10524],{"class":2064,"line":77},[2062,10517,8384],{"class":2072},[2062,10519,8316],{"class":2199},[2062,10521,2255],{"class":2072},[2062,10523,2113],{"class":2072},[2062,10525,8212],{"class":2072},[2062,10527,10528],{"class":2064,"line":389},[2062,10529,10530],{"class":2072},"            {\n",[2062,10532,10533,10535,10537,10539,10541,10543,10546],{"class":2064,"line":2272},[2062,10534,3142],{"class":2072},[2062,10536,2227],{"class":8225},[2062,10538,2255],{"class":2072},[2062,10540,2113],{"class":2072},[2062,10542,2248],{"class":2072},[2062,10544,10545],{"class":2251},"cohort",[2062,10547,8258],{"class":2072},[2062,10549,10550],{"class":2064,"line":2315},[2062,10551,9794],{"class":2072},[2062,10553,10554],{"class":2064,"line":2377},[2062,10555,10530],{"class":2072},[2062,10557,10558,10560,10562,10564,10566,10568,10571],{"class":2064,"line":2383},[2062,10559,3142],{"class":2072},[2062,10561,2227],{"class":8225},[2062,10563,2255],{"class":2072},[2062,10565,2113],{"class":2072},[2062,10567,2248],{"class":2072},[2062,10569,10570],{"class":2251},"cohortNthWeek",[2062,10572,8258],{"class":2072},[2062,10574,10575],{"class":2064,"line":2389},[2062,10576,2837],{"class":2072},[2062,10578,10579],{"class":2064,"line":2452},[2062,10580,9539],{"class":2072},[2062,10582,10583,10585,10587,10589,10591],{"class":2064,"line":2467},[2062,10584,8384],{"class":2072},[2062,10586,8274],{"class":2199},[2062,10588,2255],{"class":2072},[2062,10590,2113],{"class":2072},[2062,10592,8212],{"class":2072},[2062,10594,10595],{"class":2064,"line":2472},[2062,10596,8842],{"class":2072},[2062,10598,10599,10601,10603,10605,10607,10609,10612,10614],{"class":2064,"line":2491},[2062,10600,8847],{"class":2072},[2062,10602,2227],{"class":8225},[2062,10604,2255],{"class":2072},[2062,10606,2113],{"class":2072},[2062,10608,2248],{"class":2072},[2062,10610,10611],{"class":2251},"cohortRetentionFraction",[2062,10613,2255],{"class":2072},[2062,10615,3154],{"class":2072},[2062,10617,10618,10620,10622,10624,10626,10628,10631],{"class":2064,"line":2519},[2062,10619,8847],{"class":2072},[2062,10621,8160],{"class":8225},[2062,10623,2255],{"class":2072},[2062,10625,2113],{"class":2072},[2062,10627,2248],{"class":2072},[2062,10629,10630],{"class":2251},"cohortActiveUsers\u002FcohortTotalUsers",[2062,10632,8258],{"class":2072},[2062,10634,10635],{"class":2064,"line":2556},[2062,10636,3358],{"class":2072},[2062,10638,10639],{"class":2064,"line":2577},[2062,10640,8870],{"class":2072},[2062,10642,10643,10645,10648,10650,10652],{"class":2064,"line":2657},[2062,10644,8384],{"class":2072},[2062,10646,10647],{"class":2199},"cohortSpec",[2062,10649,2255],{"class":2072},[2062,10651,2113],{"class":2072},[2062,10653,2209],{"class":2072},[2062,10655,10656,10658,10660,10662,10664],{"class":2064,"line":2681},[2062,10657,9243],{"class":2072},[2062,10659,10476],{"class":8225},[2062,10661,2255],{"class":2072},[2062,10663,2113],{"class":2072},[2062,10665,8212],{"class":2072},[2062,10667,10668],{"class":2064,"line":2709},[2062,10669,10071],{"class":2072},[2062,10671,10672,10674,10676,10678,10680,10682,10685,10687],{"class":2064,"line":2714},[2062,10673,9258],{"class":2072},[2062,10675,2227],{"class":2086},[2062,10677,2255],{"class":2072},[2062,10679,2113],{"class":2072},[2062,10681,2248],{"class":2072},[2062,10683,10684],{"class":2251},"20-10-02",[2062,10686,2255],{"class":2072},[2062,10688,3154],{"class":2072},[2062,10690,10691,10693,10696,10698,10700,10702,10704,10706],{"class":2064,"line":2743},[2062,10692,9258],{"class":2072},[2062,10694,10695],{"class":2086},"dimension",[2062,10697,2255],{"class":2072},[2062,10699,2113],{"class":2072},[2062,10701,2248],{"class":2072},[2062,10703,10488],{"class":2251},[2062,10705,2255],{"class":2072},[2062,10707,3154],{"class":2072},[2062,10709,10710,10712,10715,10717,10719],{"class":2064,"line":2772},[2062,10711,9258],{"class":2072},[2062,10713,10714],{"class":2086},"dateRange",[2062,10716,2255],{"class":2072},[2062,10718,2113],{"class":2072},[2062,10720,2209],{"class":2072},[2062,10722,10723,10725,10727,10729,10731,10733,10736,10738],{"class":2064,"line":2777},[2062,10724,9369],{"class":2072},[2062,10726,8226],{"class":2289},[2062,10728,2255],{"class":2072},[2062,10730,2113],{"class":2072},[2062,10732,2248],{"class":2072},[2062,10734,10735],{"class":2251},"2020-10-05",[2062,10737,2255],{"class":2072},[2062,10739,3154],{"class":2072},[2062,10741,10742,10744,10746,10748,10750,10752,10755],{"class":2064,"line":2802},[2062,10743,9369],{"class":2072},[2062,10745,8246],{"class":2289},[2062,10747,2255],{"class":2072},[2062,10749,2113],{"class":2072},[2062,10751,2248],{"class":2072},[2062,10753,10754],{"class":2251},"2020-10-11",[2062,10756,8258],{"class":2072},[2062,10758,10759],{"class":2064,"line":2826},[2062,10760,9392],{"class":2072},[2062,10762,10763],{"class":2064,"line":2834},[2062,10764,10148],{"class":2072},[2062,10766,10767],{"class":2064,"line":2840},[2062,10768,10071],{"class":2072},[2062,10770,10771,10773,10775,10777,10779,10781,10784,10786],{"class":2064,"line":2845},[2062,10772,9258],{"class":2072},[2062,10774,2227],{"class":2086},[2062,10776,2255],{"class":2072},[2062,10778,2113],{"class":2072},[2062,10780,2248],{"class":2072},[2062,10782,10783],{"class":2251},"20-11-02",[2062,10785,2255],{"class":2072},[2062,10787,3154],{"class":2072},[2062,10789,10790,10792,10794,10796,10798,10800,10802,10804],{"class":2064,"line":2886},[2062,10791,9258],{"class":2072},[2062,10793,10695],{"class":2086},[2062,10795,2255],{"class":2072},[2062,10797,2113],{"class":2072},[2062,10799,2248],{"class":2072},[2062,10801,10488],{"class":2251},[2062,10803,2255],{"class":2072},[2062,10805,3154],{"class":2072},[2062,10807,10808,10810,10812,10814,10816],{"class":2064,"line":2907},[2062,10809,9258],{"class":2072},[2062,10811,10714],{"class":2086},[2062,10813,2255],{"class":2072},[2062,10815,2113],{"class":2072},[2062,10817,2209],{"class":2072},[2062,10819,10820,10822,10824,10826,10828,10830,10833,10835],{"class":2064,"line":2941},[2062,10821,9369],{"class":2072},[2062,10823,8226],{"class":2289},[2062,10825,2255],{"class":2072},[2062,10827,2113],{"class":2072},[2062,10829,2248],{"class":2072},[2062,10831,10832],{"class":2251},"2020-11-09",[2062,10834,2255],{"class":2072},[2062,10836,3154],{"class":2072},[2062,10838,10839,10841,10843,10845,10847,10849,10852],{"class":2064,"line":2962},[2062,10840,9369],{"class":2072},[2062,10842,8246],{"class":2289},[2062,10844,2255],{"class":2072},[2062,10846,2113],{"class":2072},[2062,10848,2248],{"class":2072},[2062,10850,10851],{"class":2251},"2020-11-15",[2062,10853,8258],{"class":2072},[2062,10855,10856],{"class":2064,"line":2983},[2062,10857,9392],{"class":2072},[2062,10859,10860],{"class":2064,"line":3016},[2062,10861,10148],{"class":2072},[2062,10863,10864],{"class":2064,"line":3037},[2062,10865,10071],{"class":2072},[2062,10867,10868,10870,10872,10874,10876,10878,10881,10883],{"class":2064,"line":3058},[2062,10869,9258],{"class":2072},[2062,10871,2227],{"class":2086},[2062,10873,2255],{"class":2072},[2062,10875,2113],{"class":2072},[2062,10877,2248],{"class":2072},[2062,10879,10880],{"class":2251},"20-12-02",[2062,10882,2255],{"class":2072},[2062,10884,3154],{"class":2072},[2062,10886,10887,10889,10891,10893,10895,10897,10899,10901],{"class":2064,"line":3079},[2062,10888,9258],{"class":2072},[2062,10890,10695],{"class":2086},[2062,10892,2255],{"class":2072},[2062,10894,2113],{"class":2072},[2062,10896,2248],{"class":2072},[2062,10898,10488],{"class":2251},[2062,10900,2255],{"class":2072},[2062,10902,3154],{"class":2072},[2062,10904,10905,10907,10909,10911,10913],{"class":2064,"line":3119},[2062,10906,9258],{"class":2072},[2062,10908,10714],{"class":2086},[2062,10910,2255],{"class":2072},[2062,10912,2113],{"class":2072},[2062,10914,2209],{"class":2072},[2062,10916,10917,10919,10921,10923,10925,10927,10930,10932],{"class":2064,"line":3124},[2062,10918,9369],{"class":2072},[2062,10920,8226],{"class":2289},[2062,10922,2255],{"class":2072},[2062,10924,2113],{"class":2072},[2062,10926,2248],{"class":2072},[2062,10928,10929],{"class":2251},"2020-12-08",[2062,10931,2255],{"class":2072},[2062,10933,3154],{"class":2072},[2062,10935,10936,10938,10940,10942,10944,10946,10949],{"class":2064,"line":3139},[2062,10937,9369],{"class":2072},[2062,10939,8246],{"class":2289},[2062,10941,2255],{"class":2072},[2062,10943,2113],{"class":2072},[2062,10945,2248],{"class":2072},[2062,10947,10948],{"class":2251},"2020-12-14",[2062,10950,8258],{"class":2072},[2062,10952,10953],{"class":2064,"line":3157},[2062,10954,9392],{"class":2072},[2062,10956,10957],{"class":2064,"line":3173},[2062,10958,9294],{"class":2072},[2062,10960,10961],{"class":2064,"line":3189},[2062,10962,10963],{"class":2072},"            ],\n",[2062,10965,10966,10968,10971,10973,10975],{"class":2064,"line":3212},[2062,10967,9243],{"class":2072},[2062,10969,10970],{"class":8225},"cohortsRange",[2062,10972,2255],{"class":2072},[2062,10974,2113],{"class":2072},[2062,10976,2209],{"class":2072},[2062,10978,10979,10981,10984,10986,10988,10990,10993,10995],{"class":2064,"line":3228},[2062,10980,3142],{"class":2072},[2062,10982,10983],{"class":2086},"granularity",[2062,10985,2255],{"class":2072},[2062,10987,2113],{"class":2072},[2062,10989,2248],{"class":2072},[2062,10991,10992],{"class":2251},"WEEKLY",[2062,10994,2255],{"class":2072},[2062,10996,3154],{"class":2072},[2062,10998,10999,11001,11004,11006,11008,11011],{"class":2064,"line":3244},[2062,11000,3142],{"class":2072},[2062,11002,11003],{"class":2086},"startOffset",[2062,11005,2255],{"class":2072},[2062,11007,2113],{"class":2072},[2062,11009,11010],{"class":2086}," 0",[2062,11012,3154],{"class":2072},[2062,11014,11015,11017,11020,11022,11024],{"class":2064,"line":3266},[2062,11016,3142],{"class":2072},[2062,11018,11019],{"class":2086},"endOffset",[2062,11021,2255],{"class":2072},[2062,11023,2113],{"class":2072},[2062,11025,11026],{"class":2086}," 4\n",[2062,11028,11029],{"class":2064,"line":3282},[2062,11030,2837],{"class":2072},[2062,11032,11033],{"class":2064,"line":3298},[2062,11034,3358],{"class":2072},[2062,11036,11037],{"class":2064,"line":3314},[2062,11038,2380],{"class":2072},[12,11040,11041,11042,11047],{},"For more examples, ",[37,11043,11046],{"href":11044,"rel":11045},"https:\u002F\u002Fdevelopers.google.com\u002Fanalytics\u002Fdevguides\u002Freporting\u002Fdata\u002Fv1\u002Fadvanced#cohort_report_examples",[41],"Google provides"," sample queries with explanations and visual representation.",[244,11049,11051],{"id":11050},"pagination","Pagination",[12,11053,11054,11055,11058,11059,11062,11063,11065],{},"By default, the query returns (up to) 10 rows of the results. This can be increased using the limit parameter of up to 10,000 rows of returned results. If you need to query more rows, you can combine the ",[588,11056,11057],{},"limit"," parameter with the parameter ",[588,11060,11061],{},"offset"," which specifies from which index the results should be displayed. Therefore, if the ",[588,11064,9164],{}," in the results show that you have over 10,000 resulting rows, you need to run the query first with the following parameters to query the first 10,000 rows:",[12,11067,11068],{},[588,11069,11070],{},"{… \"limit\": 10000, \"offset\": 0}",[12,11072,11073],{},"and next, with offset set to 10,000 to query rows starting with the row index 10,001:",[12,11075,11076],{},[588,11077,11078],{},"{… \"limit\": 10000, \"offset\": 10000}",[16,11080,11082],{"id":11081},"multiple-queries","Multiple queries",[12,11084,11085,11086,11089,11090,11092],{},"To run multiple requests together, you need to use the ",[113,11087,11088],{},"batchRunReports"," method instead of the ",[113,11091,8127],{}," method. This works in a similar way as constructing multiple requests for the original API, which means that the requests are all included in an array within an outer object. Inside they have the same structure as if they were single requests.",[12,11094,11095],{},"As an example, we present a set of queries where the first query extracts the number of sessions within several days and the other on total sessions in the previous month. These queries can be used to compare the current sessions with the daily average in the last month. This example is selected for its simplicity; however, the concept can be used in a broad variety of cases, including comparison of data query to its filtered counterpart or comparison of multiple time periods that cannot be represented by a single dimension.",[1173,11097,11099],{"className":8189,"code":11098,"language":8191,"meta":76,"style":76},"{\n    \"requests\": [\n        {\n            \"dateRanges\": [\n                {\n                    \"startDate\": \"2021-01-04\",\n                    \"endDate\": \"2021-01-06\"\n                }\n            ],\n            \"metrics\": [\n                {\n                    \"name\": \"sessions\"\n                }\n            ],\n            \"dimensions\": [\n                {\n                    \"name\": \"date\"\n                }\n            ],\n            \"orderBys\": [\n                {\n                    \"metric\": {\n                        \"metricName\": \"sessions\"\n                    },\n                    \"desc\": true\n                }\n            ]\n        },\n        {\n            \"dateRanges\": [\n                {\n                    \"startDate\": \"2020-12-01\",\n                    \"endDate\": \"2020-12-31\"\n                }\n            ],\n            \"metrics\": [\n                {\n                    \"name\": \"sessions\"\n                }\n            ]\n        }\n    ]\n }\n",[588,11100,11101,11105,11118,11122,11134,11138,11156,11172,11176,11180,11192,11196,11212,11216,11220,11232,11236,11252,11256,11260,11272,11276,11288,11304,11308,11320,11324,11328,11333,11337,11349,11353,11372,11389,11393,11397,11409,11413,11429,11433,11437,11441,11446],{"__ignoreMap":76},[2062,11102,11103],{"class":2064,"line":2065},[2062,11104,2740],{"class":2072},[2062,11106,11107,11109,11112,11114,11116],{"class":2064,"line":77},[2062,11108,9194],{"class":2072},[2062,11110,11111],{"class":2199},"requests",[2062,11113,2255],{"class":2072},[2062,11115,2113],{"class":2072},[2062,11117,8212],{"class":2072},[2062,11119,11120],{"class":2064,"line":389},[2062,11121,8842],{"class":2072},[2062,11123,11124,11126,11128,11130,11132],{"class":2064,"line":2272},[2062,11125,9243],{"class":2072},[2062,11127,8205],{"class":8225},[2062,11129,2255],{"class":2072},[2062,11131,2113],{"class":2072},[2062,11133,8212],{"class":2072},[2062,11135,11136],{"class":2064,"line":2315},[2062,11137,10071],{"class":2072},[2062,11139,11140,11142,11144,11146,11148,11150,11152,11154],{"class":2064,"line":2377},[2062,11141,9258],{"class":2072},[2062,11143,8226],{"class":2086},[2062,11145,2255],{"class":2072},[2062,11147,2113],{"class":2072},[2062,11149,2248],{"class":2072},[2062,11151,8235],{"class":2251},[2062,11153,2255],{"class":2072},[2062,11155,3154],{"class":2072},[2062,11157,11158,11160,11162,11164,11166,11168,11170],{"class":2064,"line":2383},[2062,11159,9258],{"class":2072},[2062,11161,8246],{"class":2086},[2062,11163,2255],{"class":2072},[2062,11165,2113],{"class":2072},[2062,11167,2248],{"class":2072},[2062,11169,8255],{"class":2251},[2062,11171,8258],{"class":2072},[2062,11173,11174],{"class":2064,"line":2389},[2062,11175,9294],{"class":2072},[2062,11177,11178],{"class":2064,"line":2452},[2062,11179,10963],{"class":2072},[2062,11181,11182,11184,11186,11188,11190],{"class":2064,"line":2467},[2062,11183,9243],{"class":2072},[2062,11185,8274],{"class":8225},[2062,11187,2255],{"class":2072},[2062,11189,2113],{"class":2072},[2062,11191,8212],{"class":2072},[2062,11193,11194],{"class":2064,"line":2472},[2062,11195,10071],{"class":2072},[2062,11197,11198,11200,11202,11204,11206,11208,11210],{"class":2064,"line":2491},[2062,11199,9258],{"class":2072},[2062,11201,2227],{"class":2086},[2062,11203,2255],{"class":2072},[2062,11205,2113],{"class":2072},[2062,11207,2248],{"class":2072},[2062,11209,8299],{"class":2251},[2062,11211,8258],{"class":2072},[2062,11213,11214],{"class":2064,"line":2519},[2062,11215,9294],{"class":2072},[2062,11217,11218],{"class":2064,"line":2556},[2062,11219,10963],{"class":2072},[2062,11221,11222,11224,11226,11228,11230],{"class":2064,"line":2577},[2062,11223,9243],{"class":2072},[2062,11225,8316],{"class":8225},[2062,11227,2255],{"class":2072},[2062,11229,2113],{"class":2072},[2062,11231,8212],{"class":2072},[2062,11233,11234],{"class":2064,"line":2657},[2062,11235,10071],{"class":2072},[2062,11237,11238,11240,11242,11244,11246,11248,11250],{"class":2064,"line":2681},[2062,11239,9258],{"class":2072},[2062,11241,2227],{"class":2086},[2062,11243,2255],{"class":2072},[2062,11245,2113],{"class":2072},[2062,11247,2248],{"class":2072},[2062,11249,6797],{"class":2251},[2062,11251,8258],{"class":2072},[2062,11253,11254],{"class":2064,"line":2709},[2062,11255,9294],{"class":2072},[2062,11257,11258],{"class":2064,"line":2714},[2062,11259,10963],{"class":2072},[2062,11261,11262,11264,11266,11268,11270],{"class":2064,"line":2743},[2062,11263,9243],{"class":2072},[2062,11265,8170],{"class":8225},[2062,11267,2255],{"class":2072},[2062,11269,2113],{"class":2072},[2062,11271,8212],{"class":2072},[2062,11273,11274],{"class":2064,"line":2772},[2062,11275,10071],{"class":2072},[2062,11277,11278,11280,11282,11284,11286],{"class":2064,"line":2777},[2062,11279,9258],{"class":2072},[2062,11281,8373],{"class":2086},[2062,11283,2255],{"class":2072},[2062,11285,2113],{"class":2072},[2062,11287,2209],{"class":2072},[2062,11289,11290,11292,11294,11296,11298,11300,11302],{"class":2064,"line":2802},[2062,11291,9369],{"class":2072},[2062,11293,8387],{"class":2289},[2062,11295,2255],{"class":2072},[2062,11297,2113],{"class":2072},[2062,11299,2248],{"class":2072},[2062,11301,8299],{"class":2251},[2062,11303,8258],{"class":2072},[2062,11305,11306],{"class":2064,"line":2826},[2062,11307,10121],{"class":2072},[2062,11309,11310,11312,11314,11316,11318],{"class":2064,"line":2834},[2062,11311,9258],{"class":2072},[2062,11313,8409],{"class":2086},[2062,11315,2255],{"class":2072},[2062,11317,2113],{"class":2072},[2062,11319,8416],{"class":2072},[2062,11321,11322],{"class":2064,"line":2840},[2062,11323,9294],{"class":2072},[2062,11325,11326],{"class":2064,"line":2845},[2062,11327,9299],{"class":2072},[2062,11329,11330],{"class":2064,"line":2886},[2062,11331,11332],{"class":2072},"        },\n",[2062,11334,11335],{"class":2064,"line":2907},[2062,11336,8842],{"class":2072},[2062,11338,11339,11341,11343,11345,11347],{"class":2064,"line":2941},[2062,11340,9243],{"class":2072},[2062,11342,8205],{"class":8225},[2062,11344,2255],{"class":2072},[2062,11346,2113],{"class":2072},[2062,11348,8212],{"class":2072},[2062,11350,11351],{"class":2064,"line":2962},[2062,11352,10071],{"class":2072},[2062,11354,11355,11357,11359,11361,11363,11365,11368,11370],{"class":2064,"line":2983},[2062,11356,9258],{"class":2072},[2062,11358,8226],{"class":2086},[2062,11360,2255],{"class":2072},[2062,11362,2113],{"class":2072},[2062,11364,2248],{"class":2072},[2062,11366,11367],{"class":2251},"2020-12-01",[2062,11369,2255],{"class":2072},[2062,11371,3154],{"class":2072},[2062,11373,11374,11376,11378,11380,11382,11384,11387],{"class":2064,"line":3016},[2062,11375,9258],{"class":2072},[2062,11377,8246],{"class":2086},[2062,11379,2255],{"class":2072},[2062,11381,2113],{"class":2072},[2062,11383,2248],{"class":2072},[2062,11385,11386],{"class":2251},"2020-12-31",[2062,11388,8258],{"class":2072},[2062,11390,11391],{"class":2064,"line":3037},[2062,11392,9294],{"class":2072},[2062,11394,11395],{"class":2064,"line":3058},[2062,11396,10963],{"class":2072},[2062,11398,11399,11401,11403,11405,11407],{"class":2064,"line":3079},[2062,11400,9243],{"class":2072},[2062,11402,8274],{"class":8225},[2062,11404,2255],{"class":2072},[2062,11406,2113],{"class":2072},[2062,11408,8212],{"class":2072},[2062,11410,11411],{"class":2064,"line":3119},[2062,11412,10071],{"class":2072},[2062,11414,11415,11417,11419,11421,11423,11425,11427],{"class":2064,"line":3124},[2062,11416,9258],{"class":2072},[2062,11418,2227],{"class":2086},[2062,11420,2255],{"class":2072},[2062,11422,2113],{"class":2072},[2062,11424,2248],{"class":2072},[2062,11426,8299],{"class":2251},[2062,11428,8258],{"class":2072},[2062,11430,11431],{"class":2064,"line":3139},[2062,11432,9294],{"class":2072},[2062,11434,11435],{"class":2064,"line":3157},[2062,11436,9299],{"class":2072},[2062,11438,11439],{"class":2064,"line":3173},[2062,11440,3358],{"class":2072},[2062,11442,11443],{"class":2064,"line":3189},[2062,11444,11445],{"class":2072},"    ]\n",[2062,11447,11448],{"class":2064,"line":3212},[2062,11449,11450],{"class":2072}," }\n",[16,11452,11454],{"id":11453},"pivot-queries","Pivot queries",[12,11456,11457,11458,11462,11463,11466,11467,11470],{},"Similar to cohorts’ analysis, the possibility to run pivot queries was already introduced with version 4 of the original API. More about the use of pivots in the original API can be found in our already mentioned ",[37,11459,11461],{"href":4264,"rel":11460},[41],"article on the original API version v4",". In GA4 API, pivots can be obtained using either ",[113,11464,11465],{},"runPivotReport"," (for a single request) or ",[113,11468,11469],{},"batchRunPivotReports"," (for multiple requests) methods.",[12,11472,11473],{},"Querying data as a pivot table is useful for dividing resulting values by further characteristics to view them from a different angle. For example, you can observe a number of errors per day using a simple query, but a pivot table allows you to extend the view by the browser they occurred in.",[12,11475,11476],{},"The structure is different from the structure in the original API, both for the queries and for the results, because the approach to pivot queries has changed. In the original API, you extend a simple query by a pivot table so that in the results, you can see both the simple query results and for each row of the results you can match the corresponding row of the pivot table. This is useful as it gives you aggregate results for each row of the pivot table. However, it also complicates the structure and the extraction of the data from the results.",[12,11478,11479,11480,11483,11484,11487,11488,11490,11491,11494,11495,11497,11498,11500],{},"In the GA4 API you can only extract the pivot table by itself (not in combination with the un-pivoted table as in the original API). The results that you receive are not in the structure of a pivot table, in fact, the results’ rows have the same content as if you did not query a pivot table. However, the key addition is the ",[588,11481,11482],{},"pivotHeader"," which allows the data to be transformed into the required pivot table. It uses the fact that data can be easily transformed between the classical and pivot formats, you just need to know the list of all values or combinations of values to construct the columns and then you can fill in the values. The shape of the pivot table is determined by the way you distribute the dimensions’ names into the ",[588,11485,11486],{},"pivots"," parameter array. The ",[588,11489,11482],{}," gives you the combination of values for those dimensions that you write together within ",[588,11492,11493],{},"fieldNames"," parameter of one item of the ",[588,11496,11486],{}," array and it gives you a list of values for single dimensions inside one item of the ",[588,11499,11486],{}," array. At the moment, it is up to you to construct the pivot table from these indicators.",[1173,11502,11504],{"className":8189,"code":11503,"language":8191,"meta":76,"style":76},"{\n   \"dimensions\": [\n     {\n       \"name\": \"date\"\n     },\n     {\n       \"name\": \"deviceCategory\"\n     }\n   ],\n   \"metrics\": [\n     {\n       \"name\": \"sessions\"\n     }\n   ],\n   \"dateRanges\": [\n     {\n       \"startDate\": \"2021-01-04\",\n       \"endDate\": \"2021-01-06\"\n     }\n   ],\n   \"pivots\": [\n     {\n       \"fieldNames\": [\n         \"deviceCategory\"\n       ]\n     },\n    {\n       \"fieldNames\": [\n         \"date\"\n       ]\n     }\n   ]\n }\n",[588,11505,11506,11510,11523,11528,11545,11550,11554,11570,11575,11580,11592,11596,11612,11616,11620,11632,11636,11654,11670,11674,11678,11690,11694,11706,11715,11720,11724,11728,11740,11748,11752,11756,11761],{"__ignoreMap":76},[2062,11507,11508],{"class":2064,"line":2065},[2062,11509,2740],{"class":2072},[2062,11511,11512,11515,11517,11519,11521],{"class":2064,"line":77},[2062,11513,11514],{"class":2072},"   \"",[2062,11516,8316],{"class":2199},[2062,11518,2255],{"class":2072},[2062,11520,2113],{"class":2072},[2062,11522,8212],{"class":2072},[2062,11524,11525],{"class":2064,"line":389},[2062,11526,11527],{"class":2072},"     {\n",[2062,11529,11530,11533,11535,11537,11539,11541,11543],{"class":2064,"line":2272},[2062,11531,11532],{"class":2072},"       \"",[2062,11534,2227],{"class":8225},[2062,11536,2255],{"class":2072},[2062,11538,2113],{"class":2072},[2062,11540,2248],{"class":2072},[2062,11542,6797],{"class":2251},[2062,11544,8258],{"class":2072},[2062,11546,11547],{"class":2064,"line":2315},[2062,11548,11549],{"class":2072},"     },\n",[2062,11551,11552],{"class":2064,"line":2377},[2062,11553,11527],{"class":2072},[2062,11555,11556,11558,11560,11562,11564,11566,11568],{"class":2064,"line":2383},[2062,11557,11532],{"class":2072},[2062,11559,2227],{"class":8225},[2062,11561,2255],{"class":2072},[2062,11563,2113],{"class":2072},[2062,11565,2248],{"class":2072},[2062,11567,10136],{"class":2251},[2062,11569,8258],{"class":2072},[2062,11571,11572],{"class":2064,"line":2389},[2062,11573,11574],{"class":2072},"     }\n",[2062,11576,11577],{"class":2064,"line":2452},[2062,11578,11579],{"class":2072},"   ],\n",[2062,11581,11582,11584,11586,11588,11590],{"class":2064,"line":2467},[2062,11583,11514],{"class":2072},[2062,11585,8274],{"class":2199},[2062,11587,2255],{"class":2072},[2062,11589,2113],{"class":2072},[2062,11591,8212],{"class":2072},[2062,11593,11594],{"class":2064,"line":2472},[2062,11595,11527],{"class":2072},[2062,11597,11598,11600,11602,11604,11606,11608,11610],{"class":2064,"line":2491},[2062,11599,11532],{"class":2072},[2062,11601,2227],{"class":8225},[2062,11603,2255],{"class":2072},[2062,11605,2113],{"class":2072},[2062,11607,2248],{"class":2072},[2062,11609,8299],{"class":2251},[2062,11611,8258],{"class":2072},[2062,11613,11614],{"class":2064,"line":2519},[2062,11615,11574],{"class":2072},[2062,11617,11618],{"class":2064,"line":2556},[2062,11619,11579],{"class":2072},[2062,11621,11622,11624,11626,11628,11630],{"class":2064,"line":2577},[2062,11623,11514],{"class":2072},[2062,11625,8205],{"class":2199},[2062,11627,2255],{"class":2072},[2062,11629,2113],{"class":2072},[2062,11631,8212],{"class":2072},[2062,11633,11634],{"class":2064,"line":2657},[2062,11635,11527],{"class":2072},[2062,11637,11638,11640,11642,11644,11646,11648,11650,11652],{"class":2064,"line":2681},[2062,11639,11532],{"class":2072},[2062,11641,8226],{"class":8225},[2062,11643,2255],{"class":2072},[2062,11645,2113],{"class":2072},[2062,11647,2248],{"class":2072},[2062,11649,8235],{"class":2251},[2062,11651,2255],{"class":2072},[2062,11653,3154],{"class":2072},[2062,11655,11656,11658,11660,11662,11664,11666,11668],{"class":2064,"line":2709},[2062,11657,11532],{"class":2072},[2062,11659,8246],{"class":8225},[2062,11661,2255],{"class":2072},[2062,11663,2113],{"class":2072},[2062,11665,2248],{"class":2072},[2062,11667,8255],{"class":2251},[2062,11669,8258],{"class":2072},[2062,11671,11672],{"class":2064,"line":2714},[2062,11673,11574],{"class":2072},[2062,11675,11676],{"class":2064,"line":2743},[2062,11677,11579],{"class":2072},[2062,11679,11680,11682,11684,11686,11688],{"class":2064,"line":2772},[2062,11681,11514],{"class":2072},[2062,11683,11486],{"class":2199},[2062,11685,2255],{"class":2072},[2062,11687,2113],{"class":2072},[2062,11689,8212],{"class":2072},[2062,11691,11692],{"class":2064,"line":2777},[2062,11693,11527],{"class":2072},[2062,11695,11696,11698,11700,11702,11704],{"class":2064,"line":2802},[2062,11697,11532],{"class":2072},[2062,11699,11493],{"class":8225},[2062,11701,2255],{"class":2072},[2062,11703,2113],{"class":2072},[2062,11705,8212],{"class":2072},[2062,11707,11708,11711,11713],{"class":2064,"line":2826},[2062,11709,11710],{"class":2072},"         \"",[2062,11712,10136],{"class":2251},[2062,11714,8258],{"class":2072},[2062,11716,11717],{"class":2064,"line":2834},[2062,11718,11719],{"class":2072},"       ]\n",[2062,11721,11722],{"class":2064,"line":2840},[2062,11723,11549],{"class":2072},[2062,11725,11726],{"class":2064,"line":2845},[2062,11727,8217],{"class":2072},[2062,11729,11730,11732,11734,11736,11738],{"class":2064,"line":2886},[2062,11731,11532],{"class":2072},[2062,11733,11493],{"class":8225},[2062,11735,2255],{"class":2072},[2062,11737,2113],{"class":2072},[2062,11739,8212],{"class":2072},[2062,11741,11742,11744,11746],{"class":2064,"line":2907},[2062,11743,11710],{"class":2072},[2062,11745,6797],{"class":2251},[2062,11747,8258],{"class":2072},[2062,11749,11750],{"class":2064,"line":2941},[2062,11751,11719],{"class":2072},[2062,11753,11754],{"class":2064,"line":2962},[2062,11755,11574],{"class":2072},[2062,11757,11758],{"class":2064,"line":2983},[2062,11759,11760],{"class":2072},"   ]\n",[2062,11762,11763],{"class":2064,"line":3016},[2062,11764,11450],{"class":2072},[3830,11766,11767],{},[3833,11768,11769,11784],{},[3844,11770,11771],{},[3847,11772,11773,11775,11778,11781],{},[3850,11774,6797],{},[3850,11776,11777],{},"desktop",[3850,11779,11780],{},"mobile",[3850,11782,11783],{},"tablet",[3861,11785,11786,11799,11813],{},[3847,11787,11788,11790,11793,11796],{},[3866,11789,8235],{},[3866,11791,11792],{},"1230",[3866,11794,11795],{},"990",[3866,11797,11798],{},"210",[3847,11800,11801,11804,11807,11810],{},[3866,11802,11803],{},"2021-01-05",[3866,11805,11806],{},"1410",[3866,11808,11809],{},"1280",[3866,11811,11812],{},"150",[3847,11814,11815,11817,11820,11823],{},[3866,11816,8255],{},[3866,11818,11819],{},"1370",[3866,11821,11822],{},"1290",[3866,11824,11825],{},"180",[12,11827,11828],{},[148,11829],{"alt":76,"src":11830,"title":11831},"\u002Fupload\u002Fdata-results.webp","Data Results",[16,11833,11835],{"id":11834},"python-example","Python example",[12,11837,11838],{},"Until now we have talked about the JSON-structured queries used in the request body of cURL, HTTP, or JavaScript requests. However, it is possible to run the requests in Python as well, using Google Python library called google-analytics-data. The run of the Python code requires receiving a path to an access token for the service account and GA4 property ID to which this service account has access.",[12,11840,11841,11842,11845,11846,11849],{},"We include a sample code along with information on how to prepare your environment. To run the Python code, you need to first set up a virtual environment, then prepare a file with a path to an access token for the service account, and then you can run the Python code which will ask you to input the ",[588,11843,11844],{},"property_id"," as an argument. For the setup on Windows, run the code below in Command Prompt. Replace the place holder ",[588,11847,11848],{},"\u003Cyour-env>"," with the selected name for your environment.",[1173,11851,11855],{"className":11852,"code":11853,"language":11854,"meta":76,"style":76},"language-powershell shiki shiki-themes material-theme-ocean","pip install virtualenv\n  virtualenv \u003Cyour-env>\n  \u003Cyour-env>\\Scripts\\activate\n  \u003Cyour-env>\\Scripts\\pip.exe install google-analytics-data pandas python-dotenv\n","powershell",[588,11856,11857,11862,11867,11872],{"__ignoreMap":76},[2062,11858,11859],{"class":2064,"line":2065},[2062,11860,11861],{},"pip install virtualenv\n",[2062,11863,11864],{"class":2064,"line":77},[2062,11865,11866],{},"  virtualenv \u003Cyour-env>\n",[2062,11868,11869],{"class":2064,"line":389},[2062,11870,11871],{},"  \u003Cyour-env>\\Scripts\\activate\n",[2062,11873,11874],{"class":2064,"line":2272},[2062,11875,11876],{},"  \u003Cyour-env>\\Scripts\\pip.exe install google-analytics-data pandas python-dotenv\n",[12,11878,11879,11880,11883],{},"To prepare the access to data, you need to have a service account that has access to the GA4 property data. The local path needs to be saved under the parameter ",[588,11881,11882],{},"SERVICE_TOKEN_PATH"," in .env file which is located in the same folder as the Python code. The format of the file should be as follows:",[1173,11885,11887],{"className":11852,"code":11886,"language":11854,"meta":76,"style":76},"SERVICE_TOKEN_PATH=\"C:\u002FUsers\u002FYourUser\u002FDocuments\u002Fservice_account_token.json\"\n",[588,11888,11889],{"__ignoreMap":76},[2062,11890,11891],{"class":2064,"line":2065},[2062,11892,11886],{},[12,11894,11895,11896,1296],{},"If you need any help creating the service token, refer to ",[37,11897,11900],{"href":11898,"rel":11899},"https:\u002F\u002Fcloud.google.com\u002Fiam\u002Fdocs\u002Fcreating-managing-service-accounts.",[41],"official documents",[12,11902,11903,11904,1296],{},"When you have set up the virtual environment, prepare the .env file and set the GA4 property ID into the parameter property_id, you can run the Python code to obtain the sample results. The code loads and prints data about active users and a number of sessions by the date, country, and city characteristics, since the beginning of the year 2021. For more information about the library, you can ",[37,11905,11908],{"href":11906,"rel":11907},"https:\u002F\u002Fgithub.com\u002Fgoogleapis\u002Fpython-analytics-data",[41],"check the client library source code",[1173,11910,11914],{"className":11911,"code":11912,"language":11913,"meta":76,"style":76},"language-py shiki shiki-themes material-theme-ocean","    from dotenv import load_dotenv\n    import os\n    import json\n    import pandas as pd\n    from google.analytics.data_v1beta import BetaAnalyticsDataClient\n    from google.analytics.data_v1beta.types import DateRange, Dimension, Metric, RunReportRequest\n    \n    # Setting \n    #(.env file is located in the same location and contains SERVICE_TOKEN_PATH=[local-path-to-Google-service-token-with-data-access])\n    load_dotenv()\n    SERVICE_TOKEN_PATH = os.getenv('SERVICE_TOKEN_PATH')\n    property_id = '\u003Cset-your-property-ID-here>'\n    \n    def sample_run_report(property_id):\n        \"\"\"Runs a simple report on a Google Analytics 4 property.\"\"\"\n    \n        client = AlphaAnalyticsDataClient.from_service_account_file(SERVICE_TOKEN_PATH)\n        request = RunReportRequest(property=f\"properties\u002F{​property_id}​\",\n                                   dimensions=[Dimension(name='date'), Dimension(name='country'), Dimension(name='city')],\n                                   metrics=[Metric(name='activeUsers'), Metric(name='sessions')],\n                                   date_ranges=[DateRange(start_date='2021-01-01', end_date='yesterday')])\n        response = client.run_report(request)\n        return response\n    \n    def sample_extract_data(response):\n        \"\"\"Extracts data from GA 4 Data API response as Pandas Dataframe \"\"\"\n        data_dict = {}\n        for row in response.rows:\n                data_dict_row = []\n                for i in range(len(row.dimension_values)):\n                    data_dict_row.append(row.dimension_values[i].value)\n                for j in range(len(row.metric_values)):\n                    data_dict_row.append(row.metric_values[j].value)\n                data_dict[response.rows.index(row)] = data_dict_row\n    \n        columns_list = []\n        for dim_header in response.dimension_headers:\n            columns_list.append(dim_header.name)\n        for met_header in response.metric_headers:\n            columns_list.append(met_header.name)\n        return pd.DataFrame.from_dict(data_dict, orient='index', columns = columns_list)\n    \n    \n    if __name__ == \"__main__\":\n        query_response = sample_run_report(property_id)\n        sample_extract_data(query_response)\n","py",[588,11915,11916,11921,11926,11931,11936,11941,11946,11951,11956,11961,11966,11971,11976,11980,11985,11990,11994,11999,12004,12009,12014,12019,12024,12029,12033,12038,12043,12048,12053,12058,12063,12068,12073,12078,12083,12087,12092,12097,12102,12107,12112,12117,12121,12125,12130,12135],{"__ignoreMap":76},[2062,11917,11918],{"class":2064,"line":2065},[2062,11919,11920],{},"    from dotenv import load_dotenv\n",[2062,11922,11923],{"class":2064,"line":77},[2062,11924,11925],{},"    import os\n",[2062,11927,11928],{"class":2064,"line":389},[2062,11929,11930],{},"    import json\n",[2062,11932,11933],{"class":2064,"line":2272},[2062,11934,11935],{},"    import pandas as pd\n",[2062,11937,11938],{"class":2064,"line":2315},[2062,11939,11940],{},"    from google.analytics.data_v1beta import BetaAnalyticsDataClient\n",[2062,11942,11943],{"class":2064,"line":2377},[2062,11944,11945],{},"    from google.analytics.data_v1beta.types import DateRange, Dimension, Metric, RunReportRequest\n",[2062,11947,11948],{"class":2064,"line":2383},[2062,11949,11950],{},"    \n",[2062,11952,11953],{"class":2064,"line":2389},[2062,11954,11955],{},"    # Setting \n",[2062,11957,11958],{"class":2064,"line":2452},[2062,11959,11960],{},"    #(.env file is located in the same location and contains SERVICE_TOKEN_PATH=[local-path-to-Google-service-token-with-data-access])\n",[2062,11962,11963],{"class":2064,"line":2467},[2062,11964,11965],{},"    load_dotenv()\n",[2062,11967,11968],{"class":2064,"line":2472},[2062,11969,11970],{},"    SERVICE_TOKEN_PATH = os.getenv('SERVICE_TOKEN_PATH')\n",[2062,11972,11973],{"class":2064,"line":2491},[2062,11974,11975],{},"    property_id = '\u003Cset-your-property-ID-here>'\n",[2062,11977,11978],{"class":2064,"line":2519},[2062,11979,11950],{},[2062,11981,11982],{"class":2064,"line":2556},[2062,11983,11984],{},"    def sample_run_report(property_id):\n",[2062,11986,11987],{"class":2064,"line":2577},[2062,11988,11989],{},"        \"\"\"Runs a simple report on a Google Analytics 4 property.\"\"\"\n",[2062,11991,11992],{"class":2064,"line":2657},[2062,11993,11950],{},[2062,11995,11996],{"class":2064,"line":2681},[2062,11997,11998],{},"        client = AlphaAnalyticsDataClient.from_service_account_file(SERVICE_TOKEN_PATH)\n",[2062,12000,12001],{"class":2064,"line":2709},[2062,12002,12003],{},"        request = RunReportRequest(property=f\"properties\u002F{​property_id}​\",\n",[2062,12005,12006],{"class":2064,"line":2714},[2062,12007,12008],{},"                                   dimensions=[Dimension(name='date'), Dimension(name='country'), Dimension(name='city')],\n",[2062,12010,12011],{"class":2064,"line":2743},[2062,12012,12013],{},"                                   metrics=[Metric(name='activeUsers'), Metric(name='sessions')],\n",[2062,12015,12016],{"class":2064,"line":2772},[2062,12017,12018],{},"                                   date_ranges=[DateRange(start_date='2021-01-01', end_date='yesterday')])\n",[2062,12020,12021],{"class":2064,"line":2777},[2062,12022,12023],{},"        response = client.run_report(request)\n",[2062,12025,12026],{"class":2064,"line":2802},[2062,12027,12028],{},"        return response\n",[2062,12030,12031],{"class":2064,"line":2826},[2062,12032,11950],{},[2062,12034,12035],{"class":2064,"line":2834},[2062,12036,12037],{},"    def sample_extract_data(response):\n",[2062,12039,12040],{"class":2064,"line":2840},[2062,12041,12042],{},"        \"\"\"Extracts data from GA 4 Data API response as Pandas Dataframe \"\"\"\n",[2062,12044,12045],{"class":2064,"line":2845},[2062,12046,12047],{},"        data_dict = {}\n",[2062,12049,12050],{"class":2064,"line":2886},[2062,12051,12052],{},"        for row in response.rows:\n",[2062,12054,12055],{"class":2064,"line":2907},[2062,12056,12057],{},"                data_dict_row = []\n",[2062,12059,12060],{"class":2064,"line":2941},[2062,12061,12062],{},"                for i in range(len(row.dimension_values)):\n",[2062,12064,12065],{"class":2064,"line":2962},[2062,12066,12067],{},"                    data_dict_row.append(row.dimension_values[i].value)\n",[2062,12069,12070],{"class":2064,"line":2983},[2062,12071,12072],{},"                for j in range(len(row.metric_values)):\n",[2062,12074,12075],{"class":2064,"line":3016},[2062,12076,12077],{},"                    data_dict_row.append(row.metric_values[j].value)\n",[2062,12079,12080],{"class":2064,"line":3037},[2062,12081,12082],{},"                data_dict[response.rows.index(row)] = data_dict_row\n",[2062,12084,12085],{"class":2064,"line":3058},[2062,12086,11950],{},[2062,12088,12089],{"class":2064,"line":3079},[2062,12090,12091],{},"        columns_list = []\n",[2062,12093,12094],{"class":2064,"line":3119},[2062,12095,12096],{},"        for dim_header in response.dimension_headers:\n",[2062,12098,12099],{"class":2064,"line":3124},[2062,12100,12101],{},"            columns_list.append(dim_header.name)\n",[2062,12103,12104],{"class":2064,"line":3139},[2062,12105,12106],{},"        for met_header in response.metric_headers:\n",[2062,12108,12109],{"class":2064,"line":3157},[2062,12110,12111],{},"            columns_list.append(met_header.name)\n",[2062,12113,12114],{"class":2064,"line":3173},[2062,12115,12116],{},"        return pd.DataFrame.from_dict(data_dict, orient='index', columns = columns_list)\n",[2062,12118,12119],{"class":2064,"line":3189},[2062,12120,11950],{},[2062,12122,12123],{"class":2064,"line":3212},[2062,12124,11950],{},[2062,12126,12127],{"class":2064,"line":3228},[2062,12128,12129],{},"    if __name__ == \"__main__\":\n",[2062,12131,12132],{"class":2064,"line":3244},[2062,12133,12134],{},"        query_response = sample_run_report(property_id)\n",[2062,12136,12137],{"class":2064,"line":3266},[2062,12138,12139],{},"        sample_extract_data(query_response)\n",[16,12141,1643],{"id":1642},[12,12143,12144],{},"The newly published Google Analytics Data API is constructed to query data from Google Analytics 4. In this article, we summarized its similarities and differences to the GA Reporting API v4 for Universal Analytics. The basic parameters and results’ structure are very similar between these approaches but there are some new features introduced (like Quotas report) and there are several steps towards consistency between dimensions and metrics and between different types of queries. Thus, the GA Data API does not seem to be very difficult to transition to and at the same time, it brings the unique experience of working with the new Google Analytics.",[727,12146,12147,12148,12152,12153,12152,12157,12152,12161,12165,12166,12171],{},"\nMore information about the methods is provided in official Google’s documentation on the GA4 API (\n",[37,12149,8127],{"href":12150,"rel":12151},"https:\u002F\u002Fdevelopers.google.com\u002Fanalytics\u002Fdevguides\u002Freporting\u002Fdata\u002Fv1\u002Frest\u002Fv1beta\u002Fproperties\u002FrunReport",[41],"\n, \n",[37,12154,11465],{"href":12155,"rel":12156},"https:\u002F\u002Fdevelopers.google.com\u002Fanalytics\u002Fdevguides\u002Freporting\u002Fdata\u002Fv1\u002Frest\u002Fv1beta\u002Fproperties\u002FrunPivotReport",[41],[37,12158,11088],{"href":12159,"rel":12160},"https:\u002F\u002Fdevelopers.google.com\u002Fanalytics\u002Fdevguides\u002Freporting\u002Fdata\u002Fv1\u002Frest\u002Fv1beta\u002Fproperties\u002FbatchRunReports",[41],[37,12162,11469],{"href":12163,"rel":12164},"https:\u002F\u002Fdevelopers.google.com\u002Fanalytics\u002Fdevguides\u002Freporting\u002Fdata\u002Fv1\u002Frest\u002Fv1beta\u002Fproperties\u002FbatchRunPivotReports",[41],"\n) where you can also run the queries in the API Explorer. For easier use, Google provides a comprehensive \n",[37,12167,12170],{"href":12168,"rel":12169},"https:\u002F\u002Fdevelopers.google.com\u002Fanalytics\u002Fdevguides\u002Freporting\u002Fdata\u002Fv1\u002Fapi-schema",[41],"list","\n of all currently available dimensions and metrics.\n",[209,12173,960],{"link":211,"button":212},[3464,12175,12176],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .s0W1g, html code.shiki .s0W1g{--shiki-default:#BABED8}html pre.shiki code .s9WhI, html code.shiki .s9WhI{--shiki-default:#916B53}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .sbqyR, html code.shiki .sbqyR{--shiki-default:#FF9CAC}",{"title":76,"searchDepth":77,"depth":77,"links":12178},[12179,12183,12189,12190,12191,12192],{"id":8120,"depth":77,"text":8121,"children":12180},[12181,12182],{"id":8136,"depth":389,"text":8139},{"id":8688,"depth":389,"text":8689},{"id":9693,"depth":77,"text":9694,"children":12184},[12185,12186,12187,12188],{"id":9697,"depth":389,"text":9698},{"id":9934,"depth":389,"text":9935},{"id":10476,"depth":389,"text":10477},{"id":11050,"depth":389,"text":11051},{"id":11081,"depth":77,"text":11082},{"id":11453,"depth":77,"text":11454},{"id":11834,"depth":77,"text":11835},{"id":1642,"depth":77,"text":1643},"The new version of Google Analytics with an innovative approach to data structure has been introduced in summer 2019, under the name Google Analytics App + Web. In autumn 2020 Google released it from the beta version and rebranded it as Google Analytics 4. While it is still not recommended to transfer your whole data measurement to the new version as it is being gradually improved, it definitely deserves increased attention as Google is introducing many new features there. The new Google Analytics 4 is based on events and their parameters. As its previous name implies, it combines data from apps and web analytics in one property. Moreover, it serves as a flexible tool for cross-platform analysis. To learn more about Google Analytics 4, follow our blog for an upcoming article in which we will discuss changes and new features of the GA4, extensively.","\u002Fupload\u002Fga4-api-banner.webp",{},"Do you need to migrate from Universal Analytics Reporting API to the new GA4 reporting API v1? A practical guide how to migrate to the new version.","\u002Fen\u002Fblog\u002Fnew-data-api-for-google-analytics-4","2021-03-30T02:12:10.000+00:00",19.75,"20 min read",[12202,4271],"content\u002Fen\u002Fblog\u002Fnotes-on-new-features-of-google-analytics-reporting-api-v4.md",{"title":4262,"description":12193},"en\u002Fblog\u002Fnew-data-api-for-google-analytics-4","Have you tried the new Google Analytics 4 (formerly App + Web) and want to learn more about its Data API? Are you wondering how to query the data measured using the new Google Analytics 4? We tested the Data API features for you and compared them to the currently used API for Universal Analytics.","2021-06-14T01:41:00.000+00:00","jQHyTtsGpkuGi2WT-38RuI0B19oxm1PhCoplxWK5deU",{"id":12209,"title":12210,"author":12211,"body":12212,"category":7,"description":12216,"extension":83,"image":12342,"isToc":85,"langAlt":12343,"meta":12344,"metaDescription":7,"navigation":88,"path":12345,"published":88,"publishedAt":12346,"readingTimeMinutes":12347,"readingTimeText":92,"relatedArticles":7,"seo":12348,"stem":12349,"teaser":12350,"updatedAtCustom":7,"__hash__":12351},"blog_en\u002Fen\u002Fblog\u002Fnew-edpb-tool.md","Quick & Easy Cookie Audits with the EDPB Tool","Lada Kaziměrčíková",{"type":9,"value":12213,"toc":12335},[12214,12217,12220,12227,12231,12234,12238,12241,12244,12247,12250,12253,12256,12259,12273,12277,12280,12283,12286,12290,12293,12296,12299,12302,12305,12308,12311,12314,12317,12320,12323,12326,12329,12332],[12,12215,12216],{},"Are you tired of repeatedly scouring your website to ensure that your data protection policies are fully GDPR-compliant? Cookies, local storage, session storage... All of these need to be checked, analysed in DevTools, and summarized for each individual user scenario. It's a safe bet this tedious process leaves you wishing there was a way to check all these things faster and more effectively, without surrendering the process to a potentially unreliable crawler. Fortunately, your wish has just come true.",[12,12218,12219],{},"The European Data Protection Board (EDPB) introduced a new tool at the beginning of this year, which is designed to help check compliance with GDPR and which has a massive amount of potential in terms of making your work easier. The tool, developed by experts in the field of data privacy protection, allows you to automate and standardise the GDPR compliance control processes on your website. Instead of laboriously simulating each scenario and creating reports manually, you can rely on the tool to quickly generate a detailed summary for you—all in one place and without unwarranted amounts of effort.",[12,12221,12222,12223,1296],{},"The tool can be downloaded ",[37,12224,7090],{"href":12225,"rel":12226},"https:\u002F\u002Fwww.edpb.europa.eu\u002Four-work-tools\u002Four-documents\u002Fsupport-pool-expert-projects\u002Fedpb-website-auditing-tool_en",[41],[16,12228,12230],{"id":12229},"working-with-the-audit-tool","Working with the audit tool",[12,12232,12233],{},"Once the tool has been downloaded, we can easily get to work auditing your website. Let's go through the main features together.",[244,12235,12237],{"id":12236},"creating-an-audit","Creating an audit",[12,12239,12240],{},"The entire auditing process begins in the \"New\" tab. Enter your websites’ URL and create the first scenario.",[278,12242],{"source":12243},"\u002Fupload\u002Fedpb1.png",[12,12245,12246],{},"Fig. 1: Audit tool interface at analysis start",[12,12248,12249],{},"While browsing your website, you can create screenshots using the camera icon in the top right corner. The + button allows you to create as many scenarios as you need, which can then be tested during report creation.",[278,12251],{"source":12252},"\u002Fupload\u002Fedpb2.png",[12,12254,12255],{},"Fig. 2: Audit tool interface during website browsing",[12,12257,12258],{},"On the right, we can see all the processes that help web applications save data and execute individual actions. So what exactly can you check here and what information will you see in the final report?",[327,12260,12261,12264,12267,12270],{},[255,12262,12263],{},"Cookies: text chains saved into the users browser containing the users preferences states, and tracking their behaviour on the website. Limited by expiration.",[255,12265,12266],{},"Local storage: A greater amount of data is stored here compared to cookies. In some cases it's possible to use them instead of cookies. Not limited by expiration.",[255,12268,12269],{},"Requested hosts: addresses of servers with which the website communicates during the user session.",[255,12271,12272],{},"Beacons: pixels used to track user activity throughout the session.",[244,12274,12276],{"id":12275},"classification-databases","Classification databases",[12,12278,12279],{},"In the “Knowledge” tab, you can manage all your databases for future classification. You can import your own database or create one directly in the tool and export it later. To import your own database, you need to provide data in JSON format. Matching cookies between the website and database requires cookie names and domains to be identical.",[278,12281],{"source":12282},"\u002Fupload\u002Fedpb3.png",[12,12284,12285],{},"Fig. 3: Knowledge base section",[244,12287,12289],{"id":12288},"creating-an-output","Creating an output",[12,12291,12292],{},"Once you have executed all the desired scenarios, you can begin visualizing your audit and creating the final report. In the “List” tab, you can find all your websites along with the executed scenarios. You can begin creating a report by selecting a scenario.",[278,12294],{"source":12295},"\u002Fupload\u002Fedpb4.png",[12,12297,12298],{},"Fig. 4: List section with finished analyses",[12,12300,12301],{},"At this point, you can assign flags indicating compliance (or the need for additional data for classification) to individual sections and their contents.",[278,12303],{"source":12304},"\u002Fupload\u002Fedpb5.png",[12,12306,12307],{},"Fig. 5: A section with assigned flags",[12,12309,12310],{},"After all specified scenarios have been tested, you can easily download reports for all of your websites from the previews in the “List” section. Reports can be downloaded as PDFs (or in other formats) and easily shared. The following images illustrate the path to accessing individual reports.",[278,12312],{"source":12313},"\u002Fupload\u002Fedpb6.png",[12,12315,12316],{},"Fig. 6: The “List” section interface containing finished audits",[278,12318],{"source":12319},"\u002Fupload\u002Fedpb7.png",[12,12321,12322],{},"Fig. 7: Analysis interface listing individual scenarios",[278,12324],{"source":12325},"\u002Fupload\u002Fedpb8.png",[12,12327,12328],{},"Fig. 8: Ready-to-share scenario report",[12,12330,12331],{},"Familiarise yourself with this freely available tool, and you will always be one step ahead in terms of GDPR compliance. Whether you need help auditing your website, optimising compliance, all have questions regarding the tool itself, we are available to help. We will gladly assist you in all of your needs from detailed analyses to Providing practical advice all suggesting concrete steps for improving your data protection measures. Contact us, and together we will devise a solution that works best for you.",[209,12333,12334],{"link":211,"button":212},"\nFamiliarise yourself with this free audit tool to stay ahead in GDPR compliance, and contact us for audits, optimisation, or tailored solutions to enhance your users' data protection.\n",{"title":76,"searchDepth":77,"depth":77,"links":12336},[12337],{"id":12229,"depth":77,"text":12230,"children":12338},[12339,12340,12341],{"id":12236,"depth":389,"text":12237},{"id":12275,"depth":389,"text":12276},{"id":12288,"depth":389,"text":12289},"\u002Fupload\u002Fedpbtoolen.png","novy-nastroj-od-edpb",{},"\u002Fen\u002Fblog\u002Fnew-edpb-tool","2024-11-01T12:24:00.000+00:00",3.94,{"title":12210,"description":12216},"en\u002Fblog\u002Fnew-edpb-tool","Effortless Cookie Audit - Verify your website GDPR compliance with EDPB's Audit Tool","iBd5fqZ5o5EAHM-TaPu7HZEjdPly7j5yy60rElGZ1Hg",{"id":12353,"title":12354,"author":7,"body":12355,"category":7,"description":76,"extension":83,"image":14352,"isToc":85,"langAlt":7,"meta":14353,"metaDescription":14354,"navigation":88,"path":14355,"published":88,"publishedAt":222,"readingTimeMinutes":14356,"readingTimeText":7403,"relatedArticles":7,"seo":14357,"stem":14358,"teaser":14354,"updatedAtCustom":7,"__hash__":14359},"blog_en\u002Fen\u002Fblog\u002Fnotes-on-new-features-of-google-analytics-reporting-api-v4.md","Notes on new features of Google Analytics Reporting API v4",{"type":9,"value":12356,"toc":14342},[12357,12363,12365,12371,12374,12377,12390,12394,12397,12417,12420,12424,12431,12488,12705,12709,12719,12722,12732,12735,12738,12743,13102,13106,13116,13119,13122,13341,13665,13669,13687,13760,14302,14306,14313,14320,14322,14325,14336,14339],[5324,12358,12359,12360,5337],{},"\nThis is the latest version of the legacy Google Analytics API. For GA4 API v1 read \n",[37,12361,42],{"href":12362},"\u002Fen\u002Fblog\u002Fnew-data-api-for-google-analytics-4\u002F",[4635,12364],{},[12,12366,12367,12368,1296],{},"The current version of the Google Analytics Reporting API was introduced some time ago offering several new features in comparison to the previous version. While the API v3 is still going to be supported, it might be beneficial to consider using the newer API v4 as it presents several interesting cases. With the API v4, you can use the same structure of queries as before, however, you can benefit from the new features, which will help you ",[113,12369,12370],{},"access your data more efficiently",[12,12372,12373],{},"This summary describes the improvements in more detail – what is new in the v4 API and why it is beneficial. There are 4 main cases plus a few additional possibilities included in the current version of the Reporting API.",[12,12375,12376],{},"Special features we find the most beneficial:",[327,12378,12379,12382,12385,12387],{},[255,12380,12381],{},"Metric expression",[255,12383,12384],{},"Histograms",[255,12386,10477],{},[255,12388,12389],{},"Pivot",[16,12391,12393],{"id":12392},"why-use-google-analytics-reporting-api-in-general","Why use Google Analytics Reporting API in general",[12,12395,12396],{},"The Google Analytics Reporting API is widely used as it is a part of the standard version of Google Analytics. It allows you to",[327,12398,12399,12402,12405,12408,12411],{},[255,12400,12401],{},"Quickly obtain data for further processing and analysis",[255,12403,12404],{},"Reach data by querying from code (using authentication) or some advanced solution (e.g. Roivenue)",[255,12406,12407],{},"Explore data using many ready-made integrations (including the Query Explorer)",[255,12409,12410],{},"Save time by automating loading data and other reporting tasks",[255,12412,12413,12414,2230],{},"Use data in advanced data analytical programs (e.g. ",[37,12415,5714],{"href":5973,"rel":12416},[41],[12,12418,12419],{},"In short, the Google Analytics Reporting APIs are very useful, so let’s have a look at the current version.",[244,12421,12423],{"id":12422},"extended-metric-expression","Extended metric expression",[12,12425,12426,12427,12430],{},"To simplify data manipulation, it is now possible to input expressions of metrics instead of single metrics’ names only. In particular, to compare the Pages per Session ratio across multiple groups of customers or multiple days, it is sufficient to ",[113,12428,12429],{},"write the formula"," for the ratio within the metric expression field and the resulting data directly lets you compare the evolution of the ratio without the need to transform the data further. The expression allows basic operations. While there is a limit on the number of characters within the expression, the most used formulas should fit within. You can choose your name for the output of the expression which further increases the legibility of the output data. This helps to create easily understandable tables with a single query.",[3830,12432,12433],{},[3833,12434,12435,12445],{},[3844,12436,12437],{},[3847,12438,12439,12442],{},[3850,12440,12441],{},"Month of the year",[3850,12443,12444],{},"Pages per Session ratio",[3861,12446,12447,12454,12461,12468,12474,12481],{},[3847,12448,12449,12452],{},[3866,12450,12451],{},"01",[3866,12453,3003],{},[3847,12455,12456,12459],{},[3866,12457,12458],{},"02",[3866,12460,3003],{},[3847,12462,12463,12466],{},[3866,12464,12465],{},"03",[3866,12467,3030],{},[3847,12469,12470,12472],{},[3866,12471,2116],{},[3866,12473,3003],{},[3847,12475,12476,12479],{},[3866,12477,12478],{},"05",[3866,12480,2976],{},[3847,12482,12483,12486],{},[3866,12484,12485],{},"06",[3866,12487,2976],{},[1173,12489,12491],{"className":8189,"code":12490,"language":8191,"meta":76,"style":76},"{\n  \"reportRequests\": [\n    {\n      \"viewId\": \"XXXXXXXXX\",\n      \"dateRanges\": [\n        {\n          \"startDate\": \"2020-01-01\",\n          \"endDate\": \"yesterday\"\n        }\n      ],\n      \"metrics\": [\n        {\n          \"expression\": \"ga:pageViews\u002Fga:sessions\",\n          \"alias\": \"page views sessions ratio\"\n        }\n      ],\n      \"dimensions\": [\n        {\n          \"name\": \"ga:month\"\n        }\n      ]\n    }\n  ]\n}\n",[588,12492,12493,12497,12510,12514,12532,12544,12548,12567,12584,12588,12592,12604,12608,12627,12644,12648,12652,12664,12668,12685,12689,12693,12697,12701],{"__ignoreMap":76},[2062,12494,12495],{"class":2064,"line":2065},[2062,12496,2740],{"class":2072},[2062,12498,12499,12501,12504,12506,12508],{"class":2064,"line":77},[2062,12500,8202],{"class":2072},[2062,12502,12503],{"class":2199},"reportRequests",[2062,12505,2255],{"class":2072},[2062,12507,2113],{"class":2072},[2062,12509,8212],{"class":2072},[2062,12511,12512],{"class":2064,"line":389},[2062,12513,8217],{"class":2072},[2062,12515,12516,12518,12520,12522,12524,12526,12528,12530],{"class":2064,"line":2272},[2062,12517,8222],{"class":2072},[2062,12519,8450],{"class":8225},[2062,12521,2255],{"class":2072},[2062,12523,2113],{"class":2072},[2062,12525,2248],{"class":2072},[2062,12527,8459],{"class":2251},[2062,12529,2255],{"class":2072},[2062,12531,3154],{"class":2072},[2062,12533,12534,12536,12538,12540,12542],{"class":2064,"line":2315},[2062,12535,8222],{"class":2072},[2062,12537,8205],{"class":8225},[2062,12539,2255],{"class":2072},[2062,12541,2113],{"class":2072},[2062,12543,8212],{"class":2072},[2062,12545,12546],{"class":2064,"line":2377},[2062,12547,8842],{"class":2072},[2062,12549,12550,12552,12554,12556,12558,12560,12563,12565],{"class":2064,"line":2383},[2062,12551,8847],{"class":2072},[2062,12553,8226],{"class":2086},[2062,12555,2255],{"class":2072},[2062,12557,2113],{"class":2072},[2062,12559,2248],{"class":2072},[2062,12561,12562],{"class":2251},"2020-01-01",[2062,12564,2255],{"class":2072},[2062,12566,3154],{"class":2072},[2062,12568,12569,12571,12573,12575,12577,12579,12582],{"class":2064,"line":2389},[2062,12570,8847],{"class":2072},[2062,12572,8246],{"class":2086},[2062,12574,2255],{"class":2072},[2062,12576,2113],{"class":2072},[2062,12578,2248],{"class":2072},[2062,12580,12581],{"class":2251},"yesterday",[2062,12583,8258],{"class":2072},[2062,12585,12586],{"class":2064,"line":2452},[2062,12587,3358],{"class":2072},[2062,12589,12590],{"class":2064,"line":2467},[2062,12591,8870],{"class":2072},[2062,12593,12594,12596,12598,12600,12602],{"class":2064,"line":2472},[2062,12595,8222],{"class":2072},[2062,12597,8274],{"class":8225},[2062,12599,2255],{"class":2072},[2062,12601,2113],{"class":2072},[2062,12603,8212],{"class":2072},[2062,12605,12606],{"class":2064,"line":2491},[2062,12607,8842],{"class":2072},[2062,12609,12610,12612,12614,12616,12618,12620,12623,12625],{"class":2064,"line":2519},[2062,12611,8847],{"class":2072},[2062,12613,8160],{"class":2086},[2062,12615,2255],{"class":2072},[2062,12617,2113],{"class":2072},[2062,12619,2248],{"class":2072},[2062,12621,12622],{"class":2251},"ga:pageViews\u002Fga:sessions",[2062,12624,2255],{"class":2072},[2062,12626,3154],{"class":2072},[2062,12628,12629,12631,12633,12635,12637,12639,12642],{"class":2064,"line":2556},[2062,12630,8847],{"class":2072},[2062,12632,8563],{"class":2086},[2062,12634,2255],{"class":2072},[2062,12636,2113],{"class":2072},[2062,12638,2248],{"class":2072},[2062,12640,12641],{"class":2251},"page views sessions ratio",[2062,12643,8258],{"class":2072},[2062,12645,12646],{"class":2064,"line":2577},[2062,12647,3358],{"class":2072},[2062,12649,12650],{"class":2064,"line":2657},[2062,12651,8870],{"class":2072},[2062,12653,12654,12656,12658,12660,12662],{"class":2064,"line":2681},[2062,12655,8222],{"class":2072},[2062,12657,8316],{"class":8225},[2062,12659,2255],{"class":2072},[2062,12661,2113],{"class":2072},[2062,12663,8212],{"class":2072},[2062,12665,12666],{"class":2064,"line":2709},[2062,12667,8842],{"class":2072},[2062,12669,12670,12672,12674,12676,12678,12680,12683],{"class":2064,"line":2714},[2062,12671,8847],{"class":2072},[2062,12673,2227],{"class":2086},[2062,12675,2255],{"class":2072},[2062,12677,2113],{"class":2072},[2062,12679,2248],{"class":2072},[2062,12681,12682],{"class":2251},"ga:month",[2062,12684,8258],{"class":2072},[2062,12686,12687],{"class":2064,"line":2743},[2062,12688,3358],{"class":2072},[2062,12690,12691],{"class":2064,"line":2772},[2062,12692,8913],{"class":2072},[2062,12694,12695],{"class":2064,"line":2777},[2062,12696,2380],{"class":2072},[2062,12698,12699],{"class":2064,"line":2802},[2062,12700,8425],{"class":2072},[2062,12702,12703],{"class":2064,"line":2826},[2062,12704,3425],{"class":2072},[244,12706,12708],{"id":12707},"histogram","Histogram",[12,12710,12711,12712,12715,12716,12718],{},"Another feature extends the use of dimensions as it allows a numeric dimension to be converted into groups, so-called buckets, by specified breaks. The breaks work as thresholds separating the values into the buckets. There are always ",[422,12713,12714],{},"n+1"," buckets for ",[422,12717,6640],{}," thresholds - for two break points there will be three buckets with the following structure of names “\u003C[break1]”, “[break1]”, “[break2]+”.",[12,12720,12721],{},"The easiest application of this feature lies in the aggregation of time variables, even though you’ll find further uses based on your specific case. The histogram allows you to construct quarters from months, combine several, even irregular amounts of days or weeks together, or compare several phases within a day. The last case is shown in the following example.",[12,12723,12724,12725,3837,12728,12731],{},"The histogram request results in an ",[113,12726,12727],{},"aggregated",[113,12729,12730],{},"table of all selected metrics grouped by the created groups"," (buckets). The output does not change the structure of the data, so you can use the data in further programs and applications without the need to form any additional schema or adjust any data manipulations. You can select multiple metrics to compare the evolution of several values in parallel, as in the following example.",[12,12733,12734],{},"The output from this request can be transformed into a histogram using the buckets to form the columns with the values of metrics as their height. This provides an easy view of the evolution of your data.",[727,12736,12737],{},"\nWhen you want to form a graph using several metrics, you need to be careful if the metrics have diametrically different values, as the graph can be not as informative for the smaller metric.\n",[12,12739,12740],{},[148,12741],{"alt":76,"src":12742},"\u002Fupload\u002Fga-api-v4-article-users-and-sessions-chart-1.png",[1173,12744,12746],{"className":8189,"code":12745,"language":8191,"meta":76,"style":76},"{\n  \"reportRequests\": [\n    {\n      \"viewId\": \"XXXXXXXXX\",\n      \"dateRanges\": [\n        {\n          \"startDate\": \"2020-01-01\",\n          \"endDate\": \"yesterday\"\n        }\n      ],\n      \"metrics\": [\n        {\n          \"expression\": \"ga:users\"\n        },\n        {\n          \"expression\": \"ga:sessions\"\n        }\n      ],\n      \"dimensions\": [\n        {\n          \"name\": \"ga:month\",\n          \"histogramBuckets\": [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"]\n        }\n      ],\n      \"orderBys\": [\n        {\n          \"fieldName\": \"ga:month\",\n          \"orderType\": \"HISTOGRAM_BUCKET\",\n          \"sortOrder\": \"ASCENDING\"\n        }\n      ]\n    }\n  ]\n}\n",[588,12747,12748,12752,12764,12768,12786,12798,12802,12820,12836,12840,12844,12856,12860,12876,12880,12884,12900,12904,12908,12920,12924,12942,13003,13007,13011,13023,13027,13045,13065,13082,13086,13090,13094,13098],{"__ignoreMap":76},[2062,12749,12750],{"class":2064,"line":2065},[2062,12751,2740],{"class":2072},[2062,12753,12754,12756,12758,12760,12762],{"class":2064,"line":77},[2062,12755,8202],{"class":2072},[2062,12757,12503],{"class":2199},[2062,12759,2255],{"class":2072},[2062,12761,2113],{"class":2072},[2062,12763,8212],{"class":2072},[2062,12765,12766],{"class":2064,"line":389},[2062,12767,8217],{"class":2072},[2062,12769,12770,12772,12774,12776,12778,12780,12782,12784],{"class":2064,"line":2272},[2062,12771,8222],{"class":2072},[2062,12773,8450],{"class":8225},[2062,12775,2255],{"class":2072},[2062,12777,2113],{"class":2072},[2062,12779,2248],{"class":2072},[2062,12781,8459],{"class":2251},[2062,12783,2255],{"class":2072},[2062,12785,3154],{"class":2072},[2062,12787,12788,12790,12792,12794,12796],{"class":2064,"line":2315},[2062,12789,8222],{"class":2072},[2062,12791,8205],{"class":8225},[2062,12793,2255],{"class":2072},[2062,12795,2113],{"class":2072},[2062,12797,8212],{"class":2072},[2062,12799,12800],{"class":2064,"line":2377},[2062,12801,8842],{"class":2072},[2062,12803,12804,12806,12808,12810,12812,12814,12816,12818],{"class":2064,"line":2383},[2062,12805,8847],{"class":2072},[2062,12807,8226],{"class":2086},[2062,12809,2255],{"class":2072},[2062,12811,2113],{"class":2072},[2062,12813,2248],{"class":2072},[2062,12815,12562],{"class":2251},[2062,12817,2255],{"class":2072},[2062,12819,3154],{"class":2072},[2062,12821,12822,12824,12826,12828,12830,12832,12834],{"class":2064,"line":2389},[2062,12823,8847],{"class":2072},[2062,12825,8246],{"class":2086},[2062,12827,2255],{"class":2072},[2062,12829,2113],{"class":2072},[2062,12831,2248],{"class":2072},[2062,12833,12581],{"class":2251},[2062,12835,8258],{"class":2072},[2062,12837,12838],{"class":2064,"line":2452},[2062,12839,3358],{"class":2072},[2062,12841,12842],{"class":2064,"line":2467},[2062,12843,8870],{"class":2072},[2062,12845,12846,12848,12850,12852,12854],{"class":2064,"line":2472},[2062,12847,8222],{"class":2072},[2062,12849,8274],{"class":8225},[2062,12851,2255],{"class":2072},[2062,12853,2113],{"class":2072},[2062,12855,8212],{"class":2072},[2062,12857,12858],{"class":2064,"line":2491},[2062,12859,8842],{"class":2072},[2062,12861,12862,12864,12866,12868,12870,12872,12874],{"class":2064,"line":2519},[2062,12863,8847],{"class":2072},[2062,12865,8160],{"class":2086},[2062,12867,2255],{"class":2072},[2062,12869,2113],{"class":2072},[2062,12871,2248],{"class":2072},[2062,12873,8671],{"class":2251},[2062,12875,8258],{"class":2072},[2062,12877,12878],{"class":2064,"line":2556},[2062,12879,11332],{"class":2072},[2062,12881,12882],{"class":2064,"line":2577},[2062,12883,8842],{"class":2072},[2062,12885,12886,12888,12890,12892,12894,12896,12898],{"class":2064,"line":2657},[2062,12887,8847],{"class":2072},[2062,12889,8160],{"class":2086},[2062,12891,2255],{"class":2072},[2062,12893,2113],{"class":2072},[2062,12895,2248],{"class":2072},[2062,12897,8552],{"class":2251},[2062,12899,8258],{"class":2072},[2062,12901,12902],{"class":2064,"line":2681},[2062,12903,3358],{"class":2072},[2062,12905,12906],{"class":2064,"line":2709},[2062,12907,8870],{"class":2072},[2062,12909,12910,12912,12914,12916,12918],{"class":2064,"line":2714},[2062,12911,8222],{"class":2072},[2062,12913,8316],{"class":8225},[2062,12915,2255],{"class":2072},[2062,12917,2113],{"class":2072},[2062,12919,8212],{"class":2072},[2062,12921,12922],{"class":2064,"line":2743},[2062,12923,8842],{"class":2072},[2062,12925,12926,12928,12930,12932,12934,12936,12938,12940],{"class":2064,"line":2772},[2062,12927,8847],{"class":2072},[2062,12929,2227],{"class":2086},[2062,12931,2255],{"class":2072},[2062,12933,2113],{"class":2072},[2062,12935,2248],{"class":2072},[2062,12937,12682],{"class":2251},[2062,12939,2255],{"class":2072},[2062,12941,3154],{"class":2072},[2062,12943,12944,12946,12949,12951,12953,12955,12957,12959,12961,12963,12965,12967,12969,12971,12973,12975,12977,12979,12981,12983,12985,12987,12989,12991,12993,12995,12997,12999,13001],{"class":2064,"line":2777},[2062,12945,8847],{"class":2072},[2062,12947,12948],{"class":2086},"histogramBuckets",[2062,12950,2255],{"class":2072},[2062,12952,2113],{"class":2072},[2062,12954,9216],{"class":2072},[2062,12956,2255],{"class":2072},[2062,12958,2900],{"class":2251},[2062,12960,2255],{"class":2072},[2062,12962,2597],{"class":2072},[2062,12964,2248],{"class":2072},[2062,12966,2570],{"class":2251},[2062,12968,2255],{"class":2072},[2062,12970,2597],{"class":2072},[2062,12972,2248],{"class":2072},[2062,12974,2955],{"class":2251},[2062,12976,2255],{"class":2072},[2062,12978,2597],{"class":2072},[2062,12980,2248],{"class":2072},[2062,12982,2976],{"class":2251},[2062,12984,2255],{"class":2072},[2062,12986,2597],{"class":2072},[2062,12988,2248],{"class":2072},[2062,12990,3003],{"class":2251},[2062,12992,2255],{"class":2072},[2062,12994,2597],{"class":2072},[2062,12996,2248],{"class":2072},[2062,12998,3030],{"class":2251},[2062,13000,2255],{"class":2072},[2062,13002,9387],{"class":2072},[2062,13004,13005],{"class":2064,"line":2802},[2062,13006,3358],{"class":2072},[2062,13008,13009],{"class":2064,"line":2826},[2062,13010,8870],{"class":2072},[2062,13012,13013,13015,13017,13019,13021],{"class":2064,"line":2834},[2062,13014,8222],{"class":2072},[2062,13016,8170],{"class":8225},[2062,13018,2255],{"class":2072},[2062,13020,2113],{"class":2072},[2062,13022,8212],{"class":2072},[2062,13024,13025],{"class":2064,"line":2840},[2062,13026,8842],{"class":2072},[2062,13028,13029,13031,13033,13035,13037,13039,13041,13043],{"class":2064,"line":2845},[2062,13030,8847],{"class":2072},[2062,13032,8662],{"class":2086},[2062,13034,2255],{"class":2072},[2062,13036,2113],{"class":2072},[2062,13038,2248],{"class":2072},[2062,13040,12682],{"class":2251},[2062,13042,2255],{"class":2072},[2062,13044,3154],{"class":2072},[2062,13046,13047,13049,13052,13054,13056,13058,13061,13063],{"class":2064,"line":2886},[2062,13048,8847],{"class":2072},[2062,13050,13051],{"class":2086},"orderType",[2062,13053,2255],{"class":2072},[2062,13055,2113],{"class":2072},[2062,13057,2248],{"class":2072},[2062,13059,13060],{"class":2251},"HISTOGRAM_BUCKET",[2062,13062,2255],{"class":2072},[2062,13064,3154],{"class":2072},[2062,13066,13067,13069,13071,13073,13075,13077,13080],{"class":2064,"line":2907},[2062,13068,8847],{"class":2072},[2062,13070,8642],{"class":2086},[2062,13072,2255],{"class":2072},[2062,13074,2113],{"class":2072},[2062,13076,2248],{"class":2072},[2062,13078,13079],{"class":2251},"ASCENDING",[2062,13081,8258],{"class":2072},[2062,13083,13084],{"class":2064,"line":2941},[2062,13085,3358],{"class":2072},[2062,13087,13088],{"class":2064,"line":2962},[2062,13089,8913],{"class":2072},[2062,13091,13092],{"class":2064,"line":2983},[2062,13093,2380],{"class":2072},[2062,13095,13096],{"class":2064,"line":3016},[2062,13097,8425],{"class":2072},[2062,13099,13100],{"class":2064,"line":3037},[2062,13101,3425],{"class":2072},[244,13103,13105],{"id":13104},"compare-dimensions-with-pivot","Compare dimensions with pivot",[12,13107,13108,13109,3837,13112,13115],{},"Pivot tables help to separate the values of metrics more clearly by two selected dimensions. While it is possible to have an output with multiple dimensions even without the pivot feature (in the so-called long format with a row for each combination of dimensions), the pivot table allows a ",[113,13110,13111],{},"better comparison",[113,13113,13114],{},"of the values within both dimensions",". With the pivot table, you can check how the values change when keeping one of the dimensions the same and changing the other by following either the given rows or columns.",[12,13117,13118],{},"The resulting data have a different structure than the output of a simple query because the pivot table forms an additional object in the data rows. Therefore, to incorporate it into further transformations, the schema and the calculations need to be adjusted.",[12,13120,13121],{},"As an example, we provide an overview of sessions and users by 4 hostnames where the count of users is separated into months between months.",[3830,13123,13124],{},[3833,13125,13126,13148],{},[3844,13127,13128],{},[3847,13129,13130,13132,13134,13136,13138,13140,13142,13144,13146],{},[3850,13131,3837],{},[3850,13133,3837],{},[3850,13135,3837],{},[3850,13137,12451],{},[3850,13139,12458],{},[3850,13141,12465],{},[3850,13143,2116],{},[3850,13145,12478],{},[3850,13147,12485],{},[3861,13149,13150,13188,13219,13250,13281,13310],{},[3847,13151,13152,13154,13159,13164,13168,13172,13176,13180,13184],{},[3866,13153,3837],{},[3866,13155,13156],{},[113,13157,13158],{},"Users",[3866,13160,13161],{},[113,13162,13163],{},"Sessions",[3866,13165,13166],{},[113,13167,13158],{},[3866,13169,13170],{},[113,13171,13158],{},[3866,13173,13174],{},[113,13175,13158],{},[3866,13177,13178],{},[113,13179,13158],{},[3866,13181,13182],{},[113,13183,13158],{},[3866,13185,13186],{},[113,13187,13158],{},[3847,13189,13190,13195,13198,13201,13204,13207,13210,13213,13216],{},[3866,13191,13192],{},[113,13193,13194],{},"hostname 1",[3866,13196,13197],{},"776 000",[3866,13199,13200],{},"1 940 000",[3866,13202,13203],{},"121 000",[3866,13205,13206],{},"118 000",[3866,13208,13209],{},"135 000",[3866,13211,13212],{},"132 000",[3866,13214,13215],{},"142 000",[3866,13217,13218],{},"128 000",[3847,13220,13221,13226,13229,13232,13235,13238,13241,13244,13247],{},[3866,13222,13223],{},[113,13224,13225],{},"hostname 2",[3866,13227,13228],{},"605 000",[3866,13230,13231],{},"1 512 500",[3866,13233,13234],{},"89 000",[3866,13236,13237],{},"91 000",[3866,13239,13240],{},"102 000",[3866,13242,13243],{},"104 000",[3866,13245,13246],{},"112 000",[3866,13248,13249],{},"107 000",[3847,13251,13252,13257,13260,13263,13266,13269,13272,13275,13278],{},[3866,13253,13254],{},[113,13255,13256],{},"hostname 3",[3866,13258,13259],{},"11 500",[3866,13261,13262],{},"28 750",[3866,13264,13265],{},"1 200",[3866,13267,13268],{},"1 800",[3866,13270,13271],{},"1 000",[3866,13273,13274],{},"1 400",[3866,13276,13277],{},"2 100",[3866,13279,13280],{},"4 000",[3847,13282,13283,13288,13291,13294,13297,13300,13302,13305,13308],{},[3866,13284,13285],{},[113,13286,13287],{},"hostname 4",[3866,13289,13290],{},"8 500",[3866,13292,13293],{},"21 250",[3866,13295,13296],{},"1 500",[3866,13298,13299],{},"900",[3866,13301,13265],{},[3866,13303,13304],{},"1 100",[3866,13306,13307],{},"1 700",[3866,13309,13277],{},[3847,13311,13312,13317,13320,13323,13326,13329,13332,13335,13338],{},[3866,13313,13314],{},[113,13315,13316],{},"TOTALS",[3866,13318,13319],{},"1 401 000",[3866,13321,13322],{},"3 502 500",[3866,13324,13325],{},"212 700",[3866,13327,13328],{},"211 700",[3866,13330,13331],{},"239 200",[3866,13333,13334],{},"238 500",[3866,13336,13337],{},"257 800",[3866,13339,13340],{},"241 100",[1173,13342,13344],{"className":8189,"code":13343,"language":8191,"meta":76,"style":76},"{\n  \"reportRequests\": [\n    {\n      \"viewId\": \"XXXXXXXXX\",\n      \"dateRanges\": [\n        {\n          \"startDate\": \"2020-01-01\",\n          \"endDate\": \"yesterday\"\n        }\n      ],\n      \"metrics\": [\n        {\n          \"expression\": \"ga:users\"\n        },\n        {\n          \"expression\": \"ga:sessions\"\n        }\n      ],\n      \"dimensions\": [\n        {\n          \"name\": \"ga:hostname\"\n        }\n      ],\n      \"pivots\": [\n        {\n          \"dimensions\": [\n            {\n              \"name\": \"ga:month\"\n            }\n          ],\n          \"metrics\": [\n            {\n              \"expression\": \"ga:users\"\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n",[588,13345,13346,13350,13362,13366,13384,13396,13400,13418,13434,13438,13442,13454,13458,13474,13478,13482,13498,13502,13506,13518,13522,13539,13543,13547,13559,13563,13575,13579,13595,13599,13604,13616,13620,13636,13640,13645,13649,13653,13657,13661],{"__ignoreMap":76},[2062,13347,13348],{"class":2064,"line":2065},[2062,13349,2740],{"class":2072},[2062,13351,13352,13354,13356,13358,13360],{"class":2064,"line":77},[2062,13353,8202],{"class":2072},[2062,13355,12503],{"class":2199},[2062,13357,2255],{"class":2072},[2062,13359,2113],{"class":2072},[2062,13361,8212],{"class":2072},[2062,13363,13364],{"class":2064,"line":389},[2062,13365,8217],{"class":2072},[2062,13367,13368,13370,13372,13374,13376,13378,13380,13382],{"class":2064,"line":2272},[2062,13369,8222],{"class":2072},[2062,13371,8450],{"class":8225},[2062,13373,2255],{"class":2072},[2062,13375,2113],{"class":2072},[2062,13377,2248],{"class":2072},[2062,13379,8459],{"class":2251},[2062,13381,2255],{"class":2072},[2062,13383,3154],{"class":2072},[2062,13385,13386,13388,13390,13392,13394],{"class":2064,"line":2315},[2062,13387,8222],{"class":2072},[2062,13389,8205],{"class":8225},[2062,13391,2255],{"class":2072},[2062,13393,2113],{"class":2072},[2062,13395,8212],{"class":2072},[2062,13397,13398],{"class":2064,"line":2377},[2062,13399,8842],{"class":2072},[2062,13401,13402,13404,13406,13408,13410,13412,13414,13416],{"class":2064,"line":2383},[2062,13403,8847],{"class":2072},[2062,13405,8226],{"class":2086},[2062,13407,2255],{"class":2072},[2062,13409,2113],{"class":2072},[2062,13411,2248],{"class":2072},[2062,13413,12562],{"class":2251},[2062,13415,2255],{"class":2072},[2062,13417,3154],{"class":2072},[2062,13419,13420,13422,13424,13426,13428,13430,13432],{"class":2064,"line":2389},[2062,13421,8847],{"class":2072},[2062,13423,8246],{"class":2086},[2062,13425,2255],{"class":2072},[2062,13427,2113],{"class":2072},[2062,13429,2248],{"class":2072},[2062,13431,12581],{"class":2251},[2062,13433,8258],{"class":2072},[2062,13435,13436],{"class":2064,"line":2452},[2062,13437,3358],{"class":2072},[2062,13439,13440],{"class":2064,"line":2467},[2062,13441,8870],{"class":2072},[2062,13443,13444,13446,13448,13450,13452],{"class":2064,"line":2472},[2062,13445,8222],{"class":2072},[2062,13447,8274],{"class":8225},[2062,13449,2255],{"class":2072},[2062,13451,2113],{"class":2072},[2062,13453,8212],{"class":2072},[2062,13455,13456],{"class":2064,"line":2491},[2062,13457,8842],{"class":2072},[2062,13459,13460,13462,13464,13466,13468,13470,13472],{"class":2064,"line":2519},[2062,13461,8847],{"class":2072},[2062,13463,8160],{"class":2086},[2062,13465,2255],{"class":2072},[2062,13467,2113],{"class":2072},[2062,13469,2248],{"class":2072},[2062,13471,8671],{"class":2251},[2062,13473,8258],{"class":2072},[2062,13475,13476],{"class":2064,"line":2556},[2062,13477,11332],{"class":2072},[2062,13479,13480],{"class":2064,"line":2577},[2062,13481,8842],{"class":2072},[2062,13483,13484,13486,13488,13490,13492,13494,13496],{"class":2064,"line":2657},[2062,13485,8847],{"class":2072},[2062,13487,8160],{"class":2086},[2062,13489,2255],{"class":2072},[2062,13491,2113],{"class":2072},[2062,13493,2248],{"class":2072},[2062,13495,8552],{"class":2251},[2062,13497,8258],{"class":2072},[2062,13499,13500],{"class":2064,"line":2681},[2062,13501,3358],{"class":2072},[2062,13503,13504],{"class":2064,"line":2709},[2062,13505,8870],{"class":2072},[2062,13507,13508,13510,13512,13514,13516],{"class":2064,"line":2714},[2062,13509,8222],{"class":2072},[2062,13511,8316],{"class":8225},[2062,13513,2255],{"class":2072},[2062,13515,2113],{"class":2072},[2062,13517,8212],{"class":2072},[2062,13519,13520],{"class":2064,"line":2743},[2062,13521,8842],{"class":2072},[2062,13523,13524,13526,13528,13530,13532,13534,13537],{"class":2064,"line":2772},[2062,13525,8847],{"class":2072},[2062,13527,2227],{"class":2086},[2062,13529,2255],{"class":2072},[2062,13531,2113],{"class":2072},[2062,13533,2248],{"class":2072},[2062,13535,13536],{"class":2251},"ga:hostname",[2062,13538,8258],{"class":2072},[2062,13540,13541],{"class":2064,"line":2777},[2062,13542,3358],{"class":2072},[2062,13544,13545],{"class":2064,"line":2802},[2062,13546,8870],{"class":2072},[2062,13548,13549,13551,13553,13555,13557],{"class":2064,"line":2826},[2062,13550,8222],{"class":2072},[2062,13552,11486],{"class":8225},[2062,13554,2255],{"class":2072},[2062,13556,2113],{"class":2072},[2062,13558,8212],{"class":2072},[2062,13560,13561],{"class":2064,"line":2834},[2062,13562,8842],{"class":2072},[2062,13564,13565,13567,13569,13571,13573],{"class":2064,"line":2840},[2062,13566,8847],{"class":2072},[2062,13568,8316],{"class":2086},[2062,13570,2255],{"class":2072},[2062,13572,2113],{"class":2072},[2062,13574,8212],{"class":2072},[2062,13576,13577],{"class":2064,"line":2845},[2062,13578,10530],{"class":2072},[2062,13580,13581,13583,13585,13587,13589,13591,13593],{"class":2064,"line":2886},[2062,13582,10057],{"class":2072},[2062,13584,2227],{"class":2289},[2062,13586,2255],{"class":2072},[2062,13588,2113],{"class":2072},[2062,13590,2248],{"class":2072},[2062,13592,12682],{"class":2251},[2062,13594,8258],{"class":2072},[2062,13596,13597],{"class":2064,"line":2907},[2062,13598,2837],{"class":2072},[2062,13600,13601],{"class":2064,"line":2941},[2062,13602,13603],{"class":2072},"          ],\n",[2062,13605,13606,13608,13610,13612,13614],{"class":2064,"line":2962},[2062,13607,8847],{"class":2072},[2062,13609,8274],{"class":2086},[2062,13611,2255],{"class":2072},[2062,13613,2113],{"class":2072},[2062,13615,8212],{"class":2072},[2062,13617,13618],{"class":2064,"line":2983},[2062,13619,10530],{"class":2072},[2062,13621,13622,13624,13626,13628,13630,13632,13634],{"class":2064,"line":3016},[2062,13623,10057],{"class":2072},[2062,13625,8160],{"class":2289},[2062,13627,2255],{"class":2072},[2062,13629,2113],{"class":2072},[2062,13631,2248],{"class":2072},[2062,13633,8671],{"class":2251},[2062,13635,8258],{"class":2072},[2062,13637,13638],{"class":2064,"line":3037},[2062,13639,2837],{"class":2072},[2062,13641,13642],{"class":2064,"line":3058},[2062,13643,13644],{"class":2072},"          ]\n",[2062,13646,13647],{"class":2064,"line":3079},[2062,13648,3358],{"class":2072},[2062,13650,13651],{"class":2064,"line":3119},[2062,13652,8913],{"class":2072},[2062,13654,13655],{"class":2064,"line":3124},[2062,13656,2380],{"class":2072},[2062,13658,13659],{"class":2064,"line":3139},[2062,13660,8425],{"class":2072},[2062,13662,13663],{"class":2064,"line":3157},[2062,13664,3425],{"class":2072},[244,13666,13668],{"id":13667},"cohorts-to-track-behavioral-time-evolution","Cohorts to track behavioral time evolution",[12,13670,13671,13672,13675,13676,13679,13680,13683,13684],{},"A fourth specific feature of the GA v4 API requests is the introduction of the cohorts and ",[113,13673,13674],{},"lifetime value reports",". While at the moment it only supports the acquisition date (date of their first visit) to separate the cohorts, it already provides meaningful insight by showing ",[113,13677,13678],{},"how users"," from the same day, week, or month ",[113,13681,13682],{},"performed in a selected aspect in comparison to other time cohorts"," during the selected period. You can learn about the behavior in terms of users, sessions, page views, goal completions, and similar cohort-specific metrics. The earlier cohorts are observed for longer, providing the data for more periods. In particular, when observing 3 monthly cohorts for 4 months, there are 4 periods of data for the earliest cohort and 2 periods for the latest. This allows you to compare how all the cohorts are behaving in the month of acquisition as well as in the month after the acquisition. Moreover, you can ",[113,13685,13686],{},"analyze how one cohort evolves over several months.",[3830,13688,13689],{},[3833,13690,13691,13710],{},[3844,13692,13693],{},[3847,13694,13695,13698,13701,13704,13707],{},[3850,13696,13697],{},"Cohort",[3850,13699,13700],{},"Month 0",[3850,13702,13703],{},"Month 1",[3850,13705,13706],{},"Month 2",[3850,13708,13709],{},"Month 3",[3861,13711,13712,13729,13745],{},[3847,13713,13714,13717,13720,13723,13726],{},[3866,13715,13716],{},"2020-03",[3866,13718,13719],{},"165 000",[3866,13721,13722],{},"25 000",[3866,13724,13725],{},"8 400",[3866,13727,13728],{},"4 200",[3847,13730,13731,13734,13737,13740,13743],{},[3866,13732,13733],{},"2020-04",[3866,13735,13736],{},"174 000",[3866,13738,13739],{},"28 000",[3866,13741,13742],{},"9 200",[3866,13744,3103],{},[3847,13746,13747,13750,13753,13756,13758],{},[3866,13748,13749],{},"2020-05",[3866,13751,13752],{},"189 000",[3866,13754,13755],{},"32 000",[3866,13757,3103],{},[3866,13759,3103],{},[1173,13761,13763],{"className":8189,"code":13762,"language":8191,"meta":76,"style":76},"{\n  \"reportRequests\": [\n    {\n      \"viewId\": \"XXXXXXXXX\",\n      \"includeEmptyRows\": true,\n      \"metrics\": [\n        {\n          \"expression\": \"ga:cohortActiveUsers\"\n        }\n      ],\n      \"dimensions\": [\n        {\n          \"name\": \"ga:cohort\"\n        },\n        {\n          \"name\": \"ga:cohortNthMonth\"\n        }\n      ],\n      \"orderBys\": [\n        {\n          \"fieldName\": \"ga:cohort\"\n        }\n      ],\n      \"cohortGroup\": {\n        \"cohorts\": [\n          {\n            \"type\": \"FIRST_VISIT_DATE\",\n            \"name\": \"2020-05-01 to 2020-05-31\",\n            \"dateRange\": {\n              \"startDate\": \"2020-05-01\",\n              \"endDate\": \"2020-05-31\"\n            }\n          },\n          {\n            \"type\": \"FIRST_VISIT_DATE\",\n            \"name\": \"2020-04-01 to 2020-04-30\",\n            \"dateRange\": {\n              \"startDate\": \"2020-04-01\",\n              \"endDate\": \"2020-04-30\"\n            }\n          },\n          {\n            \"type\": \"FIRST_VISIT_DATE\",\n            \"name\": \"2020-03-01 to 2020-03-31\",\n            \"dateRange\": {\n              \"startDate\": \"2020-03-01\",\n              \"endDate\": \"2020-03-31\"\n            }\n          }\n        ]\n      }\n    }\n  ]\n}\n",[588,13764,13765,13769,13781,13785,13803,13817,13829,13833,13850,13854,13858,13870,13874,13891,13895,13899,13916,13920,13924,13936,13940,13956,13960,13964,13977,13989,13993,14012,14031,14043,14062,14079,14083,14088,14092,14110,14129,14141,14160,14177,14181,14185,14189,14207,14226,14238,14257,14274,14278,14282,14286,14290,14294,14298],{"__ignoreMap":76},[2062,13766,13767],{"class":2064,"line":2065},[2062,13768,2740],{"class":2072},[2062,13770,13771,13773,13775,13777,13779],{"class":2064,"line":77},[2062,13772,8202],{"class":2072},[2062,13774,12503],{"class":2199},[2062,13776,2255],{"class":2072},[2062,13778,2113],{"class":2072},[2062,13780,8212],{"class":2072},[2062,13782,13783],{"class":2064,"line":389},[2062,13784,8217],{"class":2072},[2062,13786,13787,13789,13791,13793,13795,13797,13799,13801],{"class":2064,"line":2272},[2062,13788,8222],{"class":2072},[2062,13790,8450],{"class":8225},[2062,13792,2255],{"class":2072},[2062,13794,2113],{"class":2072},[2062,13796,2248],{"class":2072},[2062,13798,8459],{"class":2251},[2062,13800,2255],{"class":2072},[2062,13802,3154],{"class":2072},[2062,13804,13805,13807,13810,13812,13814],{"class":2064,"line":2315},[2062,13806,8222],{"class":2072},[2062,13808,13809],{"class":8225},"includeEmptyRows",[2062,13811,2255],{"class":2072},[2062,13813,2113],{"class":2072},[2062,13815,13816],{"class":2072}," true,\n",[2062,13818,13819,13821,13823,13825,13827],{"class":2064,"line":2377},[2062,13820,8222],{"class":2072},[2062,13822,8274],{"class":8225},[2062,13824,2255],{"class":2072},[2062,13826,2113],{"class":2072},[2062,13828,8212],{"class":2072},[2062,13830,13831],{"class":2064,"line":2383},[2062,13832,8842],{"class":2072},[2062,13834,13835,13837,13839,13841,13843,13845,13848],{"class":2064,"line":2389},[2062,13836,8847],{"class":2072},[2062,13838,8160],{"class":2086},[2062,13840,2255],{"class":2072},[2062,13842,2113],{"class":2072},[2062,13844,2248],{"class":2072},[2062,13846,13847],{"class":2251},"ga:cohortActiveUsers",[2062,13849,8258],{"class":2072},[2062,13851,13852],{"class":2064,"line":2452},[2062,13853,3358],{"class":2072},[2062,13855,13856],{"class":2064,"line":2467},[2062,13857,8870],{"class":2072},[2062,13859,13860,13862,13864,13866,13868],{"class":2064,"line":2472},[2062,13861,8222],{"class":2072},[2062,13863,8316],{"class":8225},[2062,13865,2255],{"class":2072},[2062,13867,2113],{"class":2072},[2062,13869,8212],{"class":2072},[2062,13871,13872],{"class":2064,"line":2491},[2062,13873,8842],{"class":2072},[2062,13875,13876,13878,13880,13882,13884,13886,13889],{"class":2064,"line":2519},[2062,13877,8847],{"class":2072},[2062,13879,2227],{"class":2086},[2062,13881,2255],{"class":2072},[2062,13883,2113],{"class":2072},[2062,13885,2248],{"class":2072},[2062,13887,13888],{"class":2251},"ga:cohort",[2062,13890,8258],{"class":2072},[2062,13892,13893],{"class":2064,"line":2556},[2062,13894,11332],{"class":2072},[2062,13896,13897],{"class":2064,"line":2577},[2062,13898,8842],{"class":2072},[2062,13900,13901,13903,13905,13907,13909,13911,13914],{"class":2064,"line":2657},[2062,13902,8847],{"class":2072},[2062,13904,2227],{"class":2086},[2062,13906,2255],{"class":2072},[2062,13908,2113],{"class":2072},[2062,13910,2248],{"class":2072},[2062,13912,13913],{"class":2251},"ga:cohortNthMonth",[2062,13915,8258],{"class":2072},[2062,13917,13918],{"class":2064,"line":2681},[2062,13919,3358],{"class":2072},[2062,13921,13922],{"class":2064,"line":2709},[2062,13923,8870],{"class":2072},[2062,13925,13926,13928,13930,13932,13934],{"class":2064,"line":2714},[2062,13927,8222],{"class":2072},[2062,13929,8170],{"class":8225},[2062,13931,2255],{"class":2072},[2062,13933,2113],{"class":2072},[2062,13935,8212],{"class":2072},[2062,13937,13938],{"class":2064,"line":2743},[2062,13939,8842],{"class":2072},[2062,13941,13942,13944,13946,13948,13950,13952,13954],{"class":2064,"line":2772},[2062,13943,8847],{"class":2072},[2062,13945,8662],{"class":2086},[2062,13947,2255],{"class":2072},[2062,13949,2113],{"class":2072},[2062,13951,2248],{"class":2072},[2062,13953,13888],{"class":2251},[2062,13955,8258],{"class":2072},[2062,13957,13958],{"class":2064,"line":2777},[2062,13959,3358],{"class":2072},[2062,13961,13962],{"class":2064,"line":2802},[2062,13963,8870],{"class":2072},[2062,13965,13966,13968,13971,13973,13975],{"class":2064,"line":2826},[2062,13967,8222],{"class":2072},[2062,13969,13970],{"class":8225},"cohortGroup",[2062,13972,2255],{"class":2072},[2062,13974,2113],{"class":2072},[2062,13976,2209],{"class":2072},[2062,13978,13979,13981,13983,13985,13987],{"class":2064,"line":2834},[2062,13980,8384],{"class":2072},[2062,13982,10476],{"class":2086},[2062,13984,2255],{"class":2072},[2062,13986,2113],{"class":2072},[2062,13988,8212],{"class":2072},[2062,13990,13991],{"class":2064,"line":2840},[2062,13992,10040],{"class":2072},[2062,13994,13995,13997,13999,14001,14003,14005,14008,14010],{"class":2064,"line":2845},[2062,13996,9243],{"class":2072},[2062,13998,8788],{"class":2289},[2062,14000,2255],{"class":2072},[2062,14002,2113],{"class":2072},[2062,14004,2248],{"class":2072},[2062,14006,14007],{"class":2251},"FIRST_VISIT_DATE",[2062,14009,2255],{"class":2072},[2062,14011,3154],{"class":2072},[2062,14013,14014,14016,14018,14020,14022,14024,14027,14029],{"class":2064,"line":2886},[2062,14015,9243],{"class":2072},[2062,14017,2227],{"class":2289},[2062,14019,2255],{"class":2072},[2062,14021,2113],{"class":2072},[2062,14023,2248],{"class":2072},[2062,14025,14026],{"class":2251},"2020-05-01 to 2020-05-31",[2062,14028,2255],{"class":2072},[2062,14030,3154],{"class":2072},[2062,14032,14033,14035,14037,14039,14041],{"class":2064,"line":2907},[2062,14034,9243],{"class":2072},[2062,14036,10714],{"class":2289},[2062,14038,2255],{"class":2072},[2062,14040,2113],{"class":2072},[2062,14042,2209],{"class":2072},[2062,14044,14045,14047,14049,14051,14053,14055,14058,14060],{"class":2064,"line":2941},[2062,14046,10057],{"class":2072},[2062,14048,8226],{"class":10060},[2062,14050,2255],{"class":2072},[2062,14052,2113],{"class":2072},[2062,14054,2248],{"class":2072},[2062,14056,14057],{"class":2251},"2020-05-01",[2062,14059,2255],{"class":2072},[2062,14061,3154],{"class":2072},[2062,14063,14064,14066,14068,14070,14072,14074,14077],{"class":2064,"line":2962},[2062,14065,10057],{"class":2072},[2062,14067,8246],{"class":10060},[2062,14069,2255],{"class":2072},[2062,14071,2113],{"class":2072},[2062,14073,2248],{"class":2072},[2062,14075,14076],{"class":2251},"2020-05-31",[2062,14078,8258],{"class":2072},[2062,14080,14081],{"class":2064,"line":2983},[2062,14082,2837],{"class":2072},[2062,14084,14085],{"class":2064,"line":3016},[2062,14086,14087],{"class":2072},"          },\n",[2062,14089,14090],{"class":2064,"line":3037},[2062,14091,10040],{"class":2072},[2062,14093,14094,14096,14098,14100,14102,14104,14106,14108],{"class":2064,"line":3058},[2062,14095,9243],{"class":2072},[2062,14097,8788],{"class":2289},[2062,14099,2255],{"class":2072},[2062,14101,2113],{"class":2072},[2062,14103,2248],{"class":2072},[2062,14105,14007],{"class":2251},[2062,14107,2255],{"class":2072},[2062,14109,3154],{"class":2072},[2062,14111,14112,14114,14116,14118,14120,14122,14125,14127],{"class":2064,"line":3079},[2062,14113,9243],{"class":2072},[2062,14115,2227],{"class":2289},[2062,14117,2255],{"class":2072},[2062,14119,2113],{"class":2072},[2062,14121,2248],{"class":2072},[2062,14123,14124],{"class":2251},"2020-04-01 to 2020-04-30",[2062,14126,2255],{"class":2072},[2062,14128,3154],{"class":2072},[2062,14130,14131,14133,14135,14137,14139],{"class":2064,"line":3119},[2062,14132,9243],{"class":2072},[2062,14134,10714],{"class":2289},[2062,14136,2255],{"class":2072},[2062,14138,2113],{"class":2072},[2062,14140,2209],{"class":2072},[2062,14142,14143,14145,14147,14149,14151,14153,14156,14158],{"class":2064,"line":3124},[2062,14144,10057],{"class":2072},[2062,14146,8226],{"class":10060},[2062,14148,2255],{"class":2072},[2062,14150,2113],{"class":2072},[2062,14152,2248],{"class":2072},[2062,14154,14155],{"class":2251},"2020-04-01",[2062,14157,2255],{"class":2072},[2062,14159,3154],{"class":2072},[2062,14161,14162,14164,14166,14168,14170,14172,14175],{"class":2064,"line":3139},[2062,14163,10057],{"class":2072},[2062,14165,8246],{"class":10060},[2062,14167,2255],{"class":2072},[2062,14169,2113],{"class":2072},[2062,14171,2248],{"class":2072},[2062,14173,14174],{"class":2251},"2020-04-30",[2062,14176,8258],{"class":2072},[2062,14178,14179],{"class":2064,"line":3157},[2062,14180,2837],{"class":2072},[2062,14182,14183],{"class":2064,"line":3173},[2062,14184,14087],{"class":2072},[2062,14186,14187],{"class":2064,"line":3189},[2062,14188,10040],{"class":2072},[2062,14190,14191,14193,14195,14197,14199,14201,14203,14205],{"class":2064,"line":3212},[2062,14192,9243],{"class":2072},[2062,14194,8788],{"class":2289},[2062,14196,2255],{"class":2072},[2062,14198,2113],{"class":2072},[2062,14200,2248],{"class":2072},[2062,14202,14007],{"class":2251},[2062,14204,2255],{"class":2072},[2062,14206,3154],{"class":2072},[2062,14208,14209,14211,14213,14215,14217,14219,14222,14224],{"class":2064,"line":3228},[2062,14210,9243],{"class":2072},[2062,14212,2227],{"class":2289},[2062,14214,2255],{"class":2072},[2062,14216,2113],{"class":2072},[2062,14218,2248],{"class":2072},[2062,14220,14221],{"class":2251},"2020-03-01 to 2020-03-31",[2062,14223,2255],{"class":2072},[2062,14225,3154],{"class":2072},[2062,14227,14228,14230,14232,14234,14236],{"class":2064,"line":3244},[2062,14229,9243],{"class":2072},[2062,14231,10714],{"class":2289},[2062,14233,2255],{"class":2072},[2062,14235,2113],{"class":2072},[2062,14237,2209],{"class":2072},[2062,14239,14240,14242,14244,14246,14248,14250,14253,14255],{"class":2064,"line":3266},[2062,14241,10057],{"class":2072},[2062,14243,8226],{"class":10060},[2062,14245,2255],{"class":2072},[2062,14247,2113],{"class":2072},[2062,14249,2248],{"class":2072},[2062,14251,14252],{"class":2251},"2020-03-01",[2062,14254,2255],{"class":2072},[2062,14256,3154],{"class":2072},[2062,14258,14259,14261,14263,14265,14267,14269,14272],{"class":2064,"line":3282},[2062,14260,10057],{"class":2072},[2062,14262,8246],{"class":10060},[2062,14264,2255],{"class":2072},[2062,14266,2113],{"class":2072},[2062,14268,2248],{"class":2072},[2062,14270,14271],{"class":2251},"2020-03-31",[2062,14273,8258],{"class":2072},[2062,14275,14276],{"class":2064,"line":3298},[2062,14277,2837],{"class":2072},[2062,14279,14280],{"class":2064,"line":3314},[2062,14281,10426],{"class":2072},[2062,14283,14284],{"class":2064,"line":3330},[2062,14285,9679],{"class":2072},[2062,14287,14288],{"class":2064,"line":3345},[2062,14289,10435],{"class":2072},[2062,14291,14292],{"class":2064,"line":3355},[2062,14293,2380],{"class":2072},[2062,14295,14296],{"class":2064,"line":3361},[2062,14297,8425],{"class":2072},[2062,14299,14300],{"class":2064,"line":3371},[2062,14301,3425],{"class":2072},[16,14303,14305],{"id":14304},"further-additions","Further additions",[12,14307,14308,14309,14312],{},"Among other benefits of the new API v4 belongs the possibility to use ",[113,14310,14311],{},"multiple date ranges",". This simplifies the procedure to compare values in a short time period to some long-term trend which provides you information about how you are performing in a shorter period.",[12,14314,14315,14316,14319],{},"Furthermore, ",[113,14317,14318],{},"multiple segments"," can be included in a single request. Segments can be used to divide data either to pre-constructed groups using segment ID, e.g. new users or to custom specified groups created using segment filters on dimensions. When multiple segments can be included, you can compare groups of observations without the need to construct multiple queries and combine the resulting data. It can be beneficial for example in comparisons of new vs. returning users or in comparisons of users from different browsers.",[16,14321,60],{"id":59},[12,14323,14324],{},"To summarise, the new API v4 enriches the features of Google Analytics API and provides you with more ways to optimize the manipulation and display of data. A clearer view of your data helps you reach more informed solutions and detect potential problems sooner. The testing of the new version revealed new options on how to use the reporting and turn it into a business advantage.",[12,14326,14327,14328,14330,14331,14335],{},"Our tool for web analytics validation – ",[113,14329,5714],{}," has the new features implemented. Check out ",[37,14332,14334],{"href":5712,"rel":14333},[41],"the official website"," for more info.",[209,14337,14338],{"link":211,"button":212},"\nNot sure how to properly use the new features to your advantage? We can help you set it up or create the newest reports for you. Get in touch and find out more.\n",[3464,14340,14341],{},"html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .s9WhI, html code.shiki .s9WhI{--shiki-default:#916B53}",{"title":76,"searchDepth":77,"depth":77,"links":14343},[14344,14350,14351],{"id":12392,"depth":77,"text":12393,"children":14345},[14346,14347,14348,14349],{"id":12422,"depth":389,"text":12423},{"id":12707,"depth":389,"text":12708},{"id":13104,"depth":389,"text":13105},{"id":13667,"depth":389,"text":13668},{"id":14304,"depth":77,"text":14305},{"id":59,"depth":77,"text":60},"\u002Fupload\u002Fgoogle-analytics-reporting-api-v4-article-cover.webp",{},"Check out the most complex review of the UA API v4 and what new features it can offer.","\u002Fen\u002Fblog\u002Fnotes-on-new-features-of-google-analytics-reporting-api-v4",8.185,{"title":12354,"description":76},"en\u002Fblog\u002Fnotes-on-new-features-of-google-analytics-reporting-api-v4","PISPgM4Q8NAU9tz8tY_Bc_ccI8FSTS44J6ldWv_GsPk",{"id":14361,"title":14362,"author":7,"body":14363,"category":7,"description":76,"extension":83,"image":14547,"isToc":85,"langAlt":14548,"meta":14549,"metaDescription":7,"navigation":88,"path":14550,"published":88,"publishedAt":14551,"readingTimeMinutes":14552,"readingTimeText":552,"relatedArticles":7,"seo":14553,"stem":14554,"teaser":14555,"updatedAtCustom":7,"__hash__":14556},"blog_en\u002Fen\u002Fblog\u002Fpbi-writeback-en.md","Take A Step Towards Interactive Data Management",{"type":9,"value":14364,"toc":14539},[14365,14369,14374,14379,14384,14389,14394,14397,14400,14403,14407,14410,14416,14422,14428,14434,14440,14446,14450,14489,14493,14496,14499,14502,14505,14509,14512,14515,14523,14526,14530,14533,14536],[244,14366,14368],{"id":14367},"take-a-step-towards-interactive-data-management-and-transform-your-power-bi-reports-with-power-apps-write-back","Take a step towards interactive data management and transform your Power BI reports with Power Apps Write-Back",[12,14370,14371],{},[422,14372,14373],{},"\"Can I edit my data directly in a Power BI report?\"",[12,14375,14376],{},[422,14377,14378],{},"\"How can I comment my data and make notes instantly in my BI Tool?\"",[12,14380,14381],{},[422,14382,14383],{},"\"Can I adjust budgets and financial plans live in a Power BI report?\"",[12,14385,14386],{},[422,14387,14388],{},"\"Can I manage inventory results directly within my Power BI dashboard?\"",[12,14390,14391],{},[113,14392,14393],{},"If these are the kinds of questions you have been asking yourself recently, you’re in the right place.",[12,14395,14396],{},"In the dynamic world of Business Intelligence (BI), static reports are no longer sufficient for most managers, data analysts, and decision-makers. Being able to not only visualize and analyze data in Power BI, but also to directly interact with it, has moved BI to the next level, one which all companies should aspire to reach.",[12,14398,14399],{},"Currently, it is already possible to adjust the data we see in our Power BI reports through the process of Write-Back. By seamlessly integrating Power Apps with Power BI, we can transform reports into dynamic, interactive tools that enable real-time data management, enhance decision-making, and improve the effectiveness and usability of your Power BI reports.",[12,14401,14402],{},"Let’s explore how this integration changes the game for all users, from routine report users to BI professionals!",[16,14404,14406],{"id":14405},"use-cases-and-scenarios","Use cases and scenarios",[12,14408,14409],{},"Practical scenarios of data Write-Back using Power Apps vary from the simplest tasks, such as deleting or flagging selected data rows in the dataset, to complex scenarios, such as creating a dynamic interactive comment section in your Power BI report based on filtered data. Common use cases include:",[12,14411,14412,14415],{},[113,14413,14414],{},"Budgeting and Forecasting:"," Financial analysts can modify forecasts and budgets directly within Power BI, enabling real-time scenario analysis.",[12,14417,14418,14421],{},[113,14419,14420],{},"Project Management:"," Project updates, issue logging, and resource management become streamlined with direct data entry and visualization.",[12,14423,14424,14427],{},[113,14425,14426],{},"Inventory Management:"," Operational teams can update stock levels and product details directly in the report, offering an at-a-glance inventory overview.",[12,14429,14430,14433],{},[113,14431,14432],{},"Users’ Notes and Comments:"," Power BI report users can save their own notes and comments on performance data to explain certain anomalies to others. This ensures that decision-makers gain the best insights into business performance.",[12,14435,14436,14439],{},[113,14437,14438],{},"Procurement and Supplier Management:"," Procurement teams can log and update supplier details, purchase orders, and delivery schedules directly within Power BI reports. This real-time data entry enhances the accuracy of procurement analytics and ensures that all stakeholders have the most recent information for decision-making.",[12,14441,14442,14445],{},[113,14443,14444],{},"Asset Management:"," Maintenance teams can log asset conditions, maintenance schedules, and repair updates directly into Power BI. This functionality provides a real-time view of asset health and maintenance activities, aiding in better asset lifecycle management and reducing downtime.",[16,14447,14449],{"id":14448},"key-features-and-advantages-that-make-a-difference","Key features and advantages that make a difference",[327,14451,14452,14459,14466,14469,14476,14479,14486],{},[255,14453,14454,14455,14458],{},"You'll experience a ",[113,14456,14457],{},"smooth and cohesive user interface"," as you embed Power Apps directly into your Power BI reports. This seamless integration ensures a unified experience that's both intuitive and efficient.",[255,14460,14461,14462,14465],{},"With Power BI Write-Back using Power Apps, you can ",[113,14463,14464],{},"input and update data on the fly",", ensuring your reports always reflect the most up-to-date information available, allowing decisions to be based on the most current data.",[255,14467,14468],{},"A wide range of customization options tailored to your business needs makes data entry intuitive and efficient, streamlining your workflows and boosting productivity.",[255,14470,14471,14472,14475],{},"Hand in hand with Power Automate, you can enhance your business processes by ",[113,14473,14474],{},"triggering workflows based on data entries and updates, reducing manual tasks and improving efficiency",", so you can focus on what really matters.",[255,14477,14478],{},"Implementing validation rules for data consistency and accuracy ensures that the information you rely on is precise and trustworthy.",[255,14480,14481,14482,14485],{},"Enhanced user interactivity and engagement lead directly to ",[113,14483,14484],{},"greater user involvement and ownership of data",". Additionally, the less time you spend on data handling, the more time you have for analysis and gaining actionable insights.",[255,14487,14488],{},"A unified platform for data entry using Power BI Write-Back using Power Apps minimizes silo issues, fostering a cohesive data strategy.",[16,14490,14492],{"id":14491},"how-does-this-integration-work","How does this integration work?",[12,14494,14495],{},"To integrate Write-Back functionality in Power BI using Power Apps, start by adding the Power Apps visual to your Power BI report. Configure the Power Apps visual by dragging the necessary fields from your dataset to the visual, linking your Power BI data to the Power App. Next, click on the Power Apps visual and choose to create a new app.",[12,14497,14498],{},"You will be redirected to Power Apps Studio, where you can design the app to facilitate the required data entry or update processes, such as creating forms, setting up data connections, and configuring the necessary logic for data manipulation. The Power BI integration in the new Power App is created instantly.",[12,14500,14501],{},"Once your app is designed and connected to the necessary data sources, like SQL databases, Dataverse or SharePoint lists, save and publish it to make it available for embedding within Power BI. Users can then interact with the embedded Power App directly within the Power BI report, entering or updating data, which will be written back to the connected data sources. Ensure that Power BI visuals are set to refresh as needed so that changes made through the Power App are immediately reflected in the reports and dashboards.",[12,14503,14504],{},"Last but not least, make sure that the security is set up properly, so that only certain people will we able to use write back. This can be managed on multiple levels: by configuring Power BI roles, assigning Power Apps roles, securing data sources, utilizing secure authentication with Azure Active Directory, and managing environment permissions.",[16,14506,14508],{"id":14507},"additional-power-apps-pricing-and-licensing","Additional Power Apps pricing and licensing",[12,14510,14511],{},"When you purchase Microsoft Office 365 licenses, you receive a nested license for Power Apps. You can use its features without purchasing a separate license if you need to connect only standard services like OneDrive, Outlook, or SharePoint and no premium connectors to build your applications, which is not our case.",[12,14513,14514],{},"Power Apps license pricing is based on a per-user or per-app subscription model, providing flexibility depending on your needs.",[327,14516,14517,14520],{},[255,14518,14519],{},"The Power Apps Premium license  (former Per user plan) starts at $20 per user per month, offering unlimited apps and portals, making it suitable for organizations with multiple apps and dynamic usage.  The price drops to $12 per user per month for over 2,000 user licenses.",[255,14521,14522],{},"Alternatively, the Power Apps Per App plan costs $5 (per app\u002Fuser\u002Fmonth), ideal for scenarios where only a few specific apps are required.",[12,14524,14525],{},"When deciding on the most suitable plan, keep in mind key factors impacting the license cost: the number of users, the number of apps, and the level of functionality and integration needed. Additional costs could arise from premium connectors, additional storage, and advanced features or customizations. All prices are valid as of 1st December 2024.",[16,14527,14529],{"id":14528},"summary-is-it-a-must-have-or-should-you-skip-it","Summary: Is it a must-have or should you skip it?",[12,14531,14532],{},"The integration of Power BI with Power Apps for Write-Back capabilities transforms traditional BI reporting by turning static data into dynamic, interactive tools, enhancing data management and decision-making. While challenges exist and the initial development steps can be difficult, the benefits and newfound capabilities are far greater, making this integration an important part of any progressive BI strategy. It's definitely worth a test for any company looking to stay ahead in the data-driven business landscape.",[12,14534,14535],{},"What are your thoughts and experiences? Are you ready to transform your Power BI reports into interactive data management tools? Dive into the world of Power Apps Write-Back today and start using its benefits to your advantage!",[209,14537,14538],{"link":211,"button":1129},"\nAre you interested in consulting your case for Power BI Write-Back or need a help with first steps? Do not hesitate to contact us!\n",{"title":76,"searchDepth":77,"depth":77,"links":14540},[14541,14542,14543,14544,14545,14546],{"id":14367,"depth":389,"text":14368},{"id":14405,"depth":77,"text":14406},{"id":14448,"depth":77,"text":14449},{"id":14491,"depth":77,"text":14492},{"id":14507,"depth":77,"text":14508},{"id":14528,"depth":77,"text":14529},"\u002Fupload\u002Fpbi-writeback-en.png","pbi-writeback",{"language":87},"\u002Fen\u002Fblog\u002Fpbi-writeback-en","2025-01-15T12:00:00.000+00:00",6.47,{"title":14362,"description":76},"en\u002Fblog\u002Fpbi-writeback-en","Are you interested in Interactive Data Management?","v-IlBmuieVUryHDkrXs-B4HHhLadwGONP2VFMwIGJgA",{"id":14558,"title":14559,"author":7,"body":14560,"category":7,"description":14564,"extension":83,"image":14923,"isToc":85,"langAlt":7,"meta":14924,"metaDescription":7,"navigation":88,"path":14925,"published":88,"publishedAt":14926,"readingTimeMinutes":14927,"readingTimeText":14928,"relatedArticles":14929,"seo":14930,"stem":14931,"teaser":14932,"updatedAtCustom":7,"__hash__":14933},"blog_en\u002Fen\u002Fblog\u002Fpractical-use-of-cognitive-computing.md","Practical use of Cognitive Computing",{"type":9,"value":14561,"toc":14909},[14562,14565,14568,14572,14575,14578,14582,14592,14595,14598,14603,14606,14609,14612,14617,14620,14626,14632,14635,14665,14668,14672,14675,14678,14683,14686,14691,14694,14699,14704,14708,14711,14717,14720,14727,14732,14735,14746,14751,14758,14761,14766,14770,14773,14778,14782,14785,14789,14792,14797,14804,14809,14816,14827,14830,14834,14837,14843,14848,14851,14855,14862,14867,14871,14882,14887,14894,14899,14901,14904,14906],[12,14563,14564],{},"If you combine artificial intelligence with signal processing, you can improve everyday tasks such as safety equipment checks, anomaly detection, or reading documents. Technology incorporating machine learning, natural language processing, human-computer interaction, and more are described as cognitive computing. At the first sight, it may seem like too much science behind, yet the algorithms can be implemented easier than you might think and help you with your marketing or occupational safety within your business.",[12,14566,14567],{},"We started the practical part of the workshop with an overview of the areas of Azure Cognitive Services and then we moved to use cases of Anomaly Detector, text, and vision services.",[244,14569,14571],{"id":14570},"azure-cognitive-services","Azure Cognitive Services",[12,14573,14574],{},"Before we explain the practical use of Azure Cognitive Services, introducing all areas can give a good picture of how technology collaboration and accessibility can create an empowering experience for the end-user.",[12,14576,14577],{},"Azure Cognitive Services is a set of machine learning algorithms developed to solve problems in the field of Artificial Intelligence (AI). They are available widely to developers without requiring machine-learning expertise. All it takes is an API call to embed the ability to see, hear, speak, search, understand, and accelerate decision-making. It is a package of 25 tools that through APIs allow the developers to add a variety of features to their applications.",[16,14579,14581],{"id":14580},"part-1-anomaly-detector","Part 1| Anomaly Detector",[12,14583,14584,14585,14588,14589,1296],{},"In the first part Azure Cognitive Services demos in practice, we focused on the ",[113,14586,14587],{},"Anomaly Detector"," service and ",[113,14590,14591],{},"AML Notebooks",[12,14593,14594],{},"In general, the anomaly detection algorithm predicts the value at a selected point based on previous observations. This prediction always has a certain sensitivity\u002Fconfidence interval in which it moves (light blue area in the image below).",[12,14596,14597],{},"The predicted value is then compared to the actual measured value and the points at which it is actually measured are identified.",[12,14599,14600],{},[148,14601],{"alt":76,"src":14602},"\u002Fupload\u002Fvalue-prediction.webp",[12,14604,14605],{},"The Azure anomaly detector REST API is a service that provides the ability to detect anomalies in time series from any data source. The only condition is that the data must be in a defined structure: timestamp + selected value",[12,14607,14608],{},"The Rest API can be called from any tool that can call GET requests. Examples include Jupyter Notebooks, Postman, Visual Studio, or Azure-enabled services such as Databricks, or Azure Machine Learning with integrated notebooks.",[12,14610,14611],{},"Azure anomaly detection REST API is a service provided by Azure as one of the Cognitive services accessible via the Azure portal where you can obtain the authorization key and endpoint that are necessary for later calls. The output after calling this API is a set of parameters that say whether it is an anomaly at a given point in time and whether it was a decrease or an increase.",[12,14613,14614],{},[148,14615],{"alt":76,"src":14616},"\u002Fupload\u002Fdata-manipulation-2.webp",[12,14618,14619],{},"Azure anomaly detector REST API works in two optional modes.",[12,14621,14622,14625],{},[422,14623,14624],{},"\"Last\""," mode Works on stream data. Each point in time is analyzed based on a model trained by previous data. For example, it is suitable for data from Google Analytics.",[12,14627,14628,14631],{},[422,14629,14630],{},"\"Entire\""," mode creates and trains one model for the entire time series and detects anomalies over the entire model and all data points at once.",[12,14633,14634],{},"Anomaly detection can be configured by entering parameter values in the request. We have the ability to work with these parameters:",[327,14636,14637,14643,14646,14652,14658],{},[255,14638,14639,14642],{},[422,14640,14641],{},"Sensitivity - \"Sensitivity\""," is from 0 to 99, defines how sensitively the back-end API detects anomalies",[255,14644,14645],{},"Granularity - It can be annual, monthly, weekly, daily, hourly, minute (data must correspond to this granularity, i.e. the difference between subsequent data points must correspond to this Period)",[255,14647,14648,14651],{},[422,14649,14650],{},"CustomInterval"," - For cases of different granularity (e.g. customInterval = 5 & granularity = minute will have an interval of 5 minutes)",[255,14653,14654,14657],{},[422,14655,14656],{},"Period"," - defines how many history points are used to detect current anomalies. The extent of the period will vary according to the granularity.",[255,14659,14660,14661,14664],{},"maxAnomalyRatio - \"",[422,14662,14663],{},"MaxAnomaly","\" defines the maximum percentage of anomalies in one detection.",[12,14666,14667],{},"We also talked about the use of the Anomaly detector REST API in the event of an error in the implementation of measurement on the web.",[244,14669,14671],{"id":14670},"business-case-fooled-bidding-engine","Business Case – Fooled bidding engine",[12,14673,14674],{},"Let’s look at one of our client’s normal day, an e-shop that sells clothes and uses a bidding engine to place ads. If everything works by default, the customer sees the advertisement, comes to the website, and makes an order.",[12,14676,14677],{},"Information about a successful order is sent to the bidding engine, which optimizes its behavior based on it. Unfortunately, not all days are so exemplary.",[12,14679,14680],{},[148,14681],{"alt":76,"src":14682},"\u002Fupload\u002Fnormal-day.webp",[12,14684,14685],{},"Unfortunately, a new version of the site was published from the test environment, which contained a measurement error that caused a duplication of pageviews to be measured for the men's sweatshirt category, indicating a successful conversion. This caused the bidding engine to start receiving false information and to make bad decisions because it thought the men's sweatshirt ad is twice as successful as it actually is. The engine started investing higher amounts in the ad. If this error would not be caught in time, it could lead to large losses in the marketing budget.",[12,14687,14688],{},[148,14689],{"alt":76,"src":14690},"\u002Fupload\u002Fbug-1.webp",[12,14692,14693],{},"In order to detect an anomaly, it is necessary to have a specialist who would check the data regularly and would be sufficiently attentive to changes in the data. It may not be as easy as noticing the mistakes in this case (in Google Analytics, only a week is visible by default).",[12,14695,14696],{},[148,14697],{"alt":76,"src":14698},"\u002Fupload\u002Fanomaly-detection-1.webp",[12,14700,14701],{},[148,14702],{"alt":76,"src":14703},"\u002Fupload\u002Fanomaly-detection-2.webp",[244,14705,14707],{"id":14706},"solution-detecting-anomalies","Solution - Detecting Anomalies",[12,14709,14710],{},"Such a fluctuation in the measured data can be detected with Azure Anomaly Detector. There are two options.",[860,14712,14714],{"id":14713},"azure-ml",[113,14715,14716],{},"Azure ML",[12,14718,14719],{},"One option is to use the Azure Machine Learning tool using integrated notebooks. Among other things, this tool allows you to create and manage models for machine learning.",[12,14721,14722,14723,14726],{},"We integrated this tool into the standard e-commerce process. Data for anomaly detection were obtained from the web analytics system in the standardized format ",[422,14724,14725],{},"Timestamp, Value",". We analyzed the data by calling the Azure anomaly detector API, and if we detect a problem, we start fixing it immediately.",[12,14728,14729],{},[148,14730],{"alt":76,"src":14731},"\u002Fupload\u002Fdata-manipulation.webp",[12,14733,14734],{},"However, this particular solution comparing to similar tools can be challenging due to:",[327,14736,14737,14740,14743],{},[255,14738,14739],{},"Need for regular manual execution - Someone needs to run the code regularly",[255,14741,14742],{},"The necessity to have relatively advanced knowledge of some programming language such as Python",[255,14744,14745],{},"Not completely clear insights, it is necessary to further modify, visualize, etc.",[860,14747,14749],{"id":14748},"waaila",[113,14750,5714],{},[12,14752,14753,14754,1296],{},"The second option, which eliminates the problems described above, is to use ",[37,14755,14757],{"href":5712,"rel":14756},[41],"the Waaila app",[12,14759,14760],{},"Waaila's connection to the standard data processing system is similar to the previous solution. We can connect directly to the data in GA through it. It is then possible to perform various tests on these data using logical conditions. In our case, we defined data in the format Timestamp: pageviews. Then the Azure anomaly detector API is called, and we find out if there is an anomaly in the dataset.",[12,14762,14763],{},[148,14764],{"alt":76,"src":14765},"\u002Fupload\u002Fwaaila-azure-anomaly-detector.webp",[244,14767,14769],{"id":14768},"why-is-the-waaila-app-different","Why is the Waaila app different",[12,14771,14772],{},"The result obtained through Waaila has a clear and simple form. In the output table, we can see the days on which the anomaly was detected. These are the days that followed the publication of a new version of the website containing a measurement error. We can see that on both days there was a positive anomaly, which means that the display of the confirmation page was more frequent than was predicted based on previous developments.",[12,14774,14775],{},[148,14776],{"alt":76,"src":14777},"\u002Fupload\u002Fwaaila-demo.webp",[16,14779,14781],{"id":14780},"part-2-azure-cognitive-services-text-vision","Part 2 | Azure Cognitive Services – Text & Vision",[12,14783,14784],{},"The second part of the workshop contained examples of the Text and Vision group of Cognitive services. One of the most common use cases involves the Vision group of Cognitive Services. We meet frequently with companies who experience troubles with employee safety obedience and are looking for a more sophisticated solution. The second case focuses on text recognition, for instance, homework check automation or reading receipts. Third case comments on means to gather data about customer satisfaction.",[244,14786,14788],{"id":14787},"business-case-1-safety-equipment-check","Business Case 1: Safety Equipment Check",[12,14790,14791],{},"Construction companies are required to check that all workers on their sites wear hard hats and reflective vests. However, this is costly in terms of time and human resources. To minimize this cost, companies can incorporate an AI solution using the Custom Vision service in order to detect the equipment automatically.",[12,14793,14794],{},[148,14795],{"alt":76,"src":14796},"\u002Fupload\u002Fsafety-equipment-recognizing.webp",[12,14798,14799,14800,14803],{},"Using this approach, when somebody enters the construction site, the security camera at the entrance sends their image to be processed using the ",[113,14801,14802],{},"Custom Vision"," service. The image is evaluated for the presence of safety equipment based on a pre-trained model of similar tagged images. The results of the evaluation are sent back and in case of missing equipment, a message is outputted.",[12,14805,14806],{},[148,14807],{"alt":76,"src":14808},"\u002Fupload\u002Fcognitive-services-camera.webp",[12,14810,14811,14812,14815],{},"The visual evaluation can be combined with customized and personalized messages to be more noticeable and thus a better warning for workers without the safety equipment. The customized messages can be created in real-time using the ",[113,14813,14814],{},"Text to Speech"," service. This service constructs a voice message from inputted text using a high variety of voices in over 45 languages (including the Czech language).",[12,14817,14818,14819,14822,14823,14826],{},"Moreover, to personalize the warnings, ",[113,14820,14821],{},"Face verification"," can be used to compare the image of entering workers with database workers' photos. Based on the extracted name, a personalized message can be constructed again using the Text to Speech service. ",[113,14824,14825],{},"The personalized messages have the highest impact"," on ensuring that workers wear the safety equipment, especially if combined with the possibility to report the outcome to the supervisor.",[12,14828,14829],{},"This AI solution to automatic check allows the companies to save human and financial resources while minimizing the risk of having to pay a fine for potentially incorrect safety equipment on the site.",[244,14831,14833],{"id":14832},"business-case-2-automatic-evaluation-of-exercise-results","Business case 2: Automatic evaluation of exercise results",[12,14835,14836],{},"AI is very useful in areas where documents were not fully converted to electronic form yet. When the current Covid-19 pandemic closed schools, teachers were often limited by the fact that their teaching materials were not well equipped for distance learning. Correcting homework in exercise books distantly requires a series of printing and scanning, costing a high amount of time and other resources. This opens a possibility for the AI solution using a Form Recognizer.",[12,14838,14839,14842],{},[113,14840,14841],{},"Form Recognizer"," allows you to automatically extract both printed and hand-written text from computer non-readable documents and images. You provide training files and select one of the available approaches. The first approach consists of optimized prepared models for receipts and business cards, however, these cannot be applied to other documents. The second approach allows extracting all text fields that can be viewed as key-value pairs. While this provides more flexibility than the first approach, you cannot select which part of the file to concentrate on and cannot extract values without a well-located key. Most flexible and thus most suited for the case of school material is the third approach which consists of labeling required text fields and training on thus labeled files. For labeling, there is a special online tool where you can create labels and interactively assign them to OCR-extracted text fields from your training files. For illustration, we labeled and trained a simple model on a page from a first-grade mathematics textbook. Below is a snapshot of information extracted based on the simple model, displayed both visually in colored rectangles and as a list of values assigned to the tags of matching color along with a confidence of the assignment.",[12,14844,14845],{},[148,14846],{"alt":76,"src":14847},"\u002Fupload\u002Flabellingtool.webp",[12,14849,14850],{},"Using the Form Recognizer you can construct automatic homework evaluation by collecting a sample of homework, labeling the required fields on the sample, and training the model. Then you can use this model to form automatic extraction of the required information from other files and comparison of the extracted values to a solution key. While this is too demanding for a single teacher, it opens a business opportunity to cooperate with a publishing house on providing an official solution thus helping distance teaching.",[860,14852,14854],{"id":14853},"applications-of-form-recognizer","Applications of Form Recognizer",[12,14856,14857,14858,14861],{},"Form Recognizer is useful in many fields. For example, when a customer brings ",[14859,14860,37],"del",{}," receipt for purchased goods he wants to complain about, the cashier needs to retype the receipt to fill in the complaint. Alternatively, in a loyalty program when the producer company requires invoices from distributors as proof for distributing the products, they often receive the forms in a scan or even paper form that they need to digitalize. To sum up, Form Recognizer saves both time and other resources. Based on our experience, it can provide even better results than manual extraction as the people working on it may often be over-worked or not well informed.",[12,14863,14864],{},[148,14865],{"alt":76,"src":14866},"\u002Fupload\u002Fcontoso-receipt-2-information.webp",[244,14868,14870],{"id":14869},"business-case-3-customer-satisfaction","Business case 3: Customer satisfaction",[12,14872,14873,14874,14877,14878,14881],{},"Information about customer satisfaction is necessary for improving the quality of goods and services and keeping customers from going to the competition. It is mostly gathered from surveys and a set of buttons with smiley faces, however, these provide not only under-represented but also skewed results due to the selection of people willing to answer it. To overcome this problem, companies can employ behavior analytics on the e-shop and perceived emotion recognition in the stores. The e-shop ",[113,14875,14876],{},"Text Analytics"," service can help process comments and chat messages to prevent customers from leaving due to negative experiences or negative impressions of one customer to spread to other customers. At this moment there is only a selected number of language options for the TextAnalytics but it can be paired with ",[113,14879,14880],{},"Translator"," service to cover other languages. The text extraction can be combined with an analysis of customers' paths, waiting times, and other behavioral patterns which may provide further information on satisfaction.",[12,14883,14884],{},[148,14885],{"alt":76,"src":14886},"\u002Fupload\u002Fsatisfaction_buttons.webp",[12,14888,14889,14890,14893],{},"In stores, instead of using the buttons to express satisfaction, companies can use the entrance cameras to take an image. The image is then processed using a part of the ",[113,14891,14892],{},"Face"," service that can evaluate the Perceived emotion recognition. In this recognition, the location of the face in the image is found and several emotions are searched for in the detected face to evaluate the degree to which they are recognizably present on the face. This can be then used to find out how happy was a customer when leaving or how much did his mood change while inside the store which can help with the optimization of the store and the services.",[12,14895,14896],{},[148,14897],{"alt":76,"src":14898},"\u002Fupload\u002Fmona-lisa-and-emotions.webp",[16,14900,1643],{"id":1642},[12,14902,14903],{},"To summarized the workshop focused on Cognitive Computing and its practical applications, we showed and explain a few use interesting cases for everyday use. With Azure, you can not only ensure security but also it can be very easily connected to cloud storage and other tools that overall create one well-working and inter-connected environment, built for your convenience.",[12,14905,8047],{},[12,14907,14908],{},"Let us know, how we can help you grow.",{"title":76,"searchDepth":77,"depth":77,"links":14910},[14911,14912,14917,14922],{"id":14570,"depth":389,"text":14571},{"id":14580,"depth":77,"text":14581,"children":14913},[14914,14915,14916],{"id":14670,"depth":389,"text":14671},{"id":14706,"depth":389,"text":14707},{"id":14768,"depth":389,"text":14769},{"id":14780,"depth":77,"text":14781,"children":14918},[14919,14920,14921],{"id":14787,"depth":389,"text":14788},{"id":14832,"depth":389,"text":14833},{"id":14869,"depth":389,"text":14870},{"id":1642,"depth":77,"text":1643},"\u002Fupload\u002Fcognitive-computing-reading-cover.webp",{},"\u002Fen\u002Fblog\u002Fpractical-use-of-cognitive-computing","2020-10-27T10:26:29.000+00:00",12.47,"13 min read",[554],{"title":14559,"description":14564},"en\u002Fblog\u002Fpractical-use-of-cognitive-computing","Recently, we organized another online workshop on the topic of AI. This time we looked at use cases of Cognitive Computing. ","AAut8oZN3FCBWFH2JAa6ITI8JbP2EP969gnqYOr6P9w",{"id":14935,"title":14936,"author":7,"body":14937,"category":992,"description":76,"extension":83,"image":15194,"isToc":85,"langAlt":7,"meta":15195,"metaDescription":15196,"navigation":88,"path":15197,"published":88,"publishedAt":15198,"readingTimeMinutes":15199,"readingTimeText":552,"relatedArticles":7,"seo":15200,"stem":15201,"teaser":15202,"updatedAtCustom":7,"__hash__":15203},"blog_en\u002Fen\u002Fblog\u002Fsending-e-mail-notifications-with-nagios-core.md","Sending e-mail notifications with Nagios Core",{"type":9,"value":14938,"toc":15185},[14939,14943,14950,14954,14957,14967,14970,14973,14984,14989,14993,14996,15003,15007,15010,15017,15020,15029,15033,15036,15040,15086,15089,15093,15119,15130,15135,15140,15154,15163,15168,15170,15173,15176,15179,15182],[16,14940,14942],{"id":14941},"why-do-we-need-monitoring-tools","Why do we need monitoring tools?",[12,14944,14945,14946,14949],{},"Imagine having everyday reports extracting data from a DB smoothly when suddenly an error occurs. It is not a pleasant thought for sure, however, things could get worse if you would not be aware of it. ",[113,14947,14948],{},"Detecting and fixing issues before they hit, has multiple benefits",", for example saving the organization’s time and money, preventing system downtime and the adverse effects, and avoiding unhappy customers. When your monitoring tools are set up to alert you on issues before they impact the customers, you can fix them before they cause you and your customers any trouble. Here is where Nagios Core comes into the game.",[16,14951,14953],{"id":14952},"why-nagios-core","Why Nagios Core?",[12,14955,14956],{},"Nagios Core is a popular Linux-based open-source system and network monitoring application with the ability to alert you when a problem occurs, and when it gets resolved. Nagios Core offers basic functionalities for monitoring and managing IT environments. Because of its open-source model, there are many plugins for Nagios and the tool can easily be adapted to your needs. Besides the benefit of having access to the source code for customization and bug fixes, its flexibility is likely responsible for its popularity.",[122,14958,14959,14961,14963,14964],{},[113,14960,6293],{},[4635,14962],{},"\n\n\nYou can write plugins (check commands) to monitor almost any kind of system or service you might have in production, no matter how customized it may be. \n",[113,14965,14966],{},"Nagios does not limit what you can monitor.",[12,14968,14969],{},"Notification methods are not directly incorporated into the Nagios Core code as it just does not make much sense. The \"core\" of Nagios Core is not designed to be an all-in-one application. There are a lot of different ways to do notifications and there are already a lot of packages out there that can handle it.",[12,14971,14972],{},"In this article, we will discuss an architecture for sending email notifications from Nagios Core which involves:",[327,14974,14975,14978,14981],{},[255,14976,14977],{},"Nagios Core installed on Azure VM - we use it for monitor hosts and services, and raising an alert when something occurs",[255,14979,14980],{},"Azure Functions for triggering email notifications",[255,14982,14983],{},"SendGrid for sending emails to end-user",[12,14985,14986],{},[148,14987],{"alt":76,"src":14988},"\u002Fupload\u002Fnagios-azure-functions-emails.webp",[244,14990,14992],{"id":14991},"why-sendgrid","Why SendGrid?",[12,14994,14995],{},"SendGrid is a third-party service that supports sending emails. If you have Nagios Core installed on Azure VM, then the supported way to send emails to external domains from Azure resources is via an SMTP relay service. Customers who create Azure subscriptions after November 15th, 2017, will have technical restrictions, like blocking emails sent from VMs directly to email providers. The reason for this is that you do not have a dedicated IP address, and it is quite possible that spammers will use Azure to send spams. In that case, spam blacklists will quickly flag the IP range of Azure data centers as sources of spam. In other words, your legitimate email will stop getting through.",[12,14997,14998,14999,15002],{},"Since Microsoft cannot guarantee email providers will accept these inbound emails, no requests to remove the restriction can be made. Fortunately, we can use SMTP relay to overcome this problem and we chose SendGrid. The reason we chose SendGrid is that Azure customers can unlock 25,000 free emails each month. ",[113,15000,15001],{},"Configuring SendGrid is very easy",", it provides reliable transactional email delivery, scalability, real-time analytics along with flexible API’s that make custom integration easy, and it has a binding extension for Azure Functions. Also, there is plenty of online documentation and examples.",[244,15004,15006],{"id":15005},"why-azure-functions","Why Azure Functions?",[12,15008,15009],{},"So far, we have a monitoring tool that notices a problem when it occurs, and we have a SendGrid for delivering emails to interested users. Now, we need to let SendGrid know when it should send an email and for this purpose, we use Azure Functions.",[12,15011,15012,15013,15016],{},"Azure Functions let you run your code in a serverless environment without having to first create a virtual machine or publish a web application. The idea behind a serverless environment is to ",[113,15014,15015],{},"delegate the management and maintenance of servers to third parties so that developers can focus exclusively on the business requirements."," One of the benefits of a serverless approach is saving the costs as you are only paying for what you use.",[12,15018,15019],{},"Azure Functions are great for processing events, therefore naturally perfect scenario to use Azure Functions is where you have modeled things in terms of events. In our case, we use events to trigger sending an email whenever a problem occurs\u002Fresolves. Thus, as a trigger, you will use an HTTP trigger.",[12,15021,15022,15023,15028],{},"From the side of Nagios Core, you can use plugin ",[37,15024,15027],{"href":15025,"rel":15026},"https:\u002F\u002Fnagios-plugins.org\u002Fdoc\u002Fman\u002Fcheck_http.html",[41],"check http"," to trigger the Azure Function.",[16,15030,15032],{"id":15031},"how-to-setup-nagios-core-command-to-trigger-azure-function","How to setup Nagios Core command to trigger Azure Function",[12,15034,15035],{},"Covering all steps is not in the scope of this post and it would result in a very long article. Apparently, sending JSON parameters from a command line is quite tricky, it looks simple but it can give you a headache. Let’s take a look at that small part.",[860,15037,15039],{"id":15038},"prerequisites","Prerequisites:",[327,15041,15042,15053,15058,15063,15080],{},[255,15043,15044,15047,15048,1296],{},[113,15045,15046],{},"Installed Nagios Core"," - If you don’t have Nagios installed, follow ",[37,15049,15052],{"href":15050,"rel":15051},"https:\u002F\u002Fsupport.nagios.com\u002Fkb\u002Farticle\u002Fnagios-plugins-installing-nagios-plugins-from-source-569.html#Ubuntu",[41],"this guide",[255,15054,15055],{},[113,15056,15057],{},"Configured hosts, services and contacts",[255,15059,15060],{},[113,15061,15062],{},"Azure subscription",[255,15064,15065,15068,15069,15074,15075],{},[113,15066,15067],{},"Created SendGrid Account"," – follow ",[37,15070,15073],{"href":15071,"rel":15072},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fazure\u002Fsendgrid-dotnet-how-to-send-email#create-a-sendgrid-account",[41],"this link"," to create SendGrid account.\n",[327,15076,15077],{},[255,15078,15079],{},"Copy API Key, you will need it later.",[255,15081,15082,15085],{},[113,15083,15084],{},"Azure Function"," which will be triggered by HTTP request and send email to SendGrid",[12,15087,15088],{},"We will assume you already have installed and configured Nagios and all services you want to monitor, created SendGrid account, and have made Azure Function with HTTP trigger as input and SendGrid as output.",[860,15090,15092],{"id":15091},"steps-to-follow","Steps to follow:",[252,15094,15095,15098,15101,15104,15107,15113],{},[255,15096,15097],{},"Copy Azure Function URL",[255,15099,15100],{},"Go to VM where you installed Nagios Core",[255,15102,15103],{},"Make sure Nagios Core is running",[255,15105,15106],{},"Open command line",[255,15108,15109,15110,2230],{},"Navigate to the directory with plugins (usually can be found at this path ",[422,15111,15112],{},"\u002Fusr\u002Flocal\u002Fnagios\u002Flibexec",[255,15114,15115,15116,15118],{},"Test function triggering by executing ",[422,15117,15027],{}," command. Change parameters in the following command with your values, it should be something like this:",[1173,15120,15124],{"className":15121,"code":15122,"language":15123,"meta":76,"style":76},"language-shell shiki shiki-themes material-theme-ocean",".\u002Fcheck_http -H \u003Cazure-function-server> -S -u \u003Ccopied-url>  --method=POST --post='{\"to\":\"user@example.com\", \"hostName\":\"testServer\",\"hostState\":\"Down\", \"hostAddress\":\"127.1.1\",\"hostOutput\":\"example message\", \"notificationType\":\"Warning\", \"longDateTime\":\"15.04.2018\"}'\n","shell",[588,15125,15126],{"__ignoreMap":76},[2062,15127,15128],{"class":2064,"line":2065},[2062,15129,15122],{},[252,15131,15132],{},[255,15133,15134],{},"If you see the following response, it means Azure Function is triggered correctly and you will receive an email:",[12,15136,15137],{},[148,15138],{"alt":76,"src":15139},"\u002Fupload\u002Fhttpresponse.webp",[252,15141,15142,15151],{},[255,15143,15144,15145],{},"Change commands notify-host-by-email and notify-service-by-email like this:",[1173,15146,15149],{"className":15147,"code":15148,"language":1178},[1176],"define command {\n\n    command_name    notify-host-by-email\n    command_line    \u002Fusr\u002Flocal\u002Fnagios\u002Flibexec\u002Fcheck_http  -H \u003Cazure-function-server> -S -u \u003Cazure-fun-copied-url> --method 'POST' --post \"{\\\"to\\\":\\\"$CONTACTEMAIL$\\\", \\\"hostName\\\":\\\"$HOSTNAME$\\\",\\\"hostState\\\":\\\"$HOSTSTATE$\\\", \\\"hostAddress\\\":\\\"$HOSTADDRESS$\\\",\\\"hostOutput\\\":\\\"$HOSTOUTPUT$\\\", \\\"notificationType\\\":\\\"$NOTIFICATIONTYPE$\\\", \\\"longDateTime\\\": \\\"$LONGDATETIME$\\\"}\"\n}\n\ndefine command {\n\n    command_name    notify-service-by-email\n    command_line    \u002Fusr\u002Flocal\u002Fnagios\u002Flibexec\u002Fcheck_http  -H \u003Cazure-function-server> -S -u \u003Cazure-fun-copied-url> --method 'POST' --post \"{\\\"to\\\":\\\"$CONTACTEMAIL$\\\", \\\"hostName\\\":\\\"$HOSTNAME$\\\",\\\"hostState\\\":\\\"$HOSTSTATE$\\\", \\\"hostAddress\\\":\\\"$HOSTADDRESS$\\\",\\\"hostOutput\\\":\\\"$HOSTOUTPUT$\\\", \\\"notificationType\\\":\\\"$NOTIFICATIONTYPE$\\\", \\\"longDateTime\\\": \\\"$LONGDATETIME$\\\", \\\"service\\\":\\\"$SERVICEDESC$\\\", \\\"serviceOutput\\\":\\\"$SERVICESTATE$\\\", \\\"serviceLondInfo\\\":\\\"$SERVICEOUTPUT$\\\"}\"\n}\n",[588,15150,15148],{"__ignoreMap":76},[255,15152,15153],{},"Save changes and restart Nagios Core to apply the changes:",[1173,15155,15157],{"className":15121,"code":15156,"language":15123,"meta":76,"style":76},"sudo systemctl restart nagios.service\n",[588,15158,15159],{"__ignoreMap":76},[2062,15160,15161],{"class":2064,"line":2065},[2062,15162,15156],{},[252,15164,15165],{"start":389},[255,15166,15167],{},"And that is it. Your emails are ready to be sent.",[16,15169,60],{"id":59},[12,15171,15172],{},"Monitoring tools will give you a clear picture of how your applications and infrastructure are working. With this information, you can then detect areas that need improvements. Targeting problematic points and resolving them before incidents occur, will not only improve performance but also save your organization valuable resources, especially time and money.",[12,15174,15175],{},"There are plenty of network monitoring tools and utilities out there, including commercial products and open source solutions, which make it difficult to choose the perfect solution for your own infrastructure. Nagios can be integrated with other applications; it can perform tasks handed off to external commands and third-party applications can send control commands and data to Nagios very easily.",[12,15177,15178],{},"Still, configuring Nagios and setting up necessary plugins need time and specific knowledge. Unless you have experience with Nagios Core, make sure you consider if the time spent on configuration and potential bug fix is worth not buying a commercial monitoring tool. With Azure Functions, you only need to focus on the problem and not the resources required for the solution, although you need to have at least basic knowledge in one of the supported languages.",[209,15180,15181],{"link":211,"button":212},"\nWe have set up Nagios core for our own infrastructure as well as for several clients, and we can help you as well. Contact us and learn more about other possibilities.\n",[3464,15183,15184],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":76,"searchDepth":77,"depth":77,"links":15186},[15187,15188,15192,15193],{"id":14941,"depth":77,"text":14942},{"id":14952,"depth":77,"text":14953,"children":15189},[15190,15191],{"id":14991,"depth":389,"text":14992},{"id":15005,"depth":389,"text":15006},{"id":15031,"depth":77,"text":15032},{"id":59,"depth":77,"text":60},"\u002Fupload\u002Fnagios-emails.webp",{},"Guide to establish IT monitoring with email notifications sent from Nagios.","\u002Fen\u002Fblog\u002Fsending-e-mail-notifications-with-nagios-core","2020-08-03T12:00:00.000+00:00",6.92,{"title":14936,"description":76},"en\u002Fblog\u002Fsending-e-mail-notifications-with-nagios-core","Knowing how well things are working within your IT environment, means you must have monitoring tools and processes up and running. With monitoring performances, you will have a much better idea of which elements need to be upgraded or even replaced.","pOUsYzdc-DuQ8AScklZEVc8K5VgLxIgiSbPo3PG0g-o",{"id":15205,"title":15206,"author":7,"body":15207,"category":1334,"description":15211,"extension":83,"image":15551,"isToc":88,"langAlt":7,"meta":15552,"metaDescription":7,"navigation":88,"path":15553,"published":88,"publishedAt":15554,"readingTimeMinutes":15555,"readingTimeText":7822,"relatedArticles":15556,"seo":15558,"stem":15559,"teaser":15560,"updatedAtCustom":7,"__hash__":15561},"blog_en\u002Fen\u002Fblog\u002Fstarting-with-waaila.md","Starting with Waaila",{"type":9,"value":15208,"toc":15538},[15209,15212,15219,15226,15233,15237,15254,15258,15298,15309,15312,15319,15323,15329,15333,15340,15345,15355,15362,15365,15370,15374,15380,15387,15392,15399,15404,15408,15415,15418,15444,15447,15451,15458,15461,15466,15480,15484,15495,15498,15503,15505,15515,15523,15536],[12,15210,15211],{},"Data quality validation is not a question of IF rather than WHEN and HOW. With the Waaila application, you can easily check your data in Google Analytics to reveal defects and errors. You can choose from many provided tests or create your own. The application is an AI-based advanced algorithm to detect anomalies and issues in the data from your Analytics platform (Google Analytics or Piano Analytics).",[12,15213,15214,15215,15218],{},"In order to get the most of the application, even if you have no experience with data validation, you can use prepared sets of tests available for free in Marketplace inside the application. We recommend starting with the ",[113,15216,15217],{},"Waaila – GA Starting Kit"," containing a set of predesigned basic tests that are a great initial point toward higher quality data.",[727,15220,15221,15225],{},[37,15222,15224],{"href":5973,"rel":15223},[41],"Sign up","\n for Waaila app and start validating your data today for free.\n",[12,15227,15228],{},[148,15229],{"alt":15230,"src":15231,"title":15232},"preview of Waaila Market place","\u002Fupload\u002Fwaailastartingkit.webp","Waaila Starting Kit",[16,15234,15236],{"id":15235},"setup-a-dataset-and-use-the-test-editor","Setup a dataset and use the Test Editor",[12,15238,15239,15240,15242,15243,15245,15246,15249,15250,15253],{},"In this section, we explain how to create a dataset from a test collection in Marketplace and provide a brief description of the Test Editor where individual tests can be edited and run. To start using the ",[113,15241,15217],{},", go to Waaila Marketplace, select the ",[113,15244,15217],{}," test set, open it and click in ",[422,15247,15248],{},"“Add to library”"," button. When the test set copies to your library of tests, click on ",[422,15251,15252],{},"“Use in dataset”"," button.",[244,15255,15257],{"id":15256},"how-to-create-a-new-dataset","How to create a new dataset",[252,15259,15260,15266,15273,15276,15286,15289,15292],{},[255,15261,15262,15263],{},"Select an existing depot where the dataset should be located or create a new one by selecting the option ",[422,15264,15265],{},"\"Create a new depot\".",[255,15267,15268,15269,15272],{},"Next, select the option to ",[422,15270,15271],{},"\"Create a new dataset\""," (tests can also be added from the library to an existing dataset in this step if you already have some existing datasets).",[255,15274,15275],{},"Select the provider account - if you are using your main account with which you logged in to Waaila, it is offered in the selection field; if you need to connect a new account, follow authentication below the field.",[255,15277,15278,15279,591,15282,15285],{},"From listed data sources, select an ",[422,15280,15281],{},"account, property,",[422,15283,15284],{},"view"," that you want to use for this testing.",[255,15287,15288],{},"Set a custom name or leave the existing name.",[255,15290,15291],{},"Optionally add a description.",[255,15293,15294,15295],{},"Confirm the configuration by clicking ",[422,15296,15297],{},"\"Save\".",[12,15299,15300,15301,15304,15305,15308],{},"Upon creating a dataset, the dataset opens, and you can run and edit the tests. To run all tests, you can use the dedicated button above the list of tests, called ",[422,15302,15303],{},"\"Run all tests\"",". However, you can also open the ",[422,15306,15307],{},"Test Editor"," by clicking on a test and there you can examine the test in detail, run the single test directly or edit its content.",[12,15310,15311],{},"The Test Editor page is divided into several parts. On the top, below the navigation line, there is the summarized information about the test, including its name and description. Below the information is a multi-functional button, allowing you to run the test. The main parts of the test are the Query logic and the Test logic where the Query logic specifies which data you want to load for your test and the Test logic manipulates the data, typically checks some condition,s and outputs the result. When you evaluate the test in the Test Editor, the result appears above the Query logic and Test logic.",[12,15313,15314],{},[148,15315],{"alt":15316,"src":15317,"title":15318},"Preview of Waaila App, test editing","\u002Fupload\u002Fwaailastartingkit-testeditor.webp","Waaila Test Editor",[16,15320,15322],{"id":15321},"how-to-run-and-interpret-tests-in-waaila-ga-starting-kit","How to run and interpret tests in Waaila – GA Starting Kit",[12,15324,15325,15326,15328],{},"In the test collection ",[113,15327,15217],{}," there are five basic tests that can help you start with your data quality validation in Waaila. In the following subsections, we explain each test individually and show you how to interpret its result.",[244,15330,15332],{"id":15331},"test-1-number-of-sessions-for-the-past-28-days-w0210","TEST 1 – Number of sessions for the past 28 days (W0210)",[12,15334,15335,15336,15339],{},"The first test offers a simple verification that there are indeed some data measured in your Google Analytics. It extracts data about the number of sessions in the last 28 days (up to and including yesterday’s data). The test passes if there is at least one session measured in that period and therefore it ",[113,15337,15338],{},"serves as an initial check"," for starting with data quality evaluation. Apart from a pass or fail the test also outputs the actual number of sessions if it is positive. On the included screenshot of the Waaila app, you can see the result for a site with 45 thousand sessions in the past 4 weeks.",[12,15341,15342],{},[148,15343],{"alt":76,"src":15344},"\u002Fupload\u002Fwaailastartingkit-testresults.webp",[12,15346,15347,15348,15351,15352,1296],{},"The test could be easily modified to compare the number of sessions to a fixed number (by changing the threshold in the assert function in the Test logic) or to check the measurement for a different period (by editing the date range in the Query logic). To verify that there has not been a blackout in measurement yesterday, there is an already prepared test ",[113,15349,15350],{},"Measurement blackout"," in the test collection ",[113,15353,15354],{},"Waaila - General Information and Checks",[12,15356,15357,15358,15361],{},"It is possible to extend the test for dynamic comparison by including data from past months and evaluating the current number of sessions with the average number of sessions per 4 weeks in the past. Alternatively, the most sophisticated extension to this test offers our new feature, ",[113,15359,15360],{},"anomaly detection",". This feature allows you to follow the dynamics of your weekly or daily sessions and informs you when the values jump significantly as compared to their trends and cyclical patterns.",[12,15363,15364],{},"The graph below provides an illustration of the data. Within the last week of daily session data, there happened a relatively large downward jump in the daily number of sessions. However, if not compared to the weekly pattern, it could go easily unnoticed. While in this case, this jump could be explained by the Czech state holiday on October 28th, in another case it could be caused by some error in the measurement or in the website functionality and would require further investigation and remediation.",[12,15366,15367],{},[148,15368],{"alt":76,"src":15369},"\u002Fupload\u002Fwaailastartingkit-sessions.webp",[244,15371,15373],{"id":15372},"test-2-hostname-overview-w0220","TEST 2 – Hostname overview (W0220)",[12,15375,15376,15377],{},"The next test provides information on all hostnames and their basic measurement statistics (sessions, page views, and transactions) over the past 28 days. This is not a test in the true sense as it does not automatically evaluate any condition. What it does is that it ",[113,15378,15379],{},"provides information that you need to review and decide what steps to take.",[12,15381,15382,15383,15386],{},"If you have a single-domain website, you should typically find only one line in the table (as illustrated on the included table below). If there is anything surprising in the output, you can dig deeper into it with the help of another prepared test set ",[113,15384,15385],{},"Waaila - Hostnames (single-domain)"," dedicated for checking hostname-relate measurement for a single-domain website.",[12,15388,15389],{},[148,15390],{"alt":76,"src":15391},"\u002Fupload\u002Fwaailastartingkit-hostnameok.webp",[12,15393,15394,15395,15398],{},"For multi-domain websites, you can analyze your data using the ",[113,15396,15397],{},"Waaila - Hostnames (multi-domain)"," test set. You will need to set the list of expected hostnames there to receive the best results. The table below shows an example of a hostname overview for a website with two domains, where the two domains are measured correctly but there are other two hostnames incorrectly included.",[12,15400,15401],{},[148,15402],{"alt":76,"src":15403},"\u002Fupload\u002Fwaailastartingkit-hostnameerror.webp",[244,15405,15407],{"id":15406},"test-3-limit-number-of-hits-w0270","TEST 3 – Limit number of hits (W0270)",[12,15409,15410,15411,15414],{},"The third test is tailored for ",[113,15412,15413],{},"checking the optimal use of Google Analytics"," regarding its limits for free use. The free version of Google Analytics has a limit on the number of hits it can collect. Ingesting more than 10 million hits a month per property has an impact on how your data are processed and stored. Also, the measurement will be slow, and larger sampling errors will appear than before. However, if you have a paid version of Google Analytics, you do not need to run this test.",[12,15416,15417],{},"The test consists of two checks and an informative value:",[327,15419,15420,15428,15436],{},[255,15421,15422,15423,15425],{},"if there are more than 20 million hits in the last 28 days (twice the limit for the free version), the test fails",[4635,15424],{},[148,15426],{"alt":76,"src":15427},"\u002Fupload\u002Fwaailastaringkit-limitnumberfail.webp",[255,15429,15430,15431,15433],{},"when the number of hits reaches the limit of 10 million (but stay below 20 million), the test issues a warning",[4635,15432],{},[148,15434],{"alt":76,"src":15435},"\u002Fupload\u002Fwaailastaringkit-limitnumberwarning.webp",[255,15437,15438,15439,15441],{},"if the test passes, it only reports the number of hits",[4635,15440],{},[148,15442],{"alt":76,"src":15443},"\u002Fupload\u002Fwaailastaringkit-limitnumberpass.webp",[12,15445,15446],{},"Based on the results you can decide whether you need to upgrade your Google Analytics version and in case no action needs to be done yet, decide how often you need to run this test to check the threshold.",[244,15448,15450],{"id":15449},"test-4-click-data-in-ga-w0410","TEST 4 – Click data in GA (W0410)",[12,15452,15453,15454,15457],{},"The following test offers another simple verification that the data that you need is actually measured. In this case, it ",[113,15455,15456],{},"focuses on the advertisement clicks"," and determines whether the number of clicks on ads in the past 28 days is above zero. These clicks are evaluated to measure the intensiveness of the usage of the Ads (CPC). If no clicks are recorded in Google Analytics, it can indicate that Google Ads is not connected to Google Analytics, or that a technical issue is occurring within your website.",[12,15459,15460],{},"If no advertisement clicks are measured, the test issues a warning as can be seen in the picture below. As you have seen in the previous test, Waaila uses a warning (compared to a fail) when the problem found is less significant, because in the previous test the number of hits can still grow and be measured. Similarly, Waaila issues a warning, and not fail, in case no advertisement clicks are measured due to the fact that no information on advertisement clicks does not threaten to decrease profit immediately.",[12,15462,15463],{},[148,15464],{"alt":76,"src":15465},"\u002Fupload\u002Fwaailastaringkit-clickdataga.webp",[12,15467,15468,15469,3837,15472,3837,15474,591,15477,1296],{},"Further prepared tests for the investigation of basic measurement can be found mainly in two sets of tests available in the marketplace: ",[113,15470,15471],{},"Waaila - General Information",[113,15473,9948],{},[113,15475,15476],{},"Checks",[113,15478,15479],{},"Waaila - Measurement Overview",[244,15481,15483],{"id":15482},"test-5-correct-generation-of-cid-client-id-w0510","TEST 5 - Correct generation of CID (client ID) (W0510)",[12,15485,15486,15487,15490,15491,15494],{},"The last test in the Waaila – GA Starting Kit checks the ",[113,15488,15489],{},"generation of client IDs"," by evaluating the number of users versus the number of sessions. There ",[113,15492,15493],{},"must be significantly more sessions than users",". If it does not hold, it might show a technical problem and will therefore require deeper analysis.",[12,15496,15497],{},"If the ratio of sessions per user decreases below a certain threshold, the test fails. The default threshold used by the test is 1.05, therefore there can be as few as 5 % more sessions than users (e.g., if only 5 % of clients return for a second session and nobody for a third one) before the test fails. The results are presented by the device types so that you can check for which device there has been a problem (in the presented example, there is an issue with measurement for mobile users).",[12,15499,15500],{},[148,15501],{"alt":76,"src":15502},"\u002Fupload\u002Fwaailastartingkit-cid.webp",[16,15504,1643],{"id":1642},[12,15506,15507,15508,15511,15512,15514],{},"To summarize, the application Waaila offers you a great way to ",[113,15509,15510],{},"evaluate your data measurement quality",". This article introduces Waaila through focusing on one of its prepared test sets, ",[113,15513,15217],{},", explaining the mechanics of tests and presenting the tests on illustrative examples. With the test explanations we included further recommendations for individual tests or other test sets, so from here, you can directly proceed with your data evaluation in Waaila.",[12,15516,15517,15518,1296],{},"If the prepared tests do not cover all your needs, you can write your own tests, with the help of our extensive ",[37,15519,15522],{"href":15520,"rel":15521},"https:\u002F\u002Fwaaila.com\u002Fen\u002Fdocs\u002Fwaaila\u002Fstart\u002Fgetting-started\u002F",[41],"documentation",[12,15524,15525,15526,15531,15532,1296],{},"If you have any questions regarding Waaila, you can ",[37,15527,15530],{"href":15528,"rel":15529},"https:\u002F\u002Fwaaila.com\u002Fen\u002Fabout",[41],"contact us"," via the Waaila website or write directly to the ",[37,15533,15535],{"href":15534},"mailto:support@waaila.com","Waaila support team",[209,15537,960],{"link":211,"button":212},{"title":76,"searchDepth":77,"depth":77,"links":15539},[15540,15543,15550],{"id":15235,"depth":77,"text":15236,"children":15541},[15542],{"id":15256,"depth":389,"text":15257},{"id":15321,"depth":77,"text":15322,"children":15544},[15545,15546,15547,15548,15549],{"id":15331,"depth":389,"text":15332},{"id":15372,"depth":389,"text":15373},{"id":15406,"depth":389,"text":15407},{"id":15449,"depth":389,"text":15450},{"id":15482,"depth":389,"text":15483},{"id":1642,"depth":77,"text":1643},"\u002Fupload\u002Fwaailatitle.webp",{},"\u002Fen\u002Fblog\u002Fstarting-with-waaila","2021-02-08T09:21:17.000+00:00",9.88,[999,226,15557],"content\u002Fen\u002Fblog\u002Fdon-t-let-your-data-strategy-slow-your-business-down.md",{"title":15206,"description":15211},"en\u002Fblog\u002Fstarting-with-waaila","You decided to finally start validating your data in Google Analytics and already connected them into the Waaila app. Yet how you should start? Here we explore a few tests from the Waaila – Google Analytics Starting Kit.","BMQ3TtGFkAi1y2lwxpYehaeRqHepw0W_SwMkxyYyPbs",{"id":15563,"title":15564,"author":7,"body":15565,"category":7,"description":15569,"extension":83,"image":15631,"isToc":85,"langAlt":7,"meta":15632,"metaDescription":7,"navigation":88,"path":15633,"published":88,"publishedAt":15634,"readingTimeMinutes":15635,"readingTimeText":692,"relatedArticles":7,"seo":15636,"stem":15637,"teaser":15638,"updatedAtCustom":7,"__hash__":15639},"blog_en\u002Fen\u002Fblog\u002Funiversal-analytics-backup.md","Universal Analytics historical data backup",{"type":9,"value":15566,"toc":15624},[15567,15570,15576,15579,15585,15588,15592,15598,15601,15607,15610,15614,15618,15621],[12,15568,15569],{},"The realm of web measurement is gradually shifting away from supporting the old Universal Analytics (UA). Knowing this change is imminent, it's crucial to prepare; otherwise, the data collected over the years could be at risk of being lost. Starting July 2024, Google Analytics will no longer support old properties. The upcoming removal of UA properties may disrupt processes and decision-making relying on data-driven insights.",[244,15571,15573],{"id":15572},"how-to-save-your-data",[113,15574,15575],{},"How to save your data?",[12,15577,15578],{},"Bulk data downloading through the API might seem like a simple solution, but it's not feasible. The challenge lies in the inability to easily download all data, requiring a comprehensive backup strategy. In this article, we'll outline our approach, crafted by the Cross Masters data team.",[244,15580,15582],{"id":15581},"identifying-key-datasets",[113,15583,15584],{},"Identifying Key Datasets",[12,15586,15587],{},"To address the complexity of data downloading, we begin by identifying the most utilized reports and datasets. These include tables related to traffic acquisition, sales performance, user behavior, and other critical sets. This prioritization ensures the preservation of the most valuable information. Depending on your team's needs, you can expand the set of valuable data by including other datasets used in the past.",[278,15589],{"source":15590,"caption":15591},"\u002Fupload\u002Fdatasetsimage.webp","The most used Universal Analytics datasets among most clients",[244,15593,15595],{"id":15594},"data-downloading-via-data-api",[113,15596,15597],{},"Data Downloading via Data API",[12,15599,15600],{},"Once key datasets are identified, we use the Data API for systematic data downloading. The data is stored in Google Cloud Storage, facilitating easy manipulation and transformation in BigQuery. This step considers UA's sampling and deduplication rules to preserve data accurately. This is particularly challenging because Universal Analytics' Data API has its limitations and specific behavior.",[244,15602,15604],{"id":15603},"comprehensive-reporting-with-looker-studio-or-power-bi",[113,15605,15606],{},"Comprehensive Reporting with Looker Studio or Power BI",[12,15608,15609],{},"Our data backup strategy concludes with comprehensive reporting using Looker Studio or Power BI. These tools ensure that your downloaded and relocated data is easily accessible, interpreted, and ready for strategic decision-making. These reports offer a familiar view of the data you are accustomed to seeing in Universal Analytics.",[278,15611],{"source":15612,"caption":15613},"\u002Fupload\u002Freportimage.webp","Example of the custom report built on top of Universal Analytics data",[244,15615,15616],{"id":59},[113,15617,60],{},[12,15619,15620],{},"Given the scheduled deletion of Universal Analytics properties in 2024, developing a data backup strategy is not only smart but necessary. Our meticulous approach, encompassing the identification of important datasets, downloading through the Data API, and utilizing reporting tools, ensures that CrossMasters will safeguard your valuable data. This guarantees uninterrupted access to business intelligence for strategic decision-making and future growth goals.",[209,15622,15623],{"link":211,"button":212},"\nDo you want to save your UA data from being irreversibly deleted?\n",{"title":76,"searchDepth":77,"depth":77,"links":15625},[15626,15627,15628,15629,15630],{"id":15572,"depth":389,"text":15575},{"id":15581,"depth":389,"text":15584},{"id":15594,"depth":389,"text":15597},{"id":15603,"depth":389,"text":15606},{"id":59,"depth":389,"text":60},"\u002Fupload\u002Fua-backup-titleimage.webp",{"language":87},"\u002Fen\u002Fblog\u002Funiversal-analytics-backup","2024-01-12T12:00:00+00:00",2.155,{"title":15564,"description":15569},"en\u002Fblog\u002Funiversal-analytics-backup","How to save your Universal Analytics data?","fVcHTj_HeaL8cMPpYo4tg2xK5x_UYMIDzIMEMsXBgBk",{"id":15641,"title":15642,"author":7,"body":15643,"category":7,"description":15647,"extension":83,"image":15950,"isToc":85,"langAlt":7,"meta":15951,"metaDescription":7,"navigation":88,"path":15952,"published":88,"publishedAt":15953,"readingTimeMinutes":15954,"readingTimeText":552,"relatedArticles":15955,"seo":15957,"stem":15958,"teaser":15959,"updatedAtCustom":7,"__hash__":15960},"blog_en\u002Fen\u002Fblog\u002Fwhat-is-ethical-hacking.md","What is ethical hacking?",{"type":9,"value":15644,"toc":15943},[15645,15648,15655,15658,15678,15681,15685,15696,15700,15706,15712,15721,15727,15736,15742,15751,15756,15759,15765,15768,15774,15777,15783,15786,15792,15795,15801,15804,15810,15813,15817,15832,15836,15839,15919,15923,15941],[12,15646,15647],{},"The two words, seemingly contradictory, when put together mean bypassing the security to uncover data breaches, system threats, and weak spots. Ethical hacking, or also known as penetration tests, is an intrusion into systems and networks with the purpose of fixing the vulnerable points and improving security.",[12,15649,15650,15651,15654],{},"To block the attacker, one must think like a hacker. Ethical hackers can use the same methods as the malicious hackers would, ",[113,15652,15653],{},"the difference is the permission"," of the investigated company to prevent the wicked exploitation.",[12,15656,15657],{},"A few examples of what the ethical hacker is looking for are:",[327,15659,15660,15663,15666,15669,15672,15675],{},[255,15661,15662],{},"Injection attacks",[255,15664,15665],{},"Data poisoning",[255,15667,15668],{},"Exposure of sensitive data",[255,15670,15671],{},"Changes in security settings",[255,15673,15674],{},"Authentication protocols breach",[255,15676,15677],{},"Components used in the system or network that may be used as access points",[727,15679,15680],{},"\nAn important part of ethical hacking is broad documentation of the methods, steps, and outcomes and reports of all the weaknesses that were discovered during the process.\n",[16,15682,15684],{"id":15683},"benefits-of-ethical-hacking","Benefits of ethical hacking",[327,15686,15687,15690,15693],{},[255,15688,15689],{},"Discovery of vulnerabilities to fix the weak points",[255,15691,15692],{},"Assurance of the data security to increase customers trust",[255,15694,15695],{},"Secure network implementation that can prevent breaches",[16,15697,15699],{"id":15698},"types-of-hackers","Types of hackers",[12,15701,15702,15703,1296],{},"The most popular typology of hackers divides them into three groups: white, gray, and black, depending on the ",[113,15704,15705],{},"permission",[860,15707,15709],{"id":15708},"white",[113,15710,15711],{},"White",[12,15713,15714,15715,15720],{},"Ethical hackers are called the ",[113,15716,15717],{},[422,15718,15719],{},"White Hats"," and the hacking they performed is with the acknowledgment of the hacked organization.",[860,15722,15724],{"id":15723},"black",[113,15725,15726],{},"Black",[12,15728,15729,15730,15735],{},"On the other side, the ",[113,15731,15732],{},[422,15733,15734],{},"Black Hats"," access the systems and networks illegally and violently and whose purpose is to compromise and destroy information. Simply put, the White hats work to prevent the Black hats from taking the benefit.",[860,15737,15739],{"id":15738},"gray",[113,15740,15741],{},"Gray",[12,15743,15744,15745,15750],{},"However, in the middle stand the ",[113,15746,15747],{},[422,15748,15749],{},"Gray Hats",", who also illegally enter the systems and networks, yet with no malicious intentions. They usually perform out of fun and inform the organization about the findings.",[12,15752,15753],{},[148,15754],{"alt":76,"src":15755},"\u002Fupload\u002Fethical-hacker.webp",[12,15757,15758],{},"Another division of hackers is based on their motivation.",[860,15760,15762],{"id":15761},"hacktivists",[113,15763,15764],{},"Hacktivists",[12,15766,15767],{},"Political or social stand drives hacktivists motivation to infiltrate and hack systems as a form of protest. Usually, their activities lead to the website's main page or traffic errors.",[860,15769,15771],{"id":15770},"cyber-warrior",[113,15772,15773],{},"Cyber Warrior",[12,15775,15776],{},"In this case, hackers disrupt another system of another country as a part of cyberwarfare, for example as a defense or sabotage, typically for strategic or military purposes. They can address privacy or liberty concerns as a part of national cybersecurity.",[860,15778,15780],{"id":15779},"black-box-penetration-tester",[113,15781,15782],{},"Black Box Penetration Tester",[12,15784,15785],{},"Organizations can hire hackers to penetrate their systems without any previous knowledge or giving them clues. The goal is to simulate malicious breach when the hacker identifies and report back any vulnerability of their systems.",[860,15787,15789],{"id":15788},"white-box-penetration-tester",[113,15790,15791],{},"White Box Penetration Tester",[12,15793,15794],{},"Opposite to the previous type of testing penetration, the white box penetrating (also known as insider breach) is executed with the complete knowledge of the systems, provided by the organization.",[860,15796,15798],{"id":15797},"licensed-penetration-tester",[113,15799,15800],{},"Licensed Penetration Tester",[12,15802,15803],{},"Once the tester receives the adequate certification, they can work as the tester professionals for a hire, breaching systems for the organization as the employee or as a contractor, both black and white box hacking.",[860,15805,15807],{"id":15806},"elite-hackers",[113,15808,15809],{},"Elite Hackers",[12,15811,15812],{},"In the community of hackers, the most experienced ones are referred to as Elite Hackers, however, this term applies to white as well as for black hat hackers. Normally, they are the first to know about new exploits.",[16,15814,15816],{"id":15815},"key-points-of-ethical-hacking","Key points of ethical hacking",[12,15818,15819,15820,15823,15824,15827,15828,15831],{},"Not only the purpose but also protocols draw the difference between malicious and ethical hackers. The second group follows ",[113,15821,15822],{},"legal"," points, meaning they obtain approval before they initiate the assessment, which can also include legal paperwork, e.g., non-disclosure agreement, depending on the ",[113,15825,15826],{},"sensitivity of the data",". To remain within the legal framework, the ethical hackers test only the ",[113,15829,15830],{},"approved scope."," The final but important part, as already mentioned in the previous paragraphs, is the extensive report on the discovered outcomes and vulnerabilities.",[16,15833,15835],{"id":15834},"how-does-it-work","How does it work",[12,15837,15838],{},"Although ethical hacking follows a code, standard processes, and best practices, hackers develop their own approach. To demonstrate how the testing proceeds (but it is not to be followed as directed), here are a few steps that are usually taken:",[252,15840,15841,15863,15871,15879,15887,15895,15903,15911],{},[255,15842,15843,15846,15848,15849],{},[113,15844,15845],{},"Scouting",[4635,15847],{},"The first and important step is to gather all the relevant information about the system of the organization, the security structure, its components, etc.",[327,15850,15851,15857],{},[255,15852,15853,15856],{},[113,15854,15855],{},"Active scouting –"," risky approach toward the system exploration via active interaction. The information collected is usually accurate, yet the hacker risks being caught and blocked out by the administrators.",[255,15858,15859,15862],{},[113,15860,15861],{},"Passive scouting –"," the hacker gathers intel of the system indirectly. This approach is much safer yet may not provide sufficient information.",[255,15864,15865,15868,15870],{},[113,15866,15867],{},"Footprinting",[4635,15869],{},"This system intrusion approach allows the hacker to determine the strategy, which systems to target, and what would be the appropriate way to attack them. This method can be categorized under scouting, actively or passively. During active footprinting, the hacker usually collects sensitive information such as email and IP addresses, phone numbers and names, and more employee information.",[255,15872,15873,15876,15878],{},[113,15874,15875],{},"Fingerprinting",[4635,15877],{},"\nActive fingerprinting requires to deliver specially developed packets to the targeted system, record the response for the information. Before any intrusion, determining the attacked operating system provides a significant advantage and eases the job. It also involves a deep analysis of the packets.",[255,15880,15881,15884,15886],{},[113,15882,15883],{},"Scanning",[4635,15885],{},"\nFor the purpose of identifying vulnerabilities and targeting them, this step involves breaching using various tools. The most common tools are Nexus, Nexpose, NMAP.",[255,15888,15889,15892,15894],{},[113,15890,15891],{},"Gaining access",[4635,15893],{},"\nAfter the scanning, the hacker exploits the weaknesses to gain access, without bringing any attention to the breach.",[255,15896,15897,15900,15902],{},[113,15898,15899],{},"Retaining access",[4635,15901],{},"\nOnce the systems are accessed, it is crucial for the hacker to deploy backdoors (allow the hacker to access the system in the future) and payload (activities after the system had been accessed) in the systems.",[255,15904,15905,15908,15910],{},[113,15906,15907],{},"Clearing\u002Fcovering tracks",[4635,15909],{},"\nAfter the system has been disrupted, the hacker deletes traces of unauthorized access and activities, as the breach can be identified. This step is undertaken especially by white hat hackers to mimic the approach of black hat hackers.",[255,15912,15913,15916,15918],{},[113,15914,15915],{},"Reporting",[4635,15917],{},"\nThe last, yet the key step for the company, is the in-depth report on the variabilities, weaknesses, threats, what steps were taken, what tools the hacker used, progress, problems, success rate, and potential harms.",[16,15920,15922],{"id":15921},"limits","Limits",[12,15924,15925,15926,15929,15930,15933,15934,15937,15938,1296],{},"Although it may sound as if ethical hackers can hack without limitations to reveal the real issue, they still need to operate within agreed boundaries. One of the most restrictive frameworks is the ",[113,15927,15928],{},"scope"," of the attack. To achieve the defined goals, the organization and the attacker agree on the extent of the investigation. Another limit that can prevent the authenticity and real attack simulation is the ",[113,15931,15932],{},"methods",", e.g., avoiding some tests that can cause the servers to crash. ",[113,15935,15936],{},"Resources"," are usually also a big constrain. Compared to the malicious attackers, ethical hackers are also limited ",[113,15939,15940],{},"by deadlines and budgets",[209,15942,960],{"link":211,"button":212},{"title":76,"searchDepth":77,"depth":77,"links":15944},[15945,15946,15947,15948,15949],{"id":15683,"depth":77,"text":15684},{"id":15698,"depth":77,"text":15699},{"id":15815,"depth":77,"text":15816},{"id":15834,"depth":77,"text":15835},{"id":15921,"depth":77,"text":15922},"\u002Fupload\u002Fethical-hacking-cover.webp",{},"\u002Fen\u002Fblog\u002Fwhat-is-ethical-hacking","2021-01-13T02:44:18.000+00:00",6.08,[15956],"content\u002Fen\u002Fblog\u002Fwhy-learning-from-mentors-is-the-best-way-toward-a-successful-career-in-data-science-in-the-2020s.md",{"title":15642,"description":15647},"en\u002Fblog\u002Fwhat-is-ethical-hacking","Increasing number of attacks and breaches can be avoided with more secured systems. One option to find where the problems lays is with ethical hacking.","gCnQLYeeYDBSOHYFgH4E9F8MkpS-BEYn0CRlO-MydIU",{"id":15962,"title":15963,"author":7,"body":15964,"category":7,"description":15968,"extension":83,"image":16159,"isToc":85,"langAlt":7,"meta":16160,"metaDescription":7,"navigation":88,"path":16161,"published":88,"publishedAt":16162,"readingTimeMinutes":16163,"readingTimeText":7822,"relatedArticles":16164,"seo":16165,"stem":16166,"teaser":16167,"updatedAtCustom":7,"__hash__":16168},"blog_en\u002Fen\u002Fblog\u002Fwhy-learning-from-mentors-is-the-best-way-toward-a-successful-career-in-data-science-in-the-2020s.md","Why to start learning from data science mentors in the 2020s?",{"type":9,"value":15965,"toc":16139},[15966,15969,15973,15976,15979,15982,15986,15989,15992,15995,15999,16002,16006,16009,16013,16016,16045,16049,16052,16056,16059,16062,16065,16069,16072,16078,16081,16085,16088,16092,16095,16099,16102,16106,16109,16113,16116,16120,16123,16127,16130,16132,16135],[12,15967,15968],{},"If you are familiar with jobs in data science, you may have seen many articles on how these positions are growing in popularity among employers. The number of expert educational options has grown extensively over recent years and the labor market has expanded as well. However, the promotional articles can be misleading, creating misconceptions, and can be discouraging when reality appears to be very different.",[16,15970,15972],{"id":15971},"it-is-not-the-2000s-anymore","It is not the 2000s anymore",[12,15974,15975],{},"When Data Science was introduced to the world, the labor market was not ready for this new highly specialized field. The term data science was presented as an alternative to computer science in 1974. However, data scientist as a job title was not used until 2008.",[12,15977,15978],{},"In the beginning, companies hired inexperienced people, mostly right after universities, which did not offer relevant education yet. In the years of 2016-2019, data scientist was considered the best job and the third-best ranked for 2020.",[12,15980,15981],{},"With the increasing number of investments into shifting toward data-driven solutions, the need for experts in the field rises as well. Even though the number of open positions is growing, there aren’t enough skilled professionals, it is hard to land a good job and develop yourself. The gap between supply and demand within the respective field is quite deep, yet those who try to find it difficult.",[16,15983,15985],{"id":15984},"it-is-getting-harder-to-get-noticed","It is getting harder to get noticed",[12,15987,15988],{},"With the progress of the field and technology, companies also raise their expectations.",[12,15990,15991],{},"It can be compared to trying to fish in the very small pool with other 100 fishermen and still not every fish will be picked out. Many people know what data science is, have basic skills, want to find a job in this area, see hundreds of job postings on lower levels and despite that still don’t get employed.",[12,15993,15994],{},"From many discussions with potential candidates, hiring companies, and our market observations, that the problem is a lack of particular skills, not just general understanding, which are hard to acquire independently, and it takes too long to get on the entry-level. Unless you have a mentor that directs you the right way.",[16,15996,15998],{"id":15997},"applied-theory","Applied theory",[12,16000,16001],{},"Advice and information from an expert can really make a change and help to level up on the career path. And not just that. Many studies have shown that learning something new efficiently is when it is accompanied by practice, seeing the real examples. It makes the information more “tangible” when only reading a book can be too abstract, especially in such a complex field that is data science.",[16,16003,16005],{"id":16004},"what-are-the-main-concerns","What are the main concerns?",[12,16007,16008],{},"Usually, when we talk to data science newbies, they face different challenges on their way to becoming data science specialists, but they agree on a few things when it comes to professional mentorship.",[244,16010,16012],{"id":16011},"problem-1-who-do-you-need-mentor-or-a-tutor","Problem #1: Who do you need? Mentor or a tutor?",[12,16014,16015],{},"Many definitions describe a professional, who can help you develop yourself in various fields. They might seem all the same, but there is a difference in the meaning. Just to briefly demonstrate the distinction of a few:",[327,16017,16018,16025,16032,16038],{},[255,16019,16020,16021,16024],{},"A ",[113,16022,16023],{},"mentor"," provides support, advice, and guidance in navigating work situations, shares knowledge, resources, and expertise, gives feedback, and constructive criticism, helps to look at problems from a different perspective, and finds an appropriate solution. In general, a mentor is an example to emulate and helps to develop relevant skills for the present project and future career path.",[255,16026,16027,16028,16031],{},"A more structured and formal way of development is provided by a ",[113,16029,16030],{},"coach"," in a shorter time. A coach helps to defined goals and particular tasks to be followed, however, they do not necessarily have the first-hand experience in the field they coach. Their main goal normally is to increase your performance.",[255,16033,16034,16035,1296],{},"More established senior in the field that provides connections to important people and resources, advocates for you and opens new doors regarding significant career advancement is known as a ",[113,16036,16037],{},"sponsor",[255,16039,16040,16041,16044],{},"The term ",[113,16042,16043],{},"tutor"," is used more commonly in academic circles. They are proficient in a specific subject and educate that specific technical expertise, help to fix immediate or short-term issues.",[244,16046,16048],{"id":16047},"problem-2-where-do-you-find-the-expert","Problem #2: Where do you find the expert?",[12,16050,16051],{},"Another obstacle to overcome is to find a reliable expert you can trust, who will be approachable and willing to guide you. Commonly, people seek advice in their circles, on the job, within a community, but when a person is just starting, the network is very small. Survey on Mentorship, help in 2019, revealed, that the demand for mentors is high, yet the supply is quite low. This means, not only it is hard to find a person with particular expertise willing to mentor you, they might not be available when you need them. And professional mentoring is very expensive",[244,16053,16055],{"id":16054},"problem-3-will-the-acquired-knowledge-be-useful-for-my-new-jobproject","Problem #3: Will the acquired knowledge be useful for my new job\u002Fproject?",[12,16057,16058],{},"If you ever tried to learn something new, you most probably found too many articles to read, too many courses to take, classes, podcasts, videos, books, etc. You see lots of similarities within all the content, sometimes find a new perspective. And not to mention how many different paths you can choose, e.g. what programing language you need? What tool do you need to use? But what is relevant and needed and what is not that important?",[12,16060,16061],{},"We have found out, that many people who wanted to learn the basics of data science spend too much time on actually finding the right material, 43% of them gives it up and those, you perceived in studying realize after, that what they learned is not what they need to land a good job. An example, you learn SQL and visualization in Tableau, and the employers need Python, R, and MS PowerBI. A natural response might be to learn the other combination. But how long can you really do that?",[12,16063,16064],{},"However, if you could turn it around, start with the project, and then learn all the requirements, it would be not only faster but more importantly effective.",[16,16066,16068],{"id":16067},"incubating-future-data-masters","Incubating future Data Masters",[12,16070,16071],{},"We noticed a gap in the labor market and applied our know-how, experience, and skills to develop others. It not only lets companies progress toward more data-driven solutions and also lets not so skilled people to find new interesting projects to work on.",[12,16073,16074,16077],{},[422,16075,16076],{},"Data Master Incubator"," helps ambitious people to dive in and advance in their career in data science, and deliver new projects successfully. The uniqueness of our approach lays in the reverse strategy. We seek the potential to develop, not years of experience. We connect interesting projects and people, who want to learn. Companies trust us to contribute to their internal team by sharing our extensive experience of custom-built solutions and technological skills and thus support their growth.",[12,16079,16080],{},"During the incubating period, you work on the given project, which usually is challenging and more advance than what you would normally do. However, our experts guide you to deliver better results. This way, you learn, the project progresses faster, and you are more successful in your job in front of your team and employers. On the other side, the company is sure, the project will be executed the best way possible, thanks to the supervision of our mentors, who are also working on similar projects therefore not out of touch or just speaking theoretically. However, the newly gained knowledge stays in your team afterward. Typically, the cooperation doesn’t end with one project and we continue to grow together.",[16,16082,16084],{"id":16083},"benefits-of-having-a-guidance","Benefits of having a guidance",[12,16086,16087],{},"Experienced data professionals have navigated their own journey with success.",[244,16089,16091],{"id":16090},"shared-knowledge-and-experience","Shared knowledge and experience",[12,16093,16094],{},"Mentor advice and support can guide you, help you to develop the necessary skills, soft and hard skills. One of the most valued areas within mentoring is when you are giving a new very challenging project that required substantial knowledge and advanced skills. Creating strategies for executing the project efficiently can be difficult when you need to first understand the problem, figure out the right approach, and execute it.",[244,16096,16098],{"id":16097},"constructive-and-continuous-feedback","Constructive and continuous feedback",[12,16100,16101],{},"A good mentor tells you if you do something well or not. A great mentor will explain why and steer you back on the right track if you deviate. They do not do your work and definitely do not micromanage. Freedom within a framework while gaining independence and confidence. Only praise won’t get you far, but constructive criticism helps you to sharpen your skills.",[244,16103,16105],{"id":16104},"real-rules","Real rules",[12,16107,16108],{},"What is not written in any book or brochure, are the unofficial rule, how it really works. An experienced professional has walked the lengths for years, can tell you who is the person to talk to in different situations, especially when working for big clients. That is why honesty is important when trying to learn and the well-known, yet unrecorded policies will get you ahead.",[244,16110,16112],{"id":16111},"diversity","Diversity",[12,16114,16115],{},"One kind of guidance can be limiting. The most common approach is to have one main mentor and also sometimes discuss the matters with someone from a different expert field to add a perspective. For example, Data Master Incubator provides quite a few mentors with a diverse focus, which provides an effective way of how to achieve such a variety.",[244,16117,16119],{"id":16118},"different-views-opinions-and-skills-to-broaden-horizons","Different views, opinions, and skills to broaden horizons",[12,16121,16122],{},"The best mentors fill the gap where you struggle. They indeed make your strengths stronger but more importantly, the weaknesses. The mentors, who have the exact skill sets hardly can develop you further. The quickly evolving area that data science requires constant learning, while mentorship is crucial to learn faster.",[244,16124,16126],{"id":16125},"encouraging-new-ideas-and-challenging-discussion","Encouraging new ideas and challenging discussion",[12,16128,16129],{},"Everyone has experienced a situation when somebody’s comment gave them a great idea, and it did not have to be anything too specific. And imagine having a constant flow of inspiration discussions. Mentorship is also about bringing inspiration, encouraging new fresh ideas, and helping you to turn them into reality.",[16,16131,60],{"id":59},[12,16133,16134],{},"In conclusion, mentorship is a very effective way of learning and developing new skills. Practice gives more than just a book and a few expert pieces of advice can be worth more than a professional course. Especially in the age of almost unlimited options of finding information, it is hard to recognize what is relevant and important, where to invest the energy, whom to talk to and understand better. And of course, getting feedback on your performance that is truly helpful.",[209,16136,16138],{"link":16137,"button":212},"\u002Fen\u002Fcompany\u002Fcareers\u002Fjoin","\n Sign up and learn more about how you can be a part of Cross Masters. \n",{"title":76,"searchDepth":77,"depth":77,"links":16140},[16141,16142,16143,16144,16149,16150,16158],{"id":15971,"depth":77,"text":15972},{"id":15984,"depth":77,"text":15985},{"id":15997,"depth":77,"text":15998},{"id":16004,"depth":77,"text":16005,"children":16145},[16146,16147,16148],{"id":16011,"depth":389,"text":16012},{"id":16047,"depth":389,"text":16048},{"id":16054,"depth":389,"text":16055},{"id":16067,"depth":77,"text":16068},{"id":16083,"depth":77,"text":16084,"children":16151},[16152,16153,16154,16155,16156,16157],{"id":16090,"depth":389,"text":16091},{"id":16097,"depth":389,"text":16098},{"id":16104,"depth":389,"text":16105},{"id":16111,"depth":389,"text":16112},{"id":16118,"depth":389,"text":16119},{"id":16125,"depth":389,"text":16126},{"id":59,"depth":77,"text":60},"\u002Fupload\u002Fdata-scientist-article-cover.webp",{},"\u002Fen\u002Fblog\u002Fwhy-learning-from-mentors-is-the-best-way-toward-a-successful-career-in-data-science-in-the-2020s","2020-04-26T12:00:00.000+00:00",9.03,[1674],{"title":15963,"description":15968},"en\u002Fblog\u002Fwhy-learning-from-mentors-is-the-best-way-toward-a-successful-career-in-data-science-in-the-2020s","The need for experts in the data fields rises quickly. However, getting hired is also getting harder. Unless you have a mentor that directs you the right way.","XcNDHyLSG_lHCWJxYxJW8LJPj1OV_9iBs_tnnbj7-oo",{"id":16170,"title":16171,"author":7,"body":16172,"category":1334,"description":76,"extension":83,"image":17087,"isToc":88,"langAlt":7,"meta":17088,"metaDescription":7,"navigation":88,"path":17089,"published":88,"publishedAt":996,"readingTimeMinutes":17090,"readingTimeText":17091,"relatedArticles":17092,"seo":17093,"stem":17094,"teaser":17095,"updatedAtCustom":7,"__hash__":17096},"blog_en\u002Fen\u002Fblog\u002Fzoom-in-on-measurement-hub.md","Zoom in on Measurement Hub",{"type":9,"value":16173,"toc":17058},[16174,16176,16179,16182,16185,16189,16192,16195,16199,16203,16217,16221,16224,16228,16231,16235,16238,16242,16245,16248,16251,16254,16257,16261,16264,16268,16271,16275,16298,16302,16305,16309,16312,16316,16319,16323,16326,16330,16333,16337,16340,16344,16347,16351,16354,16373,16377,16380,16383,16386,16390,16393,16395,16398,16406,16409,16412,16446,16878,16898,16902,16905,16908,16911,16998,17002,17005,17009,17013,17016,17020,17023,17027,17030,17034,17037,17041,17044,17048,17051,17055],[16,16175,6179],{"id":6178},[12,16177,16178],{},"The process for better customer experience and personalization through improved segmentation starts with data collection of customers' journeys and interactions. In order to achieve the best possible outcomes, it is necessary to collect the data uniformly and set meaningful measurements across various platforms.",[12,16180,16181],{},"When all marketing and analytical platforms are dependent on the website data, the accuracy of data and its right integration are of the utmost importance. Leveraging the collected data is a competitive advantage that generates exponentially higher marketing investment returns.",[12,16183,16184],{},"In a perfect scenario, the company has reliable, responsive, and reasonably-priced development resources, the development team is highly skilled, continually cooperates with the SEO and marketing team, or there is an affordable third-party partner. But very frequently that is not the case. The task of high-quality data collected, analyzed, and measured can be vastly complex.",[16,16186,16188],{"id":16187},"what-is-measurement-hub","What is Measurement Hub",[12,16190,16191],{},"Measurement Hub is not just a box solution, rather a group of complex scripts, yet elevated, more powerful, and more robust deployed via Tag Management System (TMS), commonly used one is Google Tag Manager (GTM). The codes are verified and are standardly pre-defined, can be slightly adjusted, or in case of a complicated case, they can be deeply overhauled. In addition to the scripts, it includes definitions of events and entities for data layer specification. The specification of the data layer is customizable to fit every specific need of every company in order to reach desirable goals. Fully implemented with an omnichannel context, Measurement Hub is dynamic, happening on the user's browser. The data is flowing through; however, it can be stored with integrated data storage. Therefore, Measurement Hub's value is not embedded in the codes only, but also in the expertise of consultancy.",[12,16193,16194],{},"Simply, Measurement Hub consists of a data layer on the front continuing to tag management system reading, consuming, and distributing the data, including establishing accurate measuring into marketing and analytical platforms. Similar to TMS implementation but much more extended.",[278,16196],{"source":16197,"caption":16198},"\u002Fupload\u002Fmhub-schema.webp","Visualization of data flow",[16,16200,16202],{"id":16201},"what-measurement-hub-covers","What Measurement Hub covers?",[327,16204,16205,16208,16211,16214],{},[255,16206,16207],{},"Data layer specification (specification of entities, parameters of entities, events)",[255,16209,16210],{},"Measurement specification (specification of mapping Data Layer into marketing and analytics platforms)",[255,16212,16213],{},"Code for all commonly used marketing and analytics platforms (codes which will be implemented into TMS)",[255,16215,16216],{},"Settings of an analytic platform",[244,16218,16220],{"id":16219},"maintenance-and-support","Maintenance and support",[12,16222,16223],{},"After the implementation, standardly you are fully independent, the code is under your ownership in your TMS. We provide an introductory explanation of the configuration and the specification is handed over in an editable document as well. Upon request, we can provide further consultations. We can also manage the Measurement hub and TMS for you.",[16,16225,16227],{"id":16226},"what-measurement-hub-does-not-cover","What Measurement Hub does not cover?",[12,16229,16230],{},"Measurement Hub doesn’t focus on settings in marketing platforms. After the implementation of Measurement Hub, management of these marketing platforms is done on the company's side or their agencies, but we can help with that. At least there will be measurement specifications for the platform administrator to see what exactly is sent there. In case of additional questions or advice, we provide consultations for the standard hourly rate.",[16,16232,16234],{"id":16233},"why-is-its-implementation-essential","Why is its implementation essential",[12,16236,16237],{},"Just naming a few of the many advantages of Measurement Hub, the emphasis lays on data layer specification creating the foundation for the rest of the measurement.",[244,16239,16241],{"id":16240},"data-layer-specification","Data layer specification",[12,16243,16244],{},"Fulfillment of Measurement Hub provides numerous advantages; however, the most valuable one is data layer specification, which imposes data consistency throughout the entire data flow to\u002Ffrom\u002Fin all the platforms, marketing, and analytical.",[12,16246,16247],{},"A well-constructed data layer (DL) can portray a roadmap to customer communication since thinking beforehand about customer interaction data supports its definition in order to connect all applications.",[12,16249,16250],{},"Making the data clean and consistent fastens the process and makes it more precise. Measurement Hub offers its own standard, which can fit any case. The specification of DL is customized for the individual needs ensuring the pre-defined requirements will be measured accurately everywhere.",[12,16252,16253],{},"Data layer specification is crucial for setting up website independence. Often, during website implementation, the data layer gets lost or broken and the measurement with it. The specification helps to discover it is broken and guides the development to fix it correctly. Additionally, the specification within Measurement Hub brings a conceptual solution and when done right from the beginning, it prevents the unnecessary failures of gradual implementation. It serves as a general overview and clear explanation of data layer events and what the data represents for the analysts.",[12,16255,16256],{},"Without the specification, the quality of the data cannot be validated with such accuracy and newcomers have nothing to understand of your data layer. To elaborate, the specification serves as a detailed manual not only for the development team but also helps your new team members to understand your data layer and measurement. It is better to show the actual documentation and explain the process in practice, than trying to describe it abstractly. From the experience, we observed it is a very handful in case you are expanding your team or there is a sudden change in staff.",[244,16258,16260],{"id":16259},"measurement-specification","Measurement specification",[12,16262,16263],{},"Mapping of entire data flow within the data infrastructure, from the data layer to each platform is important for analysts, performance teams, online marketing teams, marketing agencies, etc. Knowing what transfers where contributes not only to a better overview and a general understanding of the process, but it can set a foundation for better decisions in, for instance, marketing or business strategy, and unlocks new opportunities.",[244,16265,16267],{"id":16266},"validation","Validation",[12,16269,16270],{},"Part of the Measurement Hub implementation is a well-coordinated multilevel validation process which is done by our team of specialists who are well trained for this purpose. But there are also several tools, which are helping to reveal some errors in implementation automatically or just leverage effectiveness. Most of these tools were created by the Measurement Hub team itself for these purposes.",[244,16272,16274],{"id":16273},"among-other-advantages-are","Among other advantages are:",[327,16276,16277,16280,16283,16286,16289,16292,16295],{},[255,16278,16279],{},"Utilizing the full potential of marketing platforms",[255,16281,16282],{},"Easier implementation of custom tracking",[255,16284,16285],{},"Easy control & well-manageable code of measuring",[255,16287,16288],{},"Complex and conceptual measuring into an analytical platform",[255,16290,16291],{},"Reliable and uniform measuring of (clean) data",[255,16293,16294],{},"Automatic error tracking",[255,16296,16297],{},"Fast and easy integration of new platforms",[16,16299,16301],{"id":16300},"common-problems-when-not-having-measurement-hub-or-when-do-you-need-it","Common problems when not having Measurement Hub (or when do you need it)",[12,16303,16304],{},"Often, the question of what is behind Measurement Hub implementation, especially in the case of a bigger e-commerce website, when setting up TMS can be done internally. This is true, however, the advantage is not solely in TMS itself. TMS is a means to an end, which in this case can be better user segmentation, targeting, and consistent data structure that supports it all. It requires technical background and knowledge along with business and user understanding to be able to adjust the settings for current and future marketing purposes; to be able to think ahead and from a certain perspective.",[244,16306,16308],{"id":16307},"incorrect-data-duplicity-different-formats-unstructured-missing-data","Incorrect data: duplicity, different formats, unstructured, missing data...",[12,16310,16311],{},"Measurement Hub provides a set of codes that are implemented into TMS to make the most out of it but consistently and without duplicity. Without Measurement Hub the data is pushed in different formats causing duplicity or lost information. It can be almost impossible to put it all together after it is being pushed incorrectly.",[244,16313,16315],{"id":16314},"website-design-changes","Website design changes",[12,16317,16318],{},"If website content changes progressively, the data layer gets disrupted or disappears totally and the measurement in the analytical platform cracks and then becomes incorrect, absent, or delayed, requiring substantial changes in settings. Thanks to Measurement Hub's automatic error tracking, the broken data layer is detected on time, can be fixed without a delay and the data damage will be minimal.",[244,16320,16322],{"id":16321},"one-time-help-but-not-bringing-long-term-impact","One-time help but not bringing long-term impact",[12,16324,16325],{},"An easy and fast solution for a one-time project is not helping the company to grow. Opting for faster and simpler box solutions for smaller problems can help with the project. Measurement Hub looks at the whole picture, understanding the goal of the project and taking into consideration company growth. The elaborate conceptual approach harvests much more benefits in the long run and solves many problems.",[244,16327,16329],{"id":16328},"replacing-platform","Replacing platform",[12,16331,16332],{},"In case of a need of replacing any current platform (especially analytical) for the new one, the entire measurement can be significantly damaged. Many platforms have their own standard data layer that is developed for their own use but is not compatible with the other platforms. Therefore, its change is extremely difficult and lots of data gets lost in the process. Leveraging Measurement Hub's own data layer, which is flexible and vendor-agnostic, the substitution happens smoothly without interruptions.",[244,16334,16336],{"id":16335},"change-in-the-platform-api","Change in the platform API",[12,16338,16339],{},"Measurement Hub has its own DL standards that work for many different analytical and marketing platforms, are very flexible towards specific platforms and their changes. It is the first one to know when there is a change in the API of each platform.",[244,16341,16343],{"id":16342},"consent-management-ready","Consent management ready",[12,16345,16346],{},"With the personal data law enforcement, customer consent needs to be integrated transversally on the entire website. Most TMS lack this extension, especially with GTM it can be almost impossible to execute. Measurement Hub is ready for any Consent Management System, the most common we use is Wecoma, which is in compliance with personal data protection laws, such as GDPR in the EU or CCPA in the US, or any other regulation.",[16,16348,16350],{"id":16349},"what-can-be-achieved","What can be achieved",[12,16352,16353],{},"The ultimate reason for choosing Measurement Hub is generally improved marketing strategy achieved by:",[327,16355,16356,16359,16362,16365,16368,16370],{},[255,16357,16358],{},"campaign automation and triggering",[255,16360,16361],{},"better customer experience and personalization",[255,16363,16364],{},"advanced segmentation and micro-segmentation",[255,16366,16367],{},"managing marketing audiences for targeting and retargeting",[255,16369,3562],{},[255,16371,16372],{},"exponentially higher marketing investment returns",[16,16374,16376],{"id":16375},"why-its-different","Why it's different",[12,16378,16379],{},"On top of all the benefits named above, Measurement Hub and the team executing it solve problems holistically for the company, not for one project. Experiences showed that the conceptual approach should not be forsaken for the seemingly longer execution on the contrary it needs to be prioritized.",[12,16381,16382],{},"Every third-party analytical and marketing tool has a different way of sending and collecting data, as well as different expectations on when and where their tags should be placed. We understand each platform and its parameters hence we know exactly how to implement them all properly. Measurement Hub is created to match the parameters therefore platform integration is simple and preserves data consistency.",[12,16384,16385],{},"The service also contains a detailed explanation of the whole process precise definitions of tailored requirements, documentation, and consulting.",[16,16387,16389],{"id":16388},"who-can-benefit","Who can benefit",[12,16391,16392],{},"Website data measuring is important for every e-commerce company. However, when e-commerce is the core business or brings the most lead and marketing spending is quite significant, simple measuring and analysis are usually not sufficient. Eloquently big companies with complicated and extensive website data architecture tend to neglect the importance of consistency and structure. Reaching higher levels of personalization and accomplishing better marketing campaign results might take even more effort and resources when done manually. Just shaping it together along the way may seem adequate, in the short-term, but eventually, it will catch up later.",[16,16394,15835],{"id":15834},[12,16396,16397],{},"Measurement Hub’s logic in TMS serves its purpose as a middleman between the website and each platform. Some key properties of Measurement Hub:",[327,16399,16400,16403],{},[255,16401,16402],{},"It is running in the browser of a user visiting your web. Therefore, there is no need for any other server and infrastructure.",[255,16404,16405],{},"It functions as a real-time stream middleman, thus by itself, it has no database or any storage.",[12,16407,16408],{},"In general, Measurement Hub takes the data from the data layer in real-time, transforms, and augments them, and immediately sends them into marketing and analytical platforms.",[12,16410,16411],{},"The whole data flow proceeds as follows:",[252,16413,16414,16436],{},[255,16415,16416,16419],{},[113,16417,16418],{},"Main entities are pushed into the data layer",[327,16420,16421,16424,16427,16430,16433],{},[255,16422,16423],{},"User – information about the user",[255,16425,16426],{},"Page – information about the context",[255,16428,16429],{},"Session – information about the current session",[255,16431,16432],{},"Order – information about things which user just ordered",[255,16434,16435],{},"And so on...",[255,16437,16438,16441],{},[113,16439,16440],{},"Event is pushed into the data layer",[327,16442,16443],{},[255,16444,16445],{},"Page – it tells us that pageview happened (but it could be also any other event e.g. Add to cart, Product like, etc.)",[1173,16447,16449],{"className":8189,"code":16448,"language":8191,"meta":76,"style":76},"{\n  \"page\": {\n    \"type\": \"list\",\n    \"trail\": \"marketing\u002Farticles\",\n    \"list\": {\n      \"pageNumber\": 2,\n      \"filters\": {\n        \"years\": [\"2020\", \"2019\"],\n        \"keywords\": [\"affilates\", \"seo\"]\n      }\n    },\n    \"locale\": \"cs-CZ\",\n    \"currencyCode\": \"CZK\",\n    \"countryCode\": \"CZ\"\n  },\n  \"session\": {\n    \"machine\": \"external\",\n    \"deviceType\": \"mobile\",\n    \"env\": \"prod\"\n  },\n  \"user\": {\n    \"username\": \"tester123\",\n    \"id\": \"66oc39119520732e1s1f23ead6c57\",\n    \"segment\": \"customer.premium\",\n    \"transactionCount\": 2,\n    \"transactionValue\": 799.99\n  },\n  \"event\": \"page\"\n}\n",[588,16450,16451,16455,16468,16486,16506,16518,16533,16546,16577,16608,16612,16616,16636,16656,16674,16679,16691,16711,16730,16748,16752,16765,16785,16804,16824,16839,16853,16857,16874],{"__ignoreMap":76},[2062,16452,16453],{"class":2064,"line":2065},[2062,16454,2740],{"class":2072},[2062,16456,16457,16459,16462,16464,16466],{"class":2064,"line":77},[2062,16458,8202],{"class":2072},[2062,16460,16461],{"class":2199},"page",[2062,16463,2255],{"class":2072},[2062,16465,2113],{"class":2072},[2062,16467,2209],{"class":2072},[2062,16469,16470,16472,16474,16476,16478,16480,16482,16484],{"class":2064,"line":389},[2062,16471,9194],{"class":2072},[2062,16473,8788],{"class":8225},[2062,16475,2255],{"class":2072},[2062,16477,2113],{"class":2072},[2062,16479,2248],{"class":2072},[2062,16481,12170],{"class":2251},[2062,16483,2255],{"class":2072},[2062,16485,3154],{"class":2072},[2062,16487,16488,16490,16493,16495,16497,16499,16502,16504],{"class":2064,"line":2272},[2062,16489,9194],{"class":2072},[2062,16491,16492],{"class":8225},"trail",[2062,16494,2255],{"class":2072},[2062,16496,2113],{"class":2072},[2062,16498,2248],{"class":2072},[2062,16500,16501],{"class":2251},"marketing\u002Farticles",[2062,16503,2255],{"class":2072},[2062,16505,3154],{"class":2072},[2062,16507,16508,16510,16512,16514,16516],{"class":2064,"line":2315},[2062,16509,9194],{"class":2072},[2062,16511,12170],{"class":8225},[2062,16513,2255],{"class":2072},[2062,16515,2113],{"class":2072},[2062,16517,2209],{"class":2072},[2062,16519,16520,16522,16525,16527,16529,16531],{"class":2064,"line":2377},[2062,16521,8222],{"class":2072},[2062,16523,16524],{"class":2086},"pageNumber",[2062,16526,2255],{"class":2072},[2062,16528,2113],{"class":2072},[2062,16530,2335],{"class":2086},[2062,16532,3154],{"class":2072},[2062,16534,16535,16537,16540,16542,16544],{"class":2064,"line":2383},[2062,16536,8222],{"class":2072},[2062,16538,16539],{"class":2086},"filters",[2062,16541,2255],{"class":2072},[2062,16543,2113],{"class":2072},[2062,16545,2209],{"class":2072},[2062,16547,16548,16550,16553,16555,16557,16559,16561,16564,16566,16568,16570,16573,16575],{"class":2064,"line":2389},[2062,16549,8384],{"class":2072},[2062,16551,16552],{"class":2289},"years",[2062,16554,2255],{"class":2072},[2062,16556,2113],{"class":2072},[2062,16558,9216],{"class":2072},[2062,16560,2255],{"class":2072},[2062,16562,16563],{"class":2251},"2020",[2062,16565,2255],{"class":2072},[2062,16567,2597],{"class":2072},[2062,16569,2248],{"class":2072},[2062,16571,16572],{"class":2251},"2019",[2062,16574,2255],{"class":2072},[2062,16576,9225],{"class":2072},[2062,16578,16579,16581,16584,16586,16588,16590,16592,16595,16597,16599,16601,16604,16606],{"class":2064,"line":2452},[2062,16580,8384],{"class":2072},[2062,16582,16583],{"class":2289},"keywords",[2062,16585,2255],{"class":2072},[2062,16587,2113],{"class":2072},[2062,16589,9216],{"class":2072},[2062,16591,2255],{"class":2072},[2062,16593,16594],{"class":2251},"affilates",[2062,16596,2255],{"class":2072},[2062,16598,2597],{"class":2072},[2062,16600,2248],{"class":2072},[2062,16602,16603],{"class":2251},"seo",[2062,16605,2255],{"class":2072},[2062,16607,9387],{"class":2072},[2062,16609,16610],{"class":2064,"line":2467},[2062,16611,10435],{"class":2072},[2062,16613,16614],{"class":2064,"line":2472},[2062,16615,8918],{"class":2072},[2062,16617,16618,16620,16623,16625,16627,16629,16632,16634],{"class":2064,"line":2491},[2062,16619,9194],{"class":2072},[2062,16621,16622],{"class":8225},"locale",[2062,16624,2255],{"class":2072},[2062,16626,2113],{"class":2072},[2062,16628,2248],{"class":2072},[2062,16630,16631],{"class":2251},"cs-CZ",[2062,16633,2255],{"class":2072},[2062,16635,3154],{"class":2072},[2062,16637,16638,16640,16643,16645,16647,16649,16652,16654],{"class":2064,"line":2519},[2062,16639,9194],{"class":2072},[2062,16641,16642],{"class":8225},"currencyCode",[2062,16644,2255],{"class":2072},[2062,16646,2113],{"class":2072},[2062,16648,2248],{"class":2072},[2062,16650,16651],{"class":2251},"CZK",[2062,16653,2255],{"class":2072},[2062,16655,3154],{"class":2072},[2062,16657,16658,16660,16663,16665,16667,16669,16672],{"class":2064,"line":2556},[2062,16659,9194],{"class":2072},[2062,16661,16662],{"class":8225},"countryCode",[2062,16664,2255],{"class":2072},[2062,16666,2113],{"class":2072},[2062,16668,2248],{"class":2072},[2062,16670,16671],{"class":2251},"CZ",[2062,16673,8258],{"class":2072},[2062,16675,16676],{"class":2064,"line":2577},[2062,16677,16678],{"class":2072},"  },\n",[2062,16680,16681,16683,16685,16687,16689],{"class":2064,"line":2657},[2062,16682,8202],{"class":2072},[2062,16684,3787],{"class":2199},[2062,16686,2255],{"class":2072},[2062,16688,2113],{"class":2072},[2062,16690,2209],{"class":2072},[2062,16692,16693,16695,16698,16700,16702,16704,16707,16709],{"class":2064,"line":2681},[2062,16694,9194],{"class":2072},[2062,16696,16697],{"class":8225},"machine",[2062,16699,2255],{"class":2072},[2062,16701,2113],{"class":2072},[2062,16703,2248],{"class":2072},[2062,16705,16706],{"class":2251},"external",[2062,16708,2255],{"class":2072},[2062,16710,3154],{"class":2072},[2062,16712,16713,16715,16718,16720,16722,16724,16726,16728],{"class":2064,"line":2709},[2062,16714,9194],{"class":2072},[2062,16716,16717],{"class":8225},"deviceType",[2062,16719,2255],{"class":2072},[2062,16721,2113],{"class":2072},[2062,16723,2248],{"class":2072},[2062,16725,11780],{"class":2251},[2062,16727,2255],{"class":2072},[2062,16729,3154],{"class":2072},[2062,16731,16732,16734,16737,16739,16741,16743,16746],{"class":2064,"line":2714},[2062,16733,9194],{"class":2072},[2062,16735,16736],{"class":8225},"env",[2062,16738,2255],{"class":2072},[2062,16740,2113],{"class":2072},[2062,16742,2248],{"class":2072},[2062,16744,16745],{"class":2251},"prod",[2062,16747,8258],{"class":2072},[2062,16749,16750],{"class":2064,"line":2743},[2062,16751,16678],{"class":2072},[2062,16753,16754,16756,16759,16761,16763],{"class":2064,"line":2772},[2062,16755,8202],{"class":2072},[2062,16757,16758],{"class":2199},"user",[2062,16760,2255],{"class":2072},[2062,16762,2113],{"class":2072},[2062,16764,2209],{"class":2072},[2062,16766,16767,16769,16772,16774,16776,16778,16781,16783],{"class":2064,"line":2777},[2062,16768,9194],{"class":2072},[2062,16770,16771],{"class":8225},"username",[2062,16773,2255],{"class":2072},[2062,16775,2113],{"class":2072},[2062,16777,2248],{"class":2072},[2062,16779,16780],{"class":2251},"tester123",[2062,16782,2255],{"class":2072},[2062,16784,3154],{"class":2072},[2062,16786,16787,16789,16791,16793,16795,16797,16800,16802],{"class":2064,"line":2802},[2062,16788,9194],{"class":2072},[2062,16790,2611],{"class":8225},[2062,16792,2255],{"class":2072},[2062,16794,2113],{"class":2072},[2062,16796,2248],{"class":2072},[2062,16798,16799],{"class":2251},"66oc39119520732e1s1f23ead6c57",[2062,16801,2255],{"class":2072},[2062,16803,3154],{"class":2072},[2062,16805,16806,16808,16811,16813,16815,16817,16820,16822],{"class":2064,"line":2826},[2062,16807,9194],{"class":2072},[2062,16809,16810],{"class":8225},"segment",[2062,16812,2255],{"class":2072},[2062,16814,2113],{"class":2072},[2062,16816,2248],{"class":2072},[2062,16818,16819],{"class":2251},"customer.premium",[2062,16821,2255],{"class":2072},[2062,16823,3154],{"class":2072},[2062,16825,16826,16828,16831,16833,16835,16837],{"class":2064,"line":2834},[2062,16827,9194],{"class":2072},[2062,16829,16830],{"class":8225},"transactionCount",[2062,16832,2255],{"class":2072},[2062,16834,2113],{"class":2072},[2062,16836,2335],{"class":2086},[2062,16838,3154],{"class":2072},[2062,16840,16841,16843,16846,16848,16850],{"class":2064,"line":2840},[2062,16842,9194],{"class":2072},[2062,16844,16845],{"class":8225},"transactionValue",[2062,16847,2255],{"class":2072},[2062,16849,2113],{"class":2072},[2062,16851,16852],{"class":2086}," 799.99\n",[2062,16854,16855],{"class":2064,"line":2845},[2062,16856,16678],{"class":2072},[2062,16858,16859,16861,16864,16866,16868,16870,16872],{"class":2064,"line":2886},[2062,16860,8202],{"class":2072},[2062,16862,16863],{"class":2199},"event",[2062,16865,2255],{"class":2072},[2062,16867,2113],{"class":2072},[2062,16869,2248],{"class":2072},[2062,16871,16461],{"class":2251},[2062,16873,8258],{"class":2072},[2062,16875,16876],{"class":2064,"line":2907},[2062,16877,3425],{"class":2072},[252,16879,16880,16893],{},[255,16881,16882,16885],{},[113,16883,16884],{},"When some event is pushed into DL, logic in TMS is triggered and starts consuming all data in DL.",[327,16886,16887,16890],{},[255,16888,16889],{},"First data are transformed and augmented if needed.",[255,16891,16892],{},"Then logic for every marketing and analytics platform is triggered and data are transformed and send according to the platform's requirements.",[255,16894,16895],{},[113,16896,16897],{},"Data is processed and saved on servers of specific platforms",[16,16899,16901],{"id":16900},"how-is-it-implemented","How is it implemented",[12,16903,16904],{},"The process starts with the definition of project requirements and is finalized by the implementation of measurement into platforms and proper settings of the analytic platform. The biggest and most important part is revolved around the data layer, its specification, implementation, and validation.",[12,16906,16907],{},"The implementation process of Measurement Hub consists of a series of steps and may take from a few weeks to several months, depending on the project requirements.",[12,16909,16910],{},"Implementation process in steps:",[252,16912,16913,16926,16939,16949,16959,16968,16978,16988],{},[255,16914,16915,16918],{},[113,16916,16917],{},"Consultation on the measurement requirements with the client",[327,16919,16920,16923],{},[255,16921,16922],{},"This is the phase where we need to gain knowledge of your business and understand your needs. The main measurement concept is created, and critical parts of the measurement are identified. It will define data requirements in marketing and analytics platforms on a general level.",[255,16924,16925],{},"The requirements are specified by the Measurement Hub team together with a responsible person from your company, usually from the analytical team or performance team.",[255,16927,16928,16931],{},[113,16929,16930],{},"Creating the data layer specification based on the client’s requirements and website structure",[327,16932,16933,16936],{},[255,16934,16935],{},"This is the main part of the process. Every entity and every parameter, which could appear in Data Layer, must be properly defined. All events must be defined there.",[255,16937,16938],{},"It is processed mainly by the Measurement Hub team but with a consultancy with your team.",[255,16940,16941,16944],{},[113,16942,16943],{},"Specification adjustment with web development",[327,16945,16946],{},[255,16947,16948],{},"There is a difference between what an analytics or performance team wants, and how difficult it would be to implement it, if it is even possible and last but not least, how much it would cost. At this stage, developers can alert us to parts of the specification that would be too difficult to implement or that do not logically match, for example, the database structure of the website. The Measurement Hub team then incorporates the decision into the specification.",[255,16950,16951,16954],{},[113,16952,16953],{},"Data layer implementation",[327,16955,16956],{},[255,16957,16958],{},"In this phase, the client's developers must implement the whole DL according to specifications.",[255,16960,16961,16963],{},[113,16962,1212],{},[327,16964,16965],{},[255,16966,16967],{},"The data layer is validated manually by the Measurement Hub team. We are checking if events are happening when they should happen and if all parameters are containing what the specification defines. If there is some bug in the implementation, we are giving it back to developers for a fix.)",[255,16969,16970,16973],{},[113,16971,16972],{},"Implementation of the codes into the preferred tag management system",[327,16974,16975],{},[255,16976,16977],{},"Measurement Hub team will implement the content of the tag management system with codes for all marketing and analytics platforms which client want to use according to measurement specification)",[255,16979,16980,16983],{},[113,16981,16982],{},"Analytical platform settings",[327,16984,16985],{},[255,16986,16987],{},"Measurement Hub team prepares full settings of Analytical platform according to measurement specification, including custom dimensions, metrics settings, proper account structure settings, proper campaign grouping, filtering out testing, bots and other not wanted traffic.",[255,16989,16990,16993],{},[113,16991,16992],{},"Validation of measured data in the analytical platform",[327,16994,16995],{},[255,16996,16997],{},"Measurement Hub team validates measured data in analytical data to approve the right implementation of everything above. Also, some errors in DL there could appear due to hidden parts of the web or use case, which was not possible to find out with manual validation.",[16,16999,17001],{"id":17000},"price","Price",[12,17003,17004],{},"Measurement Hub's price depends on the website’s complexity, a number of marketing and analytics platforms, and individual requirements. Price ranges widely and it needs to be individually defined. There is a one-time payment just for the implementation without further fee for using Measurement Hub. Additionally, we can agree on a support fee for change requests in the specification, measurement codes, and so on.",[16,17006,17008],{"id":17007},"faq","FAQ",[860,17010,17012],{"id":17011},"what-if-we-do-not-have-any-tag-management-system","What if we do not have any tag management system?",[12,17014,17015],{},"That is not an obstacle. We can help you to pick the right one for you and include its implementation into the specification for developers.",[860,17017,17019],{"id":17018},"does-measurement-hub-also-work-for-mobile-applications","Does Measurement Hub also work for mobile applications?",[12,17021,17022],{},"Yes, from a technical point of view it is different, but the concept is almost the same. There is just one main difference in the implementation process - the implementation of marketing and analytics platforms. In the application, the implementation needs to be done fully by your developers. However, we provide full specifications on how to implement Measurement Hub in the mobile application, consistently aligned with website measurement.",[860,17024,17026],{"id":17025},"what-if-we-have-already-implemented-something-in-our-tms","What if we have already implemented something in our TMS?",[12,17028,17029],{},"That is not a problem. We can choose from several approaches, depending on the quality of the content of your current TMS and your preferences. We can investigate the functionality in your current TMS and propose solutions for improvement. A few options that can be either use part of it or all of it, or just overwrite it all.",[860,17031,17033],{"id":17032},"what-if-our-developers-do-not-cooperate-they-are-overloaded-with-other-higher-priority-tasks-or-they-cannot-help-us-for-a-different-reason","What if our developers do not cooperate, they are overloaded with other higher priority tasks, or they cannot help us for a different reason?",[12,17035,17036],{},"This can be a huge complication, which will definitely have an impact on the quality of the result. But we can help even in this case. It is possible to detect many things directly in TMS without developers' DL, which means without developers' help. We can develop some workarounds that can help you to get as much as possible from your website without developers.",[860,17038,17040],{"id":17039},"what-if-i-already-have-implemented-the-data-layer","What if I already have implemented the data layer?",[12,17042,17043],{},"We always prefer to create a new property for the new data layer to not be in conflict with the old one. The best practice is to also create a new TMS container for Measurement Hub and in that case, we have totally separated the old and the new measurement.",[860,17045,17047],{"id":17046},"what-about-the-continuality-of-my-data","What about the continuality of my data?",[12,17049,17050],{},"We are always preparing the specification with respect to your current measurement. We are discussing with you where we can break continuality for better measurement usability and the final decision is always on you.",[209,17052,17054],{"link":211,"button":17053},"Get in touch with us!","\nWant to know more about Measurement Hub and how you can benefit from it?\n",[3464,17056,17057],{},"html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":76,"searchDepth":77,"depth":77,"links":17059},[17060,17061,17062,17065,17066,17072,17080,17081,17082,17083,17084,17085,17086],{"id":6178,"depth":77,"text":6179},{"id":16187,"depth":77,"text":16188},{"id":16201,"depth":77,"text":16202,"children":17063},[17064],{"id":16219,"depth":389,"text":16220},{"id":16226,"depth":77,"text":16227},{"id":16233,"depth":77,"text":16234,"children":17067},[17068,17069,17070,17071],{"id":16240,"depth":389,"text":16241},{"id":16259,"depth":389,"text":16260},{"id":16266,"depth":389,"text":16267},{"id":16273,"depth":389,"text":16274},{"id":16300,"depth":77,"text":16301,"children":17073},[17074,17075,17076,17077,17078,17079],{"id":16307,"depth":389,"text":16308},{"id":16314,"depth":389,"text":16315},{"id":16321,"depth":389,"text":16322},{"id":16328,"depth":389,"text":16329},{"id":16335,"depth":389,"text":16336},{"id":16342,"depth":389,"text":16343},{"id":16349,"depth":77,"text":16350},{"id":16375,"depth":77,"text":16376},{"id":16388,"depth":77,"text":16389},{"id":15834,"depth":77,"text":15835},{"id":16900,"depth":77,"text":16901},{"id":17000,"depth":77,"text":17001},{"id":17007,"depth":77,"text":17008},"\u002Fupload\u002Fmeasurement-hub-article-title-picture.webp",{},"\u002Fen\u002Fblog\u002Fzoom-in-on-measurement-hub",15.86,"16 min read",[12202,7132],{"title":16171,"description":76},"en\u002Fblog\u002Fzoom-in-on-measurement-hub","Make the data clean, focused, and make all marketing campaigns more effective. Leveraging the collected data is a competitive advantage that generates exponentially higher marketing investment returns.","RHzQSC5vtEVUzNdvkmdpxHJCHBOl3wg9Lro8zMPmQM0",1789131821908]