Using Google Trends to Find Untapped SEO Opportunities in 2025
A step-by-step framework for using Google Trends data to spot rising keywords before they get competitive.
The actor referenced in this article. Pay only for results delivered.
Most SEO keyword research focuses on existing search volume: find keywords that already get significant searches, assess competition, try to rank. The problem with this approach is that by the time a keyword shows high volume in standard tools, it is already competitive.
Try it live: Google Trends Scraper, 4 Report Types, No Browser, No Key. Pay per result delivered. Failed and empty results are never charged.
Google Trends gives you a different lens: search velocity. A keyword rising from 20 to 80 in Trends over 12 months represents an opportunity that does not show significant volume in traditional keyword tools yet. That is the window.
TL;DR: Find SEO opportunities before they become competitive by targeting keywords with rising Google Trends trajectories. Classify trend shapes as steady_rise, spike, decline, or flat; only target steady_rise. “Breakout” related queries (>5,000% growth) are highest priority. Run weekly: extract rising related queries → analyze trajectory → check keyword difficulty (under 30 in Ahrefs/Semrush) → publish 6-8 weeks before projected peak.
The Framework: Rising + Low-Competition
The opportunity set is the intersection of:
- Keywords showing upward trend in Google Trends
- Keywords with low current competition (few established pages ranking)
Step 1 is what Google Trends handles directly. Step 2 requires a separate tool (Ahrefs, Semrush, or Google Search Console if you already rank for related terms).
Step 1: Find Rising Keywords in Your Domain
from apify_client import ApifyClient
import pandas as pd
client = ApifyClient('YOUR_API_TOKEN')
# Start with broad seed keywords in your domain
seed_keywords = [
'web scraping',
'data pipeline',
'job data api',
'reddit data',
'social media scraping',
]
run = client.actor('themineworks/google-trends-pro').call(run_input={
'keywords': seed_keywords,
'timeframe': 'today 5-y',
'geo': 'US',
'includeRelatedQueries': True,
})
# Extract rising related queries
rising_opportunities = []
for item in client.dataset(run['defaultDatasetId']).iterate_items():
related = item.get('related_queries', {})
rising = related.get('rising', [])
for query in rising:
rising_opportunities.append({
'seed_keyword': item['keyword'],
'rising_query': query['query'],
'breakout': query['formattedValue'] == 'Breakout', # >5000% growth
'value': query.get('value', 0),
})
# Sort by breakout first, then by value
rising_df = pd.DataFrame(rising_opportunities)
print(rising_df.sort_values(['breakout', 'value'], ascending=False).head(20))
“Breakout” in Trends terminology means the query grew more than 5,000% in the period; it essentially did not exist before. These are the highest-priority opportunities.
Step 2: Trend Trajectory Analysis
Not all rising keywords are equal. A keyword that spiked once around a news event and then dropped is not the same as one steadily growing for 18 months.
def classify_trend_shape(iot_values: list[float]) -> str:
"""Classify a trend as steady_rise, spike, decline, or flat."""
if len(iot_values) < 8:
return 'insufficient_data'
# Divide into thirds
third = len(iot_values) // 3
early_avg = sum(iot_values[:third]) / third
mid_avg = sum(iot_values[third:2*third]) / third
recent_avg = sum(iot_values[2*third:]) / (len(iot_values) - 2*third)
if recent_avg > mid_avg > early_avg * 1.2:
return 'steady_rise'
elif recent_avg > max(early_avg, mid_avg) * 2:
return 'spike_recent'
elif early_avg > mid_avg > recent_avg:
return 'declining'
else:
return 'flat_or_noisy'
# Apply to each rising query
run2 = client.actor('themineworks/google-trends-pro').call(run_input={
'keywords': [opp['rising_query'] for opp in rising_opportunities[:20]],
'timeframe': 'today 3-y',
'geo': 'US',
})
for item in client.dataset(run2['defaultDatasetId']).iterate_items():
values = [p['value'] for p in item['interest_over_time']]
shape = classify_trend_shape(values)
print(f"{item['keyword']}: {shape}")
Focus on steady_rise shapes. Spikes are usually newsworthy events that do not represent durable search demand.
Step 3: Geographic Opportunity Mapping
A keyword that is trending in the US but has low interest in the UK or Canada may represent an opportunity to rank in those markets before competitors notice.
run = client.actor('themineworks/google-trends-pro').call(run_input={
'keywords': ['apify actors', 'web scraping python'],
'timeframe': 'today 12-m',
'geo': '', # Worldwide
'includeInterestByRegion': True,
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
regions_by_interest = sorted(
item.get('interest_by_region', []),
key=lambda r: r['value'],
reverse=True
)
# Find markets where interest is growing but not yet saturated
for region in regions_by_interest[:15]:
print(f" {region['geoName']}: {region['value']}")
Step 4: Seasonal Content Calendar
Some keywords are evergreen; others are seasonal. Trending data reveals the optimal timing for seasonal content:
run = client.actor('themineworks/google-trends-pro').call(run_input={
'keywords': ['web scraping tutorial', 'scraping jobs data'],
'timeframe': 'today 5-y',
'geo': 'US',
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
df = pd.DataFrame(item['interest_over_time'])
df['date'] = pd.to_datetime(df['date'])
df['month'] = df['date'].dt.month
monthly_avg = df.groupby('month')['value'].mean()
peak_month = monthly_avg.idxmax()
month_names = {1:'Jan',2:'Feb',3:'Mar',4:'Apr',5:'May',6:'Jun',
7:'Jul',8:'Aug',9:'Sep',10:'Oct',11:'Nov',12:'Dec'}
print(f"{item['keyword']}: peak month = {month_names[peak_month]}")
print(" Publish content 6-8 weeks before peak for indexing time")
Putting It Together: The Rising Keyword Workflow
- Weekly: Pull rising related queries for your top 10 seed keywords
- Filter: Keep only
steady_risetrend shapes - Evaluate competition: Check in Ahrefs/Semrush: keyword difficulty under 30 is green light
- Prioritize by region: Double-check if the opportunity exists in your target geography
- Publish: Create content targeting the rising query 6-8 weeks before projected peak
- Track: Set up a Trends alert for the keyword to monitor ongoing trajectory
This workflow finds content opportunities that standard keyword research misses by 6-12 months. Early content in a rising search trend ranks with significantly less competition than the same content published once the trend is well-established.
Frequently Asked Questions
How do you use Google Trends to find keywords before they become competitive?
Sort by the Rising related queries tab in Google Trends, which shows queries with the fastest recent growth relative to their historical baseline. Filter for queries with a steady_rise trajectory, consistent growth over 6+ months, not a single spike. Cross-reference against a keyword difficulty tool: a rising Trends query with difficulty below 30 in Ahrefs or Semrush is a high-priority content target. The goal is to publish and accumulate backlinks before the keyword crosses the difficulty threshold that makes ranking hard.
What does “Breakout” mean in Google Trends related queries?
Breakout is Google’s label for related queries that have grown more than 5,000% in the selected timeframe; the growth is so large that a percentage would be misleading. Breakout queries represent either entirely new search behavior (a new term entering common use) or rapid acceleration from a near-zero baseline. They are the highest-priority SEO opportunities in Trends data because they signal emerging demand with essentially zero existing content competition. Verify with a keyword tool before investing; not all Breakout queries have meaningful absolute volume.
How do you distinguish a genuine rising trend from a temporary news spike?
Plot the 12-month or 5-year weekly trend and examine the shape. A news spike appears as a sharp peak followed by rapid decline back to baseline. A genuine rising trend shows consistent week-over-week growth across multiple months with no single spike dominating. Additional check: search the keyword and look at news coverage dates. If one dominant news event drove the spike, treat it as transient. If rising related queries are diverse (product names, tutorial queries, comparison queries), it indicates organic adoption growth.
How far in advance should you publish content targeting a rising keyword?
Publish 6-8 weeks before the projected peak, based on the trend trajectory. Google needs 4-6 weeks to crawl, index, and begin ranking new content; additional time is needed to accumulate early engagement signals. For seasonal trends, identify last year’s peak date and publish 6-8 weeks before. For non-seasonal rising trends, publish as soon as keyword difficulty is below your domain’s competitive threshold; there is no “too early” for a steadily rising keyword.
What is the recommended workflow for turning Google Trends data into an SEO content strategy?
Run weekly: (1) pull rising related queries for 5-10 seed keywords using Google Trends Pro; (2) classify trajectory shapes: discard everything but steady_rise; (3) check keyword difficulty for the steady_rise queries and prioritize those under 30 KD; (4) publish 6-8 weeks before projected peak; (5) monitor rankings weekly and update content that ranks on page 2 after 3 months. Automate steps 1-3 with a Python script running every Monday morning.
Explore the scraper referenced in this article: inputs, outputs, and pricing, then run it on Apify.
Google Trends API for Python in 2025: pytrends vs Scraper
Google Trends has no official API. Learn why pytrends breaks, how the SERP API approach works, and the fastest way to pull trend data into Python without getting rate-limited.
Using Google Trends Data for Market Research: A Developer's Playbook
How to turn Google Trends data into market research you can act on, from keyword validation to seasonal demand forecasting.
pytrends is Dead: The Best Google Trends Alternatives in 2026
pytrends breaks constantly, the maintainer has stepped back, and the official Google Trends API is still not public. The alternatives that actually work in 2026.
Five Scholarly Databases in One Call: OpenAlex, Crossref, arXiv, PubMed and OpenCitations
One call across OpenAlex, Crossref, arXiv, PubMed and OpenCitations: works, preprints, biomedical abstracts, citation graphs, and every output field.