Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Google Trends Scraper icon

Google Trends Scraper

Get Google Trends data with no API key. Interest over time, interest by region or city, top and rising queries. $0.06 per 1,000 rows.

127 runs on Apify $0.00006 per Google Trends row ($0.06 / 1,000)
Run this in the cloudRun on Apify →

Ad Intelligence & Competitor Research

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchTerms, geo, timeframe (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00006 per Google Trends row = $0.06 per 1,000

You are charged forWhenPrice
Google Trends rowOne row of Google Trends data: an interest-over-time point, a region, a related query, or a trending-now search. Sample and diagnostic rows are never charged.$0.00006

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-15, and they are what you are actually charged.

Inputs

FieldWhat it doesType
searchTermsThe keywords or phrases to look up on Google Trends. Up to 25 per run. Each one is looked up on its own and scaled 0-100 against its own peak, exactly as it is when you type a single term into Google Trends.array
geoTwo-letter country code such as US, GB, DE, IN or BR, or a sub-region such as US-CA or GB-ENG. Leave empty for worldwide.string
timeframeHow far back to look. Pick one of the standard ranges, or type a custom range as two ISO dates, for example "2024-01-01 2024-12-31". Shorter ranges return finer-grained points: the last day is minute-by-minute, the last week is hourly, a year is weekly, five years is weekly and "all" is monthly.string
dataTypesWhich of the three data sets to pull for each keyword. Fewer data sets means fewer rows and a smaller bill. Leave all three ticked to get everything.array
maxItemsTotal rows to return across every keyword and data set. A single keyword with all three data sets and a 12-month range produces roughly 150 rows, so budget about 150 rows per keyword. Keep this low while you are testing - you pay per row.integer
compareKeywordsOff by default. When off, each keyword is scaled 0-100 against its own peak. When on, the first five keywords are put on one shared scale so their interest-over-time values can be compared directly, exactly like typing several terms into Google Trends at once.boolean
searchTypeWhich Google surface the interest is measured on.string
regionLevelHow finely to break down the interest-by-region data. "Automatic" uses whatever level Google itself shows for the region you picked - countries for a worldwide run, states or provinces for a single country. "City" and "Metro area" produce far more rows (roughly 200 each) and are only available inside a single country; Metro area is United States only. If a level is not available for your region, the run falls back to Automatic instead of failing.string
categoryOptional Google Trends category id to narrow the search, for example 71 for Food & Drink, 7 for Finance or 174 for Sports. Leave at 0 for all categories.integer
languageLanguage for region names and formatted labels, as a code like en-US, de, fr or ja. It does not change which data is returned, only how names are spelled.string
trendingNowGeosOptional. Add country codes such as US, GB or DE to also pull that country's current Trending Now list - the searches spiking right now, with the top news story behind each one. This is independent of the keywords above and can be used on its own.array
proxyUrlsLeave this empty for a normal run. Fill it in only if you want the traffic to leave through proxy servers you already pay for, one URL per line, in the form http://user:pass@host:port.array

What you get

A structured dataset — each result includes fields like:

recordTypekeywordgeogeoNametimeframedatevalueformattedValuerelatedQueryqueryTyperankisPartialtrendsUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Ad Intelligence & Competitor Research

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Yandex Search Engine Scraper (SERP API) iconAd Intelligence & Competitor Research

Yandex Search Engine Scraper (SERP API)

Scrape Yandex search results by keyword or URL. Get rank, title, URL, domain, snippet, ads and SERP features. Pick the region. $3.40 per 1,000.

1 use cases

Google Ads Transparency Scraper iconAd Intelligence & Competitor Research

Google Ads Transparency Scraper

Scrape Google Ads Transparency Center by domain, advertiser name or ID. Get ad creatives, formats, first and last shown dates. $0.60 per 1,000 ads.

Ready to run — no setup

Meta Ad Library Scraper iconAd Intelligence & Competitor Research

Meta Ad Library Scraper

Scrape Facebook and Instagram Ad Library ads by keyword, Page ID or URL. Get ad copy, creatives, dates and platforms. No login. $0.34 per 1,000 ads.

Ready to run — no setup

TikTok Trending Hashtags iconAd Intelligence & Competitor Research

TikTok Trending Hashtags

Get TikTok Creative Center hashtag rankings by country: rank, posts, views, popularity curve and top creators. Three at a time. No login needed.

2 use cases

SaaS Competitor Monitor: Pricing, Changelog & Positioning iconMonitors & Alerts

SaaS Competitor Monitor: Pricing, Changelog & Positioning

Track a competitor's SaaS pricing, changelog and positioning on a schedule. You get only what changed, sent to Slack. $0.01 per page checked.

4 use cases

G2 Reviews Scraper iconReviews & Reputation Data

G2 Reviews Scraper

Scrape G2 software reviews at $1.70 per 1,000: rating, title, full text, reviewer, date and URL. Works on any product. No G2 account or API key.

Ready to run — no setup

See all Ad Intelligence & Competitor Research →

Google Trends Scraper: interest over time, by region, and related queries

Type up to 25 keywords and get Google Trends back as flat rows: one per point on the interest chart, one per region, one per related search, and one per entry in a country's Trending Now list. No Google account and no API key.

Read this before you build on it. Every value is Google's own 0 to 100 index, not a search volume. 100 is the peak of the exact series you asked for, so changing the region, the time range or the category rescales the whole thing, and two keywords pulled in separate runs are not comparable. Google does not publish absolute search counts to anyone, so no tool can give you them.

InputUp to 25 keywords, and country codes for Trending Now
OutputOne row per datapoint, region, related query or trending search
Ceiling20,000 rows per run
Account neededNone, and no Google API key
Price$0.06 per 1,000 rows, flat on every plan

🔍 What Google Trends Scraper does

It pulls the three panels the Trends website shows for a keyword, and flattens each into rows.

Interest over time is one row per point on the chart. The range decides how fine the points are: the past day is minute by minute, a year is weekly, all is monthly back to 2004.

Interest by region is one row per place. Worldwide runs break down by country, a single country by state or province, or by city or metro area if you ask.

Related and rising queries is one row per related search, marked top for the ones consistently searched alongside your keyword and rising for the ones growing fastest.

Trending Now is separate. Give it country codes and you get what is spiking in each one now, with the top news story behind it. No keywords needed.

📥 What you give it

{
  "searchTerms": ["bitcoin", "ethereum"],
  "geo": "US",
  "timeframe": "today 12-m",
  "dataTypes": ["interestOverTime", "interestByRegion", "relatedQueries"],
  "maxItems": 500
}
FieldDefaultWhat it is
searchTermsbox starts at bitcoin, ethereumKeywords or phrases, up to 25. Each is looked up on its own.
geobox starts at USA two-letter country, a sub-region like US-CA or GB-ENG, or empty for worldwide.
timeframebox starts at today 12-mOne of the ranges in the dropdown, or a custom range typed as 2024-01-01 2024-12-31.
dataTypesall three tickedinterestOverTime, interestByRegion, relatedQueries. Untick what you do not need and the row count falls with it.
maxItemsbox starts at 1000Total rows for the run, up to 20,000.
compareKeywordsoffPuts the first five keywords on one shared scale. Needs at least two keywords to do anything.
searchTypewebweb, images, news, youtube or shopping.
regionLeveldefaultcountry, region, city or metro. City and metro need a single country, and metro is United States only.
category0Google's own numeric category id, like 71 for Food and Drink. 0 is every category.
languageen-USHow region names and labels are spelled. It changes no numbers.
trendingNowGeosnoneCountry codes for the Trending Now list, up to 20. Usable on its own.
proxyUrlsnoneOptional. Your own servers, used exactly as given.

Budget about 150 rows per keyword with all three data sets over twelve months. City and metro detail add roughly 200 rows each on their own.

A geo the run cannot read is treated as worldwide, not as an error. It wants US, not USA or United States. A timeframe it cannot read falls back to the past twelve months the same way, so check the first run's rows match the window you meant.

📤 What you get back

A real row from a recent run:

{
  "ok": true,
  "keyword": "bitcoin",
  "geo": "US",
  "timeframe": "today 12-m",
  "searchType": "web",
  "category": 0,
  "trendsUrl": "https://trends.google.com/trends/explore?q=bitcoin&date=today+12-m&geo=US",
  "recordType": "interest_over_time",
  "date": "2025-09-21T00:00:00.000Z",
  "dateLabel": "Sep 21, 2025",
  "value": 26,
  "formattedValue": "26",
  "isPartial": false,
  "scrapedAt": "2026-09-21T01:23:40.241Z"
}
FieldWhat it is
recordTypeinterest_over_time, interest_by_region, related_query or trending_now. Split the dataset on it.
valueGoogle's 0 to 100 index for this row. Not a volume.
formattedValueGoogle's own label. On rising related queries this is where Breakout and +450% appear, which the number cannot express.
dateISO 8601 in UTC, on interest-over-time rows and on a trending row's publication time. null on regional and related rows.
dateLabelThe same instant as Google prints it on the chart axis, kept because a weekly point covers a range the timestamp hides.
isPartialTrue on a final point whose period has not finished. It will move. Drop those before charting a trend line.
geoName, geoCodeThe region name and its code, on regional rows. latitude and longitude appear instead at city level.
relatedQuery, queryType, rankThe related search, top or rising, and its position with 1 strongest.
trafficEstimate, newsTitle, newsUrl, newsSourceTrending Now rows only. The approximate search count Google publishes, and the story behind it.
keyword, geo, timeframe, searchType, categoryRepeated on every row on purpose, so you can filter or group without joining anything back.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itCharged
A datapoint_sample and _diagnostic both absentyes
The sample row_sample: true and recordType: "sample"no
A diagnostic_diagnostic: true and an errorCodeno

An empty input writes the sample row and stops there, so you can see the shape before spending anything.

CodeWhat it means
NO_RESULTSGoogle has no data for that keyword in that region and range. Broaden one of them.
RATE_LIMITEDGoogle throttled that request and would not answer it. Re-run, or ask for less in one go.
BLOCKEDGoogle refused the request.
NOT_FOUNDGoogle's trending feed for that country did not answer.
NETWORKGoogle was unreachable or answered badly.
TIME_BUDGETThe run hit its time limit before reaching that keyword. Everything already delivered is complete.
PROXY_INPUT_ADJUSTEDA network setting in your input was not usable, so the run used its own.
CHARGE_ERRORA charge could not be recorded. The run stops handing over rows rather than continuing quietly.

One keyword with no data never stops the others, and a diagnostic row never fails the run.

▶️ How to run it

1. Open Google Trends Scraper and click Try for free. 2. Put your keywords into Keywords, deleting the examples first. 3. Set Region and Time range, and untick anything in What to return you do not need. 4. Set Maximum rows. Around 200 is enough to see what one keyword produces. Then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.06 per 1,000 rows. Flat on every Apify plan, no volume tiers.

Every delivered row counts the same, whichever panel it came from. Points Google marks as having no data are dropped before they become rows, so a thin series costs nothing for its empty part. Sample rows, diagnostic rows, a keyword with no data and a region detail level Google does not publish are all free.

💡 What people use it for

  • Checking whether a product name is actually growing before committing a budget to it.
  • Pulling rising related queries every week and using them as the content or keyword backlog.
  • Finding which states or cities index highest for a term, then pointing spend at those first.
  • Watching the Trending Now list for a country on a schedule, with the news story attached.
  • Putting up to five names on one shared scale with compareKeywords to settle an argument.

🚧 What it does not do

  • No absolute search volumes. The 0 to 100 index is all Google publishes.
  • No related topics. Google returns an empty list for that panel to callers who are not signed

in, so shipping the field would mean shipping an always-empty column. Related queries are unaffected.

  • Two separate runs are not comparable. Each keyword is scaled against its own peak unless you

turn on compareKeywords and run them together.

  • Comparison mode takes five keywords, which is Google's own limit. Extras are dropped and the

run says so in the log.

  • A low-volume keyword returns nothing, not a flat line of zeroes. Google suppresses series it

considers too thin, and you get a free NO_RESULTS row.

  • City and metro detail is best effort. Google publishes dense city data for big terms in big

countries and nothing at all for many other combinations, and the run falls back to the level it does publish.

  • The last point of a series is usually partial and will move if you re-run later the same day.
  • Trending Now is a live snapshot, typically around ten entries, and two runs an hour apart will

differ.

  • Category ids are Google's numbers, with no lookup built in. Read the id off a Trends URL after

narrowing a search there.

🧭 Which Google scraper do you need?

If you wantUse
Interest in a keyword over time, by region, and what else people searchThis one
The actual results pages for those keywordsGoogle Search Results Scraper
News coverage of a spiking topicGoogle News Scraper
App listings for a name that is trendingGoogle Play Apps Scraper
Places and reviews rather than searchesGoogle Maps Scraper

❓ Questions people ask

Do I need a Google account or an API key? No. Nothing to sign up for and no quota.

Why does one keyword produce so many rows? Because the output is flat. Twelve months of weekly points, a row per region and a row per related query is about 150 rows for a single keyword. Untick data sets in dataTypes or lower maxItems for fewer.

Can I compare two keywords directly? Turn on compareKeywords and put both in searchTerms. Up to five then share one 0 to 100 scale.

What happens when a keyword has no data? One free NO_RESULTS row for it, and the run carries on to the rest.

Can I run it on a schedule? Yes. Nothing carries over between runs. Key on keyword, recordType and date, and remember the last point is still moving.

Is this legal? Trends is public, aggregated and carries no personal data. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the keyword, the region and the run ID. The errorCode on the diagnostic row usually names the problem on its own.