Skip to main content
Thirdwatchthirdwatch
Other

Scrape Google Trends Data for Keyword Research (2026 Guide)

Extract Google Trends interest data, slope, peak dates, and related queries for SEO keyword research. Python recipes included with scheduling automation.

May 26, 2026 · 6 min read · 1,275 words
See the scraper →

Thirdwatch's Google Trends Scraper returns structured Google Trends data for any keyword list -- 12-month interest timeseries, average interest (0-100), directional slope, peak date, and top/rising related queries. Built for SEO teams, content strategists, and growth marketers who need trend data in JSON rather than screenshots. No login, no API key, pay-per-result pricing.

Why scrape Google Trends for keyword research

Google Trends is the only free, public signal of relative search demand across every topic Google indexes. According to Google's own documentation, the data reflects actual search queries normalized to a 0-100 scale by time and region, making it the closest proxy for real consumer intent that does not require an advertising account.

Research from BrightEdge shows that organic search drives over 50% of all website traffic, making keyword selection one of the highest-leverage decisions in content marketing. The job-to-be-done for SEO teams is straightforward. You have a list of 50-200 candidate keywords from brainstorming, competitor analysis, or Ahrefs/Semrush seed lists. You need to know which ones have rising demand, which are flat, and which are in decline -- before you invest in content production. Manually checking each keyword on trends.google.com means clicking through one chart at a time, eyeballing direction, and copy-pasting numbers into a spreadsheet. The actor eliminates that manual loop: pass your keyword list, get back structured JSON with average interest, directional slope, peak date, and optionally the top related queries that reveal long-tail expansion opportunities.

How does this compare to the alternatives?

Three paths to getting Google Trends data into a keyword research workflow:

Approach Cost Reliability Setup time Maintenance
DIY Python with pytrends library Free compute, session management overhead Breaks on rate limits and IP blocks 2-4 hours You own the session/proxy layer
Generic scraping API (ScrapingBee, Oxylabs) Subscription-based Depends on provider's Trends support 30 minutes Provider maintains
Thirdwatch Google Trends Scraper Pay per result Managed end-to-end 5 minutes Thirdwatch tracks Google changes

The pytrends library is the most common DIY route, but Google throttles unauthenticated requests aggressively -- most teams hit 429 errors within minutes at scale. Generic scraping APIs can work but charge per request regardless of success, and few have Trends-specific parsing that returns structured slope and related-query data. The Google Trends Scraper returns all fields parsed and structured in one call.

How to scrape Google Trends for keyword research in 4 steps

Step 1: How do I set up my Apify API token?

Sign up at apify.com (free tier available, no credit card required). Navigate to Settings, then Integrations, and copy your personal API token. Every example below assumes the token is stored in APIFY_TOKEN:

export APIFY_TOKEN="apify_api_xxxxxxxxxxxxxxxx"

Step 2: How do I pull trend data for a list of SEO keywords?

Pass your keyword candidates in keywords, set geo to scope by country, and choose a timeRange. The default 12-month window works well for editorial calendar planning.

import os, requests, pandas as pd

ACTOR = "thirdwatch~google-trends-scraper"
TOKEN = os.environ["APIFY_TOKEN"]

resp = requests.post(
    f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
    params={"token": TOKEN},
    json={
        "keywords": [
            "headless cms", "composable commerce", "jamstack",
            "server components", "edge computing", "webassembly"
        ],
        "geo": "US",
        "timeRange": "today 12-m",
        "includeRelated": True,
    },
    timeout=300,
)
df = pd.DataFrame(resp.json())
print(df[["keyword", "avgInterest", "slope", "peakInterest", "peakDate"]]
      .sort_values("slope", ascending=False))

Six keywords in one call. The response includes one row per keyword with the full timeseries, average interest, slope, and related queries. Sorting by slope descending puts rising keywords at the top -- the ones worth investing content effort into.

Step 3: How do I find rising long-tail queries from related data?

The relatedRising field contains queries with explosive recent growth. Filter for "Breakout" entries -- these are queries with effectively infinite percentage growth.

for _, row in df.iterrows():
    rising = row.get("relatedRising", [])
    if not rising:
        continue
    breakouts = [q for q in rising if q.get("value") == "Breakout"]
    print(f"\n{row['keyword']}{len(breakouts)} breakout queries:")
    for q in breakouts:
        print(f"  {q['query']}")

These breakout queries are gold for content teams. They represent searches that barely existed a few months ago but are now surging. Publishing content targeting these terms before competitors notice gives you a first-mover advantage in organic rankings.

Step 4: How do I score and prioritize keywords for my content calendar?

Combine trend slope with average interest to create a simple priority score. High slope plus high average interest means a keyword is both popular and accelerating.

df["priority_score"] = df["avgInterest"] * (1 + df["slope"])
df["direction"] = df["slope"].apply(
    lambda s: "rising" if s > 0.05 else "falling" if s < -0.05 else "stable"
)
calendar = df.sort_values("priority_score", ascending=False)
print(calendar[["keyword", "avgInterest", "slope", "direction",
                "priority_score", "peakDate"]].to_string(index=False))

Keywords with a positive slope and high average interest go into the next sprint. Keywords with high interest but negative slope may still be worth covering for existing demand, but deprioritize them relative to rising terms.

Sample output

A single record from the dataset for one keyword looks like this:

{
    "keyword": "headless cms",
    "geo": "US",
    "timeRange": "today 12-m",
    "avgInterest": 61,
    "slope": 0.12,
    "peakInterest": 84,
    "peakDate": "2026-01-12",
    "timeline": [
        { "time": "2025-05-25", "value": 55 },
        { "time": "2025-06-01", "value": 58 },
        { "time": "2025-06-08", "value": 62 }
    ],
    "relatedTop": [
        { "query": "headless cms comparison", "value": 100 },
        { "query": "best headless cms 2026", "value": 82 }
    ],
    "relatedRising": [
        { "query": "headless cms for ecommerce", "value": "Breakout" },
        { "query": "headless cms vs traditional cms", "value": "+350%" }
    ],
    "scraped_at": "2026-05-26T09:15:00.000Z"
}

avgInterest is the mean of all timeline values -- a single number summarizing demand over the window. slope at 0.12 confirms this keyword is trending upward. relatedRising surfaces two content-ready long-tail angles: an ecommerce-specific guide and a comparison piece. peakDate in January suggests seasonal planning content resonates around year-start budgeting cycles.

Common pitfalls

Three mistakes that trip up keyword research teams using Trends data. Confusing interest with volume -- Google Trends returns relative interest normalized to 0-100, not absolute search counts. A keyword at 80 interest could have 10x more raw searches than another at 80 if the comparison windows differ. Always compare keywords within the same run and time range. Ignoring geography -- leaving geo empty returns worldwide data, which dilutes country-specific signals. A keyword trending in India but flat in the US shows as mildly positive worldwide. Scope to your target market. Over-indexing on short windows -- the now 1-d and now 7-d ranges are noisy and reflect hourly fluctuations, not durable trends. Use today 12-m or today 5-y for editorial planning; reserve short windows for real-time news monitoring.

Thirdwatch's actor handles the session management and rate-limit navigation so you can focus on the keyword analysis, not the data collection infrastructure.

For content teams running quarterly planning cycles, the most effective workflow is to pull trend data for your entire keyword universe at the start of each quarter, score by slope and average interest, and allocate writing resources to the top-scoring cluster. Re-pull at the midpoint to catch any emerging breakout queries that appeared after planning. This two-pass approach balances editorial stability with trend responsiveness. Combine with Google Search scraping to validate that trending keywords also have achievable SERP competition before committing to content production.

Related use cases

Frequently asked questions

Is Google Trends data the same as search volume?

No. Google Trends returns normalized interest scores between 0 and 100, relative to the peak within your selected time window and geography. For absolute search volume estimates, you need Google Ads Keyword Planner. Trends data is best for comparing relative demand across keywords and spotting directional momentum.

How fresh is the Google Trends data returned by this actor?

Data is pulled live at run time directly from Google Trends. Google typically updates Trends data with a one to three day delay, so very recent events may not yet appear. For time-sensitive monitoring, the past-hour and past-day windows offer the freshest signal.

Can I compare multiple keywords in one run?

Yes. Pass an array of keywords and the actor returns one dataset item per keyword, all scoped to the same geography and time range. This makes head-to-head comparison straightforward without manual chart toggling.

What does the slope field tell me?

The slope is a directional indicator between negative one and positive one. A positive slope means interest in the latter portion of the time window is higher than the earlier portion. A negative slope means interest is declining. Use it as a quick filter to separate rising keywords from fading ones.

Does the actor return related queries automatically?

Only when you set includeRelated to true. This fetches the top ten related queries and the top ten rising queries for each keyword. It adds one extra internal request per keyword, so leave it off if you only need the interest timeseries.

Related

Try it yourself

100 free credits, no credit card.

About 30 real searches. Add the MCP to Claude or Cursor in two minutes.