{"id":61340,"date":"2025-02-01T03:42:12","date_gmt":"2025-02-01T03:42:12","guid":{"rendered":"https:\/\/peraltafinancing.com\/analytics\/content-analysis-with-ga4-bigquery-r-sheets-and-data-studio\/"},"modified":"2025-02-01T03:42:12","modified_gmt":"2025-02-01T03:42:12","slug":"content-analysis-with-ga4-bigquery-r-sheets-and-data-studio","status":"publish","type":"post","link":"https:\/\/fivemor.com\/?p=61340","title":{"rendered":"Content Analysis With GA4, BigQuery, R, Sheets, And Data Studio"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p>This is a <strong>guest post<\/strong> \u2013 the first one in a long time! The foreword and summary are written by me, Simo, and the rest is by my esteemed guest author.<\/p>\n<p>How fortunate was I to have been contacted by <a href=\"https:\/\/www.linkedin.com\/in\/arben-kqiku-301457117\/\">Arben Kqiku<\/a>, Digital Marketing &amp; Data Manager from <a href=\"https:\/\/comtogether.com\/\">comtogether<\/a>. Arben is one of our many <a href=\"https:\/\/www.teamsimmer.com\/\">Simmer<\/a> students, and he\u2019s walked through the <a href=\"https:\/\/www.teamsimmer.com\/courses\/query-ga4-data-in-google-bigquery\/\">Query GA4 Data In Google BigQuery<\/a> course, learning a lot along the way.<\/p>\n<p>He wanted to share with me this wonderful case study he wrote using the lessons learned during that course and his prior knowledge of tools and languages like <a href=\"https:\/\/www.r-project.org\/\">R<\/a>, Google Sheets, and Google Data Studio.<\/p>\n<p>In this article, Arben tackles the age-old question of how to measure a <strong>blog\u2019s effectiveness<\/strong>. The data is based on a BigQuery dataset generated from this blog, which is available to all who take <a href=\"https:\/\/www.teamsimmer.com\/courses\/query-ga4-data-in-google-bigquery\/\">the BigQuery course<\/a> at Simmer.<\/p>\n<p>                <span class=\"simmer\"><br \/>\n  <span class=\"close\">X<\/span><\/p>\n<p>\n    <span class=\"fa fa-md fa-bell\"\/><br \/>\n    <strong>The Simmer Newsletter<\/strong>\n  <\/p>\n<p>\n    Subscribe to the <a href=\"https:\/\/www.simoahava.com\/newsletter\/\">Simmer newsletter<\/a> to get the latest news and content from Simo Ahava into your email inbox!\n  <\/p>\n<p>  <\/span><\/p>\n<h2 id=\"a-web-analysis-of-simo-ahavas-blog\">A web analysis of Simo Ahava\u2019s blog<\/h2>\n<p>Recently, I finished the <a href=\"https:\/\/www.teamsimmer.com\/courses\/query-ga4-data-in-google-bigquery\/\">Query GA4 Data in Google BigQuery<\/a> course, produced by Simo Ahava and taught by <a href=\"https:\/\/www.ga4bigquery.com\/\">Johan van de Werken<\/a>. As the name suggests, you learn how to query <a href=\"https:\/\/support.google.com\/analytics\/answer\/12159447\">Google Analytics 4<\/a> data by using <a href=\"https:\/\/cloud.google.com\/bigquery\/\">Google BigQuery<\/a>, in this case specifically Simo Ahava\u2019s GA4 blog data.<\/p>\n<p>I wanted to test my newly acquired knowledge and this is why I wrote this article.<\/p>\n<h2 id=\"how-to-measure-a-blogs-effectiveness\">How to measure a blog\u2019s effectiveness?<\/h2>\n<p>A blog is composed of articles, so, logically we need to compare these articles to understand which performs the best. However, what KPIs should we use?<\/p>\n<p>We could use <strong>page views<\/strong> \u2013 the more page views an article generates the better. This certainly makes sense since page views can be interpreted as a proxy for interest. However, this metric has some limitations. For instance, people could visit an article and leave it right away without reading it. So, we need a metric that indicates whether someone has read an article or not.<\/p>\n<div style=\"aspect-ratio: 1976 \/ 1038;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2022\/09\/pages-measure.jpg\" title=\"Measure the effectiveness of individual pages\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1038\" width=\"1976\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2022\/09\/pages-measure.jpg#ZgotmplZ\" alt=\"Measure the effectiveness of individual pages\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>We could use the Google Analytics 4 <strong>scroll<\/strong> event for this purpose. GA4 records a scroll event each time a user scrolls to <strong>90% of the total length<\/strong> of a page. You can <a href=\"https:\/\/support.google.com\/analytics\/answer\/9216061\">instruct GA4 to automatically collect this event<\/a> and others from the GA4 interface.<\/p>\n<p>However, this metric also has its limitations. Namely, the length between articles varies greatly. A page with only 300 words will generate more scroll events than a page with 8,000 words, simply because it\u2019s easier to reach the end of it. Therefore, we need to find a way to integrate an article\u2019s length into the equation.<\/p>\n<h2 id=\"a-formula-to-measure-an-articles-attractiveness\">A formula to measure an article\u2019s attractiveness<\/h2>\n<p>First of all, we could use <strong>scroll events<\/strong> and <strong>page views<\/strong> to calculate the scroll conversion rate by using the following formula:<\/p>\n<blockquote>\n<p><strong>scrolls<\/strong> \/ <strong>page views<\/strong><\/p>\n<\/blockquote>\n<p>However, we could have 2 pages with the same scroll conversion rate, one page with 10 views and the other with 1,000 views. Obviously, a page with 1,000 views is more valuable, so we need to refine our approach.<\/p>\n<p>As mentioned earlier, a scroll is more valuable on a page with 8,000 words than on a page with 300 words. So, we could use a formula that weighs the number of scrolls by the number of words present in an article:<\/p>\n<blockquote>\n<p><strong>scrolls<\/strong> * <strong>words_count<\/strong><\/p>\n<\/blockquote>\n<p>In this way, we give more weight to longer articles.<\/p>\n<p>Now that the abstract part of the article is done, let\u2019s move to the juicy part, the code.<\/p>\n<h2 id=\"performance-score-of-each-article-with-scrolls-and-word-count\">Performance score of each article with scrolls and word count<\/h2>\n<p>In BigQuery, it\u2019s fairly easy to extract scrolls per page.<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-sql\" data-lang=\"sql\"><span style=\"color:#00a\">select<\/span>\n  (<span style=\"color:#00a\">select<\/span> value.string_value <span style=\"color:#00a\">from<\/span> <span style=\"color:#00a\">unnest<\/span>(event_params) <span style=\"color:#00a\">where<\/span> <span style=\"color:#00a\">key<\/span> = <span style=\"color:#a50\">'page_location'<\/span>) <span style=\"color:#00a\">as<\/span> page_location,\n  countif(event_name = <span style=\"color:#a50\">'scroll'<\/span>) <span style=\"color:#00a\">as<\/span> scrolls\n<span style=\"color:#00a\">from<\/span>\n  `dataset.<span style=\"color:#00a\">table<\/span>.events_*`\n<span style=\"color:#00a\">where<\/span>\n  _table_suffix <span style=\"color:#00a\">between<\/span> <span style=\"color:#a50\">'20220601'<\/span> <span style=\"color:#00a\">and<\/span> <span style=\"color:#a50\">'20220831'<\/span>\n<span style=\"color:#00a\">group<\/span> <span style=\"color:#00a\">by<\/span>\n  page_location\n<span style=\"color:#00a\">order<\/span> <span style=\"color:#00a\">by<\/span>\n  page_views <span style=\"color:#00a\">desc<\/span><\/code><\/pre>\n<\/div>\n<p>Let\u2019s take a closer look.<\/p>\n<p>First, with the following code, we need to extract the <code>page_location<\/code> event parameter. To do so, we first need to <strong>unnest<\/strong> the event parameters and then select the <code>page_location<\/code> parameter.<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-sql\" data-lang=\"sql\">(<span style=\"color:#00a\">select<\/span> value.string_value <span style=\"color:#00a\">from<\/span> <span style=\"color:#00a\">unnest<\/span>(event_params) <span style=\"color:#00a\">where<\/span> <span style=\"color:#00a\">key<\/span> = <span style=\"color:#a50\">'page_location'<\/span>) <span style=\"color:#00a\">as<\/span> page_location<\/code><\/pre>\n<\/div>\n<p>Scroll events are easier to extract \u2013 we simply need to tell BigQuery to count an event each time it encounters a scroll event while parsing the source table.<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-sql\" data-lang=\"sql\">countif(event_name = <span style=\"color:#a50\">'scroll'<\/span>) <span style=\"color:#00a\">as<\/span> scrolls<\/code><\/pre>\n<\/div>\n<p>Finally, we need to <strong>group by<\/strong> <code>page_location<\/code>, because we want to use the scrolls per page in our formula.<\/p>\n<p>To extract the word count per page, additional tools are required. For this, I used R and Google Sheets.<\/p>\n<p>The first thing I did was to extract the pages that had at least <strong>100 page views<\/strong> between June 1st and August 31st, and I pasted the results into <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1tkOnw41zj7lQLonV-bEjJFszY5jSlMylmn9ntQO2qcA\/edit#gid=0\">this Google Sheet<\/a>.<\/p>\n<div style=\"aspect-ratio: 1156 \/ 380;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2022\/09\/google-sheet-pages.jpg\" title=\"Pages in Google Sheets\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"380\" width=\"1156\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2022\/09\/google-sheet-pages.jpg#ZgotmplZ\" alt=\"Pages in Google Sheets\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Then, I used R to calculate the word count of each page.<\/p>\n<p>However, I encountered one obstacle when retrieving the HTML pages. Namely, there was a <em>lot<\/em> of information that did not correspond to real words, such as JavaScript code snippets and CSS styling. This is why I compared each word to an English dictionary and only counted <strong>real English words<\/strong>.<\/p>\n<p>Here are the concrete steps I took in R:<\/p>\n<ol>\n<li>Load packages<\/li>\n<li>Retrieve all page URLs from the Google Sheet linked to above<\/li>\n<li>Retrieve an English dictionary from GitHub<\/li>\n<li>For each page:<br \/>4.1. Retrieve all the words<br \/>4.2. Clean the words<br \/>4.3. Join with the English dictionary<br \/>4.4. See if there is a match in the dictionary. If there is, count it as 1 (<code>TRUE<\/code>)<br \/>4.5. Sum all the words that have a match in the dictionary<\/li>\n<li>Output the result in the same Google Sheet<\/li>\n<\/ol>\n<p>This is what the output looks like.<\/p>\n<div style=\"aspect-ratio: 1146 \/ 460;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2022\/09\/word-count.jpg\" title=\"Word Count after R and Sheets\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"460\" width=\"1146\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2022\/09\/word-count.jpg#ZgotmplZ\" alt=\"Word Count after R and Sheets\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>And this is the R code I used.<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-R\" data-lang=\"R\"><span style=\"color:#aaa;font-style:italic\"># Packages<\/span>\n<span style=\"color:#0a0\">library<\/span>(tidyverse)\n<span style=\"color:#0a0\">library<\/span>(googlesheets4)\n<span style=\"color:#0a0\">library<\/span>(rvest)\n \n<span style=\"color:#aaa;font-style:italic\"># Retrieve data from Google sheet<\/span>\nsheet_URL = <span style=\"color:#a50\">'https:\/\/docs.google.com\/spreadsheets\/d\/1tkOnw41zj7lQLonV-bEjJFszY5jSlMylmn9ntQO2qcA\/edit#gid=0'<\/span>\nsheet_id = <span style=\"color:#0a0\">gs4_get<\/span>(sheet_URL)\npage_data = <span style=\"color:#0a0\">range_read<\/span>(sheet_id)\n \n<span style=\"color:#aaa;font-style:italic\"># Retrieve English dictionary<\/span>\ndict = <span style=\"color:#0a0\">read.table<\/span>(file = <span style=\"color:#0a0\">url<\/span>(<span style=\"color:#a50\">\"https:\/\/github.com\/dwyl\/english-words\/raw\/master\/words_alpha.txt\"<\/span>), col.names = <span style=\"color:#a50\">\"words\"<\/span>) %&gt;%\n   <span style=\"color:#0a0\">as_tibble<\/span>() %&gt;%\n   <span style=\"color:#0a0\">mutate<\/span>(condition = <span style=\"color:#00a\">TRUE<\/span>)\n \n<span style=\"color:#aaa;font-style:italic\"># Read data from web pages and count words per page<\/span>\nwords_per_page = page_data %&gt;%\n   <span style=\"color:#0a0\">mutate<\/span>(words = <span style=\"color:#0a0\">map<\/span>(Page, ~<span style=\"color:#0a0\">return_words<\/span>(web_page = .x))) %&gt;%\n   <span style=\"color:#0a0\">mutate<\/span>(words = words %&gt;% <span style=\"color:#0a0\">unlist<\/span>())\n \n<span style=\"color:#aaa;font-style:italic\"># Output data to Google sheets<\/span>\n<span style=\"color:#0a0\">sheet_write<\/span>(words_per_page, sheet = <span style=\"color:#a50\">'output'<\/span>, ss = sheet_id)\n \n<span style=\"color:#aaa;font-style:italic\"># Functions<\/span>\nreturn_words = <span style=\"color:#0a0\">function<\/span>(web_page){\n   words = web_page %&gt;%\n       <span style=\"color:#0a0\">read_html<\/span>() %&gt;%\n       <span style=\"color:#0a0\">html_text<\/span>() %&gt;%\n      \n       <span style=\"color:#aaa;font-style:italic\"># clean words for table<\/span>\n       <span style=\"color:#0a0\">tolower<\/span>() %&gt;%\n       <span style=\"color:#0a0\">str_remove_all<\/span>(pattern = <span style=\"color:#a50\">'\"'<\/span>) %&gt;%\n       <span style=\"color:#0a0\">str_remove_all<\/span>(pattern = <span style=\"color:#a50\">\",|:|\\\\.|\\\\\\n\"<\/span>) %&gt;%\n       <span style=\"color:#0a0\">strsplit<\/span>(<span style=\"color:#a50\">' '<\/span>) %&gt;%\n       <span style=\"color:#0a0\">as_tibble<\/span>(<span style=\"color:#a50\">'words'<\/span>) %&gt;%\n       <span style=\"color:#0a0\">set_names<\/span>(<span style=\"color:#a50\">\"words\"<\/span>) %&gt;%\n      \n       <span style=\"color:#aaa;font-style:italic\"># join with English dictionary<\/span>\n       <span style=\"color:#0a0\">left_join<\/span>(dict) %&gt;%\n      \n       <span style=\"color:#aaa;font-style:italic\"># keep only words from the english dictionary<\/span>\n       <span style=\"color:#0a0\">filter<\/span>(condition == <span style=\"color:#00a\">TRUE<\/span>) %&gt;%\n       <span style=\"color:#0a0\">pull<\/span>(condition) %&gt;%\n       <span style=\"color:#0a0\">sum<\/span>()\n  \n   <span style=\"color:#0a0\">return<\/span>(words)\n}<\/code><\/pre>\n<\/div>\n<p>Next, in Google Sheets, I created a <code>case...when<\/code> statement for each page in order to create a column for word count in BigQuery.<\/p>\n<div style=\"aspect-ratio: 1442 \/ 136;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2022\/09\/word-count-sheet.jpg\" title=\"Word Count column in Sheets\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"136\" width=\"1442\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2022\/09\/word-count-sheet.jpg#ZgotmplZ\" alt=\"Word Count column in Sheets\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Later, I copied all these <code>case...when<\/code> statements and pasted them back to BigQuery. To avoid showing a query with <strong>358<\/strong> <code>case...when<\/code> statements, I\u2019ll only display a handful of them here.<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-sql\" data-lang=\"sql\"><span style=\"color:#00a\">with<\/span> prep <span style=\"color:#00a\">as<\/span> (\n<span style=\"color:#00a\">select<\/span>\n  (<span style=\"color:#00a\">select<\/span> value.string_value <span style=\"color:#00a\">from<\/span> <span style=\"color:#00a\">unnest<\/span>(event_params) <span style=\"color:#00a\">where<\/span> <span style=\"color:#00a\">key<\/span> = <span style=\"color:#a50\">'page_location'<\/span>) <span style=\"color:#00a\">as<\/span> page_location,\n  countif(event_name = <span style=\"color:#a50\">'scroll'<\/span>) <span style=\"color:#00a\">as<\/span> scrolls\n<span style=\"color:#00a\">from<\/span>\n  `simoahava-com.analytics_206575074.events_*`\n<span style=\"color:#00a\">where<\/span>\n  _table_suffix <span style=\"color:#00a\">between<\/span> <span style=\"color:#a50\">'20220601'<\/span> <span style=\"color:#00a\">and<\/span> <span style=\"color:#a50\">'20220831'<\/span>\n<span style=\"color:#00a\">group<\/span> <span style=\"color:#00a\">by<\/span>\n  page_location\n<span style=\"color:#00a\">order<\/span> <span style=\"color:#00a\">by<\/span>\n  page_views <span style=\"color:#00a\">desc<\/span>),\n \nprep_words <span style=\"color:#00a\">as<\/span> (\n<span style=\"color:#00a\">select<\/span>\n  *,\n  <span style=\"color:#00a\">case<\/span>\n    <span style=\"color:#00a\">when<\/span> page_location = <span style=\"color:#a50\">'https:\/\/www.simoahava.com\/analytics\/google-analytics-4-ecommerce-guide-google-tag-manager\/'<\/span> <span style=\"color:#00a\">then<\/span> <span style=\"color:#099\">5865<\/span>\n    <span style=\"color:#00a\">when<\/span> page_location = <span style=\"color:#a50\">'https:\/\/www.simoahava.com\/'<\/span> <span style=\"color:#00a\">then<\/span> <span style=\"color:#099\">521<\/span>\n    <span style=\"color:#00a\">when<\/span> page_location = <span style=\"color:#a50\">'https:\/\/www.simoahava.com\/analytics\/one-tag-rule-them-all-introducing-google-tag\/'<\/span> <span style=\"color:#00a\">then<\/span> <span style=\"color:#099\">1365<\/span>\n    <span style=\"color:#00a\">else<\/span> <span style=\"color:#00a\">null<\/span> <span style=\"color:#00a\">end<\/span> <span style=\"color:#00a\">as<\/span> words_per_article\n<span style=\"color:#00a\">from<\/span>\n  prep)\n \n<span style=\"color:#00a\">select<\/span>\n  *,\n  scrolls * words_per_article <span style=\"color:#00a\">as<\/span> performance_score\n<span style=\"color:#00a\">from<\/span>\n  prep_words\n<span style=\"color:#00a\">order<\/span> <span style=\"color:#00a\">by<\/span>\n  performance_score <span style=\"color:#00a\">desc<\/span><\/code><\/pre>\n<\/div>\n<h3 id=\"load-it-all-in-google-data-studio\">Load it all in Google Data Studio<\/h3>\n<p>With Google Data Studio, I created this horizontal bar chart which displays the performance score by page.<\/p>\n<p>We can clearly see that the article <a href=\"https:\/\/www.simoahava.com\/analytics\/google-analytics-4-ecommerce-guide-google-tag-manager\/\">Google Analytics 4: Ecommerce Guide For Google Tag Manager<\/a> dominates the results.<\/p>\n<div style=\"aspect-ratio: 2270 \/ 1092;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2022\/09\/load-in-data-studio.jpg\" title=\"Load the data in Data Studio\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1092\" width=\"2270\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2022\/09\/load-in-data-studio.jpg#ZgotmplZ\" alt=\"Load the data in Data Studio\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<h2 id=\"performance-score-by-page-and-source--medium\">Performance score by page and source \/ medium<\/h2>\n<p>In addition to knowing which articles have the best performance score, it would be interesting to see how they compare when segmented by <strong>source \/ medium<\/strong>. It may be that certain source \/ medium combinations could bring more interested users.<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-sql\" data-lang=\"sql\"><span style=\"color:#00a\">with<\/span> prep <span style=\"color:#00a\">as<\/span> (\n<span style=\"color:#00a\">select<\/span>\n  concat(traffic_source.<span style=\"color:#00a\">source<\/span>, <span style=\"color:#a50\">\" \/ \"<\/span>, traffic_source.medium) <span style=\"color:#00a\">as<\/span> source_medium,\n  (<span style=\"color:#00a\">select<\/span> value.string_value <span style=\"color:#00a\">from<\/span> <span style=\"color:#00a\">unnest<\/span>(event_params) <span style=\"color:#00a\">where<\/span> <span style=\"color:#00a\">key<\/span> = <span style=\"color:#a50\">'page_location'<\/span>) <span style=\"color:#00a\">as<\/span> page_location,\n  countif(event_name = <span style=\"color:#a50\">'scroll'<\/span>) <span style=\"color:#00a\">as<\/span> scrolls\n<span style=\"color:#00a\">from<\/span>\n  `simoahava-com.analytics_206575074.events_*`\n<span style=\"color:#00a\">where<\/span>\n  _table_suffix <span style=\"color:#00a\">between<\/span> <span style=\"color:#a50\">'20220601'<\/span> <span style=\"color:#00a\">and<\/span> <span style=\"color:#a50\">'20220831'<\/span>\n<span style=\"color:#00a\">group<\/span> <span style=\"color:#00a\">by<\/span>\n  source_medium,\n  page_location\n<span style=\"color:#00a\">order<\/span> <span style=\"color:#00a\">by<\/span>\n  scrolls <span style=\"color:#00a\">desc<\/span>),\n \nprep_words <span style=\"color:#00a\">as<\/span> (\n<span style=\"color:#00a\">select<\/span>\n  *,\n  <span style=\"color:#00a\">case<\/span>\n    <span style=\"color:#00a\">when<\/span> page_location = <span style=\"color:#a50\">'https:\/\/www.simoahava.com\/analytics\/google-analytics-4-ecommerce-guide-google-tag-manager\/'<\/span> <span style=\"color:#00a\">then<\/span> <span style=\"color:#099\">5865<\/span>\n    <span style=\"color:#00a\">when<\/span> page_location = <span style=\"color:#a50\">'https:\/\/www.simoahava.com\/'<\/span> <span style=\"color:#00a\">then<\/span> <span style=\"color:#099\">521<\/span>\n    <span style=\"color:#00a\">when<\/span> page_location = <span style=\"color:#a50\">'https:\/\/www.simoahava.com\/analytics\/one-tag-rule-them-all-introducing-google-tag\/'<\/span> <span style=\"color:#00a\">then<\/span> <span style=\"color:#099\">1365<\/span>\n    <span style=\"color:#00a\">else<\/span> <span style=\"color:#00a\">null<\/span> <span style=\"color:#00a\">end<\/span> <span style=\"color:#00a\">as<\/span> words_per_article\n<span style=\"color:#00a\">from<\/span>\n  prep)\n \n<span style=\"color:#00a\">select<\/span>\n  source_medium,\n  page_location,\n  <span style=\"color:#00a\">sum<\/span>(page_views) <span style=\"color:#00a\">as<\/span> page_views,\n  <span style=\"color:#00a\">sum<\/span>(scrolls) <span style=\"color:#00a\">as<\/span> scrolls,\n  <span style=\"color:#00a\">sum<\/span>(words_per_article) <span style=\"color:#00a\">as<\/span> words_per_article,\n  <span style=\"color:#00a\">sum<\/span>(scrolls * <span style=\"color:#00a\">sum<\/span>(words_per_article) <span style=\"color:#00a\">as<\/span> performance_score\n<span style=\"color:#00a\">from<\/span>\n  prep_words\n<span style=\"color:#00a\">group<\/span> <span style=\"color:#00a\">by<\/span>\n  source_medium,\n  page_location\n<span style=\"color:#00a\">having<\/span>\n  words_per_article <span style=\"color:#00a\">is<\/span> <span style=\"color:#00a\">not<\/span> <span style=\"color:#00a\">null<\/span>\n  <span style=\"color:#00a\">and<\/span> scrolls &gt; <span style=\"color:#099\">100<\/span>\n<span style=\"color:#00a\">order<\/span> <span style=\"color:#00a\">by<\/span>\n  page_views <span style=\"color:#00a\">desc<\/span><\/code><\/pre>\n<\/div>\n<blockquote>\n<p><strong>Note from Simo<\/strong>: this query uses the <code>traffic_source.*<\/code> dimensions for source \/ medium. These are actually the <strong>first acquisition<\/strong> campaign details rather than the session-scoped campaign metadata that this query would benefit from to a greater degree. Unfortunately, at the time of writing this article, session-scoped data like this is unavailable in the BigQuery export, so using <code>traffic_source.*<\/code> is a decent enough proxy.<\/p>\n<\/blockquote>\n<p>When you split the data between two dimensions, it\u2019s sometimes useful to visualize it with a heatmap.<\/p>\n<p>In this case, we can see that the <strong>source \/ medium<\/strong> with the highest performance score is <code>google \/ organic<\/code>.<\/p>\n<p>I only selected combinations with at least 100 scrolls. That\u2019s why the right-hand side of the heatmap is mostly empty.<\/p>\n<p>However, it\u2019s interesting to note that the fourth article in the list, <a href=\"https:\/\/www.simoahava.com\/analytics\/one-tag-rule-them-all-introducing-google-tag\/\">One Tag To Rule Them All: Introducing The New Google Tag<\/a>, has a performance score for other sources as well.<\/p>\n<p>This tells us that the article in question has a more widespread penetration in terms of acquisition channels.<\/p>\n<div style=\"aspect-ratio: 2222 \/ 1092;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2022\/09\/performance-by-source-medium.jpg\" title=\"Performance score by source\/medium\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1092\" width=\"2222\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2022\/09\/performance-by-source-medium.jpg#ZgotmplZ\" alt=\"Performance score by source\/medium\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<h2 id=\"attribute-a-performance-score-to-each-user\">Attribute a performance score to each user<\/h2>\n<p>To associate a performance score to each user, we\u2019ll use the GA4 field <code>user_pseudo_id<\/code>, which stores the <strong>client identifier<\/strong> that GA4 attributes to each browser instance. Although it doesn\u2019t necessarily reflect the actual number of <strong>people<\/strong> that visit the site, it\u2019s again a decent enough proxy to get us some useful results.<\/p>\n<p>First thing to do is to create the query which aligns the <code>user_pseudo_id<\/code> together with <code>page_location<\/code>, the number of scroll events, and the word count for each page.<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-sql\" data-lang=\"sql\"><span style=\"color:#00a\">with<\/span> prep <span style=\"color:#00a\">as<\/span> (\n<span style=\"color:#00a\">select<\/span>\n  user_pseudo_id,\n  (<span style=\"color:#00a\">select<\/span> value.int_value <span style=\"color:#00a\">from<\/span> <span style=\"color:#00a\">unnest<\/span>(event_params) <span style=\"color:#00a\">where<\/span> <span style=\"color:#00a\">key<\/span> = <span style=\"color:#a50\">'ga_session_id'<\/span>) <span style=\"color:#00a\">as<\/span> session_id,\n  (<span style=\"color:#00a\">select<\/span> value.string_value <span style=\"color:#00a\">from<\/span> <span style=\"color:#00a\">unnest<\/span>(event_params) <span style=\"color:#00a\">where<\/span> <span style=\"color:#00a\">key<\/span> = <span style=\"color:#a50\">'page_location'<\/span>) <span style=\"color:#00a\">as<\/span> page_location,\n  countif(event_name = <span style=\"color:#a50\">'scroll'<\/span>) <span style=\"color:#00a\">as<\/span> scrolls,\n<span style=\"color:#00a\">from<\/span>\n  `simoahava-com.analytics_206575074.events_*`\n<span style=\"color:#00a\">where<\/span>\n  _table_suffix <span style=\"color:#00a\">between<\/span> <span style=\"color:#a50\">'20220601'<\/span> <span style=\"color:#00a\">and<\/span> <span style=\"color:#a50\">'20220831'<\/span>\n<span style=\"color:#00a\">group<\/span> <span style=\"color:#00a\">by<\/span>\n  user_pseudo_id,\n  session_id,\n  page_location\n<span style=\"color:#00a\">order<\/span> <span style=\"color:#00a\">by<\/span>\n  scrolls <span style=\"color:#00a\">desc<\/span>)\n \n<span style=\"color:#00a\">select<\/span>\n  user_pseudo_id,\n  session_id,\n  page_location,\n  <span style=\"color:#00a\">case<\/span>\n    <span style=\"color:#00a\">when<\/span> page_location = <span style=\"color:#a50\">'https:\/\/www.simoahava.com\/analytics\/google-analytics-4-ecommerce-guide-google-tag-manager\/'<\/span> <span style=\"color:#00a\">then<\/span> <span style=\"color:#099\">5865<\/span>\n    <span style=\"color:#00a\">when<\/span> page_location = <span style=\"color:#a50\">'https:\/\/www.simoahava.com\/'<\/span> <span style=\"color:#00a\">then<\/span> <span style=\"color:#099\">521<\/span>\n    <span style=\"color:#00a\">when<\/span> page_location = <span style=\"color:#a50\">'https:\/\/www.simoahava.com\/analytics\/one-tag-rule-them-all-introducing-google-tag\/'<\/span> <span style=\"color:#00a\">then<\/span> <span style=\"color:#099\">1365<\/span>\n    <span style=\"color:#00a\">else<\/span> <span style=\"color:#00a\">null<\/span> <span style=\"color:#00a\">end<\/span> <span style=\"color:#00a\">as<\/span> words_per_page,\n scrolls\n<span style=\"color:#00a\">from<\/span>\n  prep<\/code><\/pre>\n<\/div>\n<p>This is what the query results look like.<\/p>\n<div style=\"aspect-ratio: 1256 \/ 398;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2022\/09\/user-performance.jpg\" title=\"User performance per page\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"398\" width=\"1256\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2022\/09\/user-performance.jpg#ZgotmplZ\" alt=\"User performance per page\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Now I can create a query to parse the results table shown above and get the performance score per user.<\/p>\n<div class=\"highlight\">\n<pre style=\"background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4\"><code class=\"language-sql\" data-lang=\"sql\"><span style=\"color:#00a\">with<\/span> prep <span style=\"color:#00a\">as<\/span> (\n<span style=\"color:#00a\">select<\/span>\n  user_pseudo_id,\n  <span style=\"color:#00a\">sum<\/span>(words_per_page) <span style=\"color:#00a\">as<\/span> words_per_page,\n  <span style=\"color:#00a\">sum<\/span>(scrolls) <span style=\"color:#00a\">as<\/span> scrolls\n<span style=\"color:#00a\">from<\/span>\n  `dataset.result_table`\n<span style=\"color:#00a\">group<\/span> <span style=\"color:#00a\">by<\/span>\n  user_pseudo_id\n<span style=\"color:#00a\">having<\/span>\n  words_per_page <span style=\"color:#00a\">is<\/span> <span style=\"color:#00a\">not<\/span> <span style=\"color:#00a\">null<\/span>)\n \n<span style=\"color:#00a\">select<\/span>\n  user_pseudo_id,\n  scrolls,\n  words_per_page,\n  scrolls * words_per_page <span style=\"color:#00a\">as<\/span> performance_score\n<span style=\"color:#00a\">from<\/span>\n  prep\n<span style=\"color:#00a\">order<\/span> <span style=\"color:#00a\">by<\/span>\n  performance_score <span style=\"color:#00a\">desc<\/span><\/code><\/pre>\n<\/div>\n<p>Here is the result.<\/p>\n<div style=\"aspect-ratio: 1684 \/ 478;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2022\/09\/performance-by-user.jpg\" title=\"Performance by user\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"478\" width=\"1684\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2022\/09\/performance-by-user.jpg#ZgotmplZ\" alt=\"Performance by user\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>In total, we\u2019ve been able to attribute a performance score to <strong>164,306 users<\/strong>. We could use this information to create remarketing audiences by <a href=\"https:\/\/support.google.com\/analytics\/answer\/10071301\">importing the data<\/a> in GA4. Alternatively, we could add this information to our CRM and use it as a lead scoring system to power up our email campaigns.<\/p>\n<h2 id=\"summary-by-simo\">Summary (by Simo)<\/h2>\n<p>Thank you, Arben!<\/p>\n<p>Content effectiveness is <em>brutally<\/em> difficult to measure. I\u2019ve <a href=\"https:\/\/www.simoahava.com\/analytics\/track-content-engagement-via-gtm\/\">tried<\/a>, and <a href=\"https:\/\/www.simoahava.com\/analytics\/track-content-engagement-part-2\/\">tried<\/a>, and <a href=\"https:\/\/www.simoahava.com\/analytics\/fire-tag-upon-scroll-depth-and-time-spent\/\">tried<\/a> to visit this topic over and over again in the history of this blog, and I\u2019ve never quite figured out what formula would work best.<\/p>\n<p>I\u2019m not saying Arben has cracked the puzzle, but he does raise an important point about drilling down deeper than what the default metrics offer us.<\/p>\n<p>Engagement is ultimately something ephemeral enough to resist being pigeonholed into a universal formula. I\u2019ve always disliked it when analytics platforms try to insert meaning into clinical metrics by naming them something like \u201cEngagement Rate\u201d or \u201cBounce Rate\u201d. They\u2019re just metrics. Whether they describe engagement is a different discussion altogether.<\/p>\n<p>I hope you were inspired by Arben\u2019s exploration of the different tools available in the analyst\u2019s arsenal. You can get far with just Google BigQuery, but using R and Google Sheets for creating the base dataset can prove extremely valuable in the long run.<\/p>\n<p>Please check out <a href=\"https:\/\/www.linkedin.com\/in\/arben-kqiku-301457117\/\">Arben\u2019s profile on LinkedIn<\/a>, connect with him, and share your thoughts about his work with him!<\/p>\n<\/p><\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>This is a guest post \u2013 the first one in a long time! The foreword and summary are written by me, Simo, and the rest is by my esteemed guest author. How fortunate was I to have been contacted by Arben Kqiku, Digital Marketing &amp; Data Manager from comtogether. Arben is one of our many [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":61341,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12033],"tags":[10990,28608,7222,11603,18473,1473,4553],"dealstore":[],"offerexpiration":[],"class_list":["post-61340","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-analysis","tag-bigquery","tag-content","tag-data","tag-ga4","tag-sheets","tag-studio"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Content Analysis With GA4, BigQuery, R, Sheets, And Data Studio - Som2ny Network<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fivemor.com\/?p=61340\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Content Analysis With GA4, BigQuery, R, Sheets, And Data Studio - Som2ny Network\" \/>\n<meta property=\"og:description\" content=\"This is a guest post \u2013 the first one in a long time! The foreword and summary are written by me, Simo, and the rest is by my esteemed guest author. How fortunate was I to have been contacted by Arben Kqiku, Digital Marketing &amp; Data Manager from comtogether. Arben is one of our many [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fivemor.com\/?p=61340\" \/>\n<meta property=\"og:site_name\" content=\"Som2ny Network\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-01T03:42:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/content-analysis-using-ga4-bigquery-r-sheets-data-studio.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1812\" \/>\n\t<meta property=\"og:image:height\" content=\"1018\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fivemor.com\/?p=61340#article\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/?p=61340\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\"},\"headline\":\"Content Analysis With GA4, BigQuery, R, Sheets, And Data Studio\",\"datePublished\":\"2025-02-01T03:42:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=61340\"},\"wordCount\":1562,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=61340#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/content-analysis-using-ga4-bigquery-r-sheets-data-studio.jpg\",\"keywords\":[\"Analysis\",\"BigQuery\",\"Content\",\"Data\",\"GA4\",\"Sheets\",\"Studio\"],\"articleSection\":[\"Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fivemor.com\/?p=61340#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fivemor.com\/?p=61340\",\"url\":\"https:\/\/fivemor.com\/?p=61340\",\"name\":\"Content Analysis With GA4, BigQuery, R, Sheets, And Data Studio - Som2ny Network\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=61340#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=61340#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/content-analysis-using-ga4-bigquery-r-sheets-data-studio.jpg\",\"datePublished\":\"2025-02-01T03:42:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fivemor.com\/?p=61340#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fivemor.com\/?p=61340\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/?p=61340#primaryimage\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/content-analysis-using-ga4-bigquery-r-sheets-data-studio.jpg\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/content-analysis-using-ga4-bigquery-r-sheets-data-studio.jpg\",\"width\":1812,\"height\":1018},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fivemor.com\/?p=61340#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fivemor.com\/?bp_activities=1\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Content Analysis With GA4, BigQuery, R, Sheets, And Data Studio\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fivemor.com\/#website\",\"url\":\"https:\/\/fivemor.com\/\",\"name\":\"Som2ny Network\",\"description\":\"Daily Deals\",\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fivemor.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fivemor.com\/#organization\",\"name\":\"Som2ny Network\",\"url\":\"https:\/\/fivemor.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"width\":300,\"height\":86,\"caption\":\"Som2ny Network\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/fivemor.com\"],\"url\":\"https:\/\/fivemor.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Content Analysis With GA4, BigQuery, R, Sheets, And Data Studio - Som2ny Network","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fivemor.com\/?p=61340","og_locale":"en_US","og_type":"article","og_title":"Content Analysis With GA4, BigQuery, R, Sheets, And Data Studio - Som2ny Network","og_description":"This is a guest post \u2013 the first one in a long time! The foreword and summary are written by me, Simo, and the rest is by my esteemed guest author. How fortunate was I to have been contacted by Arben Kqiku, Digital Marketing &amp; Data Manager from comtogether. Arben is one of our many [&hellip;]","og_url":"https:\/\/fivemor.com\/?p=61340","og_site_name":"Som2ny Network","article_published_time":"2025-02-01T03:42:12+00:00","og_image":[{"width":1812,"height":1018,"url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/content-analysis-using-ga4-bigquery-r-sheets-data-studio.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fivemor.com\/?p=61340#article","isPartOf":{"@id":"https:\/\/fivemor.com\/?p=61340"},"author":{"name":"admin","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371"},"headline":"Content Analysis With GA4, BigQuery, R, Sheets, And Data Studio","datePublished":"2025-02-01T03:42:12+00:00","mainEntityOfPage":{"@id":"https:\/\/fivemor.com\/?p=61340"},"wordCount":1562,"commentCount":0,"publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"image":{"@id":"https:\/\/fivemor.com\/?p=61340#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/content-analysis-using-ga4-bigquery-r-sheets-data-studio.jpg","keywords":["Analysis","BigQuery","Content","Data","GA4","Sheets","Studio"],"articleSection":["Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fivemor.com\/?p=61340#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fivemor.com\/?p=61340","url":"https:\/\/fivemor.com\/?p=61340","name":"Content Analysis With GA4, BigQuery, R, Sheets, And Data Studio - Som2ny Network","isPartOf":{"@id":"https:\/\/fivemor.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fivemor.com\/?p=61340#primaryimage"},"image":{"@id":"https:\/\/fivemor.com\/?p=61340#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/content-analysis-using-ga4-bigquery-r-sheets-data-studio.jpg","datePublished":"2025-02-01T03:42:12+00:00","breadcrumb":{"@id":"https:\/\/fivemor.com\/?p=61340#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fivemor.com\/?p=61340"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/?p=61340#primaryimage","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/content-analysis-using-ga4-bigquery-r-sheets-data-studio.jpg","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/content-analysis-using-ga4-bigquery-r-sheets-data-studio.jpg","width":1812,"height":1018},{"@type":"BreadcrumbList","@id":"https:\/\/fivemor.com\/?p=61340#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fivemor.com\/?bp_activities=1"},{"@type":"ListItem","position":2,"name":"Content Analysis With GA4, BigQuery, R, Sheets, And Data Studio"}]},{"@type":"WebSite","@id":"https:\/\/fivemor.com\/#website","url":"https:\/\/fivemor.com\/","name":"Som2ny Network","description":"Daily Deals","publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fivemor.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fivemor.com\/#organization","name":"Som2ny Network","url":"https:\/\/fivemor.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","width":300,"height":86,"caption":"Som2ny Network"},"image":{"@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","caption":"admin"},"sameAs":["https:\/\/fivemor.com"],"url":"https:\/\/fivemor.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/61340","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=61340"}],"version-history":[{"count":0,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/61340\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/media\/61341"}],"wp:attachment":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=61340"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=61340"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=61340"},{"taxonomy":"dealstore","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fdealstore&post=61340"},{"taxonomy":"offerexpiration","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fofferexpiration&post=61340"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}