Using Google Trends Data for Market Research: A Developer's Playbook
How to extract actionable market intelligence from Google Trends — keyword validation, seasonal demand forecasting
The actor referenced in this article is live on Apify. Pay only for results delivered.
Google Trends provides a publicly available window into search demand — a proxy for consumer interest at scale. Unlike survey data, Google Trends reflects actual intent at the moment of search. Unlike social media, it is not skewed by platform demographics. For developers building products or running businesses, it is one of the most underused data sources available.
TL;DR: Google Trends values are relative (0-100 indexed to peak in the selected timeframe), not absolute search volume. Four market research use cases: product-market fit validation (average > 20 = viable demand), seasonal demand forecasting (group by week-of-year across 5 years), geographic opportunity mapping (identify undersaturated markets), and competitive brand tracking (6-month moving averages). For absolute volume, supplement with Google Keyword Planner.
This guide covers four concrete use cases with working code.
Use Case 1: Validating Product-Market Fit Before Building
Before spending months building a feature or product, check whether there is sustained search demand for the problem it solves.
from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
keywords = [
'job posting scraper', # Your product
'linkedin scraper api', # Adjacent product
'greenhouse api', # Specific use case
'ats job board api', # Category term
]
run = client.actor('themineworks/google-trends-pro').call(run_input={
'keywords': keywords,
'timeframe': 'today 5-y',
'geo': 'US',
'includeRelatedQueries': True,
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
iot = item['interest_over_time']
avg = sum(p['value'] for p in iot) / len(iot)
trend_direction = iot[-1]['value'] - iot[0]['value']
print(f"{item['keyword']}: avg={avg:.0f}, trend={'↑' if trend_direction > 0 else '↓'}")
What to look for:
- Average > 20: Enough search volume to build a product around
- Trend direction positive: Growing demand
- Related queries — “rising”: Emerging sub-topics worth targeting
Use Case 2: Seasonal Demand Forecasting
Many businesses have predictable seasonal patterns. Surfacing these patterns lets you plan inventory, staffing, and marketing spend.
import pandas as pd
run = client.actor('themineworks/google-trends-pro').call(run_input={
'keywords': ['tax software', 'tax filing', 'tax return'],
'timeframe': 'today 5-y',
'geo': 'US',
})
# Extract weekly IOT data
for item in client.dataset(run['defaultDatasetId']).iterate_items():
df = pd.DataFrame(item['interest_over_time'])
df['date'] = pd.to_datetime(df['date'])
df['week_of_year'] = df['date'].dt.isocalendar().week
df['year'] = df['date'].dt.year
# Average interest by week of year across all years
seasonal = df.groupby('week_of_year')['value'].mean()
peak_week = seasonal.idxmax()
trough_week = seasonal.idxmin()
print(f"{item['keyword']}: peak week {peak_week}, trough week {trough_week}")
The output tells you exactly when demand peaks and by how much — critical data for marketing calendar planning and capacity forecasting.
Use Case 3: Geographic Opportunity Mapping
Where is your product most searched? Geographic data can identify markets to enter, advertising geographies to prioritize, and content localization opportunities.
run = client.actor('themineworks/google-trends-pro').call(run_input={
'keywords': ['reddit scraper'],
'timeframe': 'today 12-m',
'geo': '', # Worldwide
'includeInterestByRegion': True,
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
regions = sorted(
item['interest_by_region'],
key=lambda x: x['value'],
reverse=True
)[:10]
print(f"Top 10 regions for '{item['keyword']}':")
for r in regions:
print(f" {r['geoName']}: {r['value']}")
Common insight patterns:
- Unexpected high-value markets: A developer tool getting high search interest in India, Eastern Europe, or Southeast Asia before you have localized or targeted those markets
- Declining established markets: A keyword that was strong in Germany three years ago is now declining, suggesting market saturation
- Rising emerging markets: Brazil, Indonesia, or Nigeria showing increasing interest in a category you operate in
Use Case 4: Competitive Intelligence
Track how search interest in competitors changes over time relative to your own brand or category.
# Compare interest across competitors
run = client.actor('themineworks/google-trends-pro').call(run_input={
'keywords': ['apify', 'bright data', 'scraperapi', 'zyte'],
'timeframe': 'today 5-y',
'geo': 'US',
})
results = {}
for item in client.dataset(run['defaultDatasetId']).iterate_items():
iot = item['interest_over_time']
# Calculate 6-month moving average
values = [p['value'] for p in iot]
ma = [sum(values[max(0,i-25):i+1])/len(values[max(0,i-25):i+1]) for i in range(len(values))]
results[item['keyword']] = ma
# Plot or export for visualization
This gives you a trajectory view of brand awareness for each competitor — are they growing, plateauing, or declining?
Interpreting Google Trends Values
A critical nuance: Google Trends values are indexed 0–100 relative to the peak search volume in your selected timeframe and geography. They are not absolute search volume numbers.
What this means in practice:
- A value of 50 does not mean 50% of searches — it means half as many searches as the peak in your selected period
- Comparing two keywords in the same query gives relative volumes (keyword A vs keyword B)
- Comparing the same keyword across two separate queries gives unreliable results (different normalization periods)
For absolute volume, you need Google Keyword Planner (requires Google Ads account) or a third-party SEO tool like Ahrefs or Semrush.
Building a Trends Monitoring Dashboard
For ongoing tracking, schedule daily pulls for your key category terms and store them in a time series database:
# Scheduled daily collection
keywords_to_monitor = [
'web scraping api',
'apify actors',
'reddit data api',
'job posting api',
]
run = client.actor('themineworks/google-trends-pro').call(run_input={
'keywords': keywords_to_monitor,
'timeframe': 'today 1-m', # Last 30 days for daily data
'geo': 'US',
})
# Append to your time series store
for item in client.dataset(run['defaultDatasetId']).iterate_items():
store_daily_datapoint(
keyword=item['keyword'],
date=today,
values=item['interest_over_time']
)
Daily trends data gives you 30-day resolution; weekly is the default for longer timeframes. Match your collection frequency to the resolution you actually need.
Frequently Asked Questions
What do Google Trends values actually measure, and what do they not measure?
Google Trends values are a relative index from 0 to 100 — where 100 represents peak search interest for the selected keyword in the selected timeframe and geography, not an absolute search volume. A value of 50 means interest is half what it was at peak, not 50% of all searches. Values cannot be compared across separate Trends queries unless you include a common anchor keyword in both. To get absolute volume estimates, supplement Trends with Google Keyword Planner.
How do you use Google Trends to validate product-market fit before building?
Search for the core problem your product solves (not your product name) and check the 5-year trend. An average Trends value above 20 with a stable or rising trajectory suggests genuine sustained demand. A value below 10 or a clearly declining trend over 5 years is a warning signal. Cross-reference with related queries: if the rising related queries align with your proposed solution, you have directional evidence that the market is actively searching for what you plan to build.
How can you use Google Trends data for seasonal demand forecasting?
Extract 5 years of weekly data for your core keywords and compute the average Trends value for each calendar week across all years. The resulting 52-week profile reveals your demand seasonality. Apply a linear trend correction to separate seasonal from growth components. Use the seasonal index to adjust revenue and inventory forecasts — if week 48 historically averages 2.3x your baseline, plan marketing spend accordingly.
How do you track competitor brand awareness over time using Google Trends?
Include your brand name and up to 4 competitors in a single Trends query to get comparable relative interest values. Track the 2-year weekly trend for each. A rising competitor trend relative to yours is a leading indicator of market share shift, often appearing 3-6 months before it shows in revenue data. Use a 6-week moving average to smooth noise. If a competitor spikes suddenly, check the related queries to identify whether a product launch, PR event, or viral moment drove it.
What is the best way to identify geographic market opportunities using Google Trends?
Use Interest by Region to find countries where category search interest is high but your brand interest is low — this indicates demand with low penetration. Sort by relative interest (category interest normalized by population) rather than absolute interest to find undersaturated markets. A region with 80% category interest but only 20% brand interest is higher-opportunity than one where both are 30%.
Try the scraper referenced in this article — live on Apify, pay only for results.
Open google-trends-pro on Apify →Building a Legal & Regulatory Intelligence Pipeline with Court Records, Federal Rules, and Contract Data
Track case law, new federal regulations, and government contract awards automatically. A step-by-step guide to wiring three public-data scrapers into a
The Economic Data Stack: GDP, Trade Flows, and Open Government Data as Clean JSON
Build a macroeconomic intelligence pipeline from authoritative open data. World Bank indicators, bilateral trade flows
Building an Academic Research Data Stack: Crossref, OpenAlex, and Citation-Aware RAG
How to assemble a literature-review and research-intelligence pipeline from open scholarly data. Search 150M+ works, map citation networks