# Google Trends Scraper: 50+ Terms on One Scale, Daily Data (`theoliveirad/google-trends-scraper-50-terms-on-one-scale-daily-data`) Actor

Compare 50+ keywords on one Google Trends scale, ranked, with daily data for any date range and a ready spreadsheet. Full keyword reports and trending now included. No browser, no start fee, and failed or empty keywords are never charged.

- **URL**: https://apify.com/theoliveirad/google-trends-scraper-50-terms-on-one-scale-daily-data.md
- **Developed by:** [Diogo Oliveira](https://apify.com/theoliveirad) (community)
- **Categories:** Open source
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 comparison terms

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

### Compare 50+ keywords on one Google Trends scale. Pay only for data you get.

Google Trends only compares 5 terms at a time, and every request is scaled differently, so you cannot put 20 products, brands or topics side by side. This actor can. It also gives you **daily data for any date range** (Google switches to weekly after about 90 days) and ranks everything for you.

- **Any number of terms on one 0-100 scale**, ranked from most to least searched
- **Daily data from 2004 to today**, not just the last 90 days
- **A ready-to-open spreadsheet** with every run, one column per keyword
- **Failed or empty keywords are never charged.** No start fee.
- **No browser, no login, no API key.** 2 to 5 seconds per keyword.

### What does it cost?

You pay per result that contains data. Nothing else.

| You run | You pay |
|---|---|
| Full report for 100 keywords | $0.50 |
| Compare 50 terms on one scale | $0.25 |
| One year of daily data for 10 terms | $0.30 |
| Trending searches in 4 countries (about 40 items) | $0.04 |
| A keyword that fails or has no data | **$0.00** |

Apify's free plan includes $5 of monthly credit, enough for about 1,000 keyword reports. You can also set a maximum cost per run, and the actor stops cleanly when it is reached.

### Why this actor instead of a typical Google Trends scraper?

| | Typical Google Trends scraper | This actor |
|---|---|---|
| Terms compared on one scale | 5 | **Unlimited** |
| Daily data for ranges longer than 90 days | No | **Yes, 2004 to today** |
| Empty or failed keywords | Often charged | **Never charged** |
| Fee just for starting a run | Often | **None** |
| Headless browser | Often (slow, breaks when Google changes the page) | **Not needed** |
| Ranking and summary numbers | No | **Yes** |
| Spreadsheet-ready table | No | **Yes** |

### How to use it in 3 steps

1. Pick a **mode**. Compare is the default.
2. Paste your **search terms**, one per line. Optionally choose a country, time range, category or Google property (Web, YouTube, News, Images, Shopping).
3. Click **Start**. Open the **Comparison overview** tab for the ranking, or download the spreadsheet from **Storage > Key-value store**.

### What you get

#### The ranking (Comparison overview tab)

| Rank | Keyword | Average (0-100) | Peak | Peak date | Latest | Trend % |
|---|---|---|---|---|---|---|
| 1 | coffee | 51.0 | 100 | 2026-05-03 | 71 | +75.7 |
| 2 | tea | 32.2 | 49 | 2026-02-15 | 36 | +35.0 |
| 3 | mate | 7.6 | 11 | 2024-09-08 | 8 | +11.8 |
| 4 | espresso | 6.0 | 13 | 2026-04-12 | 8 | +112.5 |
| 5 | latte | 5.7 | 11 | 2026-02-15 | 8 | +62.2 |

*Real output: 20 drinks compared worldwide over 5 years, first 5 rows shown. Trend % compares the last quarter of the period with the first quarter.*

#### The spreadsheet

Every run saves a CSV you can open in Excel or Google Sheets and chart in one click:

```
date,coffee,tea,espresso,mate,matcha,latte
2025-09-21,56,35,7,8,8,7
2025-09-28,63,35,8,8,8,7
```

#### Full data per keyword (JSON, CSV, Excel or API)

Interest over time, interest by region, top and rising related queries, plus the summary numbers above. Every row has a `status` field, so your integration always knows why a keyword is empty.

### Four modes

| Mode | Use it to | One row per |
|---|---|---|
| **Compare** (default) | Rank any number of terms on one shared scale | search term |
| **Keywords** | Get the full report for each term: interest over time, regions, related queries | search term |
| **Daily** | Get daily interest for any date range, e.g. 2020 to today | search term |
| **Trending now** | See what is trending right now in one or more countries | trending search |

### Who uses it

- **SEO and content teams:** pick the topics with the most interest and the best trend.
- **E-commerce and product teams:** compare products, brands or features, and time launches to seasonal peaks.
- **Market researchers and analysts:** daily series for forecasting, dashboards and reports.
- **Investors and data scientists:** attention signals for tickers, tokens and themes, daily over years.
- **AI agents and automations:** clean JSON through the Apify API, MCP, Make, n8n or Zapier.

### Input examples

Compare 8 drinks over 5 years:

```json
{
  "mode": "compare",
  "searchTerms": ["coffee", "tea", "matcha", "espresso", "latte", "kombucha", "chai", "mate"],
  "timeRange": "today 5-y"
}
```

Daily interest since 2020 in Portugal:

```json
{ "mode": "daily", "searchTerms": ["padel", "surfing"], "geo": "PT", "startDate": "2020-01-01" }
```

Full keyword report in the US, YouTube search only:

```json
{ "mode": "keywords", "searchTerms": ["air fryer", "robot vacuum"], "geo": "US", "property": "youtube" }
```

Trending now in four countries:

```json
{ "mode": "trending", "trendingGeos": ["US", "PT", "BR", "KR"] }
```

Any custom period: add `"customTimeRange": "2024-01-01 2024-12-31"`.

### Output example (one compared term, past 12 months)

```json
{
  "type": "comparison",
  "keyword": "matcha",
  "rank": 5,
  "average": 8.25,
  "peak": 10,
  "peakDate": "2026-02-15",
  "latest": 8,
  "trendPct": 22.3,
  "lowPrecision": false,
  "anchor": "coffee",
  "geo": "WORLDWIDE",
  "timeRange": "today 12-m",
  "status": "ok",
  "interestOverTime": [{ "date": "2025-09-21", "value": 8.0 }, { "date": "2025-09-28", "value": 8.0 }]
}
```

A keyword with no data comes back like this, and costs nothing:

```json
{ "type": "keyword", "keyword": "zxqv qpq", "status": "error", "error": "no interest-over-time data (term too rare or blocked)" }
```

### How accurate is it?

- **Comparisons:** every batch of up to 5 terms shares one anchor term, so all batches land on the same scale. Terms that were below 5 on Google's scale in their batch are flagged `lowPrecision: true`, because Google rounds to whole numbers.
- **Daily data:** overlapping 90-day windows are chained together. Checked against Google's own weekly series over 5 years, the stitched data matches at **r = 0.99** (bitcoin) and **r = 0.996** (padel), within 1 to 2 points on the 0-100 scale.

### Pricing details

Pay per event:

| Event | Price | When |
|---|---|---|
| Keyword analysis | $0.005 | one successful row in Keywords mode |
| Comparison term | $0.005 | one successful row in Compare mode |
| Daily window | $0.005 | one 90-day window in Daily mode (1 year = 6 windows) |
| Trending item | $0.001 | one trending search in Trending mode |

Rows with `status: "error"` are never charged. There is no start fee.

### Reliability

- Direct data requests, no browser, so it does not break when Google redesigns the Trends page.
- Apify datacenter proxy by default, a fresh IP every 25 keywords, automatic backoff when Google throttles, and an automatic switch to residential proxy if a worker keeps getting blocked.
- Tested on Apify with 100 keywords in a row: 100 of 100 succeeded.

### Limitations

- Values are relative interest (0-100), as on Google Trends, not absolute search volumes.
- Related topics are not included: Google returns them empty to automated clients. Related queries are included.
- Trending now uses Google's public trending feed: about 10 searches per country.

### FAQ

**Can I compare more than 5 keywords?** Yes. Compare mode has no limit: 20, 50 or 100 terms all come back on one scale.

**Can I get daily data for a whole year or more?** Yes. Daily mode covers any range from 2004 to today.

**Do I pay if a keyword returns nothing?** No. Only rows with data are charged.

**Can I schedule it?** Yes. Use Apify Schedules to track your keywords every day or week.

**Is it legal to scrape Google Trends?** The actor only reads public, aggregated data that Google shows to every visitor. If in doubt about your specific use, ask a lawyer.

**Something not working?** Open an issue on the Issues tab with your run link.

# Actor input Schema

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

What to extract. Failed keywords are returned with an error and never charged.

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

One term per line. Compare mode has no 5-term limit. Not needed for Trending now.

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

Keywords and compare modes.

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

Overrides Time range. Format: 'YYYY-MM-DD YYYY-MM-DD', e.g. '2024-01-01 2024-12-31'.

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

Empty = worldwide. ISO country code (US, PT, KR) or region (US-CA, PT-11).

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

Google Trends category ID, 0 = all categories (e.g. 71 = Food & Drink).

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

Which Google search the interest comes from.

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

Term shared by every batch to link them onto one scale. Leave empty to use the strongest of the first five terms.

## `startDate` (type: `string`):

YYYY-MM-DD, 2004-01-01 or later.

## `endDate` (type: `string`):

YYYY-MM-DD. Empty = today.

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

ISO country codes, e.g. US, PT, BR, KR.

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

Higher is faster but more likely to be throttled by Google.

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

Apify datacenter proxy works well (tested 100/100 keywords). Residential is optional.

## Actor input object example

```json
{
  "mode": "compare",
  "searchTerms": [
    "coffee",
    "tea",
    "matcha",
    "espresso",
    "latte",
    "kombucha",
    "chai"
  ],
  "timeRange": "today 12-m",
  "geo": "",
  "category": 0,
  "property": "",
  "startDate": "2024-01-01",
  "trendingGeos": [
    "US"
  ],
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

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

No description

## `comparisonTable` (type: `string`):

No description

## `dailyTable` (type: `string`):

No description

## `keywordsTable` (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 = {
    "mode": "compare",
    "searchTerms": [
        "coffee",
        "tea",
        "matcha",
        "espresso",
        "latte",
        "kombucha",
        "chai"
    ],
    "timeRange": "today 12-m",
    "startDate": "2024-01-01",
    "trendingGeos": [
        "US"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("theoliveirad/google-trends-scraper-50-terms-on-one-scale-daily-data").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 = {
    "mode": "compare",
    "searchTerms": [
        "coffee",
        "tea",
        "matcha",
        "espresso",
        "latte",
        "kombucha",
        "chai",
    ],
    "timeRange": "today 12-m",
    "startDate": "2024-01-01",
    "trendingGeos": ["US"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("theoliveirad/google-trends-scraper-50-terms-on-one-scale-daily-data").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 '{
  "mode": "compare",
  "searchTerms": [
    "coffee",
    "tea",
    "matcha",
    "espresso",
    "latte",
    "kombucha",
    "chai"
  ],
  "timeRange": "today 12-m",
  "startDate": "2024-01-01",
  "trendingGeos": [
    "US"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call theoliveirad/google-trends-scraper-50-terms-on-one-scale-daily-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,theoliveirad/google-trends-scraper-50-terms-on-one-scale-daily-data"
        }
    }
}
```

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/9I4ZhzKHoQQCV85Ow/builds/o6uPdnGJ0XLRSSEWO/openapi.json
