# Google Trends Scraper: Interest Over Time & Rising Queries (`charitable_trousseau/google-trends-scraper`) Actor

Google Trends data for any keywords: interest over time, interest by region, related queries (top and rising) and trending now searches by country. Compare up to five keywords; any country, date range, category and search type. Plain HTTP, no browser. Results also as ready-made spreadsheets.

- **URL**: https://apify.com/charitable_trousseau/google-trends-scraper.md
- **Developed by:** [Charitable Trousseau](https://apify.com/charitable_trousseau) (community)
- **Categories:** SEO tools, Marketing, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.05 / 1,000 charts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Trends Scraper: Interest Over Time & Rising Queries

Get Google Trends data for any list of search terms: how interest changed over time, where it is highest, which related searches are top and rising, and what is trending now in a country. No browser is used, so runs are short.

### What you can do with it

- See the seasonality of a product or topic: weekly interest over the past 12 months or 5 years, with peak and latest values.
- Compare up to five brands or keywords in one chart, scaled against each other.
- Find rising related queries for a keyword as input for content or product research.
- Collect the "trending now" searches for a country every day.
- See where interest is highest: by country, region or state, or US metro area.

### What you get

**One result is one Google Trends chart:** one search term in one location over one time range, or up to five terms compared in the same chart. A "trending now" list for one country is also one result.

Each result holds:

- **Search:** `searchTerm`, `terms`, `geo`, `timeRange`, `category`, `property` (web, images, news, youtube or froogle for Google Shopping), `trendsUrl` (the same chart on Google Trends)
- **Summary for a spreadsheet:** `averageInterest`, `peakInterest`, `peakDate`, `latestInterest`, `latestDate`, `topRelatedQueries` and `risingRelatedQueries` (five each, as text); `termSummaries` has the same numbers for every term of a comparison
- **Interest over time:** `interestOverTime_timelineData`, one entry per hour, day, week or month with `date`, `value` (0 to 100, one number per term) and `isPartial` for a period still in progress
- **Interest by region:** `interestBySubregion`, with `regionLevel` saying what it lists: countries (worldwide search), regions or states (country search), or metro areas (US state search)
- **Related queries:** `relatedQueries_top` and `relatedQueries_rising`, up to 25 each, with Google's value (`Breakout` or a growth percentage for rising ones). For a comparison, `relatedByTerm` has the lists for every term
- **Related topics:** `relatedTopics_top` and `relatedTopics_rising` (see the limits below)
- **Interest by city:** `interestByCity`, only when you choose it in the input
- **Trending now:** `trendingSearches`, each with `rank`, `title`, `approxTraffic` (for example `200K+`), `startedAt` and linked news articles
- **Checks:** `missingData` (lists Google refused for this search), `notes`, `scrapedAt`

#### Ready-made spreadsheets

Every run also writes five CSV files with one value per row, linked from the run's Output tab: `interest-over-time.csv` (term, location, date, value), `interest-by-region.csv`, `related-queries.csv`, `related-topics.csv` and `trending-now.csv`. Open them directly in Excel or Google Sheets. They are in the run's key-value store.

#### Sample (shortened)

```json
{
    "resultType": "search",
    "searchTerm": "air fryer",
    "terms": ["air fryer"],
    "geo": "US",
    "timeRange": "today 12-m",
    "property": "web",
    "trendsUrl": "https://trends.google.com/trends/explore?geo=US&q=air+fryer",
    "dataPoints": 53,
    "averageInterest": 65.7,
    "peakInterest": 100,
    "peakDate": "2026-04-12T00:00:00.000Z",
    "latestInterest": 54,
    "latestDate": "2026-09-27T00:00:00.000Z",
    "interestOverTime_timelineData": [
        { "time": "1759622400", "date": "2025-10-05T00:00:00.000Z", "formattedTime": "Oct 5 – 11, 2025", "value": [57], "hasData": [true], "formattedValue": ["57"] }
    ],
    "regionLevel": "REGION",
    "interestBySubregion": [{ "geoCode": "US-WY", "geoName": "Wyoming", "value": [100], "formattedValue": ["100"], "maxValueIndex": 0, "hasData": [true] }],
    "topRelatedQueries": "air fryer chicken; ninja; air fryer ninja; chicken in air fryer; best air fryer",
    "relatedQueries_top": [{ "query": "air fryer chicken", "value": 100, "formattedValue": "100", "link": "/trends/explore?q=air+fryer+chicken&date=today+12-m&geo=US" }],
    "relatedQueries_rising": [{ "query": "ninja crispi pro air fryer", "value": 8050, "formattedValue": "Breakout", "link": "/trends/explore?q=ninja+crispi+pro+air+fryer&date=today+12-m&geo=US" }],
    "relatedTopics_top": [],
    "relatedTopics_rising": [],
    "missingData": [],
    "notes": null,
    "scrapedAt": "2026-10-08T18:04:16.418Z"
}
```

### Input

- **Search terms** — one per line. Each term gives one result per location. If you give no search term, Google Trends URL or "Trending now" country (for example an API call with an empty input), the example search `air fryer` runs, in the United States unless you set a location.
- **Compare terms written on one line** — when on, `tea, coffee, matcha` becomes one chart with up to five terms scaled against each other, as on Google Trends.
- **Location** — country codes such as `US`, `GB`, `DE`, or region codes such as `US-CA`; several separated by commas. Empty means worldwide.
- **Time range** — past hour, 4 hours, day, 7 days, 30 days, 90 days, 12 months (default), 5 years, or 2004 to present.
- **Custom dates** — `2024-01-01 2024-06-30`. Overrides the time range.
- **Category** and **Search type** (web, images, news, YouTube, Google Shopping).
- **Data to collect** — leave empty for interest over time, interest by region, related queries and related topics. City lists must be chosen here.
- **Trending now: countries** — for example `US, GB`. Works on its own or together with search terms.
- **Google Trends URLs** — paste the address of any chart on trends.google.com/trends/explore. This also allows a different location or date range per compared term.
- **Maximum results**, **Searches at the same time**.

```json
{
    "searchTerms": ["air fryer", "heat pump"],
    "geo": "US, GB",
    "timeRange": "today 5-y"
}
```

```json
{
    "searchTerms": ["tea, coffee, matcha"],
    "isMultiple": true,
    "geo": "US",
    "customTimeRange": "2024-01-01 2024-12-31",
    "trendingNowCountries": "US, GB"
}
```

#### Coming from Apify's Google Trends Scraper

The inputs `searchTerms`, `isMultiple`, `timeRange`, `customTimeRange`, `geo`, `category`, `startUrls`, `maxItems` and `maxConcurrency` mean the same here, and the output fields listed above carry the same names, so existing integrations keep working. Differences: `geo` accepts several codes and region codes; `property`, `outputs` and `trendingNowCountries` are new; `viewedFrom`, `spreadsheetId` and the browser settings are ignored; a term without data is not saved (and not charged) instead of being returned empty; places without data are left out of the region and city lists; `interestByCity` is only fetched when chosen.

### FAQ

#### pytrends not working: what is an alternative?

This scraper returns the kinds of data pytrends is used for: interest over time, interest by region, related queries (top and rising) and trending searches. It runs on Apify, so you do not manage proxies or a browser yourself. It is not a drop-in replacement: you start it through the Apify API (there is a Python client) and read results as JSON or CSV, the field names are the ones listed above, and it is paid per chart.

#### Can I use this as a Google Trends API?

Yes, in the sense that you can call it like one. Start a run through the Apify API or one of Apify's clients with the input described here, then read the results as JSON, CSV or Excel. One result is one Google Trends chart. No Google account is used.

#### How do I get rising queries from Google Trends?

They are in `relatedQueries_rising` (up to 25, with `Breakout` or a growth percentage) and, as text, in `risingRelatedQueries`. Google sometimes refuses this list for a search while answering the rest: in our tests for 18 of 338 searches (5%). The result is then saved with the list empty and named in `missingData`; running the search again later usually returns it.

#### Why do the numbers differ from the Google Trends website?

Google Trends works from a sample of searches and does not give every visitor the same one, so the same chart fetched twice can differ slightly. In our checks a US chart matched a real browser's numbers on all 52 weeks, while two charts with less search volume differed on most weeks by an average of 4 to 5 points. See "Limits to know about".

#### Can I compare more than five keywords?

Not in one chart: Google Trends allows up to five terms per comparison. Separate searches are each scaled to their own peak and cannot be compared with each other.

#### How much does it cost?

$1.50 per 1,000 charts on Apify's Free plan, plus a start fee of $0.01 per run. Paid Apify plans pay less: Bronze 10%, Silver 20% and Gold 30% less. Runs that fail or return nothing cost nothing. A search without data is not charged.

### Limits to know about

- **Google Trends numbers are samples, and they vary.** Google works from a sample of searches and does not give every visitor the same one. Fetching the same chart twice can give slightly different values and different related queries. In our checks against the numbers a real browser received for the same charts: a US chart matched on all 52 weeks, a five-term US comparison matched on all 1,305 values, a worldwide chart since 2004 matched on 200 of 273 months (largest gap 3 points), and two charts with less search volume (a term in Japan, an English term in Germany) differed on most weeks by an average of 4 to 5 points. Treat small differences as noise, on the website as much as here.
- **Related topics came back empty** for every search in our tests (338 searches), including in a real browser. The fields are there and fill up if Google returns topics again.
- **Google sometimes refuses one list for a search** while answering the rest; most often related queries. In our tests this happened for 18 of 338 searches (5%). The search is then saved with that list empty and named in `missingData`. Running the search again later usually returns it.
- **Rising queries can include unrelated searches** (for example `laptop stand` under `air fryer`). They are in Google's own data; we saw the same entries on the website.
- **A term with too little search volume is not saved** and not charged. The run's status message and the `SUMMARY` record in the key-value store list those terms. A term with a trace of volume can come back with a single non-zero week; check `averageInterest` before reading much into it.
- **City lists are sparse and often refused.** For a whole country over 12 months Google returned between 0 and 22 cities with data in our tests, and refused the list for several searches (they then show `interestByCity` in `missingData`). That is why cities are not collected unless you choose them.
- **Trending now** is Google's public feed: about 10 searches per country with approximate traffic, not the full list on the Trending page.
- **Up to five terms per comparison**, as on Google Trends. Values in a comparison are scaled to the highest point of all its terms; separate searches are each scaled to their own peak and cannot be compared with each other.
- Topic and place names are in English. Dates are in UTC.
- No Google account is used, so nothing tied to a signed-in user is available.

### Speed and coverage we measured

From our own runs on 8 October 2026 with the default settings (17 runs, 344 searches, 9 countries plus worldwide, all 9 preset time ranges and a custom one):

- All 17 runs finished. Of the 344 searches, 343 results were saved and 1 was correctly reported as having no data.
- 1 term: 29 to 56 seconds, most of it spent finding a connection Google accepts. 40 terms: 32 seconds. 36 results (12 terms in 3 countries): 63 seconds. 200 terms: 4 minutes 26 seconds, all 200 saved in input order.
- Two failed on purpose: a made-up country code and an empty term list. Both stopped with a message saying what to fix. (Since 15 October 2026 an input with nothing to search runs the example search instead.)

### Pricing

You pay per result saved. A search without data, a rejected search or a failed run costs nothing.

### Reliability

Google refuses many automated connections to Trends, and it does not answer all the others alike: some get the timeline but no lists, some get different numbers. The scraper therefore tests every connection against a reference chart of a finished year, uses only connections whose answers are complete and identical to another connection's, and tests them again after every few searches; results fetched between two passed tests are the only ones saved. It starts on Apify's datacenter addresses and moves to residential addresses by itself when Google refuses the datacenter ones. Results are saved in input order. If a search still cannot be completed, the run fails with a message that names it and says how many results were saved, instead of passing off partial data as complete.

### Notes

This scraper collects aggregated search-interest data only. It does not log in and does not collect personal data. Trending searches and their news headlines are returned as Google publishes them.

### Related scrapers

- [Coles Australia Grocery Price Scraper](https://apify.com/charitable_trousseau/coles-au-product-scraper): products, prices and specials from coles.com.au
- [AliExpress Product Search Scraper](https://apify.com/charitable_trousseau/aliexpress-search-scraper): search results by keyword with prices, discounts and units sold
- [eBay Active Listings & Auctions Search Scraper](https://apify.com/charitable_trousseau/ebay-search-scraper): active listings and auctions on five eBay sites
- [Apple App Store Scraper](https://apify.com/charitable_trousseau/app-store-scraper): iOS top charts, search results and app details
- [Zillow ZIP Code Search Scraper](https://apify.com/charitable_trousseau/zillow-search-scraper): homes for sale, rentals and recently sold homes
- [Tripadvisor Places Scraper](https://apify.com/charitable_trousseau/tripadvisor-listings-scraper): hotels, restaurants and things to do for any place
- [Google Maps Places Scraper](https://apify.com/charitable_trousseau/google-maps-places-scraper): business listings across a whole city, postcode or radius
- [Indeed Jobs Scraper](https://apify.com/charitable_trousseau/indeed-jobs-scraper): job listings on 12 Indeed country sites, descriptions optional
- [Glassdoor Jobs Scraper](https://apify.com/charitable_trousseau/glassdoor-jobs-scraper): job listings with salary ranges and employer ratings
- [LinkedIn Jobs Scraper](https://apify.com/charitable_trousseau/linkedin-jobs-scraper): job postings past LinkedIn's 1,000-per-search limit, no login

# Actor input Schema

## `searchTerms` (type: `array`):

One term per line, for example air fryer. Each term gives one result per location. To compare terms in one chart, write them on one line separated by commas and switch on the option below. If no search term, Google Trends URL or Trending now country is given, the example search air fryer runs (in the US unless a location is set).

## `isMultiple` (type: `boolean`):

When on, a line such as "tea, coffee, matcha" becomes one chart comparing up to five terms, scaled against each other as on Google Trends. When off, commas are part of the term.

## `geo` (type: `string`):

Two-letter country code such as US, GB or DE, or a region code such as US-CA. Several codes separated by commas give one result per term and location. Leave empty for worldwide.

## `timeRange` (type: `string`):

Past 12 months when left on default. Shorter ranges give finer steps: hourly for 7 days, daily for 30 and 90 days, weekly for 12 months and 5 years, monthly for 2004 to present.

## `customTimeRange` (type: `string`):

Optional. Two dates as YYYY-MM-DD YYYY-MM-DD, for example 2024-01-01 2024-06-30. Overrides the time range above. Data starts in 2004.

## `category` (type: `string`):

Limits the term to searches in one Google Trends category.

## `property` (type: `string`):

Which Google search the interest is measured on.

## `outputs` (type: `array`):

Leave empty for interest over time, interest by region, related queries and related topics. City lists must be chosen here: for a whole country Google often refuses them or returns only a handful of cities, and they slow the run down.

## `trendingNowCountries` (type: `string`):

Optional. Two-letter country codes separated by commas, for example US, GB. Adds one result per country with the searches trending there right now.

## `startUrls` (type: `array`):

Optional. Paste the address of any chart from trends.google.com/trends/explore. Terms, location, dates, category and search type are read from the address, including a different location or date range per term.

## `maxItems` (type: `integer`):

Stop after this many results. 0 means no limit.

## `maxConcurrency` (type: `integer`):

How many searches run in parallel.

## Actor input object example

```json
{
  "searchTerms": [
    "air fryer"
  ],
  "isMultiple": false,
  "geo": "US",
  "timeRange": "",
  "category": "",
  "property": "",
  "maxItems": 0,
  "maxConcurrency": 8
}
```

# Actor output Schema

## `results` (type: `string`):

One record per search with every list inside it.

## `interest_over_time` (type: `string`):

One row per term and date.

## `interest_by_region` (type: `string`):

One row per term and place.

## `related_queries` (type: `string`):

One row per related query, top and rising.

## `related_topics` (type: `string`):

One row per related topic, top and rising.

## `trending_now` (type: `string`):

One row per trending search and country.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "air fryer"
    ],
    "geo": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("charitable_trousseau/google-trends-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["air fryer"],
    "geo": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("charitable_trousseau/google-trends-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "air fryer"
  ],
  "geo": "US"
}' |
apify call charitable_trousseau/google-trends-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,charitable_trousseau/google-trends-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/yJJWo7aL9h6BkYFx8/builds/tQB40bNvR4mZFEviD/openapi.json
