# Google Trends Scraper: Interest, Rising Queries & Trending Now (`wulfcare/google-trends-scraper`) Actor

Google Trends in one Actor: interest over time, by region and related queries for up to 5 compared terms, plus Trending Now (hundreds of trending searches per country, with volume, growth and related searches). Paced and IP-rotated so runs finish.

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

## Pricing

from $3.00 / 1,000 trends reports

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

Two tools in one:

- **Explore**: Google Trends data for any keyword, country and time range: **interest over time, interest by region and related queries (top + rising)**, all in one report. Compare up to 5 terms side by side, or paste any Google Trends URL.
- **Trending Now**: every search trending in any country right now: **search volume, % increase, when it started, whether it's still active, related searches and category**. Covers the past 4 hours to 7 days, with hundreds of trends per country.

Built to keep working when Google rate-limits: every exit IP is paced, retired before Google blocks it, and swapped out immediately on a 429, so runs finish instead of hanging.

### What people use it for

- **SEO and content planning**: find rising queries ("Breakout", +1,900%) before they're competitive
- **Market research**: compare brands, products or categories across countries and states
- **Investing and trading signals**: track search interest in tickers, products and themes over time
- **Seasonality**: 5 years of weekly data to time campaigns and stock
- **Local demand**: see which regions or cities search for a product most

### What you get

#### Explore: one dataset item per report

```json
{
  "searchTerms": ["coffee", "tea"],
  "geo": "AU",
  "timeRange": "today 12-m",
  "averages": { "coffee": 78, "tea": 41 },
  "interestOverTime": [
    { "date": "2026-09-20T00:00:00+00:00", "label": "Sep 20 – 26, 2026", "values": { "coffee": 81, "tea": 40 }, "isPartial": true }
  ],
  "interestByRegion": [
    { "geoCode": "AU-QLD", "geoName": "Queensland", "values": { "coffee": 70, "tea": 30 }, "hasData": true }
  ],
  "relatedQueries": {
    "coffee": {
      "top": [{ "query": "coffee machine", "value": 100, "formattedValue": "100", "link": "https://trends.google.com/trends/explore?q=coffee+machine&date=today+12-m&geo=AU" }],
      "rising": [{ "query": "how to descale coffee maker", "value": 1900, "formattedValue": "+1,900%", "isBreakout": false }]
    }
  },
  "trendsUrl": "https://trends.google.com/trends/explore?q=coffee%2Ctea&date=today+12-m&hl=en-US&geo=AU",
  "scrapedAt": "2026-09-23T09:12:44+00:00"
}
```

Values are Google's relative interest, from 0 to 100, where 100 is peak popularity for the terms, place and time you chose. Resolution follows Google: minute-level for the past hour or 4 hours, hourly for 7 days, daily up to 90 days, weekly up to 5 years, and monthly since 2004.

**Spreadsheet-friendly CSVs** are also saved to the run's key-value store, free: `interest_over_time.csv`, `interest_by_region.csv` and `related_queries.csv`, one row per value, ready for Excel or Google Sheets.

#### Trending Now: one dataset item per trend

```json
{
  "type": "trendingNow",
  "rank": 1,
  "title": "jaxson dart",
  "geo": "US",
  "windowHours": 168,
  "searchVolume": 500000,
  "increasePercent": 1000,
  "startedAt": "2026-09-22T20:00:00+00:00",
  "endedAt": null,
  "isActive": true,
  "relatedSearches": ["jaxson dart", "jaxson dart injury", "jaxon dart"],
  "categories": ["Sports"],
  "newsArticleCount": 4,
  "trendsUrl": "https://trends.google.com/trends/explore?q=jaxson+dart&geo=US&date=now+7-d"
}
```

`searchVolume` is Google's lower bound, e.g. 500000 means "500K+ searches".

### How to use it

**Explore**

1. Add your **search terms**, one report per line. Put `coffee, tea` on one line to compare them, or paste a Google Trends explore URL.
2. Pick a **country** (`US`, `GB`, `AU`, `US-CA`…) or leave it empty for worldwide.
3. Pick a **time range**, or type a custom one like `2024-01-01 2024-06-30`.
4. Run it. Every report lands in the dataset; export it as JSON, CSV or Excel, or call the API.

Optional: category, search type (web, images, news, Shopping, YouTube), region resolution (countries, states, cities, US metro areas) and which sections to include.

**Trending Now**

1. Set **What to scrape** to Trending Now.
2. Add one or more **countries or regions** (`US`, `GB`, `AU`, `US-CA`…).
3. Pick a window (4 hours to 7 days). Optionally filter by category (Sports, Business and Finance, Technology… 19 in all), keep only active trends, or cap how many per country.

### Pricing

- **Explore:** per report, not per row. One report covers everything above for up to 5 compared terms.
- **Trending Now:** per trend returned.

Failed reports, and terms Google has no data for, are never charged.

### Tips

- **Use residential proxies** (the default). Google rate-limits datacenter IPs heavily. Trending Now is light, at one request per country.
- Up to 10 reports run in parallel, each on its own IP.
- Set a maximum cost per run in the run options, and the scraper stops cleanly when it reaches it.

### Limits

- Google Trends values are relative (0–100) and sampled, so repeated runs can differ slightly. This is how Google Trends itself behaves.
- Very rare terms may return no data. That's Google's "not enough search volume".
- **Related topics are not included.** Google now withholds them from every anonymous (logged-out) session and returns an empty list, so any scraper that doesn't log in to a Google account gets none. Related *queries* are unaffected.

# Actor input Schema

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

Explore gives interest over time, by region and related queries for your search terms. Trending Now lists every search trending in the countries you pick.

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

One report per line. Compare up to 5 terms in one report by separating them with commas, e.g. <code>coffee, tea</code>. You can also paste a Google Trends explore URL, and its terms, country, time range and category are used as-is.

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

ISO country code like <code>US</code>, <code>AU</code>, <code>GB</code>, or a region like <code>US-CA</code>. Leave empty for worldwide.

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

Period to analyse. Google picks the resolution: minutes for the past hour or 4 hours, hours for 7 days, days up to 90 days, weeks up to 5 years, and months since 2004.

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

Overrides the time range above. Format <code>YYYY-MM-DD YYYY-MM-DD</code>, e.g. <code>2024-01-01 2024-06-30</code>.

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

Google Trends category, e.g. 0 = all, 71 = Food & Drink, 7 = Finance. Default 0.

## `searchProperty` (type: `string`):

Which Google search to measure: web (default), images, news, Google Shopping or YouTube.

## `interestOverTime` (type: `boolean`):

Relative search interest (0-100) over the chosen time range.

## `interestByRegion` (type: `boolean`):

Relative search interest (0-100) by country, region, city or US metro area.

## `relatedQueries` (type: `boolean`):

The top and rising searches related to each term, including "Breakout" queries (growth over 5,000%).

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

Level of detail for interest by region. "Google default" uses countries for worldwide and regions within a country.

## `includeLowVolumeRegions` (type: `boolean`):

Include regions with too little search volume for Google to rate reliably (they usually show 0).

## `saveCsv` (type: `boolean`):

Saves interest\_over\_time.csv, interest\_by\_region.csv and related\_queries.csv (one row per value) to the run's key-value store for Excel or Google Sheets. Free.

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

ISO codes like <code>US</code>, <code>GB</code>, <code>AU</code>, or regions like <code>US-CA</code>. One set of trends per entry.

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

How far back to look for trending searches.

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

Leave empty for all categories.

## `trendingActiveOnly` (type: `boolean`):

Skip trends that have already ended.

## `maxTrendsPerGeo` (type: `integer`):

Trends are sorted by search volume, highest first.

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

Language of Google's labels and related queries, e.g. en-US, en-GB, de, ja.

## `timezoneOffsetMinutes` (type: `integer`):

Google's tz parameter: minutes WEST of UTC (Sydney = -600, New York = 300).

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

How many reports run at once, each on its own IP. Only applies when using a proxy.

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

Residential proxies are strongly recommended: Google rate-limits datacenter IPs hard.

## Actor input object example

```json
{
  "mode": "explore",
  "searchTerms": [
    "coffee, tea",
    "bitcoin"
  ],
  "geo": "",
  "timeRange": "today 12-m",
  "category": 0,
  "searchProperty": "",
  "interestOverTime": true,
  "interestByRegion": true,
  "relatedQueries": true,
  "regionResolution": "",
  "includeLowVolumeRegions": false,
  "saveCsv": true,
  "trendingGeos": [
    "US"
  ],
  "trendingHours": "24",
  "trendingActiveOnly": false,
  "maxTrendsPerGeo": 0,
  "language": "en-US",
  "timezoneOffsetMinutes": 0,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

## `interestOverTimeCsv` (type: `string`):

No description

## `interestByRegionCsv` (type: `string`):

No description

## `relatedQueriesCsv` (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": [
        "coffee, tea",
        "bitcoin"
    ],
    "trendingGeos": [
        "US"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("wulfcare/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 = {
    "searchTerms": [
        "coffee, tea",
        "bitcoin",
    ],
    "trendingGeos": ["US"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

```

## MCP server setup

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