Google Trends API - Interest Over Time & Related Queries avatar

Google Trends API - Interest Over Time & Related Queries

Pricing

$5.00 / 1,000 trend query analyzeds

Go to Apify Store
Google Trends API - Interest Over Time & Related Queries

Google Trends API - Interest Over Time & Related Queries

Get Google Trends data for your keywords: interest over time, top and rising related queries and interest by region, for any country, language and period. One row per keyword as JSON, CSV or Excel. For SEO, content planning, market research and demand forecasting.

Pricing

$5.00 / 1,000 trend query analyzeds

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

1

Bookmarked

115

Total users

17

Monthly active users

18 days ago

Last modified

Share

Google Trends API: Interest Over Time, Related Queries and Regions

This Google Trends API returns search interest over time, top and rising related queries and optional interest by region for your keywords, as structured dataset rows. Use it for keyword research, content planning, demand forecasting or market research without copying charts by hand. Supply your keywords, a country, a language and a period, run the Actor, and download the results or read them through the Apify API. Each keyword keeps its own row, including repeated keywords, so the dataset follows the order of your input.

This Actor was previously listed as "Free Google Trends API". The address, input and output are unchanged, so saved tasks, schedules and integrations keep working.

  1. Enter one or more keywords, for example pizza and sushi.
  2. Pick a country (geo), a language (hl) and a period (timeframe).
  3. Choose the sections you need: related queries, related topics, regional interest.
  4. Run the Actor. Every keyword becomes one dataset row with all requested sections.
  5. Export the dataset as JSON, CSV or Excel, or fetch it from the API in your own code.

Use the time series to follow changes in interest within a keyword's selected period. Google Trends reports relative interest, usually on a scale from zero to one hundred. A value of one hundred marks the peak within that series. These values are not search counts, revenue estimates or market share. A series for one keyword is fetched separately from another keyword's series; their numbers should not be treated as a single comparison scale.

Related queries provide the top and rising searches associated with the keyword. Rising results can include percentage labels or the text “Breakout”. The numeric value and the source's text label remain separate fields. Regional interest adds the area code, area name and relative value for each returned region. Related topics are requested when enabled, but Google currently returns empty topic lists in the tested searches. The Actor preserves those lists and does not replace them with estimated topics.

Input

keywords is a required array of search terms. The store form opens with pizza and sushi, the same terms used in the recorded default run. Whitespace around a term is removed, and empty terms are skipped. A single string instead of an array is invalid. Duplicate terms are kept rather than merged. If you need distinct output rows only, deduplicate your own keyword list before starting the run.

FieldDefaultMeaning
keywordsRequiredArray of terms to fetch
geoUSCountry (ISO code) or supported subregion, such as NL or US-CA
hlen-USLanguage code, which also sets the localized date labels
timeframetoday 12-mRelative period or a fixed date range
include_related_queriestrueInclude top and rising related queries
include_related_topicstrueInclude the available related topic lists
include_regional_interestfalseInclude the geographic breakdown
category0Optional Google Trends category filter
tz0Optional timezone offset in minutes

For a fixed date range, use two dates separated by a space. Recorded runs include 2024-01-01 2024-12-31 with geo: "NL" and hl: "nl-NL", and 2025-01-01 2025-06-30 with geo: "GB", hl: "en-GB" and category five. Relative periods such as today 12-m change as time passes; a fixed period makes repeated analysis easier to interpret, although Google may revise its sampled results.

category and tz are whole numbers. A whole number written as text, such as "5" or "60", works the same as the number itself, and the decimal part of a number is dropped. A value that is not a whole number, such as "abc" or "5.5", falls back to 0 (all categories, no offset) instead of failing the run, as it did in earlier versions of this Actor.

Country codes are converted to uppercase. An omitted or empty geo uses US, preserving the behavior of the existing Actor. Earlier descriptive text suggested that an empty value meant worldwide, but the recorded Actor actually returned US data. Do not use an empty country value when you need a worldwide series.

The existing use_cookies, use_proxy and use_residential_proxy inputs remain accepted for compatibility with saved tasks. They do not alter the fields returned by this Actor. You can continue using saved inputs with their existing values.

Output

Each dataset row contains keyword, geo, hl and timeframe. Successful responses can include interest_over_time, interest_by_region, related_queries_top, related_queries_rising, related_topics_top and related_topics_rising. Disabled optional sections are absent. Sections with no source data are empty arrays.

Each time-series point retains date, integer value and boolean is_partial. It also provides timestamp, the UTC start of that time interval. The original date remains Google's localized display label; use timestamp for joins and sorting across languages. Rows additionally provide source, fetched_at, engine, query and language for integrations that use a common trend record format.

Regional rows include geo_code, geo_name, integer value, string formatted_value and boolean has_data. Related rows retain query, integer value, extracted_value, link and formatted_value. extracted_value is null when Google does not supply it. Links can be relative paths, matching the existing dataset format.

The default key-value store keeps the summary record with itemCount and errorCount. The additional OUTPUT record reports delivery counts, charges and applicable free-tier flags. An errors record is present when there are run-level errors. Widget failures are also visible on their dataset row under fields such as related_queries_error or interest_over_time_error; a missing failed section is not silently replaced with data.

Output example

A real row from a run with keywords: ["iphone", "samsung galaxy"], geo: "GB", hl: "en-GB", timeframe: "2025-01-01 2025-06-30", category: 5 and all sections enabled. Lists are shortened to their first two entries; the full row had 181 daily points, 4 regions, 25 top and 12 rising related queries.

{
"keyword": "iphone",
"geo": "GB",
"hl": "en-GB",
"timeframe": "2025-01-01 2025-06-30",
"source": "google-trends-scraper",
"fetched_at": "2026-10-02T02:15:01.768Z",
"engine": "google_trends",
"query": "iphone",
"language": "en-GB",
"interest_over_time": [
{"date": "1 Jan 2025", "value": 97, "is_partial": false, "timestamp": "2025-01-01T00:00:00.000Z"},
{"date": "2 Jan 2025", "value": 91, "is_partial": false, "timestamp": "2025-01-02T00:00:00.000Z"}
],
"related_topics_top": [],
"related_topics_rising": [],
"interest_by_region": [
{"geo_code": "GB-ENG", "geo_name": "England", "value": 100, "formatted_value": "100", "has_data": true},
{"geo_code": "GB-SCT", "geo_name": "Scotland", "value": 94, "formatted_value": "94", "has_data": true}
],
"related_queries_top": [
{"query": "iphone 16", "value": 100, "extracted_value": null,
"link": "/trends/explore?q=iphone+16&date=2025-01-01+2025-06-30&geo=GB", "formatted_value": "100"},
{"query": "apple iphone", "value": 77, "extracted_value": null,
"link": "/trends/explore?q=apple+iphone&date=2025-01-01+2025-06-30&geo=GB", "formatted_value": "77"}
],
"related_queries_rising": [
{"query": "iphone 16e", "value": 63800, "extracted_value": null,
"link": "/trends/explore?q=iphone+16e&date=2025-01-01+2025-06-30&geo=GB", "formatted_value": "Breakout"},
{"query": "iphone 17 launch date", "value": 3850, "extracted_value": null,
"link": "/trends/explore?q=iphone+17+launch+date&date=2025-01-01+2025-06-30&geo=GB", "formatted_value": "+3,850%"}
]
}

Use cases

  • SEO and keyword research: see which of your keywords grow or decline, and harvest rising related queries as new content ideas.
  • Content and campaign planning: find the weeks when interest in a seasonal product peaks and time articles, ads and stock around them.
  • Market research: compare how interest in a brand, product or category develops per country and region, for example before entering a new market.
  • Demand forecasting and data science: feed weekly or daily interest series with UTC timestamps into forecasting models, dashboards or a data warehouse.
  • Monitoring: schedule the same input daily or weekly and track changes over time.
OptionWhat you getWhat to keep in mind
The Google Trends websiteCharts and a CSV download per searchManual work, one comparison at a time
Google's own Trends API (alpha)Official access to trends dataAnnounced in 2025 for a limited group of testers
pytrends and similar librariesFree Python code you run yourselfUnofficial; you maintain the code and handle failures
This ActorInterest over time, related queries and regions per keyword as rowsPay per keyword with data; nothing to install

The Actor accepts the same timeframe notation as pytrends (today 12-m, now 7-d, today 5-y or a date range), so existing scripts translate directly to an Actor input.

Pricing

The existing pay-per-event price remains $0.005 per delivered keyword row with data, using the trend_query event. There is no start-fee event. A row is counted once when at least one of its data lists is nonempty and the initial search succeeded. Multiple time-series points or related queries inside that row do not create extra keyword charges.

A keyword without data still gets its row with empty lists, but its charge is zero. A failed initial search is also free. This corrects the previous behavior that charged for empty rows. If a requested widget fails while another section returns data, the row can still count as one delivered result. A free-plan user receives at most ten keywords per run. The limit is applied before fetching; paid users can submit longer lists subject to the run's time limit.

FAQ

No. This Actor collects the data shown on the public Google Trends website and returns it as structured rows. It is available to everyone on Apify without an application or an API key from Google; you only need an Apify account.

Yes. Put all keywords in the keywords list. Each keyword is fetched as its own search and gets its own row, so values are relative within that keyword's series, not across keywords.

Can I use the same saved task after the migration?

Yes. The old input names, defaults and dataset field names remain supported. The Actor adds UTC timestamps and common record fields without renaming the original output. Existing inputs containing the three legacy connection options remain accepted.

Does a value of zero mean nobody searched for the term?

No. Google Trends normalizes and samples its data. A zero or an empty series can indicate insufficient data for the chosen keyword, period and area. The Actor returns the source response and does not infer absolute search volume from it.

The source returned empty related topic lists in the recorded tests, including runs of the previous Actor. Empty lists are valid output. Related queries can still contain results for the same keyword. Disable the topic option if you do not need those lists.

What happens when Google cannot return a result?

A partial result can retain its usable sections and include a field explaining which widget failed. An entirely blocked search across all keywords produces a successful empty run with an error record. Invalid input also produces a successful empty run. Check both the dataset and the key-value records when processing scheduled jobs.

Can I download or schedule the results?

The results are stored in the default Apify dataset and can be downloaded as JSON or other dataset export formats. Use the dataset API for automated ingestion, or configure an Apify task and schedule to repeat the same input. Store the fetched timestamp alongside the data so later runs remain distinguishable from earlier observations.