Accessing Google Trends

1 Load packages

library(tidyverse)  # data wrangling

2 Motivation

Google Trends is, according to Wikipedia:

Google Trends is a website by Google that analyzes the popularity of top search queries in Google Search across various regions and languages. The website uses graphs to compare the search volume of different queries over time.On August 5, 2008, Google launched Google Insights for Search, a more sophisticated and advanced service displaying search trends data. On September 27, 2012, Google merged Google Insights for Search into Google Trends.[1]

3 Restrictions and quotas

You cannot download as much data as you like, there are some restrictions, again, from the same source as above:

Google has incorporated quota limits for Trends searches. This limits the number of search attempts available per user/IP/device. Details of quota limits have not yet been provided, but it may depend on geographical location or browser privacy settings. It has been reported in some cases that this quota is reached very quickly if one is not logged into a Google account before trying to access the Trends service.[52]

4 Access via R

#install.packages("gtrendsR")
library(gtrendsR)
library(tidyverse)

5 Options

We can choose some geolocations:

data(countries, package = "gtrendsR")
head(countries)
#>   country_code sub_code        name
#> 1           AF     <NA> AFGHANISTAN
#> 2           AF   AF-BDS  BADAKHSHAN
#> 3           AF   AF-BDG     BADGHIS
#> 4           AF   AF-BGL     BAGHLAN
#> 5           AF   AF-BAL       BALKH
#> 6           AF   AF-BAM      BAMIAN

Let’s choose Germany’s Bundeslaender:

de <- 
countries %>% 
  filter(country_code == "DE") %>% 
  slice_head(n=17) %>% 
  drop_na()

de
#>    country_code sub_code                   name
#> 1            DE    DE-BW      BADEN-WURTTEMBERG
#> 2            DE    DE-BY                 BAYERN
#> 3            DE    DE-BE                 BERLIN
#> 4            DE    DE-BB            BRANDENBURG
#> 5            DE    DE-HB                 BREMEN
#> 6            DE    DE-HH                HAMBURG
#> 7            DE    DE-HE                 HESSEN
#> 8            DE    DE-MV MECKLENBURG-VORPOMMERN
#> 9            DE    DE-NI          NIEDERSACHSEN
#> 10           DE    DE-NW    NORDRHEIN-WESTFALEN
#> 11           DE    DE-RP        RHEINLAND-PFALZ
#> 12           DE    DE-SL               SAARLAND
#> 13           DE    DE-SN                SACHSEN
#> 14           DE    DE-ST         SACHSEN-ANHALT
#> 15           DE    DE-SH     SCHLESWIG-HOLSTEIN
#> 16           DE    DE-TH              THURINGEN

There’s a largish (but somehow seemingly arbritrary) list of categories:

data("categories")
head(categories)
#>                               name   id
#> 1                   All categories    0
#> 3             Arts & Entertainment    3
#> 5 Celebrities & Entertainment News  184
#> 6               Comics & Animation  316
#> 8                   Animated Films 1104
#> 9                    Anime & Manga  317

Let’s search for some keywords in this list:

categories %>% 
  filter(str_detect(tolower(name), "politics"))
#>                  name  id
#> 1            Politics 396
#> 2  Left-Wing Politics 410
#> 3 Right-Wing Politics 409


categories %>% 
  filter(str_detect(tolower(name), "energy"))
#>                             name  id
#> 1             Energy & Utilities 233
#> 2                 Nuclear Energy 954
#> 3 Renewable & Alternative Energy 657

Let’s say we are interested in politics:

cat1_v <- c("News", "Politics", "International Relations")

6 Get data

I tried different variants, but it seems that the quota limit is quickly reached. If you run out of quota, you may want to try later.

g1 <- gtrends(keyword = cat1_v,
              geo = de$sub_code[1:3],
              time  ="today 12-m",
              gprop = "web")

7 Plot it

There’s a convenient plotting method available:

plot(g1)

As we can see, “News” is much more accessed compared to the other categories, which may be an artifact. However, it shows that we might confine our interest to relative differences.

8 Reproducibility

#> ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.2.1 (2022-06-23)
#>  os       macOS Big Sur ... 10.16
#>  system   x86_64, darwin17.0
#>  ui       X11
#>  language (EN)
#>  collate  en_US.UTF-8
#>  ctype    en_US.UTF-8
#>  tz       Europe/Berlin
#>  date     2022-11-04
#>  pandoc   2.19.2 @ /usr/local/bin/ (via rmarkdown)
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
#>  package       * version date (UTC) lib source
#>  assertthat      0.2.1   2019-03-21 [1] CRAN (R 4.2.0)
#>  backports       1.4.1   2021-12-13 [1] CRAN (R 4.2.0)
#>  blogdown        1.13    2022-09-24 [1] CRAN (R 4.2.0)
#>  bookdown        0.29    2022-09-12 [1] CRAN (R 4.2.0)
#>  broom           1.0.1   2022-08-29 [1] CRAN (R 4.2.0)
#>  bslib           0.4.0   2022-07-16 [1] CRAN (R 4.2.0)
#>  cachem          1.0.6   2021-08-19 [1] CRAN (R 4.2.0)
#>  callr           3.7.2   2022-08-22 [1] CRAN (R 4.2.0)
#>  cellranger      1.1.0   2016-07-27 [1] CRAN (R 4.2.0)
#>  cli             3.4.1   2022-09-23 [1] CRAN (R 4.2.0)
#>  codetools       0.2-18  2020-11-04 [2] CRAN (R 4.2.1)
#>  colorout      * 1.2-2   2022-06-13 [1] local
#>  colorspace      2.0-3   2022-02-21 [1] CRAN (R 4.2.0)
#>  crayon          1.5.2   2022-09-29 [1] CRAN (R 4.2.1)
#>  curl            4.3.3   2022-10-06 [1] CRAN (R 4.2.0)
#>  DBI             1.1.3   2022-06-18 [1] CRAN (R 4.2.0)
#>  dbplyr          2.2.1   2022-06-27 [1] CRAN (R 4.2.0)
#>  devtools        2.4.5   2022-10-11 [1] CRAN (R 4.2.1)
#>  digest          0.6.30  2022-10-18 [1] CRAN (R 4.2.0)
#>  dplyr         * 1.0.10  2022-09-01 [1] CRAN (R 4.2.0)
#>  ellipsis        0.3.2   2021-04-29 [1] CRAN (R 4.2.0)
#>  evaluate        0.17    2022-10-07 [1] CRAN (R 4.2.0)
#>  fansi           1.0.3   2022-03-24 [1] CRAN (R 4.2.0)
#>  farver          2.1.1   2022-07-06 [1] CRAN (R 4.2.0)
#>  fastmap         1.1.0   2021-01-25 [1] CRAN (R 4.2.0)
#>  forcats       * 0.5.2   2022-08-19 [1] CRAN (R 4.2.0)
#>  fs              1.5.2   2021-12-08 [1] CRAN (R 4.2.0)
#>  gargle          1.2.1   2022-09-08 [1] CRAN (R 4.2.0)
#>  generics        0.1.3   2022-07-05 [1] CRAN (R 4.2.0)
#>  ggplot2       * 3.3.6   2022-05-03 [1] CRAN (R 4.2.0)
#>  glue            1.6.2   2022-02-24 [1] CRAN (R 4.2.0)
#>  googledrive     2.0.0   2021-07-08 [1] CRAN (R 4.2.0)
#>  googlesheets4   1.0.1   2022-08-13 [1] CRAN (R 4.2.0)
#>  gtable          0.3.1   2022-09-01 [1] CRAN (R 4.2.0)
#>  gtrendsR      * 1.5.1   2022-05-23 [1] CRAN (R 4.2.0)
#>  haven           2.5.1   2022-08-22 [1] CRAN (R 4.2.0)
#>  highr           0.9     2021-04-16 [1] CRAN (R 4.2.0)
#>  hms             1.1.2   2022-08-19 [1] CRAN (R 4.2.0)
#>  htmltools       0.5.3   2022-07-18 [1] CRAN (R 4.2.0)
#>  htmlwidgets     1.5.4   2021-09-08 [1] CRAN (R 4.2.0)
#>  httpuv          1.6.6   2022-09-08 [1] CRAN (R 4.2.0)
#>  httr            1.4.4   2022-08-17 [1] CRAN (R 4.2.0)
#>  jquerylib       0.1.4   2021-04-26 [1] CRAN (R 4.2.0)
#>  jsonlite        1.8.3   2022-10-21 [1] CRAN (R 4.2.1)
#>  knitr           1.40    2022-08-24 [1] CRAN (R 4.2.0)
#>  labeling        0.4.2   2020-10-20 [1] CRAN (R 4.2.0)
#>  later           1.3.0   2021-08-18 [1] CRAN (R 4.2.0)
#>  lifecycle       1.0.3   2022-10-07 [1] CRAN (R 4.2.0)
#>  lubridate       1.8.0   2021-10-07 [1] CRAN (R 4.2.0)
#>  magrittr        2.0.3   2022-03-30 [1] CRAN (R 4.2.0)
#>  memoise         2.0.1   2021-11-26 [1] CRAN (R 4.2.0)
#>  mime            0.12    2021-09-28 [1] CRAN (R 4.2.0)
#>  miniUI          0.1.1.1 2018-05-18 [1] CRAN (R 4.2.0)
#>  modelr          0.1.9   2022-08-19 [1] CRAN (R 4.2.0)
#>  munsell         0.5.0   2018-06-12 [1] CRAN (R 4.2.0)
#>  pillar          1.8.1   2022-08-19 [1] CRAN (R 4.2.0)
#>  pkgbuild        1.3.1   2021-12-20 [1] CRAN (R 4.2.0)
#>  pkgconfig       2.0.3   2019-09-22 [1] CRAN (R 4.2.0)
#>  pkgload         1.3.0   2022-06-27 [1] CRAN (R 4.2.0)
#>  prettyunits     1.1.1   2020-01-24 [1] CRAN (R 4.2.0)
#>  processx        3.7.0   2022-07-07 [1] CRAN (R 4.2.0)
#>  profvis         0.3.7   2020-11-02 [1] CRAN (R 4.2.0)
#>  promises        1.2.0.1 2021-02-11 [1] CRAN (R 4.2.0)
#>  ps              1.7.1   2022-06-18 [1] CRAN (R 4.2.0)
#>  purrr         * 0.3.5   2022-10-06 [1] CRAN (R 4.2.0)
#>  R6              2.5.1   2021-08-19 [1] CRAN (R 4.2.0)
#>  Rcpp            1.0.9   2022-07-08 [1] CRAN (R 4.2.0)
#>  readr         * 2.1.3   2022-10-01 [1] CRAN (R 4.2.0)
#>  readxl          1.4.1   2022-08-17 [1] CRAN (R 4.2.0)
#>  remotes         2.4.2   2021-11-30 [1] CRAN (R 4.2.0)
#>  reprex          2.0.2   2022-08-17 [1] CRAN (R 4.2.0)
#>  rlang           1.0.6   2022-09-24 [1] CRAN (R 4.2.0)
#>  rmarkdown       2.17    2022-10-07 [1] CRAN (R 4.2.0)
#>  rstudioapi      0.14    2022-08-22 [1] CRAN (R 4.2.0)
#>  rvest           1.0.3   2022-08-19 [1] CRAN (R 4.2.0)
#>  sass            0.4.2   2022-07-16 [1] CRAN (R 4.2.0)
#>  scales          1.2.1   2022-08-20 [1] CRAN (R 4.2.0)
#>  sessioninfo     1.2.2   2021-12-06 [1] CRAN (R 4.2.0)
#>  shiny           1.7.2   2022-07-19 [1] CRAN (R 4.2.0)
#>  stringi         1.7.8   2022-07-11 [1] CRAN (R 4.2.0)
#>  stringr       * 1.4.1   2022-08-20 [1] CRAN (R 4.2.0)
#>  tibble        * 3.1.8   2022-07-22 [1] CRAN (R 4.2.0)
#>  tidyr         * 1.2.1   2022-09-08 [1] CRAN (R 4.2.0)
#>  tidyselect      1.2.0   2022-10-10 [1] CRAN (R 4.2.0)
#>  tidyverse     * 1.3.2   2022-07-18 [1] CRAN (R 4.2.0)
#>  tzdb            0.3.0   2022-03-28 [1] CRAN (R 4.2.0)
#>  urlchecker      1.0.1   2021-11-30 [1] CRAN (R 4.2.0)
#>  usethis         2.1.6   2022-05-25 [1] CRAN (R 4.2.0)
#>  utf8            1.2.2   2021-07-24 [1] CRAN (R 4.2.0)
#>  vctrs           0.5.0   2022-10-22 [1] CRAN (R 4.2.0)
#>  withr           2.5.0   2022-03-03 [1] CRAN (R 4.2.0)
#>  xfun            0.34    2022-10-18 [1] CRAN (R 4.2.0)
#>  xml2            1.3.3   2021-11-30 [1] CRAN (R 4.2.0)
#>  xtable          1.8-4   2019-04-21 [1] CRAN (R 4.2.0)
#>  yaml            2.3.6   2022-10-18 [1] CRAN (R 4.2.0)
#> 
#>  [1] /Users/sebastiansaueruser/Rlibs
#>  [2] /Library/Frameworks/R.framework/Versions/4.2/Resources/library
#> 
#> ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────