# Google Trends Scraper (Fast, No Browser) (`rakish_bobby_gwr/google-trends-fast-scraper`) Actor

Fast Google Trends scraper: interest over time, interest by country, region, city and metro, and top and rising related queries for any keyword or comparison. Web, YouTube, News, Image and Shopping search. Same output fields as the classic Google Trends Scraper.

- **URL**: https://apify.com/rakish_bobby_gwr/google-trends-fast-scraper.md
- **Developed by:** [mustafa kılıç](https://apify.com/rakish_bobby_gwr) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 search term analyzeds

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

Get Google Trends data for any keyword or comparison in seconds: **interest over time**, **interest by country, region, city and US metro area**, and **top and rising related queries**, for Web, YouTube, News, Image and Shopping search. It reads the same data the Google Trends website shows, without running a browser, so a search term takes about a second and you pay only per result.

### Why this scraper

- **Fast enough for synchronous API calls**: a typical term finishes in 1-3 seconds, so calls from Make, Zapier, n8n or your own code do not time out.
- **Compare up to 5 terms** on one relative 0-100 scale, exactly like adding comparisons on trends.google.com.
- **All search types**: Web Search, YouTube Search, News Search, Image Search and Google Shopping.
- **Drop-in output**: field names such as `interestOverTime_timelineData`, `interestBySubregion` and `relatedQueries_rising` match other Google Trends scrapers on Apify Store, and the input accepts the same field names (`searchTerms`, `timeRange`, `geo`, `category`, `startUrls`, `spreadsheetId`), so switching usually means changing only the Actor ID.
- **Simple pricing**: one price per search term or comparison, no compute or proxy costs on top.

### How to use it

1. Add search terms, paste Google Trends explore URLs, or point to a Google Sheet with terms in the first column.
2. Pick a location, time range, category and search type, or keep the defaults (worldwide, past 12 months, all categories, Web Search).
3. Click **Start** and download the results as JSON, CSV or Excel, or read them through the API.

#### Input example

```json
{
    "searchTerms": ["web scraping", "chatgpt, gemini, claude"],
    "isMultiple": true,
    "geo": "US",
    "timeRange": "today 3-m",
    "property": "youtube"
}
```

The first entry is analyzed alone. The second one, because *Compare comma-separated terms* is on, is analyzed as one comparison of three terms.

#### Output example

One row per search term or comparison (lists shortened):

```json
{
    "inputUrlOrTerm": "web scraping",
    "searchTerm": "web scraping",
    "searchTerms": ["web scraping"],
    "geo": "US",
    "timeRange": "today 3-m",
    "category": 0,
    "property": "web",
    "url": "https://trends.google.com/trends/explore?q=web+scraping&date=today+3-m&hl=en-US&geo=US",
    "interestOverTime_timelineData": [
        { "time": "1785542400", "formattedTime": "Aug 1, 2026", "formattedAxisTime": "Aug 1", "value": [25], "hasData": [true], "formattedValue": ["25"] }
    ],
    "interestOverTime_averages": [],
    "interestBy": [],
    "interestBySubregion": [
        { "geoCode": "US-KS", "geoName": "Kansas", "value": [100], "formattedValue": ["100"], "maxValueIndex": 0, "hasData": [true] }
    ],
    "interestByCity": [],
    "interestByMetro": [
        { "geoCode": "678", "geoName": "Wichita-Hutchinson KS", "value": [100], "formattedValue": ["100"], "maxValueIndex": 0, "hasData": [true] }
    ],
    "relatedQueries_top": [
        { "query": "web scraping api", "value": 100, "formattedValue": "100", "hasData": true, "link": "/trends/explore?q=web+scraping+api&date=today+3-m&geo=US" }
    ],
    "relatedQueries_rising": [],
    "relatedTopics_top": [],
    "relatedTopics_rising": [],
    "scrapedAt": "2026-11-01T08:56:48+00:00"
}
```

| Field | Description |
| --- | --- |
| `interestOverTime_timelineData` | Search interest over time on a 0-100 scale. `value` has one number per compared term. |
| `interestOverTime_averages` | Average interest of each term in a comparison. |
| `interestBy` | Interest by country (worldwide queries). |
| `interestBySubregion`, `interestByCity`, `interestByMetro` | Interest by state or province, city and US metro area (country queries). Regions without enough search volume are left out, as on trends.google.com. |
| `relatedQueries_top`, `relatedQueries_rising` | Top and rising related searches. Breakout terms have `formattedValue` "Breakout". |
| `relatedByTerm` | For comparisons: the related queries of each term. |
| `url` | The same analysis on trends.google.com. |

### Time ranges and locations

- **Time range**: past hour, 4 hours, day, 7 days, 30 days, 90 days, 12 months, 5 years or since 2004; or a custom range such as `2025-01-01 2025-06-30` (hourly ranges inside the last week: `2026-10-30T10 2026-10-31T10`).
- **Location**: a country code (`US`, `DE`, `TR`), a region (`US-CA`) or a US metro area (`US-NY-501`); empty means worldwide.
- **Category**: any Google Trends category ID, for example `71` for Food & Drink.

### Pricing

$2.00 per 1,000 results. One result is one search term or one comparison with all the sections you selected. Inputs that cannot be processed are reported in the dataset with an `error` field and are not charged.

### Limits

- **Related topics** are not available: Google does not return them to automated clients. The `relatedTopics_top` and `relatedTopics_rising` fields stay empty so existing integrations keep working.
- Google Trends values are relative (0-100) and sampled, so repeated requests can differ slightly, just like on the website.
- Google limits requests per IP address. The Actor uses residential proxies by default and retries on a fresh IP when it is rate-limited.

### Use it through the API

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("<USERNAME>/google-trends-fast-scraper").call(run_input={"searchTerms": ["web scraping"], "geo": "US"})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["searchTerm"], item["interestOverTime_timelineData"][-1])
```

### Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Google. It only collects publicly available data; make sure your use complies with the applicable terms and laws.

### Feedback

Missing a field or found a bug? Open an issue in the **Issues** tab.

# Actor input Schema

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

Keywords or topics to analyze. Each entry becomes one dataset item. To compare up to 5 terms on one relative scale, write them comma-separated in one entry and enable "Compare comma-separated terms".

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

If enabled, an entry like "chatgpt, gemini, claude" is analyzed as one comparison (up to 5 terms, same 0-100 scale), exactly like adding comparisons on trends.google.com. If disabled, the comma is part of the keyword.

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

Paste explore URLs copied from trends.google.com. The URL's own terms, location, time range, category and search type are used, so the settings below do not apply to these URLs.

## `spreadsheetId` (type: `string`):

Optional. ID of a Google Sheet shared as "Anyone with the link can view". Terms are read from the first column; row 1 is treated as the header.

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

Period to analyze. Defaults to the past 12 months, like trends.google.com.

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

Overrides the time range above. Format "YYYY-MM-DD YYYY-MM-DD", for example "2025-01-01 2025-06-30". For hourly data inside the last 7 days use "YYYY-MM-DDTHH YYYY-MM-DDTHH".

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

Country to analyze; leave empty for worldwide. You can also type a region code such as "US-CA" or a US metro code such as "US-NY-501". Worldwide returns interest by country; a country returns interest by subregion and city (plus metro areas for the US).

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

Restrict the analysis to a category, like the category filter on trends.google.com. You can also type any numeric category ID.

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

Which Google search to analyze: Web Search (default), Image Search, News Search, Google Shopping or YouTube Search.

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

Language of region, city and topic names in the results, as a locale code such as "en-US", "de" or "tr".

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

Timeline of search interest on a 0-100 scale (field interestOverTime_timelineData).

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

Search interest by country, subregion, city and US metro area (fields interestBy\*).

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

Top and rising related search queries (fields relatedQueries_top and relatedQueries_rising).

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

Stop after this many search terms or URLs. 0 means no limit.

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

How many search terms are processed in parallel.

## `maxRequestRetries` (type: `integer`):

How many times a search term is retried on a fresh IP address when Google rate-limits the request.

## `viewedFrom` (type: `string`):

Optional two-letter country code for the proxy IP address, for example "us". Usually not needed: the location filter above decides which data you get.

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

Google Trends rate-limits datacenter IP addresses quickly. Residential proxies are the default and recommended.

## Actor input object example

```json
{
  "searchTerms": [
    "web scraping"
  ],
  "isMultiple": false,
  "timeRange": "",
  "geo": "",
  "category": "",
  "property": "",
  "language": "en-US",
  "includeInterestOverTime": true,
  "includeInterestByRegion": true,
  "includeRelatedQueries": true,
  "maxItems": 0,
  "maxConcurrency": 5,
  "maxRequestRetries": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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": [
        "web scraping"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rakish_bobby_gwr/google-trends-fast-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/lcGVR5vFrbm10z7XT/builds/2mYNwVyfCCmUFhFT1/openapi.json
