# Google Trends Scraper — Google Trends API Alternative (`nexgendata/google-trends-scraper`) Actor

Google Trends scraper and Google Trends API alternative: one row per date per keyword with the 0–100 interest score, plus top and rising related queries and regional interest. For market research, content calendars and SEO. No API key.

- **URL**: https://apify.com/nexgendata/google-trends-scraper.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** SEO tools, Marketing, Developer tools
- **Features:** Limited permissions
- **Stats:** 15 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 trend records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 — Google Trends API Alternative

Google Trends Scraper is a NexGenData tool on Apify that returns interest scores by date plus top and rising related queries from Google Trends.

Google Trends data and keyword trends over time, one row per date per keyword.

Get Google Trends data as clean rows: **one row per date per keyword** with the interest score, plus rows for top and rising related queries and for interest by region. Compare up to five keywords, pick a country and a time range, and export to JSON, CSV or Excel. No API key.

> **Proxy:** this actor uses Apify residential proxy because on Apify's datacenter proxy Google Trends returns interest-over-time and regional rows but no related queries (tested Nov 3, 2026: 203 rows vs 278 on residential). Residential proxy costs more: Apify bills residential traffic to you per GB.

### What you get

Every row has a `type` field. A run returns four kinds of rows:

| `type` | One row per | Fields |
|---|---|---|
| `interest_over_time` | date × keyword | `keyword`, `date`, `interest` (0–100), `geo`, `timeframe` |
| `related_query_top` | top related search × keyword | `keyword`, `relatedQuery`, `value`, `geo` |
| `related_query_rising` | rising related search × keyword | `keyword`, `relatedQuery`, `value` (growth, e.g. "+250%" or "Breakout"), `geo` |
| `interest_by_region` | region × keyword (interest above 0) | `keyword`, `region`, `interest`, `geo` |

How many dates you get depends on the time range Google returns for it: a 12-month range gives about 52 weekly dates per keyword, 90 days gives daily dates, 5 years gives weekly dates. Related queries and regions appear only when Google publishes them for the keyword (low-volume keywords may have none).

**About the interest score:** it is Google's relative search interest, scaled 0–100, where 100 is the peak of the most-searched keyword in your set. It is not absolute search volume. Keywords in the same run are scaled together, so they compare directly.

### Example output

```json
[
  {"type": "interest_over_time", "keyword": "apify", "date": "2025-10-19", "interest": 24, "geo": "US", "timeframe": "today 12-m"},
  {"type": "interest_over_time", "keyword": "web scraping", "date": "2025-10-19", "interest": 61, "geo": "US", "timeframe": "today 12-m"},
  {"type": "related_query_top", "keyword": "web scraping", "relatedQuery": "python web scraping", "value": 100, "geo": "US"},
  {"type": "related_query_rising", "keyword": "web scraping", "relatedQuery": "ai web scraping", "value": "+180%", "geo": "US"},
  {"type": "interest_by_region", "keyword": "apify", "region": "California", "interest": 100, "geo": "US"}
]
```

To chart a keyword, filter rows to `type = interest_over_time` and plot `date` against `interest`.

### Input

```json
{
  "keywords": ["apify", "web scraping"],
  "geo": "US",
  "timeframe": "today 12-m"
}
```

- `keywords` — up to 5; extra keywords are ignored.
- `geo` — a country code such as `US`, `GB` or `IN`.
- `timeframe` — Google Trends ranges such as `now 7-d`, `today 1-m`, `today 3-m`, `today 12-m`, `today 5-y`.

### Pricing

Pay per row: **$0.03 per row** of any type, plus **$0.00005 per run start**. Nothing is charged for retries or for runs that fail.

Because every date is a row, the cost follows the date count. Typical runs:

- Store example (2 keywords, US, 12 months): about 106 interest rows plus related-query and regional rows — on Oct 23 that was 277 rows, about $8.31.
- 1 keyword, 12 months, with few related queries: roughly 60–100 rows, about $1.80–$3.00.

Use fewer keywords or a shorter range to keep runs small. Live prices are always in the Pricing tab.

### Who uses it

- **SEO and content teams** — pick topics with rising search interest and time articles to seasonal peaks.
- **Market researchers** — compare brands or products by relative search interest and see where demand is strongest by region.
- **Ad buyers** — line campaign timing up with the weeks search interest climbs.

### Reliability

Google Trends rate-limits shared IP addresses. The actor routes requests through Apify residential proxies, rotates the IP on each try and backs off between up to 8 attempts. If every attempt is blocked, the run fails with the reason and nothing is charged. If Google answers but has no data for your keywords, the run succeeds with 0 rows and says so.

### Code example — Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("nexgendata/google-trends-scraper").call(run_input={
    "keywords": ["apify", "web scraping"], "geo": "US", "timeframe": "today 12-m",
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row["type"] == "interest_over_time":
        print(row["keyword"], row["date"], row["interest"])
```

### Run it on a schedule

Search interest moves weekly, so a weekly run over the same keywords suits most tracking; daily runs with `now 7-d` suit fast-moving topics. Each run returns the full range again with Google's latest values, so de-duplicate on `keyword` + `date` downstream if you keep history. Send each run's results onward with a webhook, Google Sheets, Zapier, Make or the Apify API.

Video guides from Apify: [Schedule your Actor](https://www.youtube.com/watch?v=1jI7WcVQmwM) · [Integrations](https://www.youtube.com/watch?v=bNACk1_S_6w)

### FAQ

#### Is there a Google Trends API?

Google's own Trends API is in limited alpha. This actor returns the same kind of data — interest over time, related queries, regions — as structured rows on demand.

#### Why one row per date?

So the data drops straight into a spreadsheet, BI tool or database without unpacking nested lists: each row is one keyword on one date.

#### What does a typical run cost?

$0.03 per row plus $0.00005 per run start. The 2-keyword, 12-month Store example returned 277 rows (about $8.31) on Oct 23. Fewer keywords or a shorter range cost less.

#### Why is my interest score never above 100?

Google scales interest 0–100 within your request. 100 marks the busiest week for the most-searched keyword in the set; it is relative, not a search count.

#### Why are there no related queries for my keyword?

Google only publishes related queries above a volume threshold. Low-volume keywords return interest rows only.

### Related actors

- [Google SERP Scraper — Rankings & Keywords](https://apify.com/nexgendata/google-search-scraper) — see which pages rank for the keywords you are tracking.
- [China Trends Tracker · 中国趋势汇总(微博/百度/头条/抖音)](https://apify.com/nexgendata/china-trends-tracker) — trending topics on Weibo, Baidu, Toutiao and Douyin.
- [Yahoo! Japan Realtime Trends + Buzz Tracker](https://apify.com/nexgendata/yahoo-japan-realtime-trends) — real-time trending searches for the Japanese market.

# Actor input Schema

## `keywords` (type: `array`):

Keywords for the Google Trends scraper (up to 5 compared). List of keywords to get trend data for (up to 5). Google Trends compares relative interest between keywords.

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

Two-letter country code to filter results (e.g. US, GB, DE). Leave empty for worldwide data.

## `timeframe` (type: `string`):

Time range for trend data: today 1-m (past month), today 3-m (past 3 months), today 12-m (past year), today 5-y (past 5 years).

## Actor input object example

```json
{
  "keywords": [
    "artificial intelligence",
    "machine learning"
  ],
  "geo": "US",
  "timeframe": "today 12-m"
}
```

# Actor output Schema

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

Default dataset: rows typed interest_over_time (keyword, date, interest), related_query_top / related_query_rising (keyword, relatedQuery, value) and interest_by_region (keyword, region, interest).

# 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 = {
    "keywords": [
        "artificial intelligence",
        "machine learning"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/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 = { "keywords": [
        "artificial intelligence",
        "machine learning",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/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 '{
  "keywords": [
    "artificial intelligence",
    "machine learning"
  ]
}' |
apify call nexgendata/google-trends-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgendata/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/Wh2zS63q8AdFaq2M4/builds/laiD4L1wswtIewSKI/openapi.json
