# Google Trends Scraper — Trending Now (`orbots/google-trends-scraper`) Actor

Trending searches with estimated search volume for 100+ countries and sub-regions (US-CA, FR-75), plus interest over time and by region. Up to ~370 terms per run in large markets. No item cap. A run that collects nothing is not charged at all.

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

## Pricing

from $0.30 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google Trends Scraper — Trending Now + Search Volume

> **Unofficial tool.** Orbots is not affiliated with, sponsored by, or endorsed by Google. "Google" and "Google Trends" are trademarks of Google LLC, used here only to describe the public data this Actor collects.

Get **what the world is searching right now**, with estimated search volume, for 100+ countries — plus interest-over-time and interest-by-region for any keyword. No browser, no login, no item cap. **You only pay for results that are actually delivered.**

### Why this Actor

Google retired the old `dailytrends` and `realtimetrends` endpoints — they now return **404**. Tools still built on them silently return nothing for trending data. This Actor uses the endpoint that powers the current Google Trends interface, so Trending Now keeps working.

- **High volume per run** — large markets return the most: **US ~370, JP ~360, GB/DE/IN ~315** trending terms. Most countries land in the **100–200** range (Brazil ~180). Three countries returned **873 rows in 26 seconds** in our benchmark. Yield depends on how much is actually trending in that market — we publish the measured numbers rather than a flattering range.
- **Search volume included** — every trending term comes with an estimated volume (for example `100000`, `500000`) and its related searches. Most trending scrapers return only the term.
- **Category, rank and explore link on every term** — each row is classified into Google's own topic categories (Sports, Entertainment, Business and Finance, …), carries its position in the feed and a direct link to the term's Google Trends page. Filter to one vertical without post-processing.
- **Active trends vs ended trends, with trend duration** — every term says whether it is **still trending right now** (`is_active`) and, once it has ended, exactly **how long it lasted** (`duration_minutes`, plus `started_at` and `ended_at`). A ranked list alone cannot tell a two-hour spike from a two-day story. Measured on a live pull: of 421 US terms in the 24-hour window, **123 were still active and 298 had ended**, median life **2 hours**. In the 48-hour window for GB, 530 of 615 had already ended. Field coverage is complete on ended terms.
- **Built for schedules** — turn on `onlyNew` and each run returns only trends you have not received before, per country and window. A daily schedule stops handing you the same list, and you stop paying for it twice.
- **No item cap** — some competitors cap at 1,000 items per run. This one does not.
- **Honest billing** — `maxItems` is respected exactly, and nothing is charged for a result that was not returned.

### What you get

#### Trending Now mode (default)

```json
{
  "type": "trending_now",
  "term": "japan earthquake",
  "rank": 3,
  "geo": "US",
  "started_at": 1785224400,
  "ended_at": 1785238800,
  "is_active": false,
  "duration_minutes": 240,
  "search_volume": 200000,
  "formatted_volume": "200K+",
  "growth": 1000,
  "category": "Law and Government",
  "categories": ["Law and Government"],
  "related_terms": ["japan earthquake today", "earthquake japan", "kumamoto"],
  "trends_url": "https://trends.google.com/trends/explore?q=japan+earthquake&date=now+1-d&geo=US&hl=en-US",
  "window_hours": 24,
  "scraped_at": "2026-07-29T12:53:25Z"
}
```

Every term arrives ranked (1 = hottest), classified into Google's own topic categories (Sports, Entertainment, Business and Finance, …), with the volume both as a number you can sort by and as the label the interface shows (`200K+`), plus a ready-made link to the term's explore page. Windows: past 4 hours, 24 hours, 48 hours or 7 days. Pass several countries in one run.

`is_active` is `true` while the term is still trending and `ended_at` is `null`; once Google closes the trend, `ended_at` is filled and `duration_minutes` tells you how long it held. Sort by `duration_minutes` to separate a passing spike from a story with legs, or keep `is_active == true` to act only on what is live at this minute.

#### Only what is new: `onlyNew`

Set `onlyNew: true` and the Actor remembers, per country and per window, which trends it has already delivered to you, and returns only the ones it has not. A daily schedule then behaves the way you would want it to: the first run gives you the whole list, and every run after that gives you the additions.

A term that trends again later counts as new — history is keyed by term **and** start time, so a recurring topic is not swallowed. History is kept for 7 days in your own account, one entry per country and window. If a run finds nothing new, it finishes **successfully** with a message saying so, and **charges you nothing** — no rows, no start fee. Leave `onlyNew` off to always get the full list.

#### Keywords mode

```json
{ "type": "interest_over_time", "keyword": "chatgpt", "date": "Jul 27 - Aug 2, 2025", "timestamp": 1753574400, "value": 91, "is_partial": false, "property": "web" }
{ "type": "interest_by_region", "keyword": "chatgpt", "region": "California", "region_code": "US-CA", "value": 5, "property": "web" }
```

Compares up to 5 terms at a time; longer keyword lists are split into groups of 5 automatically. Time ranges from the past hour to 2004-present. Interest can be measured on **five Google surfaces** — regular Web Search, Image Search, News, YouTube or Shopping (`property` input) — which most tools in this category do not expose.

**Read this before choosing Keywords mode.** Google throttles keyword queries far more aggressively than Trending Now — one IP is blocked after roughly ten queries, so a long keyword list can exhaust a whole pool of addresses and return partial data or none at all. Trending Now, by contrast, returns hundreds of rows from a single request and is what this Actor is built around. Use Keywords mode for short lists, keep the `RESIDENTIAL` proxy group on, and expect it to be slower and less reliable than Trending Now. **If a run collects nothing, you are charged nothing** — not even the start fee.

#### Sub-regions, not just countries

`geo` and `trendingGeos` also accept sub-region codes, which most tools in this category do not expose: `US-CA` (California), `US-NY`, `FR-75` (Paris), `GB-ENG`, `BR-SP`. A sub-region returns a narrower, more local list — `US-CA` returned 242 trending terms and `FR-75` returned 23 in our tests.

### Input

| Field | What it does |
|---|---|
| `mode` | `trending` (default) or `keywords` |
| `trendingGeos` | Country codes for Trending Now, e.g. `["US","BR","GB"]` |
| `trendingHours` | `4`, `24`, `48` or `168` |
| `keywords` | Terms to analyse in `keywords` mode |
| `geo` | Country code; empty means worldwide |
| `timeframe` | Time range for keyword analysis |
| `property` | Surface to measure: `web` (default), `images`, `news`, `youtube`, `shopping` |
| `dataTypes` | `interest_over_time`, `interest_by_region` |
| `onlyNew` | Trending mode: return only trends not delivered in an earlier run. Made for schedules |
| `maxItems` | Hard cap — respected exactly, never charged beyond |
| `proxyConfiguration` | Keep proxy enabled (see below) |

### When a run returns nothing

Zero rows is not always an error, and this Actor does not pretend otherwise:

| Situation | Run status | Charged |
|---|---|---|
| Google throttled every country you asked for | **Failed** | nothing |
| The endpoint answered but returned no data at all | **Failed** | nothing |
| `onlyNew` is on and nothing is new since your last run | **Succeeded**, with a message saying so | nothing |

That distinction matters if you run this on a schedule: a quiet day should not page you, and a real breakage should.

### Proxy is required, not optional

Google rate-limits **by IP**. A single address is throttled after roughly ten keyword queries and stays blocked for **more than 15 minutes** — we measured it. This Actor rotates to a fresh IP whenever it is throttled and re-establishes the session from scratch, which is why it keeps returning data where simpler scrapers fail.

Recommended: Apify Proxy with the `RESIDENTIAL` group. Datacenter addresses are rejected by Google almost immediately.

### Notes and limits

- **Related queries and related topics are not included.** Google's `relatedsearches` endpoint rejects automated access even from fresh residential addresses — we tested twelve. We would rather ship what works than advertise a field that returns empty.
- Trending Now is far faster and cheaper per row than keyword analysis; if you need breadth, start there.
- Data is public, aggregated search interest. No personal data is collected.

### Pricing

Pay per event: a small start fee plus a per-result fee. The start fee is charged **on the first delivered row**, not when the run launches — so a run that collects nothing costs you nothing at all. You pay for the rows you actually receive, and `maxItems` is respected exactly.

# Actor input Schema

## `mode` (type: `string`):

Trending Now = everything spiking right now in a country, with estimated search volume; fast, high volume, very reliable. Keywords = interest over time and by region for terms you choose; Google throttles these queries hard, so use short lists and keep the RESIDENTIAL proxy on. A run that collects nothing is not charged at all.

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

Search terms to analyse. Google compares up to 5 terms at a time; longer lists are split automatically into groups of 5. Required in keywords mode.

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

Country code (US, GB, BR, DE, IN...) or a sub-region code for a more local list: US-CA, US-NY, FR-75, GB-ENG, BR-SP. Leave empty for worldwide.

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

Time window for keyword analysis.

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

Which Google surface to measure interest on: regular Web Search, Image Search, News, YouTube or Shopping. Same 0-100 scale, filtered to that property.

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

Which blocks to collect in Keywords mode. Fewer blocks = fewer results = lower cost.

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

One or more country or sub-region codes to pull Trending Now for, e.g. \["US","BR","US-CA"]. Defaults to the Country field above.

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

How far back Trending Now looks.

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

Response language, e.g. en-US, pt-BR, de-DE.

## `onlyNew` (type: `boolean`):

Built for schedules. The Actor remembers what it already delivered for each country and window, and returns only trends it has not sent you before - so a daily run does not hand back the same list and charge you for it again. A term that trends again later counts as new. History is kept for 7 days, per country and window, in your own account. Leave off to always get the full list.

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

Hard cap on results. The Actor stops at exactly this number and never charges beyond it. Leave empty for no cap.

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

Google rate-limits by IP. Proxy rotation is what keeps Google from throttling the run - keep this enabled.

## Actor input object example

```json
{
  "mode": "trending",
  "keywords": [
    "chatgpt",
    "claude ai"
  ],
  "geo": "US",
  "timeframe": "today 12-m",
  "property": "web",
  "dataTypes": [
    "interest_over_time",
    "interest_by_region"
  ],
  "trendingGeos": [
    "US"
  ],
  "trendingHours": "24",
  "language": "en-US",
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every row collected by the run, in the order it was delivered. Each row carries a "type" field: trending\_now, interest\_over\_time or interest\_by\_region.

## `trending` (type: `string`):

Trending Now rows, ranked from hottest, with search volume, growth, category, whether the trend is still active, how long it lasted, and a link to the term's Google Trends page.

## `trendLifecycle` (type: `string`):

Which trends are still active and which already ended, with the start time, end time and how many minutes each one lasted. Use is\_active to keep only live trends, or duration\_minutes to rank them by how long they held.

## `trendingTermsCsv` (type: `string`):

The same ranked trending terms as a spreadsheet-ready CSV, including active state and duration.

## `keywordInterest` (type: `string`):

Keywords-mode rows: interest over time and interest by region, on the Google surface chosen in the property input.

# 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": [
        "chatgpt",
        "claude ai"
    ],
    "trendingGeos": [
        "US"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("orbots/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": [
        "chatgpt",
        "claude ai",
    ],
    "trendingGeos": ["US"],
}

# Run the Actor and wait for it to finish
run = client.actor("orbots/google-trends-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "chatgpt",
    "claude ai"
  ],
  "trendingGeos": [
    "US"
  ]
}' |
apify call orbots/google-trends-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=orbots/google-trends-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/XzihNVkatxKIDZhId/builds/e9FzJI6yvEomesPTf/openapi.json
