# Trending Keywords for Your Niche: AI Google Trends Alerts (`rich_minds/trending-keywords-ai`) Actor

First 25 trends free. Find trending keywords and topics in your niche, pay per qualified trend: Black Friday 2026 & holiday peaks, rising & breakout keywords with AI angles. Works with MCP & AI agents. Free demo on any plan; live search runs on your Apify account, any plan that runs Store Actors.

- **URL**: https://apify.com/rich\_minds/trending-keywords-ai.md
- **Developed by:** [Rich Minds](https://apify.com/rich_minds) (community)
- **Categories:** SEO tools, Marketing, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 qualified trend (rules only)s

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

## Trending Keywords for Your Niche: AI Google Trends Alerts

**Your niche's new trending keywords and Black Friday peaks, in your inbox every week.**

⚡ First **25 trends free** · 💵 from **$0.003** per qualified trend · 🤖 **≈ $0.015 all in** with AI · ⏱️ a week of 4 countries + 5 seeds read in 10 s

![One row per trend for your niche — country, urgency, relevance, search volume, momentum and the angle to publish](https://api.apify.com/v2/key-value-stores/jK1jums9v5YW91vBr/records/shortlist.svg)

> **Try it in 30 seconds.** Click **Try it** — the form is pre-filled with 7 sample Google Trends rows, free. Then type
> your niche keywords (or pick one of 14 ready niches) and press **Start**: the first **25 qualified trends** are free;
> off-niche searches cost nothing here.
> → [How to use it](#-how-to-use-it) · [What a run costs](#-pricing--what-a-run-really-costs) · [What the AI adds](#-what-the-ai-tier-adds) · [Run it weekly](#-run-it-weekly--google-trends-alerts-on-a-schedule)

### ⚡ At a glance

| | |
|---|---|
| **What you get** | This week's trending searches in your countries that concern your niche, momentum for your own keywords — urgency, evidence and a headline to publish |
| **You provide** | a few niche keywords (e.g. coffee, pizza), the countries, optionally seed keywords |
| **Output** | a ranked sheet (Excel / CSV / Sheets) and an e-mail / Slack digest |
| **Typical run** | first run = the last 7 days of US, GB, CA (≈ 2,300 searches, free); measured 2026-09-29: 13 food, 16 travel, 1 fitness match — a food blog + 5 seeds: 28 qualified in 10 s |
| **Cost of that run** | $0.13 rules only · $0.48 with the AI (5 seeds × $0.01 + 28 trends × $0.003, or × $0.009 + ≈ $0.0062 tokens); your first 25 trends free |
| **Agencies** | pick **Agency roster**, edit its 2 example brands: 10 brands weekly ≈ $16 a month with the AI and a white-label report each — vs one Exploding Topics Business plan at $249 a month |
| **Free tier** | first 25 qualified trends per account and the first 5 digests, no start fee of ours |
| **Keys / setup** | Apify model access: no key · Other plans: your own key — free Gemini / Groq = 1–3 AI verdicts per run, paid = every trend |
| **Works with** | Schedules, e-mail, Slack, Teams, Discord, webhooks, Sheets, Make / n8n / Zapier, MCP & AI agents |

### 🎯 What this Actor does

It reads Google Trends directly — each country's **Trending Now** list and your seed keywords' curves — on any Apify
plan, and keeps only the trends worth your next post.

#### 🎄 Black Friday trending keywords and holiday trending keywords

The **Black Friday & holiday** preset watches decorations, costumes and gifts in 4 countries and reads 5 seasonal
seeds on 5-year curves — 7 days, 2026-09-29: 4 of 2,620 searches matched ("m\&s christmas food 2026" …).

![A real 7-day read for a holiday shop — matching trends of thousands, each with its own Google Trends link](https://api.apify.com/v2/key-value-stores/jK1jums9v5YW91vBr/records/live-holiday.svg)

- **Seasonal keyword calendar** (`calendarMode`) — up to 50 keywords on 5-year curves → the month each peaks and the
  date to start publishing, page + CSV: $0.02 a keyword, one-off.
- **Instant alerts** (`trendAlerts`) — each publish-now trend above your bar posted to Slack / Teams at once, $0.01.

#### 🔎 Find trending topics in your niche — filtered for free

A country's feed is hundreds of searches of sport, celebrities and news. Your niche keywords are matched in each search
and its related searches; off-niche, excluded, small, sensitive and repeated searches drop out **before** anything is
charged. A narrow niche (< 3 matches) gets its keywords read as seeds, free.

#### 📈 Rising keywords and breakout keywords — a momentum verdict from the curve

Your seed keywords get **breakout / rising / seasonal peak soon / stable / declining** with the % change and the next
seasonal peak, plus up to 3 rising related queries each ("+4,250 %", "Breakout").

#### ✍️ Discover content ideas from Google Trends — an angle per trend

The AI says why the trend matters to your audience and writes a ≤ 90-character headline in your format with ≤ 5 target
keywords copied verbatim from the trend's own searches; without it you get a template angle. Every row links its own
Google Trends page.

### 🚀 How to use it

1. **Click Try it** — 7 sample rows run free: 4 qualify, the NFL game, the hurricane and a recall are dropped.
2. **Type your niche keywords** (or pick a preset) — they replace the sample and start the live read; the first run
   reads 7 days, a schedule the last 24 h.
3. **Keep AI verdict and content angle on and press Start** — your first 5 trends get live AI verdicts on any plan;
   all 25 free trends with Apify model access or a paid own key.
4. **Add your e-mail and schedule it weekly** — your first real run links a saved task.

![The Content plan view — urgency, the angle, the format, target keywords and why it matters](https://api.apify.com/v2/key-value-stores/jK1jums9v5YW91vBr/records/content-plan.svg)

#### 🏢 Agency in 3 steps

1. Pick **Agency roster** in *Start from a ready niche search*.
2. Edit the 2 example clients in **Agency clients** — name, niche keywords, countries, the client's e-mail.
3. Press **Start**, then schedule it: each client gets its own search, memory, digest and a white-label report
   ($0.10 per report with new trends).

![The agency form: pick Agency roster, edit the two example clients, press Start](https://api.apify.com/v2/key-value-stores/jK1jums9v5YW91vBr/records/agency-roster.svg)

📚 **Learn more:** [Step-by-step tutorial — find trending keywords for your niche with this Actor](https://api.apify.com/v2/key-value-stores/jK1jums9v5YW91vBr/records/tutorial.html)

### 🆚 Why this instead of running Google Trends Scraper yourself?

#### vs other Google Trends Actors for "trending keywords"

Store API 2026-09-28; the same read — a week of US, GB, CA, AU (2,620 searches), 13 for a food blog (2026-09-29):

| | **This Actor** | [vnx0 Google Trends Daily Scraper](https://apify.com/vnx0/google-trends-scraper) | [steadyfetch Breakout Keywords](https://apify.com/steadyfetch/breakout-keywords-scraper) | [cybermax Swellmeter](https://apify.com/cybermax/google-trends) |
|---|---|---|---|---|
| **Price** | $0.003 · $0.009 AI per qualified trend, 25 free | $0.0012 per row | $0.006 per breakout keyword | $0.003 per keyword |
| **That week, all in** | $0.04 for the 13 rules only · $0.20 with the AI; the 2,620 read free | ≈ $3.14 for the 2,620 rows — you filter by hand | seeds only — no trending feed | your own keywords only, no feed |
| **Niche filter** | yes — rules, AI on top | no (its README) | no | no |

Running `data_xplorer/google-trends-fast-scraper` yourself (our fallback) for the same week + 5 seeds: ≈ $0.20 of runs
and 2,620 raw searches to read by hand; here 28 ranked trends for $0.13 rules only.

**💸 Exploding Topics alternative and Treendly alternative — no seat.** Exploding Topics: $39/month, Business
$249/month ([explodingtopics.com/pricing](https://explodingtopics.com/pricing), checked 2026-09-28); Treendly Pro:
$8/month billed yearly ([treendly.com/pricing](https://treendly.com/pricing), checked 2026-09-28). The food example
weekly here: ≈ $0.60 a month rules only, ≈ $1.50 with the AI.

**Google Trends (Trending now + Explore)** is free and wins for a one-off look and charts (FAQ below).

### 💵 Pricing — what a run really costs

Pay per result: **one event per qualified trend**; the extras below never grow with the trends.

| Event | When it is charged | Price |
|---|---|---|
| `free-tier` | your first 25 qualified trends on this Actor | **$0.00** |
| `qualified-trend-basic` | AI off — relevance with evidence, urgency, momentum, template angle | **$0.003** |
| `qualified-trend-ai` | AI on — plus the AI check, why it matters, sensitivity, the AI angle | **$0.009** |
| `seed-verdict` | one of your seed keywords read — curve, verdict, rising queries | **$0.01** |
| `digest-delivered` | a digest with ≥ 1 new trend reached you — the first 5 free | **$0.02** |
| `client-report` | one white-label report per agency client with new trends | **$0.10** |
| `trend-dossier` | one brief per top trend (`dossierTopN`) | **$0.03** |
| `trend-alert` | one instant alert per publish-now trend (`trendAlerts`) | **$0.01** |
| `calendar-seed` | one keyword on the seasonal calendar (`calendarMode`) | **$0.02** |

**Never charged by us:** off-niche trends, excluded words, small volumes, sensitive topics, repeats from earlier runs,
a narrow niche's own seed reads, the preview, demo rows; no start fee. Only a read Google refuses falls back to the
Store scraper on your account ($0.022 a run), capped by Max source spend.

**How that compares** — $0.003 is 1.2× the Store median ($0.0025 across the 10 priced Actors of the "trending
keywords" search): you pay per qualified trend, never per raw row — one qualified trend replaces ≈ 94 raw trending
searches read (2,620 → 28).

**Worked example** (measured 2026-09-29) — the food preset, 4 countries × 7 days (2,620 searches, free) + 5 seeds
($0.05) → 28 qualified × $0.003 → **$0.13 total, ≈ $0.005 per trend**. AI on: 28 × ($0.009 + ≈ $0.0062 tokens) +
$0.05 → **$0.48 total, ≈ $0.017 per trend**.

**AI tier, all in:** ≈ $0.0152 per trend ($0.009 + ≈ $0.004–0.006 tokens: 1,173 / 539 and 1,277 / 984 in / out
measured 2026-09-28 on Groq and Gemini, at Claude Haiku 4.5 rates; the higher one is used) — billed via Apify's model
access or your own key.

**At volume** — an agency, 10 clients weekly (5 seeds each, AI): ≈ $3.80 a week with 10 client reports (≈ $16 a
month). E-commerce: a 50-keyword Q4 calendar once ($1.00), then 20 seeds weekly ≈ $0.81 a week with the AI.

### 🤖 What the AI tier adds

<details><summary>The same trend as JSON — AI off vs AI on</summary>

The same trend, AI **off** (the demo run, 2026-09-28):

```json
{"name": "wall pilates", "urgency": "publish_now", "ruleScore": 80, "score": 80, "label": "hot", "fitScore": null,
 "whyItMatters": null, "audienceIntent": "informational", "sensitivity": "none",
 "suggestedAngle": "Wall pilates: what it means for your home fitness equipment store",
 "targetKeywords": ["wall pilates", "wall pilates workout", "28 day wall pilates challenge", "wall pilates for beginners"]}
```

AI **on** — the verdict the free demo shows as its labelled sample (`aiModel: sample`), same grounding rules as a live
run with `anthropic/claude-haiku-4.5`:

```json
{"name": "wall pilates", "urgency": "publish_now", "ruleScore": 80, "fitScore": 88, "score": 88, "label": "hot",
 "isRelevant": true, "audienceIntent": "informational", "sensitivity": "none",
 "whyItMatters": "Related searches 'wall pilates for beginners' and '28 day wall pilates challenge' suggest beginners want a home routine — exactly the pilates and home-workout buyers of your store.",
 "suggestedAngle": "Wall pilates for beginners: a 28-day home plan with a mat and light dumbbells",
 "contentFormat": "blog",
 "targetKeywords": ["wall pilates", "wall pilates for beginners", "28 day wall pilates challenge", "wall pilates workout"]}
```

</details>

The AI confirms the trend fits your niche, turns it into a headline and drops what it cannot connect — ≈ 4 min per
trend by hand, timed: reading the related searches of the 7 demo trends and drafting a headline each (2026-09-28).
`dossierTopN` adds a one-page brief for the top trends.

**Try the AI on any plan:** the demo shows labelled sample AI verdicts; your first 5 real trends get live AI verdicts
on any plan; all 25 free trends with Apify model access or a paid own key. A free Gemini key
([aistudio.google.com/apikey](https://aistudio.google.com/apikey)) gives 1–3 AI verdicts per run (the rest are basic
rows); a paid Gemini / Groq key (billing on) assesses every trend.

### ⚙️ Input

Type your niche keywords (or pick a preset), keep the countries and AI on — everything else has a default.

<details><summary>The fields a buyer decides on, with their defaults</summary>

| Field | Type | Default | What it does |
|---|---|---|---|
| `nicheKeywords` | string\[] | — | Words of your niche; typed next to the sample = the live read |
| `goalDescription` | string | — | Your niche in one sentence, for the AI |
| `countries` | string\[] | `["US", "GB", "CA"]` | One trending feed per country, read free |
| `minScore` | 0–100 | `50` | Relevance below it = not delivered, not charged |
| `maxQualified` | integer | `50` | Cap on output and on this Actor's charge |
| `maxDiscoveryChargeUsd` | number | `0.5` | Cap on Store fallback / TikTok runs on your account |
| `enableAi` | boolean | `true` | AI tier on / off |
| `notifyEmail` | string | — | The digest by e-mail after every run with new trends |
| `seedKeywords` | string\[] | — | Your keywords, each with a momentum verdict ($0.01 each) |
| `previewOnly` | boolean | `false` | Free 7-day preview: how many trends last week, what that week costs |
| `calendarMode` | boolean | `false` | Seasonal keyword calendar of your seed keywords, $0.02 each |
| `clients` | object\[] | 2 examples | Agencies: one search, memory and white-label report per client |
| `trendAlerts` | boolean | `false` | Instant alert per publish-now trend ≥ `alertMinScore` (`80`) |

In the **Input** tab: `preset`, `trendingTimeframe` (24 h), `includeRisingQueries`, `dossierTopN`, `dedupeTtlDays`,
`reportBacklink`, `googleCategories`, `maxTrendsPerCountry`,
`maxSeedKeywords`, `seedTimeframe`, `seedGeo`, `momentumFilter`, `nicheSeedFallback`, `excludeKeywords`,
`minTrendVolume`, `includeSensitive`, `targetFlags`, `suppressionList`, `includeRejected`, `contentFormats`, the model,
the chat webhooks, `webhookUrl`, `dedupeStoreName`, `historyDatasetName`, `trendingSource`, `autoSwitchToLive`,
`includeTiktok` + `tiktokMaxHashtags` (30).

</details>

Flags for `targetFlags`: `niche_in_term`, `niche_in_related`, `high_volume`, `breakout`, `seasonal_peak`, `rising_query`,
`commercial_intent`, `sensitive_topic` — `nicheInTerm` works too ([what each means](docs/API.md#flags-for-targetflags)).

### 📤 Output

One dataset item per qualified trend. **Views**: `Shortlist` (with when Google saw it and its search volume),
`Content plan`, `Seed momentum` and `Brand safety`.

<details><summary>Every field of a row (the AI-off and AI-on rows are shown above)</summary>

| Field | Description |
|---|---|
| `itemId`, `dedupeKey` | Identity: short hash of `<trendType>:<geo>:<term>[:<verdict>]` |
| `name`, `url`, `trendType` | The term, its OWN Google Trends (or TikTok) page, the row type |
| `feedUrl`, `platform`, `client` | The country feed, google / tiktok, the agency client |
| `geo`, `country`, `rank`, `trendVolume`, `trendVolumeNumber`, `relatedTerms`, `timeframeHours`, `fetchedAt` | As Google reported them (null if not) |
| `seedKeyword`, `risingGrowthPercent`, `risingValue` | The seed and a rising query's growth |
| `momentumVerdict`, `changePercent`, `currentValue`, `peakValue`, `peakPeriod`, `nextSeasonalPeak`, `dataGranularity`, `timeline` | A seed's verdict from its curve |
| `urgency`, `matchedNicheTerms`, `relevanceReasons`, `flags`, `targetFlagsMatched` | When to act, the rule evidence |
| `fitScore`, `isRelevant`, `scoreReasons`, `whyItMatters` | The AI verdict (null on basic) |
| `audienceIntent`, `sensitivity`, `sensitivityReason` | AI, else patterns and a word list |
| `suggestedAngle`, `contentFormat`, `targetKeywords` | The headline, its format, verbatim keywords |
| `ruleScore`, `score`, `label` | Rule relevance, final relevance, hot / warm / cold |
| **Canonical fields** | `url` and `score` (the relevance 0–100) are the fields to map |
| **Which score to trend on** | `ruleScore` — the same rule scale on every row and run; `score` is the AI relevance where `aiModel` is set: sort one run on `score`, trend across runs on `ruleScore` |
| `status`, `charged`, `chargedEvent`, `billedAs`, `aiModel`, `sourceActor`, `source`, `scrapedAt` | Row status, billing (`billedAs` = the price tier), provenance |

</details>

**Upsert key for a CRM or Sheet:** `dedupeKey` — trend type + country + normalised term (+ a seed's verdict), the
cross-run memory's key; `itemId` is its short hash.

**Which record to read:** `OUTPUT` (= `RUN_SUMMARY`) holds the funnel, `chargedEvents`, `aiCoverage` and
`seedVerdicts`; the `DIGEST`, the `REPORT` page (`OUTPUT.reportUrl`) and `CALENDAR` sit next to it
([every record](docs/API.md#key-value-records)).

⭐ **Found it useful? A review on the Store helps others find it** — it takes a minute on the Actor's page.

### 🔁 Run it weekly — Google Trends alerts on a schedule

1. **Open the saved task and click Schedule** after your first real run, with `notifyEmail` — every run with new
   trends e-mails the digest (the first 5 free, then $0.02).
2. Leave `dedupeAcrossRuns: true` — you pay **only for new trends**, per search; a recurring trend (Halloween
   costumes each October) returns after `dedupeTtlDays` (60); the digest says what changed ("qualified 18 → 23").
3. Chat webhooks post the digest, `trendAlerts` pings at once, `historyDatasetName` keeps a log; Google Sheets fills
   your copy of the [tracker sheet](https://api.apify.com/v2/key-value-stores/jK1jums9v5YW91vBr/records/tracker.csv) (`dedupeKey` first to upsert on).

Weekly cost is the new trends only: the food example ≈ $0.13 a week rules only, ≈ $0.48 with the AI (the first run;
later weeks read 24 h). A scheduled run adds last week's best trends as seeds (`OUTPUT.seedsRolled`).

#### 🎯 Try it for your niche

Pick one in **Start from a ready niche search** (`preset`) and press Start — your own values win. 14 niches, from
personal finance (28 matches a week) to home decor (1 + its seeds), each measured on a real 7-day read (2026-09-29):

<details><summary>The 14 ready niche searches with their measured 7-day matches</summary>

| Niche | Measured, 7 days | Preset |
|---|---|---|
| Black Friday & holiday | 4 matches + 5 seed verdicts | [`ecommerce-seasonal`](docs/img/preset-ecommerce-seasonal.json) |
| Personal finance | 28 matches | [`personal-finance`](docs/img/preset-personal-finance.json) |
| B2B SaaS & AI | 21 matches | [`b2b-saas`](docs/img/preset-b2b-saas.json) |
| Travel | 16 matches | [`travel`](docs/img/preset-travel.json) |
| Gaming | 16 matches | [`gaming`](docs/img/preset-gaming.json) |
| Food & recipes | 13 matches | [`food-recipes`](docs/img/preset-food-recipes.json) |
| Agency: tech news | 11 matches | [`agency-tech-news`](docs/img/preset-agency-tech-news.json) |
| Crypto | 7 matches | [`crypto`](docs/img/preset-crypto.json) |
| Fitness content | 3 matches + 3 seed verdicts | [`fitness-content`](docs/img/preset-fitness-content.json) |
| Pets | 3 matches + 2 seed verdicts | [`pets`](docs/img/preset-pets.json) |
| Parenting | 3 matches + 2 seed verdicts | [`parenting`](docs/img/preset-parenting.json) |
| Beauty & skincare | 1 match + 3 seed verdicts | [`beauty-skincare`](docs/img/preset-beauty-skincare.json) |
| Home decor & garden | 1 match + 3 seed verdicts | [`home-decor`](docs/img/preset-home-decor.json) |
| Agency roster | 9 + 10 qualified | [`agency-roster`](docs/img/preset-agency-roster.json) |

</details>

### 🔌 Integrations, automation and API

- **Webhook** — `webhookUrl` POSTs each trend (or batches) to Zapier, Make, n8n or your CMS, with `webhookHeaders`.
- **Slack, Teams, Google Chat, Discord** — `slackWebhookUrl`, `teamsWebhookUrl`, `googleChatWebhookUrl` or
  `discordWebhookUrl` posts one readable digest per run, with links.
- **HubSpot / Notion / Airtable** — a Make / Zapier step: title = `suggestedAngle`, notes = `whyItMatters` + `url`,
  **upsert on `dedupeKey`**.
- **Google Sheets / MCP** — the **Integrations** tab, or any MCP client; `{}` runs the demo.

Every run writes `OUTPUT.mode` (`demo` / `live` / `preview` / `calendar` / `clients` / `list` / `dataset`) — the full
"Which call runs what" table, every run outcome and the webhook payloads are in the [API reference](docs/API.md).

<details><summary>Python, JavaScript and MCP</summary>

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("rich_minds/trending-keywords-ai").call(
    run_input={
        # free first call: {} or {"sourceMode": "list", "itemsList": [{"term": "…"}]}
        "nicheKeywords": ["pilates", "yoga", "protein"], "countries": ["US", "GB"],
        "goalDescription": "Home fitness equipment store for women 30–50",
        "maxQualified": 50,
        "maxDiscoveryChargeUsd": 0.5,  # spend cap on your account for the Store fallback runs
    },
    timeout_secs=3600,  # the AI path with your own key can take minutes (FAQ)
    # build="0.1.3",  # pin the build your pipeline was tested with (Changelog); omit for the latest
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["score"], item["label"], item["urgency"], item["url"])
```

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('rich_minds/trending-keywords-ai').call({
    // free first call: {} or { sourceMode: 'list', itemsList: [...] }
    nicheKeywords: ['pilates', 'yoga', 'protein'], countries: ['US', 'GB'],
    goalDescription: 'Home fitness equipment store for women 30–50',
    maxQualified: 50, maxDiscoveryChargeUsd: 0.5, // spend cap for the Store fallback runs
}, { timeout: 3600 /* , build: '0.1.3' — pin the tested build */ });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((i) => [i.score, i.label, i.url]));
```

```json
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?actors=rich_minds/trending-keywords-ai"}}}
```

**Minimal agent input:** `{"nicheKeywords": ["pilates", "yoga", "protein"], "countries": ["US"], "goalDescription": "Home fitness equipment store for women 30–50", "maxQualified": 20, "maxDiscoveryChargeUsd": 0.5}`

Webhook: `webhookBatchSize: 1` sends `{"event": "trend.qualified", "trend": {…}, "runId": "…"}` per trend; a larger
size sends `{"event": "trends.qualified", "trends": [{…}, …], "runId": "…"}` per batch. A 429 / 5xx is retried once
after 2 s; a failed POST is counted in `OUTPUT.webhook.failed` and never fails the run.

</details>

#### List-mode rows — what a pasted record needs

`sourceMode: "list"` runs on any Apify plan: paste Google Trends rows you already have into `itemsList`
([every row format](docs/API.md#list-mode-rows--what-a-pasted-record-needs)).

<details><summary>The main fields of a pasted row</summary>

| Field | Needed? | What it enables |
|---|---|---|
| `term` | required (trending row) | the row's `name`; `title`, `query` or `name` work too |
| `geo`, `related_terms`, `trend_volume` | optional | country, related-search relevance, volume filters |
| `keyword` + `timeline_data` | required (seed row) | a `seed_keyword` row with its momentum verdict |

</details>

#### Run outcomes — what your integration sees

<details><summary>The outcomes that change what you receive (all of them: API reference)</summary>

| Outcome | Run status | `OUTPUT` | Charged? |
|---|---|---|---|
| Free demo | SUCCEEDED | `demo` | no |
| Nothing matched | SUCCEEDED | `qualified: 0`, `suggestedTerms` | seed verdicts only |
| Source failed (every read) | FAILED | `sourceError` | no |
| Source partial (a Store run timed out) | SUCCEEDED | `sourceStatus` | per qualified trend |
| AI unavailable | SUCCEEDED | `aiError`, `aiCoverage` | basic price, free trends first |

</details>

### 👥 Who is it for?

| You are… | You run it to… | Start with |
|---|---|---|
| E-commerce / brand team | catch Black Friday and holiday demand early; plan Q4 by each keyword's peak | `ecommerce-seasonal`, `calendarMode` |
| Content marketer / SEO lead / newsletter writer | find trending topics in your niche weekly, with an angle | `nicheKeywords` or a niche preset |
| Agency / social media manager | one task for all clients, a white-label report each | `agency-roster`, `clients` |
| AI-agent / automation builder | a typed, deduplicated trend feed for your writer agent | the minimal agent input |

### 🧠 How the AI works

One typed call per trend, grounded in the trend's own searches; counts always come from code.

<details><summary>What the model sees, the grounding rules and the fallback</summary>

- **What it sees** — your niche sentence and keywords, the term, ≤ 10 related searches, country, volume, a seed's
  verdict; only trends with rule relevance ≥ Minimum relevance − 20, up to `aiCandidateMultiplier` × `maxQualified`.
- **Grounded** — it may only cite the term, its related searches and your niche; target keywords not in the trend's
  searches are dropped; an unconnected trend is `isRelevant: false`, scored ≤ 20, never billed.
- **Fallback** — a model error never fails the run: the rule verdict stays, at the basic price; an own key stops after
  60 s of rate-limit waiting. Default model `anthropic/claude-haiku-4.5`.

</details>

### 🔒 Data, compliance and limits

Google Trends data is public, aggregated search interest — no personal data, no login. Volumes are Google's labels
(50K+), the curve is 0–100 relative interest; the reader asks for what the Trending Now and Explore pages show, one
seed at a time. Use the output within Google's terms and GDPR / CCPA.

### ❓ FAQ

**What will my first real search cost?** Feeds free, $0.01 per seed keyword, the first 25 trends free — the food
example: $0.13. Store fallback runs are capped by `maxDiscoveryChargeUsd` ($0.50).

**How do I find trending topics in my niche?** Type your niche keywords or pick a preset; **Free preview** shows last
week's count and its weekly price first.

**Where do I find Black Friday trending keywords and holiday trending keywords?** Pick the **Black Friday & holiday**
preset; for Q4 planning run `calendarMode` on your product keywords — the month each peaks and when to start.

**Can I use it for Google Trends keyword research?** Yes — `seedKeywords` get the curve's verdict, % change, peak and
next seasonal peak; `includeTimeline` adds the curve.

**How do I find rising keywords and breakout keywords?** Seed keywords with the `rising` / `breakout` verdicts, plus
their rising related queries ("+4,250 %", "Breakout"), on by default.

**How do I discover content ideas from Google Trends?** Keep the AI on: every trend gets a headline, its format and
target keywords; `dossierTopN` adds a one-page brief for the top ones.

**How do I get Google Trends alerts for my niche?** Schedule the saved task with `notifyEmail` or `slackWebhookUrl` —
only new trends arrive; `trendAlerts` pings each publish-now trend at once.

**Is this an Exploding Topics alternative?** For search trends, yes — per trend, no seat; `includeTiktok` adds TikTok.

**Why pay when Google Trends is free?** Google Trends wins for a one-off look, charts and comparing 5 terms; this
adds the niche filter, memory, verdicts, schedule, alerts and the angle.

**How long does a run take?** One row per mode — size your `timeoutSecs` from it:

<details><summary>Run time per mode, with the <code>timeoutSecs</code> to set</summary>

| Mode | Time | `timeoutSecs` |
|---|---|---|
| Free demo (7 sample rows) | 0.1 s measured | 120 |
| Trending feeds only | 1.7 s for 3 countries × 7 days, measured 2026-09-29 | 120 |
| Live read with seeds, rules only | 9.9 s for 4 countries + 5 seeds, measured 2026-09-29 | 300 |
| AI via Apify's model access, or a paid own key | ≈ 5–10 s per trend, 8 at a time (estimate) | 1200 |
| AI with a free own key (`byok`) | measured ≈ 1.1–187.7 s per trend: 1.1 s groq:openai/gpt-oss-120b, 187.7 s google:gemini-3.6-flash (2026-09-28) — the rest rule-scored after 60 s of waiting | 9565 for 50 trends |

Worst case with a slow own key: the AI stops after 60 s of waiting, so 100 trends end within the source time

- ≈ 2 min; `OUTPUT.timing` has every phase.

</details>

**What does "qualified" mean?** Relevant to your niche (≥ `minScore`), past every free filter, not sensitive, and for a
seed a verdict you selected.

**What happens if nothing matches my filters?** 0 rows, no trend charged, and words to add or exclude
(`OUTPUT.suggestedTerms`).

<details><summary>More answers — plans, the free units, duplicates</summary>

**Which Apify plan do I need?** Any plan runs the demo, the preview, the trending feeds and the seed keywords (built-in
reader); a read Google refuses and the built-in AI need a plan that runs Store Actors (else `llmProvider: "byok"`).

**Do rule-scored trends use my free ones?** Yes, while the AI is unavailable — except the last 5 (the AI reserve),
kept so your first AI-assessed trends are free too (`OUTPUT.chargeSplit.freeKeptForAi`).

**Will I be charged for the same trend twice?** Not for the same search with `dedupeAcrossRuns` on (default): every
charged trend is remembered on your account, per search, for `dedupeTtlDays` (60 — a recurring trend returns after it).
Adding or changing a country or keyword starts a new memory (`OUTPUT.dedupeStore.newMemory`) — keep one
`dedupeStoreName` to carry it over. A seed comes back only with a new verdict; each set of type filters
(`momentumFilter`, `targetFlags`, `contentFormats`) keeps its own memory.

</details>

### 🧩 More Actors from the same developer

Not quite your use case? The same pay-per-qualified-result model, closest to this Actor's buyers first:

- **[Reddit Brand Monitoring](https://apify.com/rich_minds/reddit-brand-monitoring-ai)** — hear what your niche says about a trend on Reddit, the thread to answer first.
- **[Threads Brand Monitoring](https://apify.com/rich_minds/threads-brand-monitoring-ai)** — see who posts about your brand on Threads while a trend peaks.

### 🆘 Support

Open an issue on the Actor's page — buyer requests ship first.

### 📝 Changelog

- **0.1.3** (2026-09-29) — seed keywords read directly ($0.01 each, any plan); the first run reads 7 days of US, GB,
  CA; a seasonal calendar and instant alerts; 14 ready niches and an agency roster; the preview quotes its price.
- **0.1.2** (2026-09-29) — trending feeds read directly, free; a 7-day preview; agency clients in one task.
- **0.1.1** (2026-09-29) — first release: trending searches filtered to your niche, seed momentum, AI angles.

# Actor input Schema

## `nicheKeywords` (type: `array`):

Words your audience cares about. Trending searches are kept only when one appears in the search or its related searches; the rest are dropped free. Typed next to the free demo, they start the live read — trending feeds on any Apify plan, seed keywords on a plan that runs Store Actors, capped by <b>Max source spend</b>.

## `goalDescription` (type: `string`):

Who you write or sell for. The AI judges every trend against this sentence and writes the angle in your voice. Example: <i>Home fitness equipment store for women 30–50</i>.

## `preset` (type: `string`):

Pick a niche and press Start: it fills the fields you left empty and reads Google Trends live (spend-capped by <b>Max source spend</b>). Your own values always win. <b>Custom</b> = fill the fields yourself.

## `countries` (type: `array`):

One Google Trends trending feed per country, read free on any Apify plan by the built-in reader. US, GB and CA by default — one market over 24 hours often has no trend for a niche. Add up to 10 for an agency or a multi-market brand.

## `minScore` (type: `integer`):

The field that decides what you pay: trends less relevant to your niche than this are dropped and <b>not charged</b>. 50 = a niche keyword in the search itself; raise it to pay only for the closest matches.

## `maxQualified` (type: `integer`):

Hard cap on results — and on what <b>this Actor</b> charges: at most this many × $0.009 with AI on (+ ≈ $0.004–0.006 AI tokens each) or × $0.003 with AI off, e.g. 50 × $0.009 = $0.45. The most urgent, most relevant trends come first.

## `maxDiscoveryChargeUsd` (type: `number`):

Hard cap on what the Store Actors of the live read (seed keywords ≈ $0.022 each, rising queries $0.006 each, optional TikTok feeds) may charge your Apify account — $0.50 in the form and for an API call that leaves it out. The trending feeds cost nothing. Runs that would pass it are skipped and the status says so.

## `enableAi` (type: `boolean`):

The AI confirms relevance, says why it matters, flags sensitive topics and writes a headline. <b>On = $0.009 per qualified trend + ≈ $0.004–0.006 AI tokens (≈ $0.015 all in); off = $0.003</b>. Your first 5 trends get live AI verdicts on any plan; all 25 free trends with Apify model access or a paid own key.

## `notifyEmail` (type: `string`):

After every run with at least one new trend, the digest (what to act on first per country, with links) is e-mailed here through Apify's send-mail Actor. Schedule it daily or weekly and only new trends reach your inbox. Never sent for the free demo.

## `seedKeywords` (type: `array`):

Your own product or topic keywords: each gets a momentum verdict from its Google Trends curve (breakout, rising, seasonal peak soon, stable, declining) plus up to 3 rising queries. <b>$0.01 per seed</b>, read by the built-in reader on any plan; a seed Google refuses is read by the Store scraper on your plan (any plan that runs Store Actors).

## `previewOnly` (type: `boolean`):

On = one free 7-day read of your countries' trending feeds: the status says how many trends your niche would have received last week and what that week costs (rules only and with the AI, your first 25 free), with 3 examples in the dataset and a saved task to schedule. Nothing charged, nothing remembered, no AI.

## `calendarMode` (type: `boolean`):

On = read up to 50 of your <b>seed keywords</b> on 5-year Google Trends curves and get a calendar: the month each one peaks, how strong its season is and the date to start publishing (6 weeks before the peak) — a <code>CALENDAR</code> page and <code>CALENDAR\_CSV</code>. <b>$0.02 per keyword</b> (calendar-seed), nothing else charged; then schedule the same seeds weekly. The free demo ignores it.

## `trendingTimeframe` (type: `string`):

How far back the country feeds look. <b>The first run of a search reads the past 7 days</b> (when this is left at 24 h), so you see a week of trends at once; your schedule then reads the past 24 h — only new trends. 4 h / 24 h trends are marked <b>publish now</b>, 48 h / 7 days <b>this week</b>.

## `googleCategories` (type: `array`):

Only trending searches of these Google categories (e.g. Health, Shopping). A trend from a category you chose gets +10 relevance. Empty = all categories.

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

How many of a country's trending searches are read (1–1000). Free with the built-in reader; more searches = more chances for your niche.

## `maxSeedKeywords` (type: `integer`):

Cap on the seed keywords read per run ($0.01 each), also for the niche keywords a narrow niche reads as seeds (free). Seed keywords past it are not read; the calendar mode reads up to 50.

## `seedTimeframe` (type: `string`):

The curve the momentum verdict reads. <b>Past 5 years</b> is what finds seasonal peaks (two earlier years peaking in the same weeks).

## `seedGeo` (type: `string`):

The country of the seed curves. <b>Auto</b> = your one country when you watch one, else worldwide.

## `momentumFilter` (type: `array`):

Seed keywords are delivered (and charged) only with one of these verdicts; the rest are free. Stable and declining are off by default.

## `includeRisingQueries` (type: `boolean`):

On by default whenever you have seed keywords: up to 3 rising queries per seed (+4,250 %, Breakout), read with the seed's curve by the built-in reader; for a seed read by the Store scraper, one run of <code>steadyfetch/breakout-keywords-scraper</code> ($0.006 per query on the free plan, inside <b>Max source spend</b>). A failure never fails this run.

## `includeTimeline` (type: `boolean`):

Adds each seed keyword's full curve (<code>timeline</code>) to its row. Off = one summary line per keyword (verdict, % change, peak).

## `nicheSeedFallback` (type: `boolean`):

On (default): when today's trending feed matches fewer than 3 trends, the rest of <b>Max source spend</b> reads your niche keywords as seed keywords (momentum + rising queries), so a live run never comes back empty-handed; the status names the yield ("2 of 355 US searches matched").

## `includeTiktok` (type: `boolean`):

Adds each country's trending TikTok hashtags of the last 7 days (TikTok Creative Center, via <code>data\_xplorer/tiktok-trends</code> — 0 failed runs of 13,731 in 30 days) with the same niche filter, one trend each, <code>platform: tiktok</code>. ≈ $0.07 per country on your Apify plan at 30 hashtags, inside <b>Max source spend</b>.

## `tiktokMaxHashtags` (type: `integer`):

How many of a country's trending TikTok hashtags are read ($0.0015 each + $0.025 per country).

## `excludeKeywords` (type: `array`):

A trend whose search contains one of these is dropped free (e.g. a competitor, <code>nfl</code>); in its related searches it costs −30 relevance.

## `minTrendVolume` (type: `integer`):

Trending searches below this search volume (Google's 500K+ label as a number) are dropped free. 0 = keep all.

## `includeSensitive` (type: `boolean`):

Tragedies, politics, health claims, adult and legal topics are dropped free by default (brand safety). On = kept and flagged in <code>sensitivity</code>.

## `targetFlags` (type: `array`):

Only deliver trends with at least one of these flags, e.g. <code>breakout</code>, <code>commercial\_intent</code>, <code>niche\_in\_term</code> (<code>nicheInTerm</code> works too) — the README's flag table lists all 8; an unknown name stops the run at once with the valid ones.

## `suppressionList` (type: `array`):

Exact search terms, Google Trends URLs or dedupe keys to skip. Skipped before any processing, never charged.

## `includeRejected` (type: `boolean`):

Adds the filtered trends after the qualified ones with their <code>status</code> (below\_threshold, excluded, duplicate, no\_data, sensitive) — never charged, useful to tune the filters.

## `dossierTopN` (type: `integer`):

0 = off. N = a one-page brief for each of the top N publish-now trends (why now, why it matters, the angle, related searches, a 3-point outline) as a <code>DOSSIER-n</code> record to forward to an editor — <b>$0.03 per dossier</b>.

## `contentFormats` (type: `array`):

The AI picks one per trend for the angle; without AI the first one is used.

## `outputLanguage` (type: `string`):

Language code for <code>whyItMatters</code> and the angle, e.g. <code>en</code>, <code>de</code>, <code>es</code>. Search terms stay as Google shows them.

## `llmProvider` (type: `string`):

<b>Apify (no keys)</b> — the AI runs through Apify's built-in OpenRouter proxy; tokens are billed to your Apify account at OpenRouter's rates. <b>My own key</b> — your OpenAI / Anthropic / Gemini / Groq key; on a free-tier key expect 1–3 AI checks per run — the rest keep their rule score, and the AI stops after 60 s of rate-limit waiting; a paid Groq / Gemini key (billing on) assesses every trend. Measured own-key pace ≈ 1.1–187.7 s per trend: 1.1 s with a free groq:openai/gpt-oss-120b key, 187.7 s with a free google:gemini-3.6-flash key (both measured 2026-09-28) — size a 50-trend run's timeout from the slowest: ≈ 9565 s.

## `llmModel` (type: `string`):

Leave empty for the default (<code>anthropic/claude-haiku-4.5</code>). Apify mode takes an OpenRouter slug such as <code>openai/gpt-4.1-mini</code>; own-key mode takes <code>provider:model</code>, e.g. <code>anthropic:claude-haiku-4-5-20251001</code>.

## `llmApiKey` (type: `string`):

Required when <b>AI model access</b> is <i>My own API key</i>. Stored encrypted by Apify, never logged.

## `aiCandidateMultiplier` (type: `integer`):

The AI assesses the best rule-scored trends first — every one with a rule relevance of at least Minimum relevance − 20 — up to this multiple of <b>Max qualified</b>. Higher = more thorough, slower, more tokens.

## `clients` (type: `array`):

One task for all your clients — edit the 2 example clients (name, <code>nicheKeywords</code>, <code>countries</code>, <code>notifyEmail</code>; also <code>goalDescription</code>, <code>seedKeywords</code>, <code>excludeKeywords</code>, <code>logoUrl</code>, <code>slackWebhookUrl</code>, <code>webhookUrl</code>, <code>showBacklink</code>) and pick <b>Agency roster</b> in the preset list, or set the source to the live read. Each client gets its own live search, memory, digest and a white-label <code>REPORT-\<client></code> page. <b>$0.10 per client report</b> (only with ≥ 1 new trend) on top of the per-trend price; up to 25 clients. The untouched example is never searched unless you pick the Agency roster preset; example.com addresses are never mailed. Runs on your Apify plan like any live read; the free demo does not search it.

## `slackWebhookUrl` (type: `string`):

A Slack incoming-webhook URL (<code>https://hooks.slack.com/services/…</code>). After every run with at least one new trend, the digest (what to act on first per country, with links) is posted to that channel as a readable message. Never sent for the free demo.

## `discordWebhookUrl` (type: `string`):

A Discord channel webhook URL (<code>https://discord.com/api/webhooks/…</code> — Server settings → Integrations → Webhooks). After every run with at least one new trend, the same digest as Slack (how many are new, the top 10 with links) is posted to that channel. Never sent for the free demo.

## `teamsWebhookUrl` (type: `string`):

A Teams Workflows webhook URL (in the channel: ⋯ → Workflows → <i>Post to a channel when a webhook request is received</i>). After every run with at least one new trend, the same digest as Slack (how many are new, the top 10 with links) is posted to that channel as a card. Never sent for the free demo.

## `googleChatWebhookUrl` (type: `string`):

A Google Chat space webhook URL (<code>https://chat.googleapis.com/v1/spaces/…</code> — space → Apps & integrations → Webhooks). After every run with at least one new trend, the same digest as Slack is posted to that space. Never sent for the free demo.

## `trendAlerts` (type: `boolean`):

On = every publish-now trend at or above <b>Alert bar</b> is posted at once, one message each, to your Slack / Teams / Google Chat / Discord webhook and <code>webhookUrl</code> — before the digest. <b>$0.01 per alert</b> (trend-alert) that reached a channel, at most 10 per run. Pair it with a schedule every few hours for Black Friday week.

## `alertMinScore` (type: `integer`):

Only publish-now trends at or above this relevance are sent as instant alerts.

## `webhookUrl` (type: `string`):

Qualified trends are POSTed here as JSON (Zapier, Make, n8n, your CRM). For Google Sheets / Slack you can also use Apify's built-in Integrations tab. Stored encrypted — Zapier / Make hook URLs carry their secret in the path.

## `webhookHeaders` (type: `object`):

Extra HTTP headers for the webhook, e.g. <code>{"Authorization": "Bearer …"}</code>. Stored encrypted by Apify, never logged.

## `webhookBatchSize` (type: `integer`):

1 = one POST per trend the moment it is ready. Higher = one POST per N trends.

## `dedupeAcrossRuns` (type: `boolean`):

Remembers every trend you were charged for (term + country + type, plus the verdict of a seed) in a named key-value store on your account and skips it in future runs.

## `dedupeStoreName` (type: `string`):

Key-value store used for cross-run memory. Left at the default, the memory is kept per search (countries, niche and seed keywords): rewording <code>goalDescription</code> keeps it, so a scheduled run never re-delivers a trend you already have — a seed keyword comes back only when its verdict changes. Running it for several clients on one account, type one name per client.

## `dedupeTtlDays` (type: `integer`):

How long a delivered trend stays remembered. 60 (default) lets a trend that comes back — Halloween costumes each October, a product's yearly launch — reach you again after 60 days, charged again as a new trend. 0 = never deliver or charge it again. A seed keyword also returns whenever its verdict changes.

## `historyDatasetName` (type: `string`):

Optional. Type a name (e.g. <code>trending-keywords-log</code>) and every run appends its new trends with the date to that named dataset on your account — one list across months to connect to Google Sheets or Looker Studio once. Empty = off. Costs nothing extra.

## `reportBacklink` (type: `boolean`):

On (default): the REPORT page ends with 'Made with Trending Keywords for Your Niche — try it free', linked to the Store page. Agency client reports stay white-label unless the client has <code>"showBacklink": true</code>.

## `sourceMode` (type: `string`):

<b>actor</b> — read Google Trends live: the country feeds through the built-in reader (any plan, no source bill), seed keywords and rising queries through Store Actors on your account (billed by them, capped). <b>dataset</b> — an existing dataset of a Google Trends Actor. <b>list</b> — trends you paste in. The mode you choose always runs as chosen; only the untouched sample next to niche keywords you typed switches to the live read (spend-capped). <code>{}</code> over the API runs the free demo — nothing charged.

## `autoSwitchToLive` (type: `boolean`):

On (default): niche or seed keywords typed next to the untouched sample trends start the live read (spend-capped; <code>OUTPUT.switchedToLive</code> names them). Off: the mode you send is the mode that runs — the sample stays the free demo and the status names the keywords it did not search. API pipelines that must never start a live read on their own: send <code>false</code>.

## `trendingSource` (type: `string`):

<b>builtin</b> (default) — reads Google Trends directly over HTTP: the Trending Now lists (free) and every seed keyword's curve and rising queries ($0.01 per seed), on any plan; a country or seed Google refuses is read by the Store scrapers instead (inside <b>Max source spend</b>). <b>actor</b> — always the Store scrapers (<code>data\_xplorer/google-trends-fast-scraper</code>, ≈ $0.022 per country or seed on your plan, plus the rising queries).

## `datasetId` (type: `string`):

Only for <b>dataset</b> mode: a dataset of data\_xplorer/google-trends-fast-scraper, apify/google-trends-scraper or any Google Trends Actor (fields: README → List-mode rows). Pick it so the Actor is granted read access.

## `itemsList` (type: `array`):

Only for <b>list</b> mode. JSON array of trends: a flat row with <code>term</code> (plus optional <code>related\_terms</code>, <code>trend\_volume</code>, <code>geo</code>, <code>timeframe\_hours</code>), a source item with <code>trending\_searches\[]</code>, a seed row with <code>keyword</code> + <code>timeline\_data</code>, or a rising-queries row. The prefilled sample is the free demo.

## `discoveryActorId` (type: `string`):

Store Actor for seed keywords (and the trending feed with <b>Trending feed reader</b> = actor, or when Google refuses the built-in read) — the Google Trends Scraper by data\_xplorer (0.7 % failed runs, 2026-09-28). Another Actor with the same input and output fields works too.

## `discoveryInput` (type: `object`):

Only for <b>actor</b> mode: fields merged into every source run's input as-is (e.g. a <code>proxyConfiguration</code> with the RESIDENTIAL group). The live read runs that Store Actor on your Apify plan — if your plan cannot run Store Actors, paste your own trends in <b>list</b> mode (any plan); <b>dataset</b> only for a dataset you already have.

## `discoveryTimeoutSecs` (type: `integer`):

Each country / seed run of the source is stopped after this long and what it scraped is used. The rising-queries run has its own 240 s.

## `maxToProcess` (type: `integer`):

Upper bound on how many trends are scored in one run (controls run time). Default = 3 × max qualified.

## Actor input object example

```json
{
  "nicheKeywords": [
    "pilates",
    "yoga",
    "protein",
    "workout",
    "dumbbell"
  ],
  "goalDescription": "Home fitness equipment store for women 30–50: dumbbells, yoga, pilates, home workouts",
  "preset": "custom",
  "countries": [
    "US",
    "GB",
    "CA"
  ],
  "minScore": 50,
  "maxQualified": 50,
  "maxDiscoveryChargeUsd": 0.5,
  "enableAi": true,
  "previewOnly": false,
  "calendarMode": false,
  "trendingTimeframe": "24",
  "googleCategories": [],
  "maxTrendsPerCountry": 300,
  "maxSeedKeywords": 5,
  "seedTimeframe": "today 12-m",
  "seedGeo": "auto",
  "momentumFilter": [
    "breakout",
    "rising",
    "seasonal_peak_soon"
  ],
  "includeRisingQueries": true,
  "includeTimeline": false,
  "nicheSeedFallback": true,
  "includeTiktok": false,
  "tiktokMaxHashtags": 30,
  "minTrendVolume": 0,
  "includeSensitive": false,
  "includeRejected": false,
  "dossierTopN": 0,
  "contentFormats": [
    "blog",
    "social"
  ],
  "outputLanguage": "en",
  "llmProvider": "apify",
  "aiCandidateMultiplier": 2,
  "clients": [
    {
      "name": "Acme Fitness",
      "nicheKeywords": [
        "yoga",
        "pilates",
        "home workout"
      ],
      "countries": [
        "US"
      ],
      "notifyEmail": "acme-team@example.com"
    },
    {
      "name": "Bloom Bakery",
      "nicheKeywords": [
        "sourdough",
        "cake",
        "baking",
        "bread"
      ],
      "countries": [
        "GB"
      ],
      "notifyEmail": "bloom-team@example.com"
    }
  ],
  "trendAlerts": false,
  "alertMinScore": 80,
  "webhookBatchSize": 1,
  "dedupeAcrossRuns": true,
  "dedupeStoreName": "trending-keywords-seen",
  "dedupeTtlDays": 60,
  "historyDatasetName": "",
  "reportBacklink": true,
  "sourceMode": "list",
  "autoSwitchToLive": true,
  "trendingSource": "builtin",
  "itemsList": [
    {
      "term": "wall pilates",
      "rank": 14,
      "trend_volume": "50K+",
      "trend_volume_formatted": 50000,
      "related_terms": [
        "wall pilates workout",
        "28 day wall pilates challenge",
        "wall pilates for beginners"
      ],
      "geo": "US",
      "timeframe_hours": "24",
      "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
      "timestamp": "2026-09-28 08:30:00"
    },
    {
      "term": "adjustable dumbbells recall",
      "rank": 31,
      "trend_volume": "20K+",
      "trend_volume_formatted": 20000,
      "related_terms": [
        "dumbbell recall 2026",
        "adjustable dumbbells",
        "dumbbell plates recall"
      ],
      "geo": "US",
      "timeframe_hours": "24",
      "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
      "timestamp": "2026-09-28 08:30:00"
    },
    {
      "term": "chiefs vs ravens",
      "rank": 1,
      "trend_volume": "1M+",
      "trend_volume_formatted": 1000000,
      "related_terms": [
        "chiefs score",
        "nfl scores",
        "ravens game"
      ],
      "geo": "US",
      "timeframe_hours": "24",
      "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
      "timestamp": "2026-09-28 08:30:00"
    },
    {
      "term": "protein pancakes",
      "rank": 42,
      "trend_volume": "10K+",
      "trend_volume_formatted": 10000,
      "related_terms": [
        "high protein breakfast",
        "protein pancake recipe",
        "cottage cheese pancakes"
      ],
      "geo": "US",
      "timeframe_hours": "24",
      "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
      "timestamp": "2026-09-28 08:30:00"
    },
    {
      "term": "hurricane warning florida",
      "rank": 3,
      "trend_volume": "500K+",
      "trend_volume_formatted": 500000,
      "related_terms": [
        "hurricane tracker",
        "storm surge",
        "evacuation zones"
      ],
      "geo": "US",
      "timeframe_hours": "24",
      "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
      "timestamp": "2026-09-28 08:30:00"
    },
    {
      "keyword": "yoga mat",
      "timeframe": "today 3-m",
      "geo": "US",
      "data_granularity": "week",
      "trends_url": "https://trends.google.com/trends/explore?q=yoga%20mat&geo=US",
      "timeline_data": {
        "2026-W24": 41,
        "2026-W25": 43,
        "2026-W26": 40,
        "2026-W27": 44,
        "2026-W28": 42,
        "2026-W29": 45,
        "2026-W30": 43,
        "2026-W31": 46,
        "2026-W32": 48,
        "2026-W33": 47,
        "2026-W34": 52,
        "2026-W35": 55,
        "2026-W36": 58,
        "2026-W37": 61,
        "2026-W38": 63,
        "2026-W39": 66
      }
    },
    {
      "searchTerm": "pilates",
      "geo": "US",
      "relatedQueries_rising": [
        {
          "query": "pilates reformer at home",
          "value": 4250,
          "formattedValue": "+4,250%",
          "link": "/trends/explore?q=pilates+reformer+at+home&geo=US&date=today+12-m"
        }
      ]
    }
  ],
  "discoveryActorId": "data_xplorer/google-trends-fast-scraper",
  "discoveryInput": {},
  "discoveryTimeoutSecs": 300
}
```

# Actor output Schema

## `qualified` (type: `string`):

All qualified trends as JSON, best-scoring first.

## `sheet` (type: `string`):

The same trends as a spreadsheet.

## `runSummary` (type: `string`):

JSON record with the funnel (loaded -> filtered -> AI-assessed -> qualified), per-reason skip counts, charged events by type, free-tier trends used and remaining, whether a budget limit was reached, webhook delivery counts and the dedupe store size.

## `report` (type: `string`):

The shortlist as a page to forward (REPORT record); agency runs write one REPORT-<client> per client.

## `calendar` (type: `string`):

With calendarMode on: when each seed keyword peaks and when to start publishing (CALENDAR page; CALENDAR\_CSV next to it).

# 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 = {
    "nicheKeywords": [
        "pilates",
        "yoga",
        "protein",
        "workout",
        "dumbbell"
    ],
    "goalDescription": "Home fitness equipment store for women 30–50: dumbbells, yoga, pilates, home workouts",
    "countries": [
        "US",
        "GB",
        "CA"
    ],
    "maxDiscoveryChargeUsd": 0.5,
    "clients": [
        {
            "name": "Acme Fitness",
            "nicheKeywords": [
                "yoga",
                "pilates",
                "home workout"
            ],
            "countries": [
                "US"
            ],
            "notifyEmail": "acme-team@example.com"
        },
        {
            "name": "Bloom Bakery",
            "nicheKeywords": [
                "sourdough",
                "cake",
                "baking",
                "bread"
            ],
            "countries": [
                "GB"
            ],
            "notifyEmail": "bloom-team@example.com"
        }
    ],
    "sourceMode": "list",
    "itemsList": [
        {
            "term": "wall pilates",
            "rank": 14,
            "trend_volume": "50K+",
            "trend_volume_formatted": 50000,
            "related_terms": [
                "wall pilates workout",
                "28 day wall pilates challenge",
                "wall pilates for beginners"
            ],
            "geo": "US",
            "timeframe_hours": "24",
            "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
            "timestamp": "2026-09-28 08:30:00"
        },
        {
            "term": "adjustable dumbbells recall",
            "rank": 31,
            "trend_volume": "20K+",
            "trend_volume_formatted": 20000,
            "related_terms": [
                "dumbbell recall 2026",
                "adjustable dumbbells",
                "dumbbell plates recall"
            ],
            "geo": "US",
            "timeframe_hours": "24",
            "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
            "timestamp": "2026-09-28 08:30:00"
        },
        {
            "term": "chiefs vs ravens",
            "rank": 1,
            "trend_volume": "1M+",
            "trend_volume_formatted": 1000000,
            "related_terms": [
                "chiefs score",
                "nfl scores",
                "ravens game"
            ],
            "geo": "US",
            "timeframe_hours": "24",
            "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
            "timestamp": "2026-09-28 08:30:00"
        },
        {
            "term": "protein pancakes",
            "rank": 42,
            "trend_volume": "10K+",
            "trend_volume_formatted": 10000,
            "related_terms": [
                "high protein breakfast",
                "protein pancake recipe",
                "cottage cheese pancakes"
            ],
            "geo": "US",
            "timeframe_hours": "24",
            "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
            "timestamp": "2026-09-28 08:30:00"
        },
        {
            "term": "hurricane warning florida",
            "rank": 3,
            "trend_volume": "500K+",
            "trend_volume_formatted": 500000,
            "related_terms": [
                "hurricane tracker",
                "storm surge",
                "evacuation zones"
            ],
            "geo": "US",
            "timeframe_hours": "24",
            "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
            "timestamp": "2026-09-28 08:30:00"
        },
        {
            "keyword": "yoga mat",
            "timeframe": "today 3-m",
            "geo": "US",
            "data_granularity": "week",
            "trends_url": "https://trends.google.com/trends/explore?q=yoga%20mat&geo=US",
            "timeline_data": {
                "2026-W24": 41,
                "2026-W25": 43,
                "2026-W26": 40,
                "2026-W27": 44,
                "2026-W28": 42,
                "2026-W29": 45,
                "2026-W30": 43,
                "2026-W31": 46,
                "2026-W32": 48,
                "2026-W33": 47,
                "2026-W34": 52,
                "2026-W35": 55,
                "2026-W36": 58,
                "2026-W37": 61,
                "2026-W38": 63,
                "2026-W39": 66
            }
        },
        {
            "searchTerm": "pilates",
            "geo": "US",
            "relatedQueries_rising": [
                {
                    "query": "pilates reformer at home",
                    "value": 4250,
                    "formattedValue": "+4,250%",
                    "link": "/trends/explore?q=pilates+reformer+at+home&geo=US&date=today+12-m"
                }
            ]
        }
    ],
    "discoveryInput": {}
};

// Run the Actor and wait for it to finish
const run = await client.actor("rich_minds/trending-keywords-ai").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 = {
    "nicheKeywords": [
        "pilates",
        "yoga",
        "protein",
        "workout",
        "dumbbell",
    ],
    "goalDescription": "Home fitness equipment store for women 30–50: dumbbells, yoga, pilates, home workouts",
    "countries": [
        "US",
        "GB",
        "CA",
    ],
    "maxDiscoveryChargeUsd": 0.5,
    "clients": [
        {
            "name": "Acme Fitness",
            "nicheKeywords": [
                "yoga",
                "pilates",
                "home workout",
            ],
            "countries": ["US"],
            "notifyEmail": "acme-team@example.com",
        },
        {
            "name": "Bloom Bakery",
            "nicheKeywords": [
                "sourdough",
                "cake",
                "baking",
                "bread",
            ],
            "countries": ["GB"],
            "notifyEmail": "bloom-team@example.com",
        },
    ],
    "sourceMode": "list",
    "itemsList": [
        {
            "term": "wall pilates",
            "rank": 14,
            "trend_volume": "50K+",
            "trend_volume_formatted": 50000,
            "related_terms": [
                "wall pilates workout",
                "28 day wall pilates challenge",
                "wall pilates for beginners",
            ],
            "geo": "US",
            "timeframe_hours": "24",
            "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
            "timestamp": "2026-09-28 08:30:00",
        },
        {
            "term": "adjustable dumbbells recall",
            "rank": 31,
            "trend_volume": "20K+",
            "trend_volume_formatted": 20000,
            "related_terms": [
                "dumbbell recall 2026",
                "adjustable dumbbells",
                "dumbbell plates recall",
            ],
            "geo": "US",
            "timeframe_hours": "24",
            "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
            "timestamp": "2026-09-28 08:30:00",
        },
        {
            "term": "chiefs vs ravens",
            "rank": 1,
            "trend_volume": "1M+",
            "trend_volume_formatted": 1000000,
            "related_terms": [
                "chiefs score",
                "nfl scores",
                "ravens game",
            ],
            "geo": "US",
            "timeframe_hours": "24",
            "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
            "timestamp": "2026-09-28 08:30:00",
        },
        {
            "term": "protein pancakes",
            "rank": 42,
            "trend_volume": "10K+",
            "trend_volume_formatted": 10000,
            "related_terms": [
                "high protein breakfast",
                "protein pancake recipe",
                "cottage cheese pancakes",
            ],
            "geo": "US",
            "timeframe_hours": "24",
            "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
            "timestamp": "2026-09-28 08:30:00",
        },
        {
            "term": "hurricane warning florida",
            "rank": 3,
            "trend_volume": "500K+",
            "trend_volume_formatted": 500000,
            "related_terms": [
                "hurricane tracker",
                "storm surge",
                "evacuation zones",
            ],
            "geo": "US",
            "timeframe_hours": "24",
            "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
            "timestamp": "2026-09-28 08:30:00",
        },
        {
            "keyword": "yoga mat",
            "timeframe": "today 3-m",
            "geo": "US",
            "data_granularity": "week",
            "trends_url": "https://trends.google.com/trends/explore?q=yoga%20mat&geo=US",
            "timeline_data": {
                "2026-W24": 41,
                "2026-W25": 43,
                "2026-W26": 40,
                "2026-W27": 44,
                "2026-W28": 42,
                "2026-W29": 45,
                "2026-W30": 43,
                "2026-W31": 46,
                "2026-W32": 48,
                "2026-W33": 47,
                "2026-W34": 52,
                "2026-W35": 55,
                "2026-W36": 58,
                "2026-W37": 61,
                "2026-W38": 63,
                "2026-W39": 66,
            },
        },
        {
            "searchTerm": "pilates",
            "geo": "US",
            "relatedQueries_rising": [{
                    "query": "pilates reformer at home",
                    "value": 4250,
                    "formattedValue": "+4,250%",
                    "link": "/trends/explore?q=pilates+reformer+at+home&geo=US&date=today+12-m",
                }],
        },
    ],
    "discoveryInput": {},
}

# Run the Actor and wait for it to finish
run = client.actor("rich_minds/trending-keywords-ai").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 '{
  "nicheKeywords": [
    "pilates",
    "yoga",
    "protein",
    "workout",
    "dumbbell"
  ],
  "goalDescription": "Home fitness equipment store for women 30–50: dumbbells, yoga, pilates, home workouts",
  "countries": [
    "US",
    "GB",
    "CA"
  ],
  "maxDiscoveryChargeUsd": 0.5,
  "clients": [
    {
      "name": "Acme Fitness",
      "nicheKeywords": [
        "yoga",
        "pilates",
        "home workout"
      ],
      "countries": [
        "US"
      ],
      "notifyEmail": "acme-team@example.com"
    },
    {
      "name": "Bloom Bakery",
      "nicheKeywords": [
        "sourdough",
        "cake",
        "baking",
        "bread"
      ],
      "countries": [
        "GB"
      ],
      "notifyEmail": "bloom-team@example.com"
    }
  ],
  "sourceMode": "list",
  "itemsList": [
    {
      "term": "wall pilates",
      "rank": 14,
      "trend_volume": "50K+",
      "trend_volume_formatted": 50000,
      "related_terms": [
        "wall pilates workout",
        "28 day wall pilates challenge",
        "wall pilates for beginners"
      ],
      "geo": "US",
      "timeframe_hours": "24",
      "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
      "timestamp": "2026-09-28 08:30:00"
    },
    {
      "term": "adjustable dumbbells recall",
      "rank": 31,
      "trend_volume": "20K+",
      "trend_volume_formatted": 20000,
      "related_terms": [
        "dumbbell recall 2026",
        "adjustable dumbbells",
        "dumbbell plates recall"
      ],
      "geo": "US",
      "timeframe_hours": "24",
      "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
      "timestamp": "2026-09-28 08:30:00"
    },
    {
      "term": "chiefs vs ravens",
      "rank": 1,
      "trend_volume": "1M+",
      "trend_volume_formatted": 1000000,
      "related_terms": [
        "chiefs score",
        "nfl scores",
        "ravens game"
      ],
      "geo": "US",
      "timeframe_hours": "24",
      "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
      "timestamp": "2026-09-28 08:30:00"
    },
    {
      "term": "protein pancakes",
      "rank": 42,
      "trend_volume": "10K+",
      "trend_volume_formatted": 10000,
      "related_terms": [
        "high protein breakfast",
        "protein pancake recipe",
        "cottage cheese pancakes"
      ],
      "geo": "US",
      "timeframe_hours": "24",
      "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
      "timestamp": "2026-09-28 08:30:00"
    },
    {
      "term": "hurricane warning florida",
      "rank": 3,
      "trend_volume": "500K+",
      "trend_volume_formatted": 500000,
      "related_terms": [
        "hurricane tracker",
        "storm surge",
        "evacuation zones"
      ],
      "geo": "US",
      "timeframe_hours": "24",
      "trends_url": "https://trends.google.com/trending?geo=US&hl=en-US",
      "timestamp": "2026-09-28 08:30:00"
    },
    {
      "keyword": "yoga mat",
      "timeframe": "today 3-m",
      "geo": "US",
      "data_granularity": "week",
      "trends_url": "https://trends.google.com/trends/explore?q=yoga%20mat&geo=US",
      "timeline_data": {
        "2026-W24": 41,
        "2026-W25": 43,
        "2026-W26": 40,
        "2026-W27": 44,
        "2026-W28": 42,
        "2026-W29": 45,
        "2026-W30": 43,
        "2026-W31": 46,
        "2026-W32": 48,
        "2026-W33": 47,
        "2026-W34": 52,
        "2026-W35": 55,
        "2026-W36": 58,
        "2026-W37": 61,
        "2026-W38": 63,
        "2026-W39": 66
      }
    },
    {
      "searchTerm": "pilates",
      "geo": "US",
      "relatedQueries_rising": [
        {
          "query": "pilates reformer at home",
          "value": 4250,
          "formattedValue": "+4,250%",
          "link": "/trends/explore?q=pilates+reformer+at+home&geo=US&date=today+12-m"
        }
      ]
    }
  ],
  "discoveryInput": {}
}' |
apify call rich_minds/trending-keywords-ai --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rich_minds/trending-keywords-ai"
        }
    }
}
```

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/H2Ih5EDuuh0iPRf6I/builds/WTJfE5mHRmFb6o9tC/openapi.json
