Google Trends Scraper API avatar

Google Trends Scraper API

Pricing

from $2.40 / 1,000 results

Go to Apify Store
Google Trends Scraper API

Google Trends Scraper API

Compare Google Trends keywords for SEO and seasonal research. Export relative interest over time, interest by region, related queries and trending searches to CSV or JSON. Choose your country and date range. Maintained by CleanScrape.

Pricing

from $2.40 / 1,000 results

Rating

0.0

(0)

Developer

CleanScrape

CleanScrape

Maintained by Community

Actor stats

1

Bookmarked

7

Total users

3

Monthly active users

17 hours ago

Last modified

Share

Compare how search interest in a few terms changes over time, and export the results to a spreadsheet. The Actor collects interest over time, related queries, regional interest and the public trending-searches feed. Related topics are also available, but Google often returns them empty.

This Actor uses Google Trends website endpoints and its public RSS feed. It is not Google's official API and is not affiliated with Google. Google also offers a separate Trends API alpha, with its own access requirements.

Start with a small run

The form opens with a ready comparison: iced coffee and cold brew in the United States over the Past 12 months, with Interest over time selected. Start it as it is, or replace the two terms with your own.

  1. Enter up to five Search terms, one per line (a comma also separates terms). Keep terms you want to compare in the same run.
  2. Choose Results to collect. For a comparison, Interest over time is enough.
  3. Choose Country and Time range.
  4. Start the run and open Interest over time in the Output tab. To download it, open Storage > Dataset, choose Interest over time, then CSV, Excel or JSON.

On 2 October 2026 this comparison returned 106 rows (53 weekly values per term) and cost $0.368 at base prices: $0.05 at startup plus 106 x $0.003. Google chooses the intervals, so the row count can differ slightly between runs.

Custom dates (optional) is only for an exact period. Category, region detail, language and proxy settings are under Advanced options; you do not need them for a first run.

Watch: compare two search terms in under a minute

Let's use a coffee shop as an example. The video follows a real run comparing iced coffee and cold brew, from the input form to the timeline results and the CSV/Excel export.

The chart in the video is made in a spreadsheet from the exported rows. It uses 52 completed weeks per term and leaves out the current, incomplete week.

Selected rows from the 2 October 2026 run:

WeekKeywordRelative interestPartial week?
Dec 21 – 27, 2025iced coffee41false
Dec 21 – 27, 2025cold brew35false
Jun 21 – 27, 2026iced coffee68false
Jun 21 – 27, 2026cold brew100false
Sep 27 – Oct 3, 2026cold brew45true

Cold brew reached the peak of the comparison (100) in late June, while iced coffee stayed lower. These are relative interest values, not search counts: 100 is the highest point in this comparison, not 100 searches. The last week is marked partial because it had not finished.

More examples

Choose what to collect

You wantForm settingsOutput view
Compare terms over timeEnter Search terms; select Interest over time; choose the country and time range.Interest over time
Related searchesEnter terms; select Related and rising queries.Related queries
Geographic interestEnter terms; select Interest by region. Adjust Region detail only if needed.Interest by region
Current trending searchesSelect only Trending now; choose Country for Trending now. Search terms and Time range are not used by this feed.Trending now
Related topicsEnter terms; select Related topics (limited availability). Empty lists are common.Related topics

Each selected type adds its own rows and has its own table in the Output tab, so you can select several in one run. All rows keeps every row together, with a dataType column. To download one table, open Storage > Dataset, choose it in the Dataset menu, then CSV, Excel or JSON. The Export button at the top downloads All rows. From the API, the run's storageIds.datasets lists the tables (timeline, related_queries, related_topics, regions, trending); the default dataset is All rows.

A small regional-interest request:

{
"searchTerms": ["cold brew"],
"dataTypes": ["interest_by_region"],
"geo": "US",
"timeframe": "today 3-m",
"regionResolution": "REGION"
}

Trending searches need no search terms:

{
"dataTypes": ["trending_now"],
"trendingGeo": "US"
}

Countries and dates

Choose countries by name. Country applies to interest over time, related data and regional interest; Worldwide is also available. Country for Trending now is a separate setting used only by Trending now.

For Time range, pick a preset such as Past 7 days, Past 3 months or Past 12 months. For an exact period, fill in Start date and, if you like, End date; they override the preset. Without an end date the range runs to today. A reversed or invalid date stops the run with an explanation before any data is requested.

Results to collect and availability

dataTypeOne row representsWhat to expect
interest_over_timeA keyword at one returned time pointRelative interest; Google chooses the intervals
related_queriesA related query for one keyword, in the top or rising listLists can be empty or blocked
related_topicsA related topic for one keyword, in the top or rising listOften empty; not guaranteed
interest_by_regionA keyword in one geographic areaDepends on the term, country and region detail
trending_nowOne item from the country's trending feedA current snapshot, not a full archive

Related topics are requested separately for each keyword, because Google can leave them out of comparison requests. Topic scores rank topics within one keyword; they are not comparable between keywords. In September 2026 tests, Google returned empty topic lists for several ordinary keywords. Empty lists are reported as empty; the Actor never fills them with related queries or invented topics.

Retries and proxy rotation help with temporary failures. They cannot guarantee complete data or uninterrupted access to Google.

Regional results leave out places where Google explicitly reports insufficient data for a term. A zero score that Google marks as available is kept.

Input reference

FieldAPI defaultMeaning
searchTermsNoneUp to five keywords; not needed for trending searches
dataTypesinterest_over_time and trending_nowResult types from the table above
geoEmpty (worldwide)Country code for keyword research, such as US or FI
timeframetoday 12-mFor example today 5-y, now 7-d, or YYYY-MM-DD YYYY-MM-DD
startDateNoneExact start date, YYYY-MM-DD. Without an end date, the range runs to today.
endDateNoneOptional end date, on or after startDate. Custom dates override timeframe.
category0Google Trends category ID; 0 means all categories
languageen-USLanguage of Google's labels; results are not translated
regionResolutionCOUNTRYCOUNTRY (worldwide searches; with a country chosen, its regions are used), REGION, CITY or DMA (United States only; other countries fall back to REGION)
trendingGeoUSCountry of the trending feed. It does not follow geo; set it for any other country.
proxyConfigurationResidential Apify ProxyYou can set direct or custom routing explicitly

The form opens with example values (iced coffee, cold brew, United States, Interest over time). API requests do not get these values; they use the defaults above. A comma separates terms, so "iced coffee, cold brew" is read as two terms, like on Google Trends itself. Only the first five terms are used, and the run says which. Some valid-looking country and time combinations can still fail at Google.

Output reference

Rows come in five shapes, identified by dataType:

TypeFields in addition to dataType
Timelinekeyword, geo, timeframe, date, dateUtc, timestamp, value, isPartial
Related querieskeyword, geo, timeframe, relatedQuery, kind, value, formattedValue, link
Related topicskeyword, geo, timeframe, topicTitle, topicType, kind, value, formattedValue, link
Regionskeyword, geo, timeframe, resolution, geoName, geoCode, value, plus latitude and longitude for cities
Trendinggeo, rank, query, approxTraffic, pubDate, relatedNews

A timeline row from the 2 October 2026 run:

{
"dataType": "interest_over_time",
"keyword": "cold brew",
"geo": "US",
"timeframe": "today 12-m",
"date": "Jun 21 – 27, 2026",
"dateUtc": "2026-06-21",
"timestamp": "1782000000",
"value": 100,
"isPartial": false
}

date is Google's own label. Use dateUtc (YYYY-MM-DD, with the time for 24-hour and 7-day data) to sort or chart; timestamp is the same moment in Unix seconds, as text. isPartial is true for an unfinished interval. Unknown values stay null.

For related data, kind tells top and rising lists apart. Rising values describe growth, not 0-100 interest, and formattedValue keeps labels such as Breakout. link opens the same comparison on Google Trends. For trending items, approxTraffic is Google's rounded label, not an exact count, and relatedNews holds up to five headlines, not articles or links.

Reading the numbers

Interest values are relative scores, not search counts. Zero can mean too little data to report, not zero searches. Requesting 90 days does not guarantee 90 time points, because Google chooses the intervals. Separate runs can be scaled differently, so only compare values from the same run.

Run report

Open Run summary in the Output tab for a readable status of each requested result type. RUN_REPORT in the run's key-value store has the same information for automation. Each type is marked ok (rows returned), empty (no rows and no detected error), failed (a request or parsing error) or skipped (search terms missing).

A run can succeed while one type is empty or failed, so check the report when completeness matters. If every requested type fails, the run fails.

Pricing

$3 per 1,000 rows ($0.003 each), plus a startup fee of $0.05 per GB of memory, at least one per run. The default memory is 1 GB, so most runs pay one startup fee. Every selected result type adds rows. The startup fee applies even when no rows are returned.

Billable unitBase / Free tierBronze (-10%)Silver (-15%)Gold, Platinum, Diamond (-20%)
Startup, per GB of memory$0.05$0.045$0.0425$0.04
1,000 rows$3.00$2.70$2.55$2.40

Apify applies your tier's price automatically; the Pricing tab shows your rate. Base-price examples:

One runAt the 1 GB defaultWith 4 GB memory
24 rows$0.122$0.272
106 rows (the coffee example)$0.368$0.518
1,000 rows$3.05$3.20

Some other Trends Actors charge one result for a whole keyword history, so compare the total cost of the same data when choosing a tool.

Maximum cost per run covers both the startup fee and the rows. If the next row would go over it, the Actor stops and says so in the run summary. If a run is restarted, rows already saved are kept and are not exported or charged again; Apify may charge another startup fee for the restart.

API and recurring workflows

Use the API tab for ready-made code examples, and keep your API token secure. To track terms regularly, save a task, add a schedule, and fetch each run's dataset through the API or your automation tool. Keep the keyword, country, time range and row type with each value. The Actor does not keep history between runs, send alerts or make forecasts.

Use it from an AI agent

This Actor works as a tool in Claude, Cursor and other AI assistants that support MCP, through Apify's MCP server. Add this server and sign in with your Apify account when asked:

https://mcp.apify.com?tools=cleanscrape/google-trends-scraper

Then ask in plain words, for example: "Compare Google Trends interest for "electric bike" and "e-scooter" in Germany over the past 12 months." The assistant runs the Actor in your Apify account and reads the results. The price per result is the same as in Console.

Common questions

Google's own Trends API is still a limited alpha that most people can't join. This Actor gives you the same data as the Google Trends website through the Apify API: interest over time, interest by region, related queries and trending searches.

Is this a pytrends alternative?

Yes. pytrends was archived in April 2025 and often fails with 429 errors. Here the retries and proxies run on our side, and you get rows back.

If you already have pytrends code, use trendreq: the same TrendReq methods and DataFrames, running on this Actor. Change the import to from trendreq import TrendReq and set APIFY_TOKEN.

Or call the Actor directly:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cleanscrape/google-trends-scraper").call(run_input={
"searchTerms": ["iced coffee", "cold brew"],
"dataTypes": ["interest_over_time"],
"geo": "US",
"timeframe": "today 12-m",
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)

Why does the interest only go up to 100?

Google Trends shows relative interest. 100 is the peak for the terms and period you compared, not 100 searches. Keep terms you want to compare in the same run.

How many terms can I compare?

Up to five in one comparison, like on the Google Trends website. If you enter more, only the first five are used.

How much does it cost?

$3 per 1,000 rows plus a $0.05 start fee at the default 1 GB of memory. Two terms over 12 months come to about $0.37. See Pricing above.

Support

CleanScrape maintains this Actor for one-off research and recurring workflows. We investigate reported errors, update the Actor when Google changes, and test changes against existing inputs and output formats.

What you seeWhat to try
No related topicsExpected for many terms; check the run summary.
Keyword results skippedAdd Search terms. Only Trending now works without them.
HTTP 429 or blocked requestsKeep the residential proxy on and try a smaller run later.
Higher cost than expectedCount the rows of every selected result type, and the startup fee per GB of memory.
Fewer time points than expectedGoogle chose a longer interval for the time range.

If something still looks wrong, open an issue or email contact.cleanscrape@gmail.com with the run ID, a short input example and the result type affected. Never include API tokens or private data.

What worked well, and what could be better? Share your experience in Reviews. Honest feedback is welcome, including anything that fell short. Leaving feedback is optional and does not affect access, pricing or support.

Disclaimer

This Actor is an independent tool developed by CleanScrape. It is not affiliated with, endorsed by, or sponsored by Google. It is not an official Google Trends API. Google, Google Trends and all other trademarks are the property of their respective owners. Brand names are used only to identify supported sources and illustrate usage.

More tools from CleanScrape