# Google Trends Scraper — Trending Now, Keywords & News (`yugenox/google-trends-trending-now`) Actor

Every trending search on Google Trends for 125 countries and any US state or region — search volume, % growth, start/end time, categories, related searches, news articles and minute-level interest over time. Plus keyword interest over time, related queries and regions. No login.

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

## Pricing

from $2.00 / 1,000 trend or keyword rows

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 Trending Now Scraper

Get **every trending search on Google Trends** for any country, US state or region. Each trend comes with its search volume, percent growth, start and end time, categories and related searches. You can also add **the news articles behind each trend** and a **minute-level interest-over-time chart**.

It also does **keyword research**: interest over time (including 8-minute data stitched across up to 7 days), top and rising related queries, and interest by state, metro area, city or country.

No Google account, cookies or API key needed. Trending Now works on Apify's standard datacenter proxies; keyword lookups and trend timelines work best if your Apify plan includes residential proxies, because Google often throttles datacenter IPs for those, and without residential the run waits and retries, which is slower.

### What you get

**Trending Now**, for each country or region:

- **All trends in one go**: the full list for the past 4 hours, 24 hours, 48 hours or 7 days. That is more than 1,800 trends for the US over 7 days, not only the top 25.
- **Search volume** (e.g. `50000` / `"50K+"`) and **percent increase** (e.g. `1000`)
- **Started / ended time**, **active** flag and duration
- **Trend breakdown**: the related searches grouped into each trend
- **Categories** (Sports, Entertainment, Politics, Technology…)
- **News articles** (optional): title, URL, source, publish time and image, up to 30 per trend
- **Interest over time** (optional): the search-interest curve for each trend over its own time window, with 8-minute points for the past day and 1-minute points for short trends that already ended
- **125 countries** plus subregions such as `US-NY`, `US-CA`, `IN-MH`, `CA-ON`. Use `ALL_COUNTRIES` to get them all in one run.

**Keyword mode**, for your own search terms:

- **Interest over time** for any timeframe, from the past hour (1-minute points) to 2004 until now (monthly points)
- **8-minute data over the last 2–7 days**, stitched from overlapping 24-hour windows onto one scale. The Google Trends website stops at one day.
- **Compare up to 5 keywords** on a shared scale, or look up each keyword on its own scale
- **Related queries**: top and rising, including "Breakout" terms
- **Interest by region**: states or provinces, US metro areas (DMA), cities, or countries
- Web, News, Image, YouTube or Google Shopping search, plus an optional category filter

### How to use it

1. Enter one or more **countries / regions**, e.g. `US`, `GB`, `US-NY` or `ALL_COUNTRIES`.
2. Pick the **time window** (4h, 24h, 48h or 7 days).
3. Optional: turn on **news articles** and/or **interest over time**, filter by category, keep **active trends only**, set a minimum search volume, or cap the number of trends per country.
4. Click **Start**. With the default settings, one country takes a few seconds.

For keyword research, set **What to scrape** to **Keywords** and add your keywords.

#### Example inputs

Top 25 trends in every country, by search volume:

```json
{ "geos": ["ALL_COUNTRIES"], "hours": "24", "maxTrendsPerGeo": 25, "sortBy": "searchVolume" }
```

Sports trends in the US and Canada over the past 7 days, with news:

```json
{ "geos": ["US", "CA"], "hours": "168", "categories": ["Sports"], "includeNews": true, "maxNewsPerTrend": 5 }
```

Active trends in New York State with their interest curves:

```json
{ "geos": ["US-NY"], "hours": "24", "activeOnly": true, "includeTrendTimeline": true }
```

Compare three phones worldwide and in Canada:

```json
{ "mode": "keywords", "keywords": ["iphone", "samsung galaxy", "pixel"], "compareKeywords": true, "geos": ["WORLDWIDE", "CA"], "timeframe": "today 12-m" }
```

8-minute interest over the last 5 days, by US metro area:

```json
{ "mode": "keywords", "keywords": ["weather"], "geos": ["US"], "stitch8MinDays": 5, "regionResolution": "DMA" }
```

### Output

One row per trend:

```json
{
  "type": "trend",
  "query": "carney",
  "rank": 1,
  "geo": "CA",
  "geoName": "Canada",
  "timeWindowHours": 24,
  "startedAt": "2026-09-24T02:30:00.000Z",
  "endedAt": null,
  "isActive": true,
  "durationMinutes": 495,
  "searchVolume": 5000,
  "searchVolumeLabel": "5K+",
  "percentIncrease": 1000,
  "trendBreakdown": ["carney", "carney news", "mark carney"],
  "categories": ["Politics", "Law and Government"],
  "categoryIds": [14, 10],
  "newsArticleCount": 19,
  "exploreQuery": "carney",
  "exploreUrl": "https://trends.google.com/trends/explore?q=carney&date=now+1-d&hl=en-US&geo=CA",
  "googleSearchUrl": "https://www.google.com/search?q=carney",
  "trendingPageUrl": "https://trends.google.com/trending?geo=CA&hours=24&hl=en-US",
  "news": [
    {
      "title": "Carney prepared for risk that Trump might order military action against Canada: report",
      "url": "https://www.theglobeandmail.com/politics/article-carney-prepared-for-risk-that-trump-might-order-military-action/",
      "source": "The Globe and Mail",
      "publishedAt": "2026-09-24T00:34:41.000Z",
      "imageUrl": "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRNpqebHRJb2fZotJ27p1lHzSinSlDDpXdT66csODgVoitFXRxwpbUlBH6ADiY"
    }
  ],
  "timeline": {
    "timeframe": "now 1-d",
    "resolution": "EIGHT_MINUTE",
    "points": [
      { "time": "2026-09-24T10:24:00.000Z", "timestamp": 1790245440, "value": 93 },
      { "time": "2026-09-24T10:32:00.000Z", "timestamp": 1790245920, "value": 88 }
    ]
  },
  "scrapedAt": "2026-09-24T10:45:26.348Z"
}
```

`news` appears only when news articles are turned on, and `timeline` only when interest over time is turned on.

In keyword mode, you get one row per keyword and region:

```json
{
  "type": "keyword",
  "keyword": "iphone",
  "geo": "CA",
  "geoName": "Canada",
  "timeframe": "today 3-m",
  "resolution": "DAY",
  "comparedWith": ["samsung galaxy", "pixel"],
  "average": 40.68,
  "peakValue": 100,
  "peakAt": "2026-09-10T00:00:00.000Z",
  "latestValue": 46,
  "timeline": [{ "time": "2026-09-24T00:00:00.000Z", "timestamp": 1790208000, "value": 46, "isPartial": true }],
  "relatedQueries": {
    "top": [{ "query": "iphone 17", "value": 100, "formattedValue": "100", "isBreakout": false, "link": "https://trends.google.com/trends/explore?q=iphone+17&date=today+3-m&geo=CA" }],
    "rising": [{ "query": "iphone duo", "value": 4500, "formattedValue": "+4,500%", "isBreakout": false, "link": "https://trends.google.com/trends/explore?q=iphone+duo&date=today+3-m&geo=CA" }]
  },
  "regions": [{ "geoCode": "CA-ON", "geoName": "Ontario", "value": 100, "hasData": true }],
  "exploreUrl": "https://trends.google.com/trends/explore?q=iphone&date=today+3-m&hl=en-US&geo=CA",
  "scrapedAt": "2026-09-24T10:46:51.538Z"
}
```

You can download the results as JSON, CSV, Excel or HTML, or get them through the Apify API.

### Use cases

- **News and media**: see what people are searching for right now in every market, with the stories behind each trend.
- **Content and SEO**: find rising topics and "Breakout" queries before they peak.
- **Marketing and ads**: time campaigns to real search spikes, and compare brands or products across regions.
- **Trading and research**: build minute-level attention signals, or track a topic across 125 countries every hour.
- **Monitoring**: schedule the actor every hour and keep a history of Trending Now, which Google itself only shows for 7 days.

### FAQ

**How many trends do I get?**
All of them. Google's Trending Now page shows 25 per page, but the full list has everything: typically 100–250 trends per country for the past 24 hours, and up to about 1,800 for the US over 7 days.

**What do the search volume numbers mean?**
Google shows volumes in buckets: 100+, 200+, 500+, 1K+, 2K+, 5K+, 10K+ and so on. `searchVolume` is the lower bound of the bucket as a number (e.g. `50000`), and `searchVolumeLabel` is Google's label (e.g. `"50K+"`).

**What do the interest-over-time values mean?**
The same 0–100 index as the Google Trends website: 100 is the peak popularity within the chart, 50 is half as popular. In compare mode, all compared keywords share one scale.

**How does the 8-minute stitching work?**
Google gives 8-minute data only for 24-hour windows, and each window has its own 0–100 scale. The actor requests overlapping 24-hour windows, uses the 2-hour overlaps to bring them onto one scale, and rescales the whole series so its peak is 100. In the rare case an overlap has no searches at all, the older points are returned unscaled and marked `"scaled": false`.

**Which countries are supported?**
All 125 countries that have a Trending Now page on Google Trends, plus their states and regions (e.g. `US-TX`, `GB-SCT`, `IN-KA`, `AU-NSW`). If a code has no Trending Now data, the run tells you in its status message and skips it at no charge. Keyword mode works for every country and for `WORLDWIDE`.

**Does the category filter reduce the cost?**
Yes. Trends outside your categories are left out before anything is saved, so they are never charged.

**Can I schedule it?**
Yes. Use Apify Schedules, for example every hour for a set of countries, and send the results to Google Sheets, a webhook or your database with Apify integrations.

**Do I need a proxy?**
The actor uses Apify Proxy (datacenter) by default. If requests start getting throttled, it rotates sessions on its own and switches to residential proxies when needed.

**What if my Apify plan doesn't include residential proxies?**
Trending Now lists still work on datacenter proxies. Keyword lookups and trend timelines are the requests Google throttles most. Without residential proxies to switch to, the actor pauses 30-60 seconds and retries on a fresh address, one request at a time, for up to about 8 minutes, instead of giving up. That makes those runs slower. If Google keeps refusing, the keyword rows are skipped and you are not charged for them, and the status message tells you what to change: enable residential proxies on your Apify account, or use your own proxies.

**What happens if something goes wrong?**
The run still finishes successfully with everything it managed to collect, and the status message tells you what happened: a country without Trending Now data is skipped, a keyword with no data is left out, and if Google blocks every request you get 0 items and a "try again" message. You only pay for rows that were actually saved. A `RUN_REPORT` record in the run's key-value store has the per-country counts and request statistics.

**Can I call it from the API with other field names?**
Yes. `maxItems` also accepts `limit` or `maxResults`, `geos` accepts `country` / `countries`, `keywords` accepts `keyword` / `searchTerms`, and lists can be comma-separated strings. `hours` is a string in the input schema (`"24"`, `"168"`).

**How much does it cost?**
You pay per row saved to the dataset, plus a tiny start fee per run. Trends removed by your filters (categories, active only, minimum volume, per-country cap) and keywords with no data are never saved, so they are never charged. Set **Max results** to cap the cost of a run.

**Is it legal to scrape Google Trends?**
This actor only collects publicly available data that anyone can see on the Google Trends website without logging in: aggregated search statistics, trending search terms and links to public news articles. Trending searches and news headlines can mention public figures by name, so if you store or process them, make sure you have a legitimate reason and follow data protection laws such as GDPR, PIPEDA and CCPA, as well as Google's terms. If you are unsure whether your use case is allowed, check with a lawyer. For more background, read Apify's article [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?**
No. The actor does not log in and does not use any Google account, cookie or API key of yours. Google Trends numbers are anonymized, aggregated statistics — they never identify individual searchers. It returns only what the public Google Trends pages show: trending searches, search volume buckets, interest indexes, related queries, regional interest and public news links.

# Actor input Schema

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

Trending Now: every trending search for each country / region (with volume, growth, categories, and optional news + interest over time). Keywords: interest over time, related queries and regional interest for your own keywords. Both: do both in one run.

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

Country codes (US, CA, GB, IN, DE, BR…), US states and other regions (US-NY, US-CA, IN-MH, CA-ON), or country names. Use ALL\_COUNTRIES for all 125 countries that have Trending Now. For keyword mode, WORLDWIDE is also accepted (and is the default when this is empty).

## `hours` (type: `string`):

The Trending Now time window.

## `includeNews` (type: `boolean`):

Attach the news articles Google shows for each trend (title, URL, source, publish time, image).

## `maxNewsPerTrend` (type: `integer`):

Up to 30.

## `includeTrendTimeline` (type: `boolean`):

Attach a search-interest time series for each trend over its own time window: 8-minute points for trends from the last day, 1-minute points for short trends that already ended, hourly points for older ones. Adds 2 requests per trend, so runs take longer.

## `categories` (type: `array`):

Only keep trends in these categories. Leave empty for all categories. Filtered-out trends are not saved and not charged.

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

Only keep trends that are still rising (Google marks the others as ended).

## `minSearchVolume` (type: `integer`):

Only keep trends with at least this many searches (Google buckets: 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000+).

## `sortBy` (type: `string`):

Order of trends within each country / region.

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

For example 25 to get the top 25 trends of each country. Leave empty for all of them.

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

Language code for Google Trends, e.g. en-US, en-GB, fr, de, es-419, hi, ja.

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

Keyword mode: search terms to look up (one row per keyword and country / region).

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

On: keywords are compared in groups of up to 5, on one shared 0–100 scale (like adding terms to a comparison on Google Trends). Off: each keyword gets its own 0–100 scale.

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

Time range for keyword mode.

## `customTimeframe` (type: `string`):

Overrides Timeframe. "2026-01-01 2026-06-30" for dates, or "2026-09-20T00 2026-09-21T00" for UTC hours within the last 7 days (up to 8h gives 1-minute points, up to 24h gives 8-minute points).

## `stitch8MinDays` (type: `integer`):

Google only gives 8-minute resolution for one day at a time. Set 2–7 to get an 8-minute series over the last N days, stitched from overlapping 24-hour windows onto one scale. Replaces Timeframe for the time series. 0 = off.

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

Top and rising related searches for each keyword, including "Breakout" terms.

## `includeRegions` (type: `boolean`):

Where each keyword is searched most (states / provinces for a country, countries for worldwide).

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

Optional. Region: states / provinces. Metro (DMA): US metro areas (US only). City: cities. Country: countries (worldwide only).

## `exploreCategory` (type: `integer`):

Optional Google Trends search category for keyword mode. 0 = all categories. Common ids: 3 Arts & Entertainment, 5 Computers & Electronics, 7 Finance, 12 Business & Industrial, 16 News, 18 Shopping, 20 Sports, 29 Real Estate, 45 Health, 47 Autos & Vehicles, 67 Travel, 71 Food & Drink.

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

Which Google search to measure in keyword mode.

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

Maximum number of rows for the whole run. Leave empty for no limit.

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

How many proxy sessions work in parallel. 4 is a good balance; higher is faster for big timeline or keyword jobs.

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

Apify datacenter proxy works well and is the default. Throttled sessions rotate automatically, with a residential fallback. If your Apify plan has no residential proxies, throttled keyword lookups and timelines wait 30-60 s and retry on fresh addresses instead (slower).

## `_noResidential` (type: `boolean`):

Internal (canaries): behave exactly like an account without the RESIDENTIAL proxy group.

## Actor input object example

```json
{
  "mode": "trendingNow",
  "geos": [
    "US"
  ],
  "hours": "24",
  "includeNews": false,
  "maxNewsPerTrend": 10,
  "includeTrendTimeline": false,
  "activeOnly": false,
  "sortBy": "relevance",
  "language": "en-US",
  "compareKeywords": false,
  "timeframe": "today 3-m",
  "stitch8MinDays": 0,
  "includeRelatedQueries": true,
  "includeRegions": true,
  "exploreCategory": 0,
  "searchProperty": "web",
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "_noResidential": false
}
```

# Actor output Schema

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

All scraped rows.

## `run` (type: `string`):

Status and statistics for this run.

# 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 = {
    "geos": [
        "US"
    ],
    "hours": "24",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/google-trends-trending-now").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 = {
    "geos": ["US"],
    "hours": "24",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/google-trends-trending-now").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 '{
  "geos": [
    "US"
  ],
  "hours": "24",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/google-trends-trending-now --silent --output-dataset

```

## MCP server setup

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

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/3dVhePHec232S8czr/builds/6katNeDJQsqWTSqEH/openapi.json
