# Google Trends Scraper API: Interest, Regions & Queries (`plainrows/google-trends-explorer`) Actor

Google Trends data as clean rows: interest over time for up to 5 compared keywords, interest by region, related queries and topics (top and rising). Any country, region or worldwide; web, YouTube, news, images and shopping search. No proxies, no CAPTCHAs. Pay per search.

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

## Pricing

from $4.00 / 1,000 google trends searches

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 API: Interest, Regions & Queries

Get **Google Trends data as clean rows**: **interest over time** (0-100) for up to **5 keywords compared** on the same scale, **interest by region** (states, provinces or countries), and **related queries and related topics** (top and rising). Any country, region or worldwide; web, YouTube, news, images or Google Shopping search; past hour to 2004, or your own dates.

It calls a commercial search data API instead of scraping trends.google.com: **no proxies, no CAPTCHAs, no rate-limit errors to handle on your side**. **You pay per Google Trends search, not per row**: one search returns its whole chart, its regions and its related lists (about 175 rows for one keyword over 12 months). Searches without data are free.

### Typical uses

- **Keyword and content research**: is a topic growing or fading, when does it peak each year, which related queries are rising right now.
- **Brand and competitor comparison**: compare up to 5 brands or products on one 0-100 scale, by week and by region.
- **Seasonality for e-commerce and ads**: weekly or monthly demand curves to plan stock, campaigns and budgets.
- **Market and location research**: where in a country a product or service is searched the most, region by region.
- **Dashboards, automations and AI agents**: feed Google Sheets, BigQuery, n8n, Make, Zapier or an MCP client with flat JSON rows that chart directly.

### What you get

Each row has a `rowType`:

- `interest_over_time`: one row per keyword per date point (`date`, `value` 0-100, `isPartial`);
- `interest_by_region`: one row per keyword per region (`regionCode`, `regionName`, `value` 0-100, and in a comparison the keyword's `shareOfComparison` in that region);
- `related_query` and `related_topic`: Google's top and rising lists (single-keyword searches only, a Google Trends limit);
- `not_found`: a free marker row for a search without data, with the reason in `note`.

| Field | Description |
|---|---|
| `search`, `keyword` | The search as you gave it (keywords compared together) and the keyword this row is about |
| `rowType`, `found` | Row type (see above); `false` only on free "no data" rows |
| `date`, `dateTime`, `granularity` | Start of the period (UTC): `date` YYYY-MM-DD, `dateTime` ISO; spacing `minute`, `hour`, `day`, `week` or `month` |
| `value` | Google Trends interest 0-100 (over time and by region), or relative score 0-100 in a top related list |
| `isPartial` | `true` for a period that is not complete yet (usually the last point) |
| `keywordAverage` | Average interest of each keyword over the period (comparisons) |
| `regionCode`, `regionName`, `shareOfComparison` | e.g. `US-CA` California; in a comparison, the share (%) of this keyword among the compared ones in the region |
| `listType`, `rank` | `top` or `rising`, position in Google's related list |
| `relatedQuery` | Related search query |
| `topicId`, `topicTitle`, `topicType` | Related topic, e.g. `/m/02vqfm`, "Coffee", "Beverage" |
| `risingPercent` | Growth in % of a rising query or topic (Google shows "Breakout" above 5000) |
| `geo`, `searchType`, `timeRange`, `category`, `languageCode` | The options used: location (country, region code or `WORLDWIDE`), search type, time range or custom dates, category |
| `trendsUrl` | The same chart on trends.google.com, to check any number |
| `observedAt` | When the data was fetched (UTC) |

Every row has the same columns (missing values are `null`, never guessed), so the dataset opens directly as a table. The **Interest over time**, **Interest by region** and **Related queries and topics** views show the useful columns for each row type; filter on `rowType` in your sheet or code.

Google Trends values are relative: 100 is the peak of the chart, and keywords compared in the same search share one scale. Keywords on different lines are each scaled on their own.

### Input

```json
{
  "searchTerms": ["chatgpt, gemini, claude", "coffee"],
  "country": "US",
  "timeRange": "past_12_months",
  "searchType": "web",
  "includeRegions": true,
  "includeRelated": true,
  "category": 0,
  "speed": "standard"
}
```

- **searchTerms**: one Google Trends search per line, up to 500 per run. Compare up to **5 keywords** in one search by separating them with commas (`"nike, adidas, puma"`). A line with a single keyword also gets related queries and topics.
- **country**: 213 countries or `WORLDWIDE` (default `US`). **region** (optional) narrows to a state or province with its Google Trends code, e.g. `US-CA`, `GB-SCT`, `DE-BY` (the `regionCode` column of a country run).
- **timeRange**: `past_hour`, `past_4_hours`, `past_day`, `past_7_days`, `past_30_days`, `past_90_days`, `past_12_months` (default), `past_5_years`, `all_time`. Or set **startDate** and **endDate** (YYYY-MM-DD) for custom dates from 2004 (web) or 2008 (other search types). Google chooses the spacing of the points: per minute, hour, day, week or month.
- **searchType**: `web` (default), `youtube`, `news`, `images`, `shopping`.
- **category**: Google Trends category number to narrow an ambiguous keyword (0 = all, 71 = Food & Drink, 18 = Shopping, 20 = Sports, 7 = Finance...), the `cat=` value of a trends.google.com link.
- **includeRegions**, **includeRelated**: on by default, included in the price.
- **languageCode** (optional, default `en`): language of topic names. It does not filter searches; the location does.
- **speed**: `standard` (default, lowest price) waits in the data provider's queue, so allow a few minutes per run; a search still queued after 12 minutes is usually answered through the fast route at no extra charge; if the queue is very slow, it comes back as a free `found: false` row asking you to retry it later. `fast` answers in about 10-30 seconds per search (11 and 23 seconds in our tests), for AI agents and apps that wait, with an extra fee per search.

### Output example

Rows produced by this Actor's code from a real Google Trends response fetched on 2026-10-07 (`coffee`, United States, past 12 months: 53 weekly points, 51 states, 50 related queries and 21 related topics, 175 rows for one billed search). One interest-over-time row:

```json
{
  "search": "coffee",
  "keyword": "coffee",
  "found": true,
  "rowType": "interest_over_time",
  "date": "2025-10-05",
  "dateTime": "2025-10-05T00:00:00.000Z",
  "granularity": "week",
  "value": 61,
  "isPartial": false,
  "keywordAverage": null,
  "regionCode": null,
  "regionName": null,
  "shareOfComparison": null,
  "listType": null,
  "rank": null,
  "relatedQuery": null,
  "topicId": null,
  "topicTitle": null,
  "topicType": null,
  "risingPercent": null,
  "geo": "US",
  "searchType": "web",
  "timeRange": "past_12_months",
  "category": 0,
  "languageCode": "en",
  "trendsUrl": "https://trends.google.com/trends/explore?hl=en&geo=US&date=today%2012-m&q=coffee",
  "observedAt": "2026-10-07T16:00:23.000Z",
  "schemaVersion": "1.0"
}
```

From the same search, a region row has `"rowType": "interest_by_region", "regionCode": "US-WY", "regionName": "Wyoming", "value": 100`, and a related query row has `"rowType": "related_query", "listType": "top", "rank": 1, "relatedQuery": "coffee near me", "value": 100`. In the comparison `chatgpt, gemini, claude` (worldwide, past 7 days, hourly), the United States row for `chatgpt` has `"value": 14, "shareOfComparison": 59`.

### Pricing

Pay per **Google Trends search**, not per row, no subscription; no fee per run until October 25, 2026, then $0.002 per run start. See the **Pricing** tab for current prices: one `Google Trends search` event per search that returned data, cheaper on higher Apify plans. It includes everything that search returns: every date point of every compared keyword, every region, related queries and topics. Comparing 5 keywords in one search costs the same as one keyword.

**Fast mode** adds one `Fast mode` event per search with data, only when you choose `speed: fast`.

Price change on October 25, 2026: Google Trends search $0.006 (FREE) / $0.0055 (BRONZE) / $0.005 (SILVER+), plus $0.002 per run start; Fast mode does not change.

Searches without data, searches Google Trends rejects, duplicates and input mistakes cost nothing (from October 25, 2026, apart from the $0.002 start fee per run). The run never spends more than the maximum cost you set.

**Free Apify plan:** each run handles up to 2 searches, so you can check the output. A paid Apify plan removes this limit.

### Use it from code, automations or AI agents

**API (one call, results returned directly):**

```bash
curl -X POST "https://api.apify.com/v2/acts/plainrows~google-trends-explorer/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["nike, adidas, puma"], "country": "US", "timeRange": "past_90_days", "speed": "fast"}'
```

**n8n, Make, Zapier:** use the Apify integration, pick `plainrows/google-trends-explorer`, schedule it weekly and send the rows to Google Sheets, Airtable or your database to follow trends over time.

**AI agents (MCP):** add `https://mcp.apify.com?tools=plainrows/google-trends-explorer` to Claude, Cursor or any MCP client. The agent gets a typed tool and pays per search; use `"speed": "fast"` so it gets the answer in seconds.

### What this is not

- **Not search volumes.** Google Trends gives relative interest (0-100), not monthly searches. For absolute volumes, CPC and difficulty, use [Keyword Search Volume](https://apify.com/plainrows/keyword-search-volume).
- No "Trending now" daily list and no city-level breakdown: interest by region goes down to states or provinces (or countries for Worldwide).
- Related queries and topics are only given for single-keyword searches (Google Trends does not return them for comparisons).
- Small keywords can have "not enough data" in a country or a short time range: you get a free `found: false` row.
- Not affiliated with Google.

### Run summary

Each run stores a summary in the key-value store (`OUTPUT`): searches submitted and run, searches without data, searches billed (`rowsBilled` = `searchesBilled`) and rows delivered, median and maximum waiting time, searches Google rejected or did not answer, duplicates and invalid lines, and anything skipped because of the free-plan or budget limit.

### FAQ

**How do I compare keywords on Google Trends?**
Write up to 5 keywords on one line, separated by commas (`nike, adidas, puma`): you get their interest over time on the same 0-100 scale, plus interest by region.

**Can I get related queries and rising topics?**
Yes, for single-keyword searches (Google Trends does not return them for comparisons).

**Does it give search volumes?**
No: Google Trends gives relative interest (0-100). For monthly searches, use [Keyword Search Volume](https://apify.com/plainrows/keyword-search-volume).

**Which countries and time ranges?**
213 countries or worldwide, states and provinces, from the past hour to all time since 2004, on web, YouTube, news, images or Google Shopping search.

**How fast is it?**
`standard` speed (lowest price) waits in the provider's queue, so allow a few minutes; `fast` answers sooner at a higher price.

**Is there an official Google Trends API, or a pytrends replacement?**
Google's own Trends API is an alpha open to selected testers, and the pytrends library was archived in April 2025. This Actor works today without either: one call returns interest over time, regions and related queries as JSON.

### More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

- **SEO and keywords:** [Keyword Search Volume, CPC & Difficulty](https://apify.com/plainrows/keyword-search-volume) · [Keyword Ideas Generator](https://apify.com/plainrows/keyword-ideas-generator) · [Google Autocomplete & People Also Ask](https://apify.com/plainrows/google-autocomplete-questions) · [Website Organic Traffic & Top Keywords](https://apify.com/plainrows/domain-seo-overview) · [Bulk Domain Authority Checker](https://apify.com/plainrows/domain-authority-checker) · [Backlink Checker](https://apify.com/plainrows/backlink-checker) · [Broken Link Checker](https://apify.com/plainrows/broken-link-checker) · [AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode)](https://apify.com/plainrows/ai-search-brand-visibility) · [Google Maps Rank Tracker (Geo-Grid Local SEO)](https://apify.com/plainrows/google-maps-rank-tracker)
- **Leads and companies:** [Google Maps Scraper](https://apify.com/plainrows/google-maps-businesses) · [Website Technology Checker](https://apify.com/plainrows/website-tech-stack) · [ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby)](https://apify.com/plainrows/ats-job-postings) · [Google Jobs Scraper](https://apify.com/plainrows/google-jobs-scraper) · [Google Ads Scraper (Transparency Center)](https://apify.com/plainrows/google-ads-transparency) · [Company Registry Lookup (SIRENE, LEI, Brreg)](https://apify.com/plainrows/company-registry-lookup) · [Public Tenders Search (EU TED & UK)](https://apify.com/plainrows/public-tenders-search)
- **E-commerce and travel:** [Amazon Product Search Scraper](https://apify.com/plainrows/amazon-product-search) · [Google Shopping Prices Scraper](https://apify.com/plainrows/google-shopping-prices) · [Google Hotels Prices Scraper](https://apify.com/plainrows/google-hotels-prices) · [Tripadvisor Reviews Scraper](https://apify.com/plainrows/tripadvisor-reviews)
- **Content and media:** [Google News Scraper](https://apify.com/plainrows/google-news-scraper) · [YouTube Search Scraper](https://apify.com/plainrows/youtube-search-scraper) · [YouTube Comments Scraper](https://apify.com/plainrows/youtube-comments-scraper) · [Google Images Scraper](https://apify.com/plainrows/google-images-scraper) · [Website Screenshot API](https://apify.com/plainrows/website-screenshot) · [Google Maps Reviews Scraper](https://apify.com/plainrows/google-maps-reviews) · [App Store & Google Play Reviews Scraper](https://apify.com/plainrows/app-reviews-scraper)

**Compared with other APIs:** [pytrends alternative](https://nadaho.github.io/plainrows/pytrends-alternative/)

### Support

Missing a field, a location or found a bug? Open an issue on this page. Issues are read and answered.

# Actor input Schema

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

One Google Trends search per line. Compare up to 5 keywords by separating them with commas, e.g. "chatgpt, gemini, claude"; values are then on the same 0-100 scale, like on trends.google.com. One keyword alone, e.g. "coffee", also gets related queries and topics. Up to 500 lines per run; each line with data is billed once.

## `country` (type: `string`):

Where the searches happen, or Worldwide.

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

Period of the chart. Google picks the spacing of the points: per minute (past hour), per hour (past day, past 7 days), per day (past 30/90 days), per week (12 months, 5 years) or per month (all time). Ignored when a custom start date is set below.

## `searchType` (type: `string`):

Which Google search the interest is measured on, like the "Web search" menu of Google Trends.

## `includeRegions` (type: `boolean`):

Add one row per region and keyword: states or provinces for a country, countries for Worldwide. Included in the price of the search.

## `includeRelated` (type: `boolean`):

Add Google's related queries and related topics (top and rising). Google Trends gives them only for a search with a single keyword. Included in the price of the search.

## `startDate` (type: `string`):

Use your own date range instead of Time range, e.g. 2025-01-01. From 2004-01-01 (web) or 2008-01-01 (other search types).

## `endDate` (type: `string`):

End of the custom range (default: today).

## `region` (type: `string`):

A region instead of a whole country: Google Trends region code such as "US-CA" (California), "GB-SCT" (Scotland) or "DE-BY" (Bavaria), as shown in the regionCode column. Overrides Country.

## `category` (type: `integer`):

Google Trends category number to narrow an ambiguous keyword: 0 = all categories (default), 71 = Food & Drink, 18 = Shopping, 20 = Sports, 7 = Finance, 5 = Computers & Electronics, 45 = Health, 67 = Travel, 47 = Autos & Vehicles, 3 = Arts & Entertainment. The number is the "cat=" value in a trends.google.com link.

## `languageCode` (type: `string`):

Two-letter language of topic names, e.g. "fr" for French topic titles (default "en"). It does not filter searches; Country does.

## `speed` (type: `string`):

Standard (lowest price): each search waits in the data provider's queue, so allow a few minutes per run; a search still queued after 12 minutes is answered through the fast route at no extra charge. Fast: about 10-30 seconds per search, for AI agents and apps that wait for the answer; adds the fast-mode fee per search (see Pricing).

## Actor input object example

```json
{
  "searchTerms": [
    "chatgpt, gemini, claude",
    "coffee"
  ],
  "country": "US",
  "timeRange": "past_12_months",
  "searchType": "web",
  "includeRegions": true,
  "includeRelated": true,
  "category": 0,
  "speed": "standard"
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

# 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": [
        "chatgpt, gemini, claude",
        "coffee"
    ],
    "country": "US",
    "timeRange": "past_12_months"
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainrows/google-trends-explorer").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": [
        "chatgpt, gemini, claude",
        "coffee",
    ],
    "country": "US",
    "timeRange": "past_12_months",
}

# Run the Actor and wait for it to finish
run = client.actor("plainrows/google-trends-explorer").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": [
    "chatgpt, gemini, claude",
    "coffee"
  ],
  "country": "US",
  "timeRange": "past_12_months"
}' |
apify call plainrows/google-trends-explorer --silent --output-dataset

```

## MCP server setup

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

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/AQtGfBj0wY4CSsRru/builds/kkGp2n35iemjq5FOV/openapi.json
