# Google Trends Scraper — Unlimited Keywords & Trending Now (`vladased/google-trends-reliable`) Actor

Google Trends: compare unlimited keywords on one scale, interest by region/city/metro, related queries, full Trending Now lists, spike alerts.

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

## Pricing

Pay per event

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 — Unlimited Keywords, Trending Now & Spike Alerts

Extract **Google Trends** data at scale: **interest over time**, **interest by region**, **related queries** (top and rising) and
**Trending Now** searches. Compare **any number of keywords** on one scale, run several countries in one go, and get **spike detection**
on every timeline. It's built to keep working when Google rate-limits.

### What makes this Google Trends scraper different

- **Unlimited keywords, still comparable.** Google Trends compares at most 5 search terms at a time, so numbers from separate requests
  can't be compared. This Actor splits your list into batches that share one **anchor keyword**, then rescales every batch onto the
  anchor. 30 brands, 50 products or 100 topics come back as one chart-ready dataset.
- **Designed for reliability.** Rate limits (HTTP 429) are retried with exponential backoff and jitter. The session is refreshed, and the
  proxy escalates automatically from datacenter to residential only when Google starts blocking, so you pay for residential only when
  needed. If one batch fails, you still get every batch that worked, plus a clear status message saying what went wrong.
- **Trending Now, complete.** The full list trends.google.com/trending shows for a country (often hundreds; 1,000+ over 7 days), not
  just the top 10–20 of the RSS feed: search volume, % increase, when it started, whether it's still active, related searches,
  categories and, for the top trends, the news stories behind them. Windows: 4 h, 24 h, 48 h, 7 days. Filter by category or keep only
  active trends. **One country's whole list is one result.**
- **Spike & breakout detection built in.** Every timeline includes `stats`: latest value, peak, mean, z-score of the latest point against
  history, 7-period momentum and a `breakout` flag. Schedule the Actor daily and alert on `breakout: true` without writing any code.
  Partial (still-filling) periods are excluded so the latest value isn't misleadingly low.
- **Paste a Trends URL or a Google Sheet.** Copy any Explore or Trending Now page URL from trends.google.com and get exactly that
  comparison as data (terms, region, time range, category, YouTube/News/Shopping). Or keep your keyword list in a Google Sheet and
  link it: no copy-pasting 100 keywords into a form.
- **Multi-country in one run.** Pass `["US", "GB", "DE", "US-CA"]` to fetch every region with the same settings.
- **States, cities or metro areas.** Interest by area at state/region level, by city (with coordinates), or by US metro area (DMA,
  the unit TV and local ad buyers use).
- **Topics, not just search terms.** Use Google's topic IDs (e.g. `/m/02vqfm` = Coffee, the drink) for cleaner comparisons than raw
  search terms; results carry the readable `keywordLabel`. Topic URLs from trends.google.com work too.
- **A plain answer for dashboards and AI agents:** every timeline's `stats.direction` is `rising`, `falling` or `stable`.
- **One result per keyword: everything included.** Timeline, spike stats, regions and related queries for a keyword in one
  region are **one result** ($0.001 on Apify's Starter plan), with **no start fee and no compute or proxy fees**: you pay per result,
  nothing else. Spreadsheet users can switch to `flat` (one row per data point) at the **same price**: billing is per keyword and
  region, never per row.

### Use cases

- **SEO & content teams:** find rising queries ("Breakout" = +5000%), compare topic demand, and plan content around seasonality.
- **E-commerce & product research:** compare product demand across countries and catch seasonal peaks early.
- **Brand monitoring:** track your brand against competitors daily and alert on spikes.
- **Market & finance research:** use search interest as an alternative-data signal across dozens of tickers or products on one scale.
- **Journalism & newsrooms:** pull Trending Now with linked news stories every hour.
- **AI agents:** callable through Apify's MCP server and API, with structured JSON output and per-result pricing.

### How to use it

1. Choose a **mode**: `explore` (your keywords) or `trending_now` (what's trending, no keywords needed).
2. Add **keywords**, any number, or paste **Google Trends URLs**, or link a **keyword sheet** (Google Sheet shared as "Anyone
   with the link", or any CSV URL; first column, header row optional). Optionally choose the **anchor** keyword (default: the first one). Pick a term with steady,
   non-zero interest, such as a large brand in your niche.
3. Add **countries/regions** (`US`, `GB`, `US-CA`, …), or leave empty for worldwide.
4. Pick a **timeframe**: `now 7-d`, `today 1-m`, `today 3-m`, `today 12-m`, `today 5-y`, `all`, or an explicit range such as
   `2025-01-01 2025-12-31`.
5. Choose the data to include: `time`, `region`, `related_queries`.
6. Run, or **schedule** it (daily or hourly) and connect a webhook, Slack, Google Sheets or Make/Zapier integration for alerts.

### Input example

```json
{
  "mode": "explore",
  "keywords": ["chatgpt", "claude", "gemini", "copilot", "perplexity", "grok"],
  "anchor": "chatgpt",
  "geos": ["US", "GB"],
  "timeframe": "today 3-m",
  "include": ["time", "region", "related_queries"]
}
```

Or straight from the browser and a sheet:

```json
{
  "trendsUrls": ["https://trends.google.com/trends/explore?date=today%203-m&geo=US&q=coffee,tea,matcha"],
  "keywordsSheetUrl": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit#gid=0",
  "geos": ["US"]
}
```

Each Trends URL runs as its own job with that page's settings; sheet keywords join the `keywords` list and use the form's settings.

### Output example (compact)

```json
{
  "type": "keyword_trends",
  "keyword": "claude",
  "geo": "US",
  "timeframe": "today 3-m",
  "scaledToAnchor": "chatgpt",
  "stats": {"latest": 17, "peak": 24, "mean": 15.2, "zscoreLatest": 0.9, "momentumPct": 6.3, "direction": "stable", "breakout": false},
  "timeline": [{"time": 1783641600, "date": "Jul 10, 2026", "value": 23, "hasData": true, "isPartial": false}],
  "regions": [{"geoCode": "US-CA", "geoName": "California", "value": 100, "hasData": true}],
  "relatedQueries": {"top": [{"query": "claude ai", "value": 100}], "rising": [{"query": "claude code", "formattedValue": "Breakout"}]}
}
```

Trending Now (compact): one result per country with the whole list. Real output, trimmed:

```json
{
 "type": "trending_now_list",
 "geo": "US",
 "hours": 24,
 "count": 100,
 "trends": [
  {
   "type": "trending_now",
   "geo": "US",
   "query": "barcelona vs getafe",
   "startedAt": "2026-10-10T13:00:00+00:00",
   "endedAt": null,
   "active": true,
   "searchVolume": 200000,
   "increasePercent": 1000,
   "relatedSearches": [
    "barcelona - getafe",
    "barcelona vs",
    "barcelona fc",
    "..."
   ],
   "categories": [
    "Sports"
   ]
  },
  "..."
 ]
}
```

With `outputFormat: "flat"`, each trend is its own row (`type: "trending_now"`).

### Pricing

Pay-per-result, with **no start fee** and no monthly rental.

| Job | Results | Cost |
|---|---|---|
| 3 keywords, everything (timeline + regions + related queries), 1 country | 3 | $0.003 |
| 20 keywords on one scale, 1 country | 20 | $0.02 |
| 6 keywords × 5 countries, everything | 30 | $0.03 |
| Trending Now, 10 countries (full lists, however long) | 10 | $0.01 |

Costs above are at the Starter-plan rate: **$0.001 per result**. Scale: $0.00075. Business and up: $0.0005. Apify free plan: $0.0015.
A result is one keyword in one region (everything included) or one country's whole Trending Now list, in compact or flat output.
No compute, proxy or start fees on top: the price per result is the whole price.

Apify's free plan includes monthly credits, enough for thousands of results.

### FAQ

**Why do values change when I add more keywords?** Google Trends scales every request to 0–100, relative to the highest point among
the terms you compare. Adding a more popular term lowers the others. With anchor rescaling, all batches share the anchor's scale.

**Why can values exceed 100?** After rescaling, a keyword from a later batch can be more popular than everything in the first batch.
It is expressed on the first batch's scale, so it can go above 100. That's expected and keeps all keywords comparable.

**What does "<1" or 0 mean?** Very low search interest. Google reports it as 0 or "<1". Low-volume terms in small regions are noisy,
so prefer larger regions or longer timeframes.

**Is the data sampled?** Yes. Google computes Trends from a sample of searches, so values for small terms can shift from one day to
the next. For research, aggregate over longer timeframes or compare repeated scheduled runs.

**Do I need a proxy?** No. The Actor escalates automatically. For very large or frequent jobs, select the RESIDENTIAL proxy group
for the fewest retries.

**Can AI agents use it?** Yes, through Apify's API and MCP server. Inputs are documented and outputs are structured JSON; read
`stats.direction` and `stats.breakout` for a direct answer instead of parsing timelines.

**Related topics?** Google no longer returns related topics for search terms or topic IDs (we checked again in October 2026), so this
Actor doesn't list them. Related queries (top and rising) are included.

**City or metro data is empty for my keyword?** Small terms often have too little data at city level. Try region level or a longer timeframe.

### Limits and notes

- Google Trends data is relative search interest, not absolute search volume.
- Data comes from Google Trends' public web interface (the same data trends.google.com shows) and its public Trending Now feed. Use it in line with Google's terms and the laws
  that apply to you. This Actor is not affiliated with Google.
- Found a bug or need a feature? Open an issue on the Issues tab. We aim to respond within 24 hours.

# Changelog

This Actor's version history is a separate document: https://apify.com/vladased/google-trends-reliable/changelog.md

# Actor input Schema

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

Trending Now needs no keywords.

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

Search terms for explore mode (max 100 per job). More than 5 is fine: they're compared via the anchor keyword. Duplicates are removed. If you add Trends URLs or a sheet and leave these example terms untouched, they're ignored.

## `trendsUrls` (type: `array`):

Paste Explore or Trending Now URLs straight from trends.google.com (max 20). Each URL runs as its own job with that page's terms, region, time range, category and property; 'Data to fetch' and 'Output format' below still apply. Topic entities (/m/…) aren't supported yet.

## `keywordsSheetUrl` (type: `string`):

Google Sheet shared as 'Anyone with the link', or any CSV URL. Keywords are read from the first column (a header row like 'keyword' is skipped) and added to the keywords above. Link a specific tab by copying its URL (with #gid=…).

## `anchor` (type: `string`):

Keyword used to put batches of more than 5 keywords on one scale. Default: the first keyword. Pick one with steady, non-zero interest. If it isn't in your keyword list it's used only for scaling and not returned (you're not charged for it).

## `geos` (type: `array`):

Region codes, e.g. US, GB, DE or subregions like US-CA (max 50). Each is fetched separately. Empty = worldwide (Trending Now defaults to US).

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

Google syntax: 'now 1-H', 'now 4-H', 'now 1-d', 'now 7-d', 'today 1-m', 'today 3-m', 'today 12-m', 'today 5-y', 'all', or 'YYYY-MM-DD YYYY-MM-DD'.

## `include` (type: `array`):

Which data to fetch for each keyword: timeline (time), regions (region), related queries (top + rising).

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

How fine the 'region' map is. Cities and metro areas need a country in Regions (metro: US only).

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

Google Trends category (0 = all).

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

Google property to search: Web (default), Images, News, YouTube or Shopping.

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

Interface language for Google Trends (affects topic names), e.g. en-US.

## `outputFormat` (type: `string`):

Compact = one result per keyword and data type (cheapest). Flat = one row per data point.

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

Same windows as trends.google.com/trending. The 7-day list is the longest (often 1,000+ trends per country).

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

Keep only trends in these categories: Autos and Vehicles, Beauty and Fashion, Business and Finance, Climate, Entertainment, Food and Drink, Games, Health, Hobbies and Leisure, Jobs and Education, Law and Government, Other, Pets and Animals, Politics, Science, Shopping, Sports, Technology, Travel and Transportation.

## `activeOnly` (type: `boolean`):

Skip trends Google marks as ended.

## `maxTrends` (type: `integer`):

Biggest first. One country's list is ONE result (one charge), however many trends it holds.

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

Leave as is: the Actor starts without a proxy (free) and escalates to datacenter, then residential proxies only if Google rate-limits. Pick a specific group (e.g. RESIDENTIAL) to force it.

## Actor input object example

```json
{
  "mode": "explore",
  "keywords": [
    "chatgpt",
    "claude",
    "gemini"
  ],
  "trendsUrls": [
    "https://trends.google.com/trends/explore?date=today%203-m&geo=US&q=coffee,tea"
  ],
  "geos": [
    "US"
  ],
  "timeframe": "today 12-m",
  "include": [
    "time",
    "region",
    "related_queries"
  ],
  "regionResolution": "region",
  "category": 0,
  "property": "",
  "language": "en-US",
  "outputFormat": "compact",
  "trendingHours": "24",
  "trendingCategories": [
    "Technology",
    "Business and Finance"
  ],
  "activeOnly": false,
  "maxTrends": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

All results in a table: timelines with spike stats, region maps, related queries/topics, Trending Now.

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

Full results including data points, for API and integrations.

# 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",
        "gemini"
    ],
    "geos": [
        "US"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("vladased/google-trends-reliable").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",
        "gemini",
    ],
    "geos": ["US"],
}

# Run the Actor and wait for it to finish
run = client.actor("vladased/google-trends-reliable").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": [
    "chatgpt",
    "claude",
    "gemini"
  ],
  "geos": [
    "US"
  ]
}' |
apify call vladased/google-trends-reliable --silent --output-dataset

```

## MCP server setup

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

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/aufFMK3yZUdzrDu54/builds/B9o3pPLbdGDA6Kw1s/openapi.json
