# Google Trends Scraper API: Trending Now & Watch List (`inter974/google-trends-api`) Actor

Fast Google Trends scraper and API, no browser. Get interest over time, by region, rising queries, keyword comparisons and up to 500 Trending Now searches per country with volume, growth and news. Watch list alerts for your brand. $2 or less per 1,000 results, failed items free.

- **URL**: https://apify.com/inter974/google-trends-api.md
- **Developed by:** [kev Data Tools](https://apify.com/inter974) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 results

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 - Fast, Reliable, No Browser

Get **Google Trends data in seconds** - without a headless browser, without CAPTCHAs, without babysitting failed runs.

This Actor talks directly to the same data endpoints the Google Trends website uses, so it is **fast** (usually a few seconds per keyword, a bit longer when Google is rate-limiting), **cheap to run**, and **reliable**: every request automatically retries on a fresh IP when Google rate-limits. Keywords that still fail are listed separately and **never charged**.

### What data can you get?

| Data | Description |
|---|---|
| 📈 **Interest over time** | The 0-100 popularity curve for any period from the past hour to 2004-today |
| 🧠 **Trend summary** | Ready-made stats per keyword: average, peak value & date, latest value, % change and trend direction (`up` / `down` / `flat`) - no spreadsheet work needed |
| 🗺️ **Interest by region** | Countries, regions/states, cities or US metro areas (DMA) |
| 🔎 **Related queries** | Top queries and **rising** queries with growth % (or `Breakout`) |
| ⚖️ **Keyword comparison** | Compare up to 5 keywords on the same scale, like the *Compare* button in Google Trends |
| 🔥 **Trending now** | Up to 500 trending searches per country (past 4 h, 24 h, 48 h or 7 days) with search volume, % increase, related searches, categories, start time, whether the trend is still active, and up to 3 news articles per trend |
| 👀 **Watch list** | Monitor your brand, competitors or topics: all trends are scanned, only the ones that mention your words are returned (and charged), with `matchedKeywords` |
| 🎯 **Filters** | Location, time range or custom dates, category, and search type (Web, Images, News, Shopping, YouTube) |

### Why this Actor?

- **No browser = fast and cheap.** Browser-based Trends scrapers load the full Google Trends web app for every keyword. This Actor fetches only the data.
- **Built to survive rate limits.** Chrome-identical TLS fingerprint, cookie warm-up, automatic IP rotation and backoff. When Google blocks in waves, all requests pause together, and keywords that were still blocked get a second try at the end of the run.
- **You only pay for results.** Failed keywords are written to the `FAILED_INPUTS` record in the key-value store and are not charged.
- **AI-agent and spreadsheet friendly.** Flat JSON, ISO dates, and a plain-language `summary` object, so an LLM or a Google Sheet can use the output directly.

### How to use it

1. Enter one or more **search terms** (one per line). To compare keywords, put up to 5 on one line separated by commas: `claude, gemini, chatgpt`.
2. Optionally pick a **location** (`US`, `FR`, `US-CA`...), a **time range** and a **category**.
3. Optionally add countries under **Trending now** to get the searches trending right now. Pick the period and, if you want, only some categories (Sports, Technology, Business and Finance...).
4. Click **Start**. Download the results as JSON, CSV, Excel or HTML, or fetch them through the API.

#### Example input

```json
{
    "searchTerms": ["chatgpt", "claude, gemini"],
    "geo": "US",
    "timeRange": "today 12-m",
    "trendingGeos": ["US", "GB"],
    "maxTrendingItems": 10
}
```

#### Example output - keyword

```json
{
    "type": "explore",
    "searchTerm": "chatgpt",
    "searchTerms": ["chatgpt"],
    "geo": "US",
    "timeRange": "today 12-m",
    "searchProperty": "web",
    "exploreUrl": "https://trends.google.com/trends/explore?q=chatgpt&date=today%2012-m&geo=US",
    "summary": {
        "average": 83.1,
        "latestValue": 71,
        "peakValue": 100,
        "peakDate": "2025-11-09",
        "changePercent": -13.7,
        "trendDirection": "flat"
    },
    "interestOverTime": [
        { "date": "2025-10-05", "formattedTime": "Oct 5 - 11, 2025", "values": { "chatgpt": 57 }, "value": 57 }
    ],
    "interestByRegion": [
        { "geoCode": "US-CA", "geoName": "California", "values": { "chatgpt": 100 }, "value": 100 }
    ],
    "relatedQueriesTop": [{ "query": "chatgpt login", "value": 100, "link": "https://trends.google.com/trends/explore?q=chatgpt+login&date=today+12-m" }],
    "relatedQueriesRising": [{ "query": "chatgpt codex", "growthPercent": 1050, "link": "https://trends.google.com/..." }],
    "scrapedAt": "2026-10-08T14:00:00Z"
}
```

When you compare several keywords, `values` holds one number per keyword, `summary` has one entry per keyword, and related queries are grouped under `relatedByTerm`.

#### Example output - trending now

```json
{
    "type": "trending",
    "geo": "US",
    "rank": 1,
    "query": "ravens vs falcons",
    "searchVolume": 1000000,
    "approxTraffic": "1M+",
    "increasePercent": 1000,
    "startedAt": "2026-10-11T17:10:00Z",
    "endedAt": null,
    "isActive": true,
    "categories": ["Sports"],
    "relatedQueries": ["falcons vs ravens", "tyler huntley", "derrick henry"],
    "newsArticles": [{ "title": "...", "url": "https://...", "source": "ESPN" }],
    "exploreUrl": "https://trends.google.com/trends/explore?q=ravens+vs+falcons&geo=US&date=now%201-d"
}
```

Each trend comes with up to 3 news articles (title, link, source, date, picture). Turn off *Trending now - news articles* if you only need the trends.

### Use cases

- **SEO & content planning** - find rising queries before your competitors and pick topics with growing demand.
- **E-commerce & product research** - check seasonality and compare product demand across countries.
- **Market research & investing** - track brand or ticker interest over time.
- **AI agents & automations** - give your agent live search-interest data through the Apify API or MCP server; the `summary` field is designed to be read by LLMs.
- **Newsrooms & social media** - monitor what is trending right now in any country.
- **Brand & PR monitoring** - schedule the watch list every few hours and get alerted as soon as your brand or a competitor hits Google's trending searches.

### Integrations

Run it from **Make, n8n, Zapier, Google Sheets**, the **Apify API** (Python / JavaScript clients) or as a tool for AI agents via the **Apify MCP server**. Schedule it daily to build your own trend history.

#### Call it from your code

```python
from apify_client import ApifyClient  # pip install apify-client

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("inter974/google-trends-api").call(run_input={
    "searchTerms": ["chatgpt", "claude", "gemini"],
    "geo": "US",
    "timeRange": "today 3-m",
})
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item["searchTerm"], item["summary"]["trendDirection"], item["summary"]["changePercent"])
```

Or with a single HTTP request (returns the results directly):

```bash
curl -X POST "https://api.apify.com/v2/acts/inter974~google-trends-api/run-sync-get-dataset-items"   -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" -H "Content-Type: application/json"   -d '{"trendingGeos": ["US"], "trendingHours": "24", "maxTrendingItems": 20}'
```

### Pricing

Pay per result: you are charged for each item in the dataset (one per keyword or keyword comparison, and one per trending search). Failed keywords, keywords without data and trends that do not match your watch list are **free**.

| Apify plan | Price per 1,000 results |
|---|---|
| Free | $2.00 |
| Bronze | $1.50 |
| Silver | $1.00 |
| Gold | $0.80 |

Examples on the Free plan:

- 1 keyword with its trend, regions and related queries: **$0.002**
- 100 keywords tracked every day for a month (3,000 results): **about $6**
- The top 50 trending searches in 5 countries: **$0.50**
- A brand watch list checked every 2 hours: you only pay when your brand is actually trending

Apify's free plan includes monthly credits, enough for thousands of results. See the *Pricing* tab for the current rates.

### Tips & limits

- Values are **relative** (0-100), exactly as in Google Trends - they are not absolute search volumes.
- The last data point of a series is often marked `isPartial: true` because the period is not finished yet.
- Google currently returns empty **related topics** for most searches, so that option is off by default.
- Very rare keywords may return no data (Google's privacy threshold). They are listed in `NO_DATA_INPUTS` and are **not charged**.
- For large batches, keep *Parallel requests* at 3-5 and use residential proxies (default).

### FAQ

**Is there an official Google Trends API?** Google offers an alpha API to a small number of approved researchers only. This Actor gives everyone programmatic access to the public Google Trends data.

**Is this a pytrends alternative?** Yes. pytrends, the popular unofficial Python library, is no longer maintained and often hits Google's rate limits (error 429). This Actor handles retries, IP rotation and rate limits for you, and also returns the new Google Trends *Trending now* data (search volume, growth, news). You can call it from Python in a few lines (see *Call it from your code*).

**Does it return absolute search volumes?** Interest over time and by region are relative (0-100), exactly like Google Trends. Trending Now items include Google's approximate search volume: `searchVolume` (a number, e.g. `1000000`) and `approxTraffic` (e.g. `1M+`).

**Is it legal?** This Actor only collects aggregated, anonymous statistics that Google Trends publishes publicly - no personal data. You are responsible for using the data in line with applicable laws and Google's terms.

**Something doesn't work?** Open an issue in the *Issues* tab with your run ID and we'll look into it.

# Actor input Schema

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

One search term per line. To compare terms on the same 0-100 scale (like the Compare button in Google Trends), put up to 5 terms on one line separated by commas, e.g. 'bitcoin, ethereum, solana'.

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

Country or region code: 'US', 'FR', 'GB', 'DE', or a sub-region like 'US-CA'. Leave empty for worldwide.

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

Period to analyse. Ignored when a custom range is set.

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

Optional. Format 'YYYY-MM-DD YYYY-MM-DD', e.g. '2024-01-01 2024-12-31'. Overrides the time range above.

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

Google Trends category ID (0 = all categories). Examples: 7 Finance, 12 Business & Industrial, 18 Shopping, 45 Health, 958 Jobs & Education.

## `searchProperty` (type: `string`):

Which Google search to analyse.

## `includeInterestOverTime` (type: `boolean`):

Time series (0-100) plus a summary: average, peak, latest value, % change and trend direction.

## `includeInterestByRegion` (type: `boolean`):

Where the keyword is most popular, ranked by interest (0-100).

## `regionResolution` (type: `string`):

Granularity of 'Interest by region'. Leave on Automatic to use Google's default for the location.

## `includeRelatedQueries` (type: `boolean`):

Top related searches and the fastest-rising ones, with growth % or 'Breakout'.

## `includeRelatedTopics` (type: `boolean`):

Since 2026 Google returns empty related-topic lists for most searches. Off by default to save time; turn on to try anyway (empty lists are simply omitted).

## `trendingGeos` (type: `array`):

Get the searches trending right now (like trends.google.com/trending) for these country codes, e.g. 'US', 'FR', 'IN': search volume, % increase, related searches, categories, start time, and news articles for the top trends. Can be used alone or together with search terms.

## `trendingHours` (type: `string`):

Trends that started in this window.

## `trendingCategories` (type: `array`):

Only keep trends in these categories. Leave empty for all.

## `trendingWatchList` (type: `array`):

Only return trends that mention these words or phrases (your brand, competitors, topics) in the trending search, its related searches or its news headlines. Case and accents are ignored; whole words only. All trends are scanned, but you only pay for the matches - ideal for monitoring and alerts.

## `maxTrendingItems` (type: `integer`):

Maximum number of trending searches returned per country, ranked by search volume (up to 500).

## `includeTrendingNews` (type: `boolean`):

Attach up to 3 news articles (title, link, source, date, picture) to each trending search.

## `language` (type: `string`):

Language for topic names and labels, e.g. 'en-US', 'fr', 'de'.

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

How many search terms are processed at the same time. Higher is faster but more likely to be rate-limited by Google.

## `maxRetries` (type: `integer`):

How many times a blocked request is retried on a fresh IP. Inputs still blocked are retried once more at the end of the run, after a pause. Failed inputs are never charged.

## `proxyConfiguration` (type: `object`):

Google rate-limits heavily. Residential proxies give the best success rate.

## Actor input object example

```json
{
  "searchTerms": [
    "chatgpt",
    "claude, gemini"
  ],
  "geo": "",
  "timeRange": "today 12-m",
  "category": 0,
  "searchProperty": "",
  "includeInterestOverTime": true,
  "includeInterestByRegion": true,
  "regionResolution": "",
  "includeRelatedQueries": true,
  "includeRelatedTopics": false,
  "trendingHours": "24",
  "maxTrendingItems": 25,
  "includeTrendingNews": true,
  "language": "en-US",
  "maxConcurrency": 3,
  "maxRetries": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One item per search term (or comparison) and one per trending search.

## `failedInputs` (type: `string`):

Inputs that could not be scraped after all retries. Present only when something failed.

## `noDataInputs` (type: `string`):

Searches for which Google Trends has no data. Present only when it happens.

# 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",
        "claude, gemini"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("inter974/google-trends-api").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",
        "claude, gemini",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("inter974/google-trends-api").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",
    "claude, gemini"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call inter974/google-trends-api --silent --output-dataset

```

## MCP server setup

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

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/Q0etLE6ACgIqPefk6/builds/6PUY2SoGWn9jtZLP3/openapi.json
