install.packages(c("gtrendsR", "tidyverse", "ggplot2", "scales",
"lubridate", "knitr", "kableExtra"))
library(gtrendsR)
library(tidyverse)
library(ggplot2)
library(scales)
library(lubridate)
library(knitr)
library(kableExtra)
This report uses Google Trends data to compare U.S. web search interest for three competing athleisure brands: Lululemon, Gymshark, and Fabletics. All three are direct-to-consumer (DTC) brands competing in the activewear and athleisure space, making them a meaningful set for comparative analysis. Five years of monthly search data are used to identify trends, seasonal patterns, and peak interest periods.
trends_raw <- gtrends(
keyword = c("Lululemon", "Gymshark", "Fabletics"),
geo = "US",
time = "today+5-y"
)
# Extract interest over time
iot <- trends_raw$interest_over_time %>%
mutate(
hits = as.numeric(ifelse(hits == "<1", "0", hits)),
date = as.Date(date)
)
glimpse(iot)
## Rows: 783
## Columns: 7
## $ date <date> 2021-07-04, 2021-07-11, 2021-07-18, 2021-07-25, 2021-08-01, …
## $ hits <dbl> 20, 20, 23, 22, 21, 20, 21, 21, 19, 21, 21, 23, 21, 22, 24, 2…
## $ keyword <chr> "Lululemon", "Lululemon", "Lululemon", "Lululemon", "Lululemo…
## $ geo <chr> "US", "US", "US", "US", "US", "US", "US", "US", "US", "US", "…
## $ time <chr> "today+5-y", "today+5-y", "today+5-y", "today+5-y", "today+5-…
## $ gprop <chr> "web", "web", "web", "web", "web", "web", "web", "web", "web"…
## $ category <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
ggplot(iot, aes(x = date, y = hits, color = keyword)) +
geom_line(linewidth = 1) +
labs(
title = "Google Search Interest Over Time",
subtitle = "United States, Past Five Years",
x = "Date",
y = "Search Interest",
color = "Brand"
) +
theme_minimal()
iot %>%
group_by(keyword) %>%
summarise(
Mean_Interest = round(mean(hits, na.rm = TRUE), 1),
Max_Interest = max(hits, na.rm = TRUE),
Min_Interest = min(hits, na.rm = TRUE),
.groups = "drop"
) %>%
arrange(desc(Mean_Interest)) %>%
rename(Brand = keyword) %>%
kable(caption = "Search Interest Summary by Brand (Past 5 Years)") %>%
kable_styling(bootstrap_options = c("striped", "hover"),
full_width = FALSE)
| Brand | Mean_Interest | Max_Interest | Min_Interest |
|---|---|---|---|
| Lululemon | 40.1 | 100 | 19 |
| Fabletics | 4.5 | 9 | 2 |
| Gymshark | 3.7 | 12 | 2 |
iot %>%
group_by(keyword) %>%
slice_max(hits, n = 1, with_ties = FALSE) %>%
select(Brand = keyword, Peak_Date = date, Peak_Interest = hits) %>%
arrange(desc(Peak_Interest)) %>%
kable(caption = "Highest Search Interest Peak by Brand") %>%
kable_styling(bootstrap_options = c("striped", "hover"),
full_width = FALSE)
| Brand | Peak_Date | Peak_Interest |
|---|---|---|
| Lululemon | 2025-11-23 | 100 |
| Gymshark | 2025-11-16 | 12 |
| Fabletics | 2023-11-19 | 9 |
peaks <- iot %>%
group_by(keyword) %>%
slice_max(hits, n = 1, with_ties = FALSE)
ggplot(peaks, aes(x = reorder(keyword, hits), y = hits, fill = keyword)) +
geom_col(show.legend = FALSE) +
geom_text(aes(label = paste0(hits, "\n(", format(date, "%b %Y"), ")")),
hjust = -0.1, size = 3.5) +
coord_flip() +
scale_y_continuous(limits = c(0, 120)) +
labs(
title = "Peak Search Interest by Brand",
subtitle = "Highest recorded search interest score over 5 years",
x = NULL,
y = "Peak Search Interest Score",
caption = "Source: Google Trends via gtrendsR"
) +
theme_minimal()
Lululemon consistently dominates the U.S. search interest across the five-year period, with scores ranging from 20 to a peak of 100, which is the maximum on Google Trends’ relative scale. Its recurring spikes appear annually around November and December, aligning with holiday shopping seasons and major sale events such as the brand’s “We Made Too Much” promotions.
Gymshark and Fabletics both maintain significantly lower search interest throughout the same period, hovering between 2 and 10. While their trend lines are difficult to distinguish at this scale, both brands show relatively flat and stable patterns with minimal seasonal variation, suggesting they rely more on direct traffic, social media, and paid advertising than organic search.
The gap between Lululemon and its competitors reflects key differences in brand maturity and retail presence. Lululemon’s physical store network drives Google searches from consumers looking up store locations, hours, and products, while Gymshark and Fabletics operate primarily online, where customers navigate directly to their sites rather than searching first.
Google Trends. (2024). Google Trends Tutorials [YouTube series]. Google Search Central. https://developers.google.com/search/blog/2024/09/google-trends-tutorials
Massicotte, P., & Eddelbuettel, D. (2023). gtrendsR: Perform and Display Google Trends Queries [R package]. https://cran.r-project.org/package=gtrendsR
Chan, M. (2019). Vignette: Google Trends with the gtrendsR package. https://martinctc.github.io/blog/vignette-google-trends-with-gtrendsr/