All scrapers

Search

Google Trends Scraper

trends.google.com

94.2% Success rate
6.5s Avg response
Google Protection
1,043 calls Measured over

Google Trends shows its data as charts on the explore page, and the page draws them from internal JSON endpoints that want a signed token per chart; Trends is also quick to answer repeated requests from one IP with HTTP 429, so scripts that call those endpoints directly stall fast. A dedicated plugin endpoint takes one to five keywords and returns the data behind the explore page already parsed: interest over time as one point per time bucket with a 0-100 value per keyword, the average for each keyword, interest by region with geo codes, and each keyword's top and rising related queries, with related topics on request. Filter exactly as on trends.google.com - geo for worldwide, a country, a region or a US metro, timeframe from the past hour to all time or a custom date range, a category, and web, image, news, YouTube or Shopping search. Requests go out over rotating exits as plain HTTP calls, with no browser in the loop.

What you can extract

  • Interest over time: one point per minute, hour, day, week or month with a 0-100 value per keyword, the ISO date, a timestamp and a partial-data flag
  • The average interest for each keyword over the range
  • Interest by region at country, region, city or US metro level, with geo codes and a value per keyword
  • Top and rising related queries for each keyword, with values and Breakout markers
  • Related topics for each keyword, on request
  • Up to five keywords, or Knowledge Graph topic ids, compared in one call
  • Filters: geo, timeframe (presets or a custom date range), category and web, images, news, YouTube or Shopping search

Dedicated endpoints

/trends/google-trends

Google Trends explore data

Compare 1-5 keywords: interestOverTime (a 0-100 value per keyword for each time bucket, with ISO date, timestamp and isPartial), averages, interestByRegion (geoCode, geoName and a value per keyword) and per-keyword relatedQueries (top and rising), plus relatedTopics on request via sections. Filter with geo (worldwide, country, region or US metro), timeframe (presets or a custom range), category and property (web, images, news, youtube, shopping); region_resolution sets the level of the region map.

How to scrape it

curl -X POST \
  -H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
  "https://api.scrapeunblocker.com/trends/google-trends?keywords=coffee%2Ctea&geo=US&timeframe=today%203-m"
import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/trends/google-trends",
    headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
    params={"keywords": "coffee,tea", "geo": "US", "timeframe": "today 3-m"},
)
print(resp.text)
import { ScrapeUnblockerClient } from 'scrapeunblocker';

const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });

const trends = await su.googleTrends(['coffee', 'tea'], {
  geo: 'US',
  timeframe: 'today 3-m',
});
console.log(trends);

Requests are POST and take their parameters in the query string. Browser rendering always happens - there is no flag to enable.

Example response

{
  "keywords": ["coffee", "tea"],
  "geo": "US",
  "timeframe": "today 3-m",
  "property": "web",
  "resolution": "DAY",
  "interestOverTime": [
    {
      "date": "2026-06-28T00:00:00Z",
      "timestamp": 1782604800,
      "formattedTime": "Jun 28, 2026",
      "values": { "coffee": 63, "tea": 28 },
      "isPartial": false
    },
    {
      "date": "2026-06-29T00:00:00Z",
      "timestamp": 1782691200,
      "formattedTime": "Jun 29, 2026",
      "values": { "coffee": 54, "tea": 25 },
      "isPartial": false
    }
  ],
  "averages": { "coffee": 56, "tea": 25 },
  "interestByRegion": [
    {
      "geoCode": "US-HI",
      "geoName": "Hawaii",
      "values": { "coffee": 73, "tea": 27 }
    },
    {
      "geoCode": "US-KS",
      "geoName": "Kansas",
      "values": { "coffee": 69, "tea": 31 }
    }
  ],
  "regionResolution": "REGION",
  "relatedQueries": {
    "coffee": {
      "top": [
        {
          "query": "coffee near me",
          "value": 100,
          "formattedValue": "100",
          "link": "https://trends.google.com/trends/explore?q=coffee+near+me&date=today+3-m&geo=US"
        },
        {
          "query": "coffee shops",
          "value": 83,
          "formattedValue": "83",
          "link": "https://trends.google.com/trends/explore?q=coffee+shops&date=today+3-m&geo=US"
        }
      ],
      "rising": [
        {
          "query": "student suspended for bringing coffee",
          "value": 10750,
          "formattedValue": "Breakout",
          "link": "https://trends.google.com/trends/explore?q=student+suspended+for+bringing+coffee&date=today+3-m&geo=US"
        }
      ]
    },
    "tea": {
      "top": [
        {
          "query": "tea green",
          "value": 100,
          "formattedValue": "100",
          "link": "https://trends.google.com/trends/explore?q=tea+green&date=today+3-m&geo=US"
        }
      ],
      "rising": [
        {
          "query": "how to remove tea stains",
          "value": 300,
          "formattedValue": "+300%",
          "link": "https://trends.google.com/trends/explore?q=how+to+remove+tea+stains&date=today+3-m&geo=US"
        }
      ]
    }
  },
  "exploreUrl": "https://trends.google.com/trends/explore?date=today%203-m&q=coffee%2Ctea&geo=US&hl=en-US"
}

Read the API docs

Frequently asked questions

Is it legal to scrape Google Trends?

Google Trends publishes aggregated search-interest indexes, not data about individual people, and collecting publicly available figures is lawful in many jurisdictions; the rules still depend on your country, the data you collect and how you use it. ScrapeUnblocker returns the public Trends data; what you collect and how you use it is your decision.

How do I scrape Google Trends without getting blocked?

Google Trends is quick to answer repeated requests from one IP with HTTP 429 Too Many Requests. The /trends/google-trends plugin sends every request over rotating exits, rests an exit as soon as Trends refuses it and moves on to the next one, and parses the answers for you, with no browser in the loop. In ScrapeUnblocker's benchmark it returned Trends data on 94.2% of 1,043 calls with different keywords, countries and time ranges, about 6.5s per call.

What data do I get back?

interestOverTime has one point per time bucket - Trends picks minutes, hours, days, weeks or months from the range - with a 0-100 value per keyword on the same scale as the chart, the ISO date and timestamp, Trends' own label and an isPartial flag for a bucket that is still filling. averages holds each keyword's mean over the range. interestByRegion lists countries, regions, cities or US metros with their geo code and a value per keyword. relatedQueries gives each keyword's top and rising queries with their values, Breakout included, and relatedTopics does the same for topics when you ask for it in sections. exploreUrl links to the same view on trends.google.com.

Do I need a Google Trends API key?

No. The plugin reads the same data the trends.google.com explore page shows, with no Google account, API key or quota on your side: send keywords with your ScrapeUnblocker key and get the explore data back as JSON. A keyword can be a plain search term or a Knowledge Graph topic id such as /m/0dl567, and sections limits the call to the parts you need.

Can I get Google Trends data for a specific country, region or city?

Yes. geo takes an empty value for worldwide, a two-letter country (US), a region (US-CA) or a US metro (US-CA-807), and region_resolution sets the level of the region map: country, region, city or dma. The data follows geo, not the exit IP, so you do not need an exit in that country. hl sets the language of region and topic names, and tz aligns day and hour buckets to your time zone.

How much does it cost to scrape Google Trends?

Each keyword in a call is billed as one request, because every keyword needs its own related-queries fetch: comparing coffee and tea counts as 2 requests, a single keyword as 1. 1 request = 1 credit, EUR 1.00 per 1,000 on pay as you go, down to about EUR 0.55 per 1,000 on the Ultimate plan. Blocks and timeouts are not billed, and the free trial includes 500 requests with no card.

Related scrapers

Start scraping this site today

Free tier included. No credit card required to test it.