Google Trends Scraper — Fast, No Browser avatar

Google Trends Scraper — Fast, No Browser

Pricing

from $2.00 / 1,000 search term with data

Go to Apify Store
Google Trends Scraper — Fast, No Browser

Google Trends Scraper — Fast, No Browser

Google Trends API without a browser. Get interest over time, by country, region or city, related queries, and what's trending now. Compare any number of keywords on one scale. Same input as the official Google Trends Scraper, and failed terms are free.

Pricing

from $2.00 / 1,000 search term with data

Rating

0.0

(0)

Developer

Luong Quyet Tien

Luong Quyet Tien

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

a month ago

Last modified

Categories

Security

Limited permissions

Share

Get Google Trends data for any list of search terms: interest over time, interest by country, region or city, and related queries (top and rising). You can also pull what's trending right now in any country, with search volume and % increase. You get clean JSON or CSV, ready to drop into a spreadsheet, a dashboard or an AI agent.

This scraper doesn't open a browser. It calls the same JSON endpoints the Google Trends website uses, so it's fast (60 terms in about a minute with 20 parallel requests) and it doesn't hang on page loads.

We built this after reading the issue tracker of the most popular Google Trends actor. The same few complaints kept coming up, so we fixed them:

  • "Runs forever and returns nothing." No browser here, so no page-load timeouts. If Google blocks a request, we retry with a fresh IP and wait a bit longer each time. After a set number of attempts we give up on that term and move on. A run always ends.
  • "One bad term killed the whole run." Every term is handled on its own. If one fails, you get a row that says why, and the rest of the run carries on. You're not charged for failed terms.
  • "Interest by city is all zeros." Google returns 0 both when interest is really low and when it has no data at all. We drop the "no data" rows, so the numbers you see are real.
  • "I can't compare more than 5 terms." Google only lets you compare 5 terms at a time. Turn on Compare ALL terms on one scale and we'll put any number of terms on the same 0–100 scale (details below).

You don't have to change your input. These fields work the same way: searchTerms, isMultiple, timeRange, customTimeRange, geo, category, startUrls and maxItems. Change the actor name in your API call, Zapier step or schedule, and that's it.

What's different:

  • The output format is different (see below). If you parse the old interestOverTime_timelineData fields, you'll need to update that part.
  • spreadsheetId, viewedFrom, pageLoadTimeoutSecs and skipDebugScreen are ignored. Without a browser there are no pages to load and no screenshots to skip. If you need Google Sheets input, open an issue and tell us.

How to use it

Look up a few terms one by one

{
"searchTerms": ["web scraping", "data extraction"],
"timeRange": "today 3-m",
"geo": "US"
}

Compare terms against each other (up to 5 per group)

Turn on isMultiple and separate the terms with commas. Each comma-separated line is one comparison.

{
"searchTerms": ["coffee,tea", "iphone,samsung,xiaomi"],
"isMultiple": true
}

Compare more than 5 terms

{
"searchTerms": ["pizza", "sushi", "tacos", "pho", "ramen", "burger", "kebab"],
"compareAll": true
}

City-level data for one country

{
"searchTerms": ["bitcoin"],
"geo": "VN",
"regionResolution": "CITY"
}

What's trending right now

The same list you see on the Trending now page of Google Trends, for any country. Pick the last 4 hours, 24 hours, 48 hours or 7 days, and optionally one category.

{
"trendingNow": true,
"geo": "VN",
"trendingHours": "168",
"trendingCategory": "17"
}

Each trend comes with its search volume (Google's bucket, so 200000 means "200K+"), % increase, when it started, whether it's still trending, its categories, related searches, and a link to open it in Google Trends. A busy country like the US has around 2,000 trends over 7 days. Worldwide isn't available on that page, so if you leave Location empty we use the United States.

You can also paste Google Trends explore URLs into startUrls. We read the q= term from the URL. Location and time come from the input fields, not from the URL.

What you get

One item per search term. Here's a real (trimmed) result for coffee compared with tea:

{
"searchTerm": "coffee",
"geo": "Worldwide",
"timeRange": "today 12-m",
"category": 0,
"comparedWith": ["tea"],
"interestOverTime": [
{ "date": "2025-10-05T00:00:00+00:00", "value": 61 },
{ "date": "2025-10-12T00:00:00+00:00", "value": 61 },
{ "date": "2026-10-04T00:00:00+00:00", "value": 59, "isPartial": true }
],
"interestByRegion": [
{ "geoName": "Singapore", "value": 100, "geoCode": "SG" },
{ "geoName": "Australia", "value": 88, "geoCode": "AU" }
],
"relatedQueries": {
"top": [
{ "query": "coffee shop", "value": 100, "formattedValue": "100" },
{ "query": "coffee table", "value": 92, "formattedValue": "92" }
],
"rising": [
{ "query": "how to remove coffee stain from carpet", "value": 8950, "formattedValue": "Breakout" },
{ "query": "how to brew pour over coffee", "value": 7800, "formattedValue": "Breakout" }
]
}
}

Exporting to Excel, CSV or HTML: in the Export dialog, pick the Search terms view (or Trending now). You get one readable row per term with latest, average, peak, peakDate, changePercent, topRegion, topQueries and risingQueries. The default All fields view flattens every data point into its own column, which is great for code but hard to read in a spreadsheet.

A few notes on the fields:

  • value in interestOverTime is null when Google has no data for that date. It's never a fake 0.
  • isPartial: true marks the current week (or day, or hour), which isn't over yet. It will usually look lower than it ends up.
  • City rows usually come without a geoCode, because Google doesn't give cities one. When Google sends coordinates, we include them.
  • changePercent compares the first quarter of the period with the last quarter, so you can see at a glance whether a term is going up or down. For seasonal terms over 12 months, check peakDate too.
  • If a term fails, its item only has searchTerm and error.

These come from Google, not from this scraper, but they trip people up:

  • There are no search volumes. Google Trends only gives a relative index from 0 to 100, where 100 is the peak for your selection. If a tool shows you "monthly searches" from Trends, it's an estimate.
  • Regional maps don't compare across terms. In a comparison, each term's interestByRegion uses its own 0–100 scale, the same as on the Google Trends website. "Singapore 100" for coffee and "Singapore 100" for tea doesn't mean the same number of searches.
  • Small places can top the list. Trends is based on a sample. A tiny region with a handful of searches can show up high (St. Helena is a classic). We leave Google's numbers as they are rather than guess which ones to hide.
  • Numbers shift a little between runs, for the same sampling reason. Rising queries for niche terms are especially noisy.
  • Related topics aren't returned anymore. Google still shows the widget but sends it back empty, so we leave it out instead of giving you empty fields.

How "compare all terms" works

Google compares at most 5 terms at once, and every comparison gets its own 0–100 scale. To join them, we use your first term as an anchor: it goes into every batch together with 4 other terms, and then we rescale each batch so the anchor matches its level in the first batch. That way all the numbers end up on one scale. They can go above 100, and they have decimals.

Pick a first term with medium popularity. If the anchor is tiny compared with the others, Google rounds it to 0 or 1, and the rescaling gets rough. If the anchor has no data at all in a batch, the terms in that batch come back with an error instead of wrong numbers.

This mode returns interestOverTime only, since regional maps and related queries can't be rescaled the same way.

Time ranges

ValueRangeOne data point per
now 1-HPast hourminute
now 4-HPast 4 hoursminute
now 1-dPast day8 minutes
now 7-dPast 7 dayshour
today 1-mPast 30 daysday
today 3-mPast 90 daysday
(empty)Past 12 monthsweek
today 5-yPast 5 yearsweek
all2004 to nowmonth

For any other range, use customTimeRange with YYYY-MM-DD YYYY-MM-DD, for example 2024-01-01 2024-12-31.

Big runs

With the default settings (10 parallel requests), 1,000 terms take roughly 20–30 minutes. Set Max concurrency to 20 and it goes about twice as fast. Results are saved as each term finishes, so if a run hits its timeout you keep everything done so far. For many thousands of terms, raise the run timeout in the run options, or split the list across a few runs.

Proxies

Google Trends blocks datacenter IPs within a few requests, so the default is Apify's residential proxy. Every term (and every retry) goes out through a different IP. You can switch to your own proxies in the Proxy section, but if you see lots of retries in the log, go back to residential.

Pricing

You pay per search term that returns data, and per trending search returned. Failed terms are free. The price is shown on the Pricing tab. If you set a maximum cost per run, the scraper stops cleanly when it reaches it.

Questions, bugs, ideas

Open an issue on the Issues tab. Please include the run ID, so we can see exactly what happened. We read every issue and usually reply within a day.