# Google Trends Scraper & API - Trending Now, Pinterest Trends (`akhil_rajesh/google-trends-scraper`) Actor

Google Trends scraper and API, no login: Trending Now in 125 countries, interest over time, by region, related, rising searches; compare keywords across countries, CSV tables. Pinterest Trends: growing searches, shopping trends, seasonal moments. Trend monitor with Slack, Discord, Telegram alerts.

- **URL**: https://apify.com/akhil_rajesh/google-trends-scraper.md
- **Developed by:** [Akhil rajesh](https://apify.com/akhil_rajesh) (community)
- **Categories:** SEO tools, Marketing, E-commerce
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 & API - Trending Now, Pinterest Trends

Scrape **Google Trends** without a login or an API key: **Trending Now** for 125 countries and over 1,000 of their regions (every trend with its search volume, increase, start, related searches, categories and news articles), and **Explore** for any keyword: **interest over time** with what it says (average, peak, growth, direction), **interest by region** and **related queries, top and rising**. Compare up to 5 keywords on one scale. It also reads **Pinterest Trends**: the fastest-growing searches and seasonal moments for 26 regions, and trends in the spotlight, shopping trends and editors' picks for the US, Canada, and the UK and Ireland.

It is also a **trend monitor**. Schedule it with **Only changes** and each run returns only what is new since the last one: **new trends, new rising searches for your keywords, new entries on Pinterest's lists and seasonal moments taking off**, posted to **Slack, Discord, Telegram or Microsoft Teams** if you like.

**$1.00 per 1,000 trends or Pinterest entries, and $2.50 per 1,000 keywords (a keyword row holds its whole timeline, its regions and its related queries), on Apify's free plan, with platform usage included.**

### Example: what the United States searched in the past 24 hours

```json
{"trendingCountries": ["US"], "trendingHours": "24", "maxTrendsPerCountry": 5, "includeNews": true}
```

5 results, $0.005 on Apify's free plan, about 10 seconds. A run on 2026-11-03:

| # | Trend | Searches | Category |
|---|---|---|---|
| 1 | republican party | 1M+ | Politics |
| 2 | barcelona vs aston villa | 200K+ | Sports |
| 3 | rhabdomyolysis | 200K+ | Other |
| 4 | jesus de miguel | 200K+ | Sports |
| 5 | olmesartan | 200K+ | Health |

Each row also has the searches Google groups under the trend, when it started, whether it is still active, and its news articles (olmesartan: a blood pressure medicine recall).

### Example: is matcha still growing?

```json
{"keywords": ["matcha", "protein coffee"]}
```

2 keyword rows, $0.005, about 10 seconds. Matcha's row from a run on 2026-11-03, worldwide over the past 12 months: average interest 80.7, peak 100 in the week of 2026-08-02, latest full week 62, **20.8% higher** in the last three months than in the first three, direction `rising`, most searched in Singapore. Rising searches included 'djarum black matcha' (Breakout).

### Why this scraper

- **Three sources in one run.** What a country searches right now (Trending Now), how a keyword moves over time (Explore) and what is growing on Pinterest, in one dataset with one price list.
- **It tracks, not just lists.** Most Google Trends scrapers return the same rows every run, and you work out what is new. With Only changes this one keeps a history per search and returns only the new trends, the new rising searches and the Pinterest entries that weren't there before.
- **Every trend, not the first 20.** Trending Now lists hundreds of trends a day for a big country (727 for the United States over 24 hours, 3,426 over 7 days). The Actor reads the whole list, filtered and sorted the way the page offers.
- **What a timeline says, not only its points.** Each keyword row adds its average, peak and peak date, the latest full week, growth between the first and last quarter of the range, and a direction (`rising`, `falling`, `steady`, `new`), so 200 keywords sort by growth in a spreadsheet.
- **Pinterest's numbers as Pinterest shows them.** Week, month and year changes, Pinterest's breakout marks, 90-day weekly curves, seasonal moments with their takeoff and peak, and Pinterest's own phase for each (`rising`, `peak`).
- **No login, no API key.** It reads the public pages' own data calls, the way the pages read them, at a pace the sites answer without refusing.
- **Keywords the way you already have them.** Type them, paste Google Trends links (an Explore chart with its comparison, place and period, or a Trending Now page), or point it at a Google Sheet. Read each keyword in several countries in one run.
- **Spreadsheet-ready.** Besides the dataset, each keyword run saves CSV tables with one line per point, region and related search, ready for Excel, Google Sheets or a BI tool.
- **Switch without rewriting your input.** An input written for another Google Trends Actor runs as it is: `searchTerms`, `geo`, `timeRange`, `startUrls`, `spreadsheetId` and the rest are read as that Actor means them (see [Switching from another Google Trends Actor](#switching-from-another-google-trends-actor)).
- **A Google Trends API and MCP server for AI agents.** The same data answers live: an MCP server that Claude, Cursor or any MCP client calls directly, and plain HTTP endpoints.
- **Honest numbers.** A section that didn't load is named in the row (`notLoaded`) and the run's status, never filled with zeros.

| | Typical Google Trends scrapers | This Actor |
|---|---|---|
| Interest over time, by region, related queries | Yes | Yes, plus average, peak, growth and direction per keyword |
| Trending Now with search volume, start, news | Some | Yes, every trend Google lists, 125 countries and their regions |
| Compare up to 5 keywords on one scale | Some | Yes, several comparisons in one run |
| Each keyword in several countries in one run | One country a run | Yes |
| Keywords from Google Trends links or a Google Sheet | Some | Yes |
| CSV with one line per point, region and related search | Rare | Yes |
| Pinterest Trends | Separate scrapers | In the same Actor |
| New trends and new rising searches since the last run | You compare runs yourself | Built in (Only changes) |
| Alerts to Slack, Discord, Telegram, Teams | Rare | Yes |
| MCP server and live API for AI agents | Rare | Yes |

### Use cases

- **Content ideas**: what your country searches today, with the news behind each trend, filtered to your category (Sports, Technology, Food and Drink...).
- **Keyword and niche research**: is a product or topic growing, where, and which searches around it are rising. Compare candidates on one scale.
- **Trend monitoring**: a daily schedule that posts each new rising search for your keywords, or each new trend in your category, to Slack.
- **E-commerce and seasonal planning**: Pinterest's shopping trends and seasonal moments, with the weeks when searches take off and peak.
- **SEO**: rising queries around your topics, before keyword tools show them.
- **Market research across countries**: one keyword's interest by country, state, city or metro area.

### How to use it in 4 steps

1. Add **Trending Now** countries or regions (`US`, `United States`, `Ontario, Canada`, `CA-ON`), **Keywords** for Explore (typed, as Google Trends links, or from a Google Sheet), or **Pinterest Trends** regions. Any one is enough.
2. Pick the time window, filters and sections you want.
3. Set **Max results** and run it.
4. To follow trends over time, switch on **Only changes since the last run**, add an alert if you want one, and schedule it.

### What you get

One row per trend (`type: "trend"`), per keyword (`type: "keyword"`) and per Pinterest entry (`type: "pinterest"`). A real trend row, shortened:

```json
{
    "type": "trend",
    "term": "olmesartan",
    "rank": 5,
    "geo": "US",
    "geoName": "United States",
    "timeWindow": "past 24 hours",
    "searchVolume": 200000,
    "searchVolumeText": "200K+",
    "increasePercent": 1000,
    "isActive": true,
    "startedAt": "2026-11-02T23:10:00Z",
    "activeHours": 22.7,
    "trendBreakdown": ["blood pressure medicine recall", "fda olmesartan medoxomil tablet recall", "drug recall"],
    "categories": ["Health"],
    "news": [{"title": "Thousands of blood pressure medication bottles recalled nationwide after pills fail quality test",
              "source": "Fox Business", "publishedAt": "2026-11-02T23:25:00Z", "url": "https://www.foxbusiness.com/..."}],
    "exploreLink": "https://trends.google.com/trends/explore?date=now%207-d&q=olmesartan&geo=US",
    "trendingNowLink": "https://trends.google.com/trending?geo=US&hours=24&q=olmesartan"
}
```

`searchVolume` is the low end of Google's bucket (`200K+`), and `increasePercent` stops at 1,000, as Google's page shows it. An ended trend has `endedAt`. A real keyword row, shortened:

```json
{
    "type": "keyword",
    "keyword": "matcha",
    "geoName": "Worldwide",
    "timeframeLabel": "past 12 months",
    "hasData": true,
    "averageInterest": 80.8,
    "latestInterest": 62,
    "peakInterest": 100,
    "peakDate": "2026-08-02",
    "growthPercent": 20.8,
    "recentChangePercent": -20.9,
    "trendDirection": "rising",
    "interestOverTime": [{"date": "2026-10-18", "value": 67}, {"date": "2026-10-25", "value": 62},
                         {"date": "2026-11-01", "value": 60, "isPartial": true}],
    "timeResolution": "WEEK",
    "interestByRegion": [{"geoCode": "SG", "geoName": "Singapore", "value": 100},
                         {"geoCode": "PH", "geoName": "Philippines", "value": 74}],
    "topRegion": "Singapore",
    "relatedQueriesTop": [{"query": "matcha latte", "value": 100}, {"query": "the matcha", "value": 81}],
    "relatedQueriesRising": [{"query": "how to make iced matcha", "growth": "+1,400%", "growthPercent": 1400},
                             {"query": "black matcha", "growth": "Breakout", "isBreakout": true}],
    "exploreLink": "https://trends.google.com/trends/explore?date=today%2012-m&q=matcha"
}
```

`interestOverTime` holds every point of the range (53 weeks here); the week still in progress is marked `isPartial` and left out of the figures. Compared keywords add `comparedWith` and their values are on the group's scale. A real Pinterest row from the fastest-growing searches, and a seasonal moment:

```json
{
    "type": "pinterest",
    "list": "searchTrends",
    "region": "US",
    "rank": 1,
    "term": "beaded tinsel",
    "weeklyChangePercent": 500,
    "isBreakout": true,
    "breakoutPeriods": ["monthly", "yearly"],
    "seasonalityScore": 0.326,
    "weeklyInterest": [{"date": "2026-10-17", "value": 0}, {"date": "2026-10-24", "value": 17}, {"date": "2026-10-31", "value": 100}],
    "pinterestSearchLink": "https://www.pinterest.com/search/pins/?q=beaded%20tinsel"
}
```

```json
{
    "type": "pinterest",
    "list": "moments",
    "region": "US",
    "term": "Thanksgiving",
    "status": "rising",
    "takeoffDate": "2026-10-31",
    "peakDate": "2026-11-28",
    "eventDate": "2026-11-26"
}
```

Trends in the spotlight add a description, related searches and a weekly curve; shopping trends their change in outbound clicks, saves and engagement; editors' picks a description, keywords and dates. A moment's `status` is Pinterest's own phase: `approaching`, `rising`, `peak` or `past peak`. Its searches can peak on another day than the event (Pinterest's Memorial Day searches peaked on 4 July 2026). `eventDate` is the event's next date, so once the day has passed it is next year's: on 3 November 2026 Halloween showed a peak on 2026-10-31 and an `eventDate` of 2027-10-31. A place, category or Pinterest region the sources don't list gets a free `notFound` row that says why.

The dataset has views for **Overview**, **Trending Now**, **Keywords** (direction, growth, peak), **Related and rising searches**, **Interest by region**, **Pinterest Trends**, **Changes** and **Not found** (a view picks columns: every view lists every row, so filter on `type` or `change` if you need to).

### How to use it

#### Trending Now

**Trending Now: countries or regions** takes up to 200 countries or regions by code (`US`, `GB`, `US-CA`, `CA-ON`) or name (`United States`, `California`, `Ontario, Canada`). A name Google doesn't list gets a free `notFound` row. **Trending in the past** is 4, 24 or 48 hours or 7 days.

**Trend categories** (Sports, Politics, Entertainment, Technology... the page's own menu), **Active trends only**, **Minimum search volume** and **Trends containing** (whole words, in the trend or the searches grouped under it) filter the list before it is cut. **Sort trends by** is the page's own: relevance (Google's order), search volume, recency or increase. **Trends per country or region** caps each list (50 by default, 5,000 at most). **Include news articles** adds each trend's articles (3 by default, as the page shows, up to 10).

#### Keywords (Google Trends Explore)

**Keywords** takes up to 200 keywords, read one at a time. To compare terms on one scale, as Explore's comparison does, put them in one entry with commas (`coke, pepsi, dr pepper`): each such entry is its own comparison, so one run can hold several. Switch on **Compare keywords** to put all the keywords in groups of up to 5 instead. In a comparison, values are shares of the group's peak, and interest by region is each keyword's share of the searches in that region. A comma between digits stays in the keyword (`1,000 calories`).

A topic id from an Explore link (`/m/07ykbs`) reads Google's topic rather than the words: its row names it (`topicName`: Web scraping, `topicType`: Topic).

**Google Trends links** takes links copied from your browser. An Explore chart (`trends.google.com/trends/explore?q=coke,pepsi&geo=US&date=today 3-m`) is read with its own terms, comparison, place, period, category and search type. A Trending Now page (`trends.google.com/trending?geo=CA-ON&hours=4`) adds its place, with its window, category and filters when the form sets none. A Pinterest Trends link adds its region. The Actor reads what a link asks for and never opens the page. A link that isn't one of these gets a free `notFound` row.

**Keywords from a Google Sheet** takes a sheet's link or id. Its first column is read from row 2 (row 1 is the column's title) and added to the other keywords; the tab in the link (`#gid=`) is the one read. Share the sheet as "Anyone with the link" (Viewer). A sheet that doesn't open stops the run before anything is read or charged, and says so.

**Time range** is Explore's own (past hour, 4 hours, day, 7 days, 30 days, 90 days, 12 months, 5 years, since 2004), or a custom range by dates. **Keywords' countries or regions** is worldwide by default. Name several, separated by commas (`US, GB, India`), and each keyword is read in each: one row per keyword and place. **Keywords' category** narrows to Google's category of a word (`Food & Drink` for Apple the fruit), **Search type** to image, news, YouTube or Google Shopping searches, and **Region level** to countries, regions, cities or metro areas (US metro areas are Nielsen DMAs). **Keyword data** picks the sections: interest over time, interest by region, related queries.

#### Pinterest Trends

**Pinterest Trends: regions** takes Pinterest's own regions: `US`, `CA`, `GB+IE`, `DE`, `FR`, `BR`, `MX`, `AU+NZ` and the rest of its menu (26 in all). **Pinterest lists** picks from the five lists its logged-out home page shows: fastest-growing searches (20 terms with their 90-day weekly curves), trends in the spotlight, shopping trends, editors' picks and moments. All five by default. Pinterest shows the spotlight, shopping trends and editors' picks for the United States, Canada, and Great Britain and Ireland only (it refuses the first two for other regions, and lists no editors' picks there), so other regions get their fastest-growing searches and moments, and the run says so. Nine regions, Korea and Turkey among them, have no moments either (checked region by region on 3 November 2026).

#### Reading the numbers

Google Trends gives a keyword 0 to 100 over the range asked for: 100 is its busiest point, 50 half as busy. A keyword row reads its timeline for you, leaving out the point still in progress:

- `averageInterest`: the mean over the range; `latestInterest`: the last complete point; `peakInterest` and `peakDate`: the busiest point and when.
- `growthPercent`: the last quarter of the range against the first quarter (the last 3 months against the first 3, over 12 months).
- `recentChangePercent`: the last eighth of the range against the eighth before it.
- `trendDirection`: `rising` or `falling` when both the last quarter and the last eighth of the range are more than 15% above or below the first quarter, `steady` otherwise, `new` when the first quarter had no interest at all. Both must agree because the last quarter lags: 'protein coffee' grew 17.6% quarter on quarter in November 2026 on the strength of August and September, while its last five weeks had fallen below where its year began. It reads `steady`.
- Weeks with too little data count as 0, as on Google's own chart. A rare keyword can show one week at 100 and the rest at 0: that's a handful of searches, not a trend, and its `averageInterest` stays low. `hasData: false` means Google had nothing to draw, and such a row is free.

Rising searches show Google's growth (`+250%`), or `Breakout` past +5,000%. Pinterest's figures are changes in searches week over week, month over month and year over year; `isBreakout` marks Pinterest's own cap.

#### Max results

**Max results** (1,000 by default) is shared between the searches in rounds, so a long trending list doesn't use up a keyword's or a region's share. What doesn't fit is named in the run's status message, never cut at random.

### Tracking changes on a schedule (trend monitor)

1. Switch on **Only changes since the last run**. Optionally pick the **Changes to report**.
2. Run it once: the first run returns everything as `firstRun` and saves it as the baseline.
3. Schedule it (Apify Console, Schedules). Each later run returns only what changed.

| change | meaning |
|---|---|
| `newTrend` | a trend that started since the last run and that Google hadn't listed under another name (by default) |
| `volumeUp` | a trend whose search volume bucket grew, with `previousSearchVolume` (ask for it in **Changes to report**) |
| `newRisingQuery` | a keyword with rising searches this monitor hadn't seen, listed by two runs, in `newRisingQueries` (by default) |
| `directionChanged` | a keyword whose direction changed (`rising` to `steady`...), with `previousTrendDirection` |
| `newOnPinterest` | an entry new on its Pinterest list (by default) |
| `momentRising` | a seasonal moment Pinterest moved to rising or peak, with `previousStatus` (by default) |
| `firstRun` | the first run's baseline |

How it decides:

- A **trend** is its term and its start time, so a term that trends again on another day is a new trend. Google regroups its trends all the time: on election night, 3 November 2026, five lists read every 4 minutes showed 212 trends under a new lead term or start in 20 minutes, most of them a query of an earlier trend listed as a trend of its own ('kamala harris', 'nc polls'). So a trend isn't new when its term was one of a known trend's searches, when two of its searches were, or when it started more than an hour before the last run read the list (Google lists a trend 12 to 44 minutes after its start, so it was listed then under some name). In those 20 minutes, 39 trends were new. Trends stay in the history 10 days after they were last listed.
- A keyword's **rising searches** are remembered once listed, so a query that drops off the list and comes back isn't new again. A query counts as new once a second run lists it too. Google answers Explore from a few samples that take turns every few minutes: on 3 November 2026, one of three samples of 'matcha' read within 12 minutes shared only 11 of its 25 rising searches with the others and listed 'grind rail' and 'earthquake pills'. Waiting for a second run keeps one sample's oddities out of your results and alerts, and reports a real new search one run later. Keyword rows come back every run, with `newRisingQueries` and `change` when something changed.
- A **Pinterest** entry is new the first time it appears on its list. A moment is reported once, when Pinterest moves it to rising or peak.
- Histories are kept per search and its filters (two monitors with different filters don't mix), in the key-value store `google-trends-history`, or one you name in **History name**.
- Only what a run returns moves the history: if Max results, **Trends per country** or your spending limit stops a run, the changes it didn't return come with the next run, while the trend is still listed. The status message says how many wait. A busy country can have more than 50 new trends in a day, so raise Trends per country for a daily schedule.

### Alerts in Slack, Discord, Telegram or Microsoft Teams

Paste an incoming-webhook URL in **Alert webhook URL** (Slack, Discord, Microsoft Teams, or any HTTPS endpoint that takes JSON, such as Zapier, Make or n8n), or a **Telegram bot token** and **Telegram chat id**. Each switches on Only changes. The first run posts one short "alerts are set up" message; each later run posts its changes (new trends, new rising searches, new Pinterest entries and moments taking off, or those you pick in **Alert on**), up to 50 per run. A run that stops early still posts the changes it stored, a restarted run doesn't post a message twice, and a failed post doesn't fail a run whose data loaded: its status says why.

### Spreadsheet tables (CSV)

A run with keywords also saves three CSV tables in its key-value store, linked from the run's **Output** tab:

| Table | One line per | Columns |
|---|---|---|
| `INTEREST_OVER_TIME.csv` | point of a keyword's timeline | keyword, topicName, comparedWith, geo, geoName, timeframe, searchType, date, value, isPartial |
| `INTEREST_BY_REGION.csv` | region | the same keyword columns, regionLevel, regionCode, region, value |
| `RELATED_QUERIES.csv` | related search | the same keyword columns, list (`top` or `rising`), query, value, growth, growthPercent, isBreakout |

Several keywords, comparisons and places sit in one long table, ready for a pivot table or a chart. The tables are built from the whole dataset at the end of the run, so a run that restarted still has every row. From the API: `GET https://api.apify.com/v2/key-value-stores/<storeId>/records/INTEREST_OVER_TIME.csv`.

### Run summary for pipelines

Each run saves a `RUN_SUMMARY` record in its key-value store: per search, its rows; plus the changes, what didn't load and why, and the filters used.

### Switching from another Google Trends Actor

Paste the input you already use: other Google Trends Actors' field names are read as those Actors mean them, and the run's notes list what was read that way.

| Their field | Read here as |
|---|---|
| `searchTerms`, `keyword`, `keywords` | Keywords |
| `geo`, `country`, `location` | the keywords' place (Trending Now's country when the input has no keywords) |
| `timeRange`, `timeframe`, `predefinedTimeframe`, `customTimeRange` | Time range (`customTimeRange` wins, as there) |
| `category` | Keywords' category (`0` or empty: all) |
| `property` | Search type (`froogle` is Google Shopping) |
| `startUrls` | Google Trends links |
| `spreadsheetId` | Keywords from a Google Sheet |
| `mode: "trending"`, `enableTrendingSearches` | Trending Now only (their default keyword isn't read) |
| `trendingSearchesCountry`, `trendingSearchesGeo`, `trendingSearchesTimeframe`, `trendingSearchesCategories`, `trendingSearchesMaxItems` | Trending Now's country, window, categories and trends per country |
| `dataTypes`, `includeGeoData`, `includeInterestOverTime`, `includeRelatedSearches`, `fetchRegionalData` | Keyword data |
| `maxItems` (`0`: no limit) | Max results |

Their browser and proxy settings (`maxConcurrency`, `pageLoadTimeoutSecs`, `proxyConfiguration`...) aren't needed and are ignored with a note. Related topics aren't offered: Google answers them with an empty list.

### Google Trends API: use it from code or from an AI assistant

Start a run and get the rows in one call (replace `<YOUR_TOKEN>`; a call that waits gives up after 5 minutes, so start bigger runs without waiting and read the dataset afterwards):

```bash
curl -X POST "https://api.apify.com/v2/acts/akhil_rajesh~google-trends-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"trendingCountries": ["US"], "trendingHours": "24", "maxTrendsPerCountry": 20}'
```

Or from Python with `apify-client`:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("akhil_rajesh/google-trends-scraper").call(run_input={
    "keywords": ["matcha", "protein coffee", "mushroom coffee"], "compareKeywords": True, "exploreGeo": "US",
})
for row in client.dataset(run.default_dataset_id).iterate_items():
    print(row["keyword"], row.get("averageInterest"), row.get("trendDirection"))
```

#### For AI agents: MCP server and live API

The Actor also runs as a **live endpoint** (Apify Standby): an **MCP server** that agents call directly, and plain HTTP endpoints. Once a Standby run is up, a request is answered in seconds; the first request starts one. Authenticate with your Apify API token in the `Authorization: Bearer <token>` header.

**MCP server** (Streamable HTTP): `https://akhil-rajesh--google-trends-scraper.apify.actor/mcp`

```json
{"mcpServers": {"google-trends": {"type": "http", "url": "https://akhil-rajesh--google-trends-scraper.apify.actor/mcp",
  "headers": {"Authorization": "Bearer <YOUR_APIFY_TOKEN>"}}}}
```

In Claude Code:

```bash
claude mcp add --transport http google-trends https://akhil-rajesh--google-trends-scraper.apify.actor/mcp --header "Authorization: Bearer <YOUR_APIFY_TOKEN>"
```

A client that can't send headers can use `https://akhil-rajesh--google-trends-scraper.apify.actor/mcp?token=<YOUR_APIFY_TOKEN>`; keep that URL private, as it carries your token.

| Tool | What it returns |
|---|---|
| `get_trending_now` | What a country or region is searching for now: one row per trend with its search volume, increase, start time, status, breakdown and categories, and news if asked |
| `get_keyword_trends` | One row per keyword: interest over time with its average, peak, growth and direction, interest by region, top and rising related searches |
| `compare_keywords` | Up to 5 keywords on one scale, as Google Trends' comparison shows them |
| `get_pinterest_trends` | A region's Pinterest Trends lists: fastest-growing searches, spotlight, shopping trends, editors' picks and seasonal moments |
| `run_actor` | The Actor's whole input in one call |

**HTTP endpoints**, such as `GET https://akhil-rajesh--google-trends-scraper.apify.actor/trending?countries=US|GB&perCountry=10` (separate several values with `|`). The Actor's **Endpoints** tab in Apify Console lists them too, and lets you try them.

| Endpoint | Parameters |
|---|---|
| `GET /trending` | `countries`, `hours`, `perCountry`, `categories`, `active`, `minVolume`, `words`, `sort`, `news`, `newsPerTrend`, `max` |
| `GET /keywords` | `keywords`, `timeframe`, `start`, `end`, `geo`, `category`, `type`, `level`, `data` |
| `GET /compare` | the same as `/keywords`, with 2 to 5 keywords |
| `GET /pinterest` | `regions`, `lists`, `max` |
| `POST /run` | The Actor's whole input as JSON |

A tool call reads up to 5 countries, keywords and Pinterest regions and 200 rows within 50 seconds; an HTTP request 20 of them and 2,000 rows. A comparison counts each of its terms, Google Trends links are read as their terms and places, and a Google Sheet is read by runs only. A request stops at its time and size limits and names what it left in `notRead`. Tracking and alerts belong to scheduled runs: a request is answered on its own. On the live endpoint, platform usage is added to the price of the rows while the run serves you, and a request keeps reading until its limit even if the caller stops waiting.

### How much does it cost?

You pay **$1.00 per 1,000 results and $2.50 per 1,000 keywords on Apify's free plan**, less on paid plans, plus a start fee of $0.00005 per run. A result is a trend row or a Pinterest row; a keyword is a keyword row with data, which holds its whole timeline, its regions and its related queries (a keyword read in three countries is three keyword rows; a comparison of 3 is three). The CSV tables are free. **Platform usage is included** in runs of the Actor: there is no compute charge on top (the live endpoint is the exception: see above). A keyword Google has too little data for, and names that weren't found, are free.

| Apify plan | Per 1,000 results | Per 1,000 keywords |
|---|---|---|
| Free | $1.00 | $2.50 |
| Starter | $0.70 | $0.90 |
| Scale | $0.55 | $0.45 |
| Business and above | $0.40 | $0.30 |

| Run | Rows | Cost (Free plan) |
|---|---|---|
| The United States' top 5 trends with news | 5 results | $0.005 |
| One country's top 50 trends (the default) | 50 results | $0.05 |
| India's whole past-24-hour list | about 400 results | about $0.40 |
| 10 keywords, each with its timeline, regions and related searches | 10 keywords | $0.025 |
| 5 keywords in 3 countries | 15 keywords | about $0.04 |
| Pinterest Trends for the US, all five lists | about 53 results | about $0.05 |
| 10 keywords tracked daily | 10 keywords a day | about $0.75 a month |

Apify's free plan ($5 of monthly credit) covers about 5,000 trends or 2,000 keywords. To cap spending, lower Max results or set a **maximum cost per run** in the run options: the run stops at the limit and says so.

### What it can't do

- **Search counts for Explore keywords**: Google Trends gives every keyword 0 to 100, relative to its own peak in the range (or the group's, in a comparison). Nobody outside Google has the counts. Trending Now's search volume is Google's bucket (`200K+`), stored as its low end.
- **Identical numbers on every read**: Google answers Explore from a few samples that take turns every few minutes, so two reads minutes apart can differ by a point or two and in their rising searches (by half of them, once in eight reads of 'matcha'). Treat a one-point move as noise; tracking waits for a second run before calling a rising search new.
- **Related topics**: Google answered every request for them with an empty list (November 2026), so they aren't offered.
- **Pinterest's logged-in views**: "View search trends", its filters and searches for your own terms need a Pinterest login, so this Actor reads what the logged-out home page shows.
- **Google's Explore pages themselves**: their robots.txt closes them to automated visitors, so the Actor reads the data calls behind them. Each keyword row links to its Explore page for you to open.

Google calls the current Explore page "Classic Explore" and says it is expiring. If Google retires the data calls behind it, keyword reading moves to the new page's calls, which give interest over time and by region.

### FAQ

**Do I need a Google account, a Pinterest account or an API key?** No.

**How many keywords can I check?** Up to 200 per run, and up to 500 searches (each keyword or comparison in each place is one). Explore is read at about 4 to 5 seconds a search, so 200 take about 15 minutes.

**Can I get search volumes for keywords?** Not from Google Trends: it gives every keyword 0 to 100, relative to its peak. Trending Now's trends do come with Google's search volume bucket (`200K+`). For counts, pair this Actor's direction and growth with a keyword tool's monthly volumes.

**Can I use it with Google Sheets, Zapier, Make or n8n?** Yes, through Apify's integrations: start a run from a Zap or scenario and read its dataset, or send each run's rows to a Google Sheet. The CSV tables open in Google Sheets as they are (File > Import).

**Why does a keyword's value differ from what I see in my browser?** Google samples each answer, and the place, time range, category and search type all change the scale. Use the row's `exploreLink` to open the same view.

**How often can I run it?** Trending Now moves by the hour: hourly runs with Only changes catch trends as they start. Keywords move by the week over a 12-month range, so daily or weekly suits them.

**Is it legal to scrape Google Trends?** This Actor reads public, aggregated data and no personal data. Check your own use against the laws that apply to you and the sites' terms.

**Is this an official Google or Pinterest product?** No. This Actor isn't affiliated with or endorsed by Google or Pinterest. Google Trends is a trademark of Google LLC; Pinterest is a trademark of Pinterest, Inc.

### Other Actors by this developer

- [YouTube Channel Scraper & Tracker](https://apify.com/akhil_rajesh/youtube-channel-scraper): exact total views and video counts, subscribers and each channel's videos, Shorts and streams, plus new videos, title changes and growth with Slack, Discord or Teams alerts
- [Contact Details Scraper](https://apify.com/akhil_rajesh/contact-details-scraper): emails, phone numbers, social profiles and contact pages from any list of websites, with who runs each business
- [Telegram Channel Scraper & Monitor](https://apify.com/akhil_rajesh/telegram-channel-scraper): posts, views, reactions, comments and exact subscriber counts of public Telegram channels without a login, plus new, edited and deleted posts with Slack, Discord or Teams alerts
- [Google Ads Transparency Scraper & Monitor](https://apify.com/akhil_rajesh/google-ads-transparency-scraper): every ad a brand runs on Google Search, YouTube, Shopping and Maps, with ad copy and targeting, political ad spend and ads Google removed, plus Slack, Discord or Teams alerts for new and stopped ads
- [Craigslist Scraper & Tracker](https://apify.com/akhil_rajesh/craigslist-scraper): Craigslist listings by keyword, city, state or link with prices, cars and rentals, plus new listings, price drops and Slack, Discord or Teams alerts
- [Kijiji Scraper & Tracker](https://apify.com/akhil_rajesh/kijiji-scraper): Kijiji listings by keyword, city and category with prices and price drops, cars and rentals, plus Slack, Discord or Teams alerts for new listings
- [Zillow Price Tracker & Scraper](https://apify.com/akhil_rajesh/zillow-price-tracker): Zillow homes for sale, sold and for rent, with price-drop tracking, Slack alerts and an MCP server
- [App Store Reviews Scraper & API](https://apify.com/akhil_rajesh/app-store-reviews-scraper): App Store reviews from 175 countries with developer replies, filters, ratings and keyword rankings, plus Slack, Discord or Teams alerts for new reviews
- [Google Play Reviews Scraper & API](https://apify.com/akhil_rajesh/google-play-reviews-scraper): Google Play reviews with app versions, developer replies and filters, plus installs, rankings and Slack, Discord or Teams alerts for new reviews
- [Yahoo Finance Scraper](https://apify.com/akhil_rajesh/yahoo-finance-scraper): quotes, history, financials, options and news, with an MCP server
- [AliExpress Price Tracker & Scraper](https://apify.com/akhil_rajesh/aliexpress-price-tracker): AliExpress search results with store prices, units sold and price history
- [Amazon.ca Product & Trending Tracker](https://apify.com/akhil_rajesh/amazon-ca-product-trending-tracker): Amazon Best Sellers, prices, search positions and reviews on 23 marketplaces, with change tracking
- [Sports API - Live Scores, Stats & Odds (Soccer, NBA, NHL, NFL)](https://apify.com/akhil_rajesh/sports-scraper): scores, statistics and odds for seven sports
- [Tennis API - Live Scores, Stats & Odds (ATP, WTA, ITF)](https://apify.com/akhil_rajesh/tennis-scraper): live scores, results, match statistics, point-by-point and bookmaker odds for ATP, WTA, Challenger and ITF
- [Google Hotels Scraper - Hotel Price Tracker & Comparison](https://apify.com/akhil_rajesh/google-hotels-scraper): hotel prices from Google Hotels, with price tracking
- [Price Tracker Canada - Best Buy, Walmart, Canada Computers](https://apify.com/akhil_rajesh/bot-wall-price-scraper): live price comparison across major Canadian retailers
- [AutoTrader Canada Scraper - Used Cars & Prices](https://apify.com/akhil_rajesh/autotrader-canada-scraper): Canadian vehicle listings with price, mileage, trim and dealer
- [Indeed Jobs Scraper - Canada, US, UK, Australia & More](https://apify.com/akhil_rajesh/indeed-jobs-scraper): job listings from Indeed in eight countries
- [SEEK, JobStreet & JobsDB Jobs Scraper](https://apify.com/akhil_rajesh/seek-jobstreet-jobsdb-scraper): jobs from SEEK, JobStreet and JobsDB in Australia, New Zealand and six Asian markets, with pay as numbers, applicant counts and change tracking
- [Wellfound (AngelList) Jobs Scraper - Salary & Equity](https://apify.com/akhil_rajesh/wellfound-jobs-scraper): startup jobs from Wellfound (formerly AngelList Talent) with salary and equity ranges and an exact Y Combinator flag
- [Job Bank Scraper - Canada Jobs, Salary & NOC Codes](https://apify.com/akhil_rajesh/canadian-jobs-scraper): Canadian job postings with salary, employer, location and NOC code

# Actor input Schema

## `trendingCountries` (type: `array`):

Every search trending in each place, as trends.google.com/trending lists it: search volume, increase, when it started, whether it's still active, the searches Google groups under it and its categories. Pick countries, or type a region's code (US-CA, CA-ON, IN-MH) or name ('California', 'Ontario, Canada'). 125 countries and their regions.

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

Trending Now's time window. 24 hours lists about 700 US trends, 7 days about 3,400.

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

Only trends Google puts in these categories. Empty: all.

## `activeTrendsOnly` (type: `boolean`):

Only trends Google still marks as active (searches still rising).

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

Only trends with at least this many searches (Google's buckets: 100+, 200+, 500+, 1K+, 2K+, 5K+, 10K+ ... 1M+). Empty: any.

## `trendKeywords` (type: `array`):

Only trends whose search term, or a search Google groups under it, contains one of these words or phrases (whole words, accents and case aside). Watch a brand, a niche or a topic.

## `sortTrendsBy` (type: `string`):

The order trends are returned in, and so which ones Trends per country keeps.

## `maxTrendsPerCountry` (type: `integer`):

Most trends a run returns for each place, after the filters and the sort. With Only changes, it caps the changes reported for each place, and the rest come with the next run: raise it for a daily schedule.

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

Each trend's news articles (title, source, link, time), as the trend's page shows them. One more request per trend, so a run takes longer.

## `newsPerTrend` (type: `integer`):

How many articles each trend gets with Include news articles.

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

Interest over time for each keyword, with its average, peak, latest and growth (rising / steady / falling), interest by region, and related searches, top and rising (the breakouts). One row per keyword. Put terms in one entry with commas to compare them on one scale, as Explore does ('coke, pepsi'). A topic id from an Explore link (/m/07ykbs) reads the topic, and its row names it.

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

Put all the keywords on one scale, as Explore's comparison does: groups of 5, in the order typed. Each row's interest is then relative to the group's peak, and its regions show each keyword's share. Off: each keyword on its own 0-100 scale, except entries that list terms with commas, which are always compared.

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

Paste links from Google Trends: an Explore chart (trends.google.com/trends/explore?q=...) is read with its own terms, place, period, category and search type; a Trending Now page (trends.google.com/trending?geo=...) adds its place, with its window and filters when this form sets none; a Pinterest Trends link adds its region. Links are read, never opened.

## `keywordsSheet` (type: `string`):

A Google Sheet's link or id: its first column is read as keywords from row 2 (row 1 is the column's title), added to the keywords above. Share the sheet as 'Anyone with the link' (Viewer). The tab in the link (#gid=) is the one read.

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

The period for the keywords' interest over time. Start and end dates below override it.

## `timeframeStart` (type: `string`):

A custom period from this day (2004-01-01 or later, UTC). End date empty: until today.

## `timeframeEnd` (type: `string`):

The custom period's last day (UTC).

## `exploreGeo` (type: `string`):

Where the keywords' searches are counted: a country or region code or name (US, India, US-CA, 'Bavaria'). Several, separated by commas (US, GB, India): each keyword is read in each, one row per place. Empty: worldwide.

## `exploreCategory` (type: `string`):

Narrow the keywords to searches in one of Google's 1,133 categories, by name or id ('Coffee & Tea', 'Beauty & Fitness', 71). Empty: all categories.

## `searchType` (type: `string`):

Which searches count: web search, image search, news search, YouTube search or Google Shopping.

## `regionLevel` (type: `string`):

How finely interest by region is broken down. Auto: Google's own (countries worldwide, regions in a country). Metro areas exist for the United States only.

## `exploreData` (type: `array`):

What each keyword row holds. Empty: all three.

## `pinterestRegions` (type: `array`):

What Pinterest users search and save, from trends.pinterest.com: the fastest-growing searches with their weekly, monthly and yearly change, trends in the spotlight, shopping trends, editors' picks and seasonal moments. Pinterest shows 26 regions; a country it groups with others (Australia, Ireland, Sweden) reads its group.

## `pinterestLists` (type: `array`):

Which of Pinterest Trends' lists to read. Empty: all five. Pinterest shows trends in the spotlight, shopping trends and editors' picks for the United States, Canada, and Great Britain and Ireland only; other regions get their fastest-growing searches and moments.

## `maxResults` (type: `integer`):

Most charged rows a run returns (trends, keywords with data, Pinterest rows), shared between the searches. With Only changes: most changes; the rest come with the next run.

## `onlyChanges` (type: `boolean`):

Monitor: each run returns only what's new since the last run with the same settings: new trends in a country, a keyword's new rising searches, new entries on Pinterest's lists, moments taking off. Keyword rows are always returned, with what changed marked. The first run saves what's listed as the baseline and returns it as firstRun. Schedule it (every hour, every day).

## `changeTypes` (type: `array`):

With Only changes. Empty: new trends, new rising searches, new on Pinterest, moments taking off.

## `alertWebhookUrl` (type: `string`):

Post each run's changes to Slack, Discord or Microsoft Teams (their incoming-webhook URL), or to any HTTPS endpoint that takes JSON (Zapier, Make, n8n). Switches on Only changes. The first run posts a short 'alerts are set up' message.

## `telegramBotToken` (type: `string`):

Post each run's changes to a Telegram chat through your own bot: its token from @BotFather (123456789:AAH...). Add the bot to the chat (to a channel as an admin that can post). Switches on Only changes.

## `telegramChatId` (type: `string`):

Where the bot posts: a public channel or group (@mychannel), or a chat id (-1001234567890 for a private group or channel; your own id for a direct message, from @userinfobot).

## `alertChangeTypes` (type: `array`):

Which changes to post (up to 50 a run, the most important first; all are in the dataset). Empty: new trends, new rising searches, new on Pinterest, moments taking off.

## `historyName` (type: `string`):

Keep a separate history for this monitor (a-z, 0-9 and hyphens). Leave empty to share the default one: histories are kept per search and settings anyway.

## `proxy` (type: `object`):

Not needed: Google Trends and Pinterest Trends answer Apify's servers directly. You can use your own proxies or Apify's datacenter proxies; residential proxies aren't available in this Actor.

## Actor input object example

```json
{
  "trendingCountries": [
    "US"
  ],
  "trendingHours": "24",
  "sortTrendsBy": "relevance",
  "maxTrendsPerCountry": 50,
  "newsPerTrend": 3,
  "keywords": [
    "matcha",
    "protein coffee"
  ],
  "timeframe": "today 12-m",
  "searchType": "web",
  "regionLevel": "auto",
  "pinterestRegions": [
    "US"
  ],
  "maxResults": 1000
}
```

# Actor output Schema

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

No description

## `trending` (type: `string`):

No description

## `keywords` (type: `string`):

No description

## `related` (type: `string`):

No description

## `regions` (type: `string`):

No description

## `pinterest` (type: `string`):

No description

## `changes` (type: `string`):

No description

## `notFound` (type: `string`):

No description

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

No description

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

No description

## `relatedQueriesCsv` (type: `string`):

No description

## `allData` (type: `string`):

No description

## `runSummary` (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 = {
    "trendingCountries": [
        "US"
    ],
    "keywords": [
        "matcha",
        "protein coffee"
    ],
    "pinterestRegions": [
        "US"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("akhil_rajesh/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 = {
    "trendingCountries": ["US"],
    "keywords": [
        "matcha",
        "protein coffee",
    ],
    "pinterestRegions": ["US"],
}

# Run the Actor and wait for it to finish
run = client.actor("akhil_rajesh/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 '{
  "trendingCountries": [
    "US"
  ],
  "keywords": [
    "matcha",
    "protein coffee"
  ],
  "pinterestRegions": [
    "US"
  ]
}' |
apify call akhil_rajesh/google-trends-scraper --silent --output-dataset

```

## MCP server setup

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