# Google Trends Scraper (`cirkit/google-trends-scraper`) Actor

Fast Google Trends scraper. Get interest over time, interest by subregion, and top and rising related queries and topics for any keyword, in any country, over any time range. Reads Google's own widget JSON API directly, no headless browser and no API key. Flat CSV-ready output.

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

## Pricing

from $0.70 / 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.

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

**Scrape Google Trends data** for any keyword, in any country, over any time range. This **Google Trends scraper** returns interest over time, interest by subregion, and both top and rising related queries and topics — reading Google's own widget JSON API directly rather than driving a browser.

No Google Trends API key, no login, and no headless browser. Results land in a structured dataset you can export to JSON, CSV, Excel, or XML, or pull straight from the Apify API.

### What is Google Trends Scraper?

Google Trends Scraper is an [Apify Actor](https://apify.com/actors) that extracts search interest over time and by region from [Google Trends](https://trends.google.com) and returns them as clean, structured records. Rising related queries are the highest-value output: they surface search terms gaining momentum before they show up in any keyword tool's index, which is exactly where content and product opportunities appear first.

### What data can this Google Trends scraper extract?

Every run writes one row per data point. Full field list:

| Field | Type | Description |
| --- | --- | --- |

### How to scrape Google Trends search trend data

1. Open [Google Trends Scraper](https://apify.com/cirkit/google-trends-scraper) and click **Try for free**.
2. Add one or more `keywords`.
3. Set `geo` for the country or region and `timeframe` for the window, or supply a `customTimeRange`.
4. Choose which `dataTypes` you want: time series, region breakdown, related queries, related topics.
5. Use `compareKeywords` to put several terms on the same normalised scale.
6. Click **Start** and watch rows appear live in the **Output** tab.
7. Export the dataset as JSON, CSV, Excel, or XML — or fetch it from the [Apify API](https://docs.apify.com/api/v2) once the run finishes.

### Google Trends Scraper input options

| Input | Type | What it does | Default |
| --- | --- | --- | --- |
| `keywords` | array | Search terms to analyse, one per line. Each keyword is scraped independently unless 'Compare keywords' is on. | **yes** |
| `geo` | string | Two-letter country code such as US, GB or DE. Add a subregion for state or province level, e.g. US-CA. Clear the... | `"US"` |
| `timeframe` | string | Preset window to chart. Ignored when 'Custom time range' is filled in. Shorter ranges return finer buckets: 'now... | `"today 12-m"` |
| `customTimeRange` | string | Explicit window as 'YYYY-MM-DD YYYY-MM-DD', for example '2024-01-01 2024-12-31'. Overrides the preset time range... |  |
| `dataTypes` | array | Which datasets to pull for each keyword. Deselecting the ones you do not need makes runs faster and cheaper. Related... | `see schema` |
| `maxItems` | integer | Hard cap on rows written to the dataset across all keywords. One keyword over 12 months in the US yields roughly 150... | `500` |
| `compareKeywords` | boolean | Chart all keywords together so their values are normalised against each other, exactly like adding comparison terms... | `false` |
| `category` | integer | Google Trends numeric category id to restrict the query, for example 71 (Food & Drink) or 7 (Finance). 0 means all... | `0` |
| `property` | string | Which Google surface to measure. Web search is the default. |  |

Proxy is configured through the standard `proxyConfiguration` object; the defaults shipped with this Actor are already tuned for the target site.

### Example output

```json
{
  "keywords": ["air fryer", "pickleball"],
  "geo": "US",
  "timeframe": "today 12-m",
  "maxItems": 500
}
```

### How much does it cost to scrape Google Trends?

This Actor runs on **pay per result** pricing: **$0.0007 per row** ($0.7 per 1,000). A one-time start fee of $0.00005 applies per run.

| Results | Approximate cost |
| --- | --- |
| 1,000 | $0.70 |
| 10,000 | $7.00 |
| 100,000 | $70.00 |

You pay for rows you actually receive, so a search that returns nothing costs nothing beyond the start fee. Every Apify account includes free monthly usage credit, so you can trial Google Trends Scraper at no cost.

### What can you build with Google Trends data?

#### Find rising keywords before competitors do

Rising related queries are a leading indicator. Terms appearing there often have months of runway before traditional keyword tools register meaningful volume.

#### Validate demand for a product or content idea

A five-year interest curve immediately separates a durable trend from a spike that has already peaked.

#### Plan seasonal campaigns with real data

Interest over time shows precisely when demand for a category starts to climb each year, so campaigns launch on evidence rather than on last year's calendar.

#### Compare brands or products head to head

`compareKeywords` normalises several terms against each other, which is the only way Trends numbers are meaningfully comparable.

#### Target geographic expansion

Interest by subregion shows where demand is concentrated, which informs both ad targeting and market entry.

### Google Trends scraping tips and limits

- Google Trends values are relative, not absolute. A score of 100 means peak interest within your chosen window and geography, not a search volume — never read it as a count.
- Comparisons are only valid inside a single request. Use `compareKeywords` rather than running terms separately and lining up the numbers afterwards.
- Short time ranges give finer granularity. A five-year window returns weekly points; a one-week window returns hourly.
- `category` and `property` narrow to a vertical or to web, image, news, or YouTube search — both change results substantially.

### Integrations and automation

Run Google Trends Scraper on a [schedule](https://docs.apify.com/platform/schedules) to keep a Google Trends dataset fresh, or trigger it from your own stack through the [Apify API](https://docs.apify.com/api/v2) and the official [JavaScript](https://docs.apify.com/sdk/js) and [Python](https://docs.apify.com/sdk/python) clients. Native [integrations](https://docs.apify.com/platform/integrations) push results into Google Sheets, Slack, Airtable, Zapier, Make, GitHub, or any webhook endpoint. The Actor also works as an [MCP](https://docs.apify.com/platform/integrations/mcp) tool, so an AI agent can call it directly.

### Related scrapers

| Actor | What it does |
| --- | --- |
| [Google News Scraper](https://apify.com/cirkit/google-news-scraper) | News coverage driving the trends you spot. |
| [Google Shopping Scraper](https://apify.com/cirkit/google-shopping-scraper) | Whether rising interest is converting into commercial listings. |
| [YouTube Search Scraper](https://apify.com/cirkit/youtube-search-scraper) | Video content ranking for your target terms. |
| [Reddit Posts Scraper - Subreddit, Search, User Posts API](https://apify.com/cirkit/reddit-posts-scraper) | Organic discussion behind an emerging trend. |

### Frequently asked questions

#### What do Google Trends numbers actually mean?

They are relative interest on a 0 to 100 scale, where 100 is the peak within the requested timeframe and region. They are not absolute search volumes, and rescaling happens per request.

#### Can I compare several keywords?

Yes, via `compareKeywords`. This is the only reliable way to compare terms, because each separate request is normalised independently.

#### Do I need a Google Trends API key?

No. Google Trends Scraper reads publicly available Google Trends pages and endpoints directly, so there is no key to obtain, no OAuth app to register, and no account to connect.

#### Can I export Google Trends data to CSV, Excel, or Google Sheets?

Yes. Every run stores results in an Apify dataset that exports to JSON, JSONL, CSV, Excel, XML, or HTML with one click, and the Google Sheets integration writes rows straight into a spreadsheet.

#### Can I run Google Trends Scraper on a schedule?

Yes. Apify schedules run the Actor hourly, daily, weekly, or on any cron expression, and webhooks can notify your systems the moment a run finishes.

#### Is it legal to scrape Google Trends?

Scraping publicly available data is broadly lawful in the US and EU, but the answer depends on what you collect and how you use it. This Actor is built to gather public aggregate, anonymised search interest data that Google publishes publicly. Personal data carries extra obligations under GDPR and CCPA. Read Apify's guide on [whether web scraping is legal](https://blog.apify.com/is-web-scraping-legal/) and take your own legal advice for your use case.

### Support and feedback

Found a bug, a missing field, or a Google Trends page shape this Actor does not handle yet? Open an issue from the **Issues** tab on the Actor page. Feature requests and custom-scraper enquiries are welcome there too.

# Actor input Schema

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

Search terms to analyse, one per line. Each keyword is scraped independently unless 'Compare keywords' is on.

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

Two-letter country code such as US, GB or DE. Add a subregion for state or province level, e.g. US-CA. Clear the field entirely for worldwide, which returns interest broken down by country.

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

Preset window to chart. Ignored when 'Custom time range' is filled in. Shorter ranges return finer buckets: 'now 7-d' is hourly, 'today 12-m' is weekly.

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

Explicit window as 'YYYY-MM-DD YYYY-MM-DD', for example '2024-01-01 2024-12-31'. Overrides the preset time range when set.

## `dataTypes` (type: `array`):

Which datasets to pull for each keyword. Deselecting the ones you do not need makes runs faster and cheaper. Related topics is off by default because Google itself currently serves an empty topics widget - see the note in its label.

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

Hard cap on rows written to the dataset across all keywords. One keyword over 12 months in the US yields roughly 150 rows with every data type enabled.

## `compareKeywords` (type: `boolean`):

Chart all keywords together so their values are normalised against each other, exactly like adding comparison terms on trends.google.com. Maximum 5 keywords. In this mode the subregion rows show each keyword's share of interest in that region rather than its own 0-100 index. Leave off to scrape each keyword independently.

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

Google Trends numeric category id to restrict the query, for example 71 (Food & Drink) or 7 (Finance). 0 means all categories.

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

Which Google surface to measure. Web search is the default.

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

Google Trends rate-limits per IP, so a proxy is required for anything beyond a couple of keywords. Apify datacenter proxy is enough - residential costs far more and measurably does not help here.

## Actor input object example

```json
{
  "keywords": [
    "air fryer",
    "pickleball"
  ],
  "geo": "US",
  "timeframe": "today 12-m",
  "dataTypes": [
    "interestOverTime",
    "interestBySubregion",
    "relatedQueries"
  ],
  "maxItems": 500,
  "compareKeywords": false,
  "category": 0,
  "property": "",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset of Google Trends rows.

## `datasetCsv` (type: `string`):

Same dataset rendered as CSV.

# 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": [
        "air fryer",
        "pickleball"
    ],
    "geo": "US",
    "maxItems": 500,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cirkit/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": [
        "air fryer",
        "pickleball",
    ],
    "geo": "US",
    "maxItems": 500,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("cirkit/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": [
    "air fryer",
    "pickleball"
  ],
  "geo": "US",
  "maxItems": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call cirkit/google-trends-scraper --silent --output-dataset

```

## MCP server setup

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