# Search Trends Scraper – Reliable (Google Trends data) (`nimble_levi/google-trends-reliable`) Actor

Google Trends API alternative: interest over time, by region and top/rising related queries for keyword lists. Auto-retries 429s, flat CSV/Excel rows, failed keywords free. $0.01/keyword.

- **URL**: https://apify.com/nimble_levi/google-trends-reliable.md
- **Developed by:** [Bogdan Glisici](https://apify.com/nimble_levi) (community)
- **Categories:** SEO tools, Marketing, Developer tools
- **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.

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 & API: Interest Over Time, Regions & Related Queries

**A Google Trends API alternative that finishes the job.** Give it a list of keywords and get **interest over time**, **interest by country, state or city**, and **top and rising related queries** as clean, flat rows. Export to CSV, Excel, JSON or Google Sheets, or call it as a **Google Trends API** from Python, JavaScript, Make, Zapier or n8n.

Google has no public Google Trends API for most users, and the official Trends website often answers scripts with HTTP 429 ("too many requests"). This actor talks to the same Trends data endpoints with automatic back-off, fresh cookies and proxy rotation, so long keyword lists complete instead of timing out.

### Tested head-to-head (13 Oct 2026)

Same 8 keywords, same settings (`geo: US`, `timeframe: today 3-m`, one keyword per request), run on Apify the same afternoon.
Keywords: airbnb, vrbo, chatgpt, bitcoin, pickleball, air fryer, standing desk, halloween costumes.

| | This actor | Most-used Google Trends scraper in the Store (browser-based) |
|---|---|---|
| Keywords completed | **8 / 8 (0% failed)** | 1 / 8 in run 2 (4 GB), 0 / 8 in run 1 (2 GB) |
| Run time | **140 s** for all 8 | 518 s for 1 keyword, then stopped by our cost cap |
| Retries visible in log | none needed | 25 "Reclaiming failed request" retries (run 2) |
| Rows returned | 1,463 rows (93 daily points, 51 states and up to 50 related queries per keyword) | 1 item (all sections nested in one record) |
| Cost of the test | $0.08 at $0.01/keyword (platform usage included) | about $0.52 of platform usage in run 2 plus result fees, paid by the user |

Data agreement: for "vrbo", the only keyword both actors returned, the 93 daily values differed by **0.66 points on average** (max 4 on the 0–100 scale), which is normal Google sampling noise. Same source, same numbers.

Honest caveats: one test, one afternoon, 8 keywords. Google throttling varies by hour and IP, so your success rate can differ. In the competitor's public Store stats for the last 30 days, 13,315 of 23,303 runs (57%) succeeded, with 5,070 timed out and 4,350 aborted. Our own Store stats are still small.

### Real output from that test

| Keyword | Daily points | Peak day (index 100) | Top US state | Top related query |
|---|---|---|---|---|
| airbnb | 93 | 2026-07-13 | Vermont | hotels |
| vrbo | 93 | 2026-07-19 | Vermont | airbnb |
| chatgpt | 93 | 2026-09-03 | California | chatgpt ai |
| bitcoin | 93 | 2026-08-21 | Kansas | bitcoin price |
| pickleball | 93 | 2026-08-30 | Hawaii | pickleball paddle |
| air fryer | 93 | 2026-08-12 | Oklahoma | air fryer chicken |
| standing desk | 93 | 2026-09-27 | Kansas | standing desk review |
| halloween costumes | 93 | 2026-10-11 | West Virginia | costumes for halloween |

### Why this one

- **Built to finish.** Automatic back-off on 429s, cookie refresh and proxy session rotation. If a keyword still fails, you get a clear `error` row and the rest of the run carries on.
- **Pay only for keywords that succeed.** $0.01 per keyword, all requested sections included. Failed keywords are free. Nothing extra for compute.
- **Flat rows, ready for spreadsheets.** One row per date, per region or per related query, so CSV and Excel exports work without unnesting JSON.
- **Compare mode.** Up to 5 keywords on one 0–100 scale, exactly like the Trends "compare" view.
- **Web, YouTube, News, Images or Shopping** search, any country, region or category, from the past hour back to 2004.

### Use cases

- Keyword research and SEO content planning: find rising queries before they peak.
- Seasonality for e-commerce, travel and short-term rentals.
- Brand vs competitor interest tracking with scheduled weekly runs.
- Market and investment research, dashboards in Looker Studio or Google Sheets.

### Input example

```json
{ "keywords": ["airbnb", "vrbo"], "geo": "US", "timeframe": "today 3-m", "compareKeywords": false }
```

### Output examples (real rows from the test run)

```json
{"type":"interestOverTime","keyword":"airbnb","date":"2026-07-13","value":100,"isPartial":false,"geo":"US","timeframe":"today 3-m"}
{"type":"interestByRegion","keyword":"pickleball","region":"Hawaii","value":100,"geo":"US"}
{"type":"relatedQueries","keyword":"airbnb","list":"rising","query":"big bear airbnb","value":50,"formattedValue":"+50%"}
```

Dataset views: **Interest over time**, **Interest by region** and **Related queries & topics**.

### Use it as a Google Trends API

```bash
curl -X POST "https://api.apify.com/v2/acts/nimble_levi~google-trends-reliable/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["pickleball"],"geo":"US","timeframe":"today 12-m"}'
```

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("nimble_levi/google-trends-reliable").call(run_input={"keywords": ["pickleball"], "geo": "US"})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
```

### Pricing

**$0.01 per keyword**, covering all requested sections. Failed keywords are free. 100 keywords cost $1.

### FAQ

**Is there an official Google Trends API?** Google announced a Trends API in July 2025, but it is still an invite-only alpha for a limited group of testers. For everyone else, a scraper like this one is the practical way to get Trends data into code or spreadsheets.
**Is this a pytrends alternative?** Yes. pytrends was archived by its maintainers in April 2025 and often hits 429 errors. This actor handles retries, cookies and proxies for you and returns flat rows.
**Are the values search volumes?** No. Google Trends gives a relative 0–100 index per keyword, timeframe and region, not absolute search counts.
**Why are related topics sometimes empty?** Google only provides them for enough search volume, often not for short timeframes or small regions.
**Large batches?** Use the Apify RESIDENTIAL proxy group for hundreds of keywords.

*Google Trends is a trademark of Google LLC. This tool is independent and not affiliated with Google.*

# Actor input Schema

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

Search terms. Each keyword is analysed separately unless 'Compare keywords' is on.

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

Put up to 5 keywords on one comparable 0-100 scale (like the Trends compare view).

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

ISO code like US, GB, RO or US-CA. Empty = worldwide.

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

Time range.

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

Google Trends category id (0 = all).

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

Web, YouTube, News, Images or Shopping search.

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

Time series 0-100.

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

Countries (worldwide) or regions (inside a country).

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

Granularity of interest by region. Default: COUNTRY worldwide, REGION inside a country.

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

Top and rising related searches.

## `relatedTopics` (type: `boolean`):

Top and rising related topics (when Google returns them).

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

hl parameter.

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

Like Google's tz param, e.g. -180 for UTC+3.

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

On repeated refusals the actor rotates proxy sessions. RESIDENTIAL is most reliable.

## Actor input object example

```json
{
  "keywords": [
    "airbnb",
    "vrbo"
  ],
  "compareKeywords": false,
  "geo": "",
  "timeframe": "today 12-m",
  "category": 0,
  "searchProperty": "",
  "interestOverTime": true,
  "interestByRegion": true,
  "relatedQueries": true,
  "relatedTopics": true,
  "language": "en-US",
  "timezoneOffsetMinutes": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `all` (type: `string`):

Every row; field 'type' is interestOverTime, interestByRegion, relatedQueries, relatedTopics or error.

## `timeseries` (type: `string`):

No description

## `related` (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 = {
    "keywords": [
        "airbnb",
        "vrbo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nimble_levi/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": [
        "airbnb",
        "vrbo",
    ] }

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

```

## MCP server setup

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