Using Google Trends to Find Untapped SEO Opportunities in 2025
A step-by-step framework for using Google Trends data to identify rising keywords before they get competitive
The actor referenced in this article is live on Apify. 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.
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.
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