# Google Trends Scraper & API: Interest, Regions & Queries (`capable_coach/google-trends-scraper`) Actor

Google Trends scraper and unofficial Google Trends API, no API key: interest over time, interest by country/region/city, related queries & topics (top, rising, Breakout), compare up to 5 terms. Any geo, time range, category, Web/Images/News/YouTube/Shopping. JSON/CSV/Excel.

- **URL**: https://apify.com/capable_coach/google-trends-scraper.md
- **Developed by:** [jules imbert](https://apify.com/capable_coach) (community)
- **Categories:** SEO tools, Marketing, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 trends reports

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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: interest over time, regions, related queries & comparisons

**Google Trends Scraper** extracts data from [Google Trends](https://trends.google.com/trends/) without an API key or a browser. Use it as an unofficial **Google Trends API**: call it from Python, JavaScript, Make, Zapier, n8n or an AI agent and get JSON, CSV or Excel. Enter keywords (or paste Google Trends URLs), pick a country, time range, category and Google property, and you get back:

- 📈 **Interest over time**: the 0–100 index Google charts, plus a computed **average, peak and latest value** per term
- 🗺️ **Interest by region**: countries, subregions (states/regions) or US metro areas (DMA)
- 🔎 **Related queries**: **Top** and **Rising**, with `+850%` growth values and **Breakout** flags
- 🧩 **Related topics**: Top and Rising, when Google returns them (see [Limitations](#known-limitations-honest-list))
- ⚖️ **Comparison of up to 5 terms** on the same 0–100 scale, over time and by region

It's built to be a **reliable, well-documented alternative** to the existing Google Trends scrapers. It uses residential proxies, rotates IP and cookie on every HTTP 429, retries with exponential backoff, and handles Google's explore → token → widget flow. Every report has a `status` and an `errors` list, so you can see what happened instead of getting an empty dataset.

***

### Why use this Google Trends scraper?

| | This Actor |
|---|---|
| Rate limits (HTTP 429) | Fresh residential IP + cookie on every 429/block, exponential backoff (1 s → 30 s) with jitter, up to 8 retries per request (configurable) |
| Cost model | **One charge per report**, not per row. A 12-month report with 53 weekly points, 22 regions and 35 related queries is billed as **1** event, in structured or flat mode |
| Failed / empty reports | **Never charged** |
| Output formats | Structured JSON (one item per term) **or** flat rows ready for Excel/CSV/BI, plus all reports in the `OUTPUT` record |
| Transparency | `status`, `errors`, `dataQualityNotes` and `googleUserType` on every report; `RUN_STATS` record with request / 429 / session counts |
| Inputs | Keywords, topic IDs (`/m/…`) or pasted Google Trends URLs |
| Filters | Any geo (country, region, US metro), 9 time presets + custom dates + hourly custom ranges, category, Web / Images / News / YouTube / Google Shopping, language, timezone |

### What can you use Google Trends data for?

- **SEO & content planning**: find rising queries and breakout topics before competitors do
- **Market research**: compare products, brands or technologies (`revit` vs `archicad` vs `autocad`)
- **Seasonality**: plan campaigns and stock levels using 5-year or since-2004 weekly/monthly curves
- **Local marketing**: see which states, regions or metros search most for your product
- **YouTube & Shopping research**: switch the property to measure YouTube or Google Shopping searches
- **Dashboards & AI agents**: schedule runs and push flat rows to Google Sheets, BigQuery, Looker Studio or an LLM pipeline through the Apify API

### How to scrape Google Trends

1. Click **Try for free** / **Start**.
2. Enter one or more **search terms** (e.g. `bim`, `revit`), or paste **Google Trends URLs**.
3. Choose a **location** (empty = Worldwide), a **time range**, and optionally a **category** and **property**.
4. Tick **Compare terms** if you want them on the same scale.
5. Pick a **dataset format**: structured (per term) or flat rows.
6. Run it, then download the results as **JSON, CSV, Excel, XML or HTML**, or fetch them through the API.

#### Input example

```json
{
  "searchTerms": ["bim", "revit"],
  "geo": "FR",
  "timeRange": "today 12-m",
  "category": 0,
  "property": "web",
  "compareTerms": true,
  "outputFormat": "perTerm"
}
```

#### Main input fields

| Field | Description |
|---|---|
| `searchTerms` | Keywords or topic IDs. Each term is one report. |
| `startUrls` | Google Trends explore URLs; `q`, `geo`, `date`, `cat`, `gprop`, `hl` are read from each URL. |
| `geo` | `""` = Worldwide, `US`, `FR`, `US-CA`, `FR-IDF`, `US-NY-501`… |
| `timeRange` | `now 1-H`, `now 4-H`, `now 1-d`, `now 7-d`, `today 1-m`, `today 3-m`, `today 12-m`, `today 5-y`, `all`, or `custom` (+ `startDate` / `endDate`). |
| `customTimeRange` | Raw Google value, e.g. `2024-01-01 2024-06-30` or hourly `2026-10-20T08 2026-10-21T20`. |
| `category` | Google Trends category ID (0 = all). E.g. 12 Business & Industrial, 5 Computers & Electronics, 958 Jobs & Education, 29 Real Estate. |
| `property` | `web`, `images`, `news`, `youtube`, `froogle` (Google Shopping). |
| `language` | `hl` parameter (e.g. `en-US`, `fr`), used for region names and labels. |
| `regionResolution` | `auto`, `COUNTRY`, `REGION`, `CITY`, `DMA`. |
| `compareTerms` | Adds one comparison report per group of up to 5 terms. |
| `outputFormat` | `perTerm` (structured) or `flat` (one row per data point). |
| `filterUnrelatedRisingQueries` | Moves rising queries that share no word with the term or its top queries into `relatedQueriesRisingFiltered`. |
| `proxyConfiguration` | Defaults to Apify **RESIDENTIAL** proxy (recommended). |

### Output

#### Structured output (one item per term)

Real output from a test run (`revit`, France, past 12 months; arrays shortened):

```json
{
  "type": "term",
  "searchTerm": "revit",
  "geo": "FR",
  "timeRange": "today 12-m",
  "resolvedTimeRange": "2025-10-27 2026-10-27",
  "category": 0,
  "property": "web",
  "language": "en-US",
  "trendsUrl": "https://trends.google.com/trends/explore?q=revit&geo=FR&date=today+12-m&hl=en-US",
  "averageValue": 71.49,
  "peak": { "date": "2025-11-23T00:00:00.000Z", "value": 100 },
  "latest": { "date": "2026-10-18T00:00:00.000Z", "value": 66 },
  "interestOverTime": [
    { "date": "2025-10-26T00:00:00.000Z", "timestamp": 1761436800, "formattedTime": "Oct 26 – Nov 1, 2025", "isPartial": false, "value": 81, "hasData": true }
  ],
  "regionResolution": "REGION",
  "interestByRegion": [
    { "geoCode": "FR-J", "geoName": "Île-de-France", "value": 100, "formattedValue": "100", "hasData": true },
    { "geoCode": "FR-V", "geoName": "Rhone-Alpes", "value": 71, "formattedValue": "71", "hasData": true }
  ],
  "relatedQueriesTop": [
    { "query": "revit 2026", "value": 100, "formattedValue": "100", "link": "https://trends.google.com/trends/explore?q=revit+2026&date=today+12-m&geo=FR", "isBreakout": false }
  ],
  "relatedQueriesRising": [
    { "query": "revit 2027", "value": 111950, "formattedValue": "Breakout", "link": "https://trends.google.com/trends/explore?q=revit+2027&date=today+12-m&geo=FR", "isBreakout": true },
    { "query": "revit 2026", "value": 850, "formattedValue": "+850%", "link": "https://trends.google.com/trends/explore?q=revit+2026&date=today+12-m&geo=FR", "isBreakout": false }
  ],
  "relatedTopicsTop": [],
  "relatedTopicsRising": [],
  "googleUserType": "USER_TYPE_SCRAPER",
  "dataQualityNotes": ["Related topics: Google returned an empty list (it currently withholds topics from automated sessions flagged USER_TYPE_SCRAPER)."],
  "status": "ok",
  "errors": [],
  "scrapedAt": "2026-10-27T11:52:52.139Z"
}
```

#### Comparison output (`compareTerms: true`)

```json
{
  "type": "comparison",
  "searchTerms": ["bim", "revit"],
  "geo": "FR",
  "averages": { "bim": 73, "revit": 68 },
  "interestOverTime": [
    { "date": "2025-10-26T00:00:00.000Z", "formattedTime": "Oct 26 – Nov 1, 2025", "isPartial": false, "values": { "bim": 79, "revit": 77 } }
  ],
  "interestByRegion": [
    { "geoCode": "FR-A", "geoName": "Alsace", "values": { "bim": 64, "revit": 36 }, "hasData": true }
  ]
}
```

#### Flat output (`outputFormat: "flat"`)

One row per data point, with a `recordType` column: `interest_over_time`, `interest_by_region`, `related_query`, `related_topic`, `comparison_over_time`, `comparison_by_region` (plus `error` / `no_data` rows). Every row repeats `searchTerm`, `geo`, `timeRange`, `category`, `property`, `trendsUrl` and `scrapedAt`, so you can filter or pivot it in Excel or SQL without joins. Ready-made dataset views: **Interest over time**, **Interest by region**, **Related queries**, **Related topics**.

```json
{ "recordType": "related_query", "searchTerm": "revit", "rankType": "top", "rank": 22, "query": "sketchup", "value": 9, "formattedValue": "9", "isBreakout": false, "geo": "US", "timeRange": "today 12-m", "property": "web" }
{ "recordType": "interest_by_region", "searchTerm": "revit", "regionCode": "574", "regionName": "Johnstown-Altoona PA", "regionResolution": "DMA", "value": 22, "geo": "US" }
```

All structured reports are also saved to the key-value store record **`OUTPUT`**, and run diagnostics (requests, 429s, sessions, charged events) to **`RUN_STATS`**.

### How much does it cost to scrape Google Trends?

This Actor uses **pay-per-event** pricing. You pay for **reports delivered with data**, never for failed or empty ones:

| Apify plan | Price per report | Per 1,000 reports |
|---|---|---|
| Free | $0.0027 | $2.70 |
| Starter (Bronze) | $0.0009 | $0.90 |
| Scale (Silver) | $0.00065 | $0.65 |
| Business (Gold) and above | $0.0006 | $0.60 |

A **report** = one search term with every section you enabled (or one comparison group of up to 5 terms). In flat mode a report can produce hundreds of rows and is still **one** event. Silver and Gold+ prices above apply since 28 October 2026 (they were $0.00045 and $0.00027 while platform usage was billed separately). **No platform-usage fee on top**: compute and residential proxy traffic are included in the report price. With the **Apify Free plan's monthly $5 credit** that's roughly 1,800 reports per month at the Free rate.

You can cap spending with **Maximum cost per run** on the run options. The Actor checks the cap before it starts and stops cleanly when it's reached.

### Known limitations (honest list)

Google treats every automated session the same way (the explore response tags it `USER_TYPE_SCRAPER`, even with residential IPs or a real headless Chrome), and in 2026 it **withholds some data from those sessions**:

- **Related topics** usually come back as an empty list. The Actor still asks for them and returns them when Google sends them. An empty topics list is noted in `dataQualityNotes` and is never billed on its own.
- **City-level** interest by region returns no values. If you choose `CITY`, the Actor automatically falls back to **subregions** (or **US metros/DMA** for US geos) and tells you so in `dataQualityNotes`.
- **Rising queries** can contain a few unrelated entries for automated sessions. Enable `filterUnrelatedRisingQueries` to move suspicious ones to a separate list for review (nothing is deleted).
- Google Trends values are **relative (0–100)**, not absolute search volumes. Values are only comparable within the same report or comparison group.

Interest over time, interest by region (country / subregion / DMA), top related queries and comparisons returned full data in all our test runs (France, US and Worldwide).

### Tips for reliable runs

- Keep the default **RESIDENTIAL** proxy. Datacenter IPs get HTTP 429 from Google much more often.
- `maxConcurrency` 3–5 is a good balance. Higher is faster but triggers more 429s (which are retried automatically).
- For hundreds of terms, split them into scheduled runs. Each report is independent, so a single failure never breaks the run.
- To compare more than 5 terms on one scale, include a common **anchor term** in every group of 5.

### Integrations & API

Use the **API** tab for ready-made code (Node.js, Python, cURL) or call the Actor from **Make, Zapier, n8n, Google Sheets, Slack, Airbyte** and MCP-compatible AI agents. Example with the Apify Python client:

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("capable_coach/google-trends-scraper").call(run_input={
    "searchTerms": ["bim", "revit"], "geo": "US", "timeRange": "today 5-y", "compareTerms": True
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["type"], item.get("searchTerm"), item.get("averageValue"))
```

### FAQ

**Is scraping Google Trends legal?** This Actor only collects aggregated, anonymous, publicly visible statistics from Google Trends. It doesn't collect personal data. You're responsible for using the data in line with Google's terms and your local laws.

**Why does a value say `<1` or 0?** Google returns 0 when a term has too little volume for that point or region. Enable *Include low-search-volume regions* to keep those regions.

**Why are my numbers different from yesterday?** Google Trends computes values from a sample of searches, so small variations between runs are normal (the same is true on the website).

**Can I use a topic instead of a keyword?** Yes. Paste the topic ID (the `/m/…` or `/g/…` value from a Google Trends topic URL) as a search term, or paste the Google Trends URL of the topic.

**Something broke?** Open an issue on the **Issues** tab with your run ID and input.

### Other Actors by the same developer

- [ATS Jobs Scraper](https://apify.com/capable_coach/ats-jobs-scraper): Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Personio.
- [Workday Jobs Scraper](https://apify.com/capable_coach/workday-jobs-scraper): any myworkdayjobs.com career site.
- [France Public Tenders Scraper (BOAMP)](https://apify.com/capable_coach/france-public-tenders): French public procurement notices.
- [SAM.gov Contract Opportunities](https://apify.com/capable_coach/sam-gov-contract-opportunities): US federal tenders and awards.

# Actor input Schema

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

Keywords or topics to analyse, one per line (e.g. <code>bim</code>, <code>revit</code>). A Google Knowledge Graph topic ID (<code>/m/…</code>) also works. Each term = one report.

## `startUrls` (type: `array`):

Paste Google Trends explore URLs (e.g. <code>https://trends.google.com/trends/explore?q=bim,revit\&geo=FR\&date=today%2012-m</code>). The q, geo, date, cat, gprop and hl parameters of each URL are used; several terms in one URL are also compared together.

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

Country or sub-region. Pick from the list or type any Google Trends geo code: ISO country (<code>FR</code>), region (<code>US-CA</code>, <code>FR-IDF</code>) or US metro (<code>US-NY-501</code>). Leave empty for Worldwide.

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

Preset period. Choose <b>Custom</b> to use the start/end dates below. Shorter ranges give finer granularity (minutes for 1-4 hours, hourly for 1-7 days, daily up to ~9 months, weekly up to 5 years, monthly for 2004-present).

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

Used only when Time range = Custom. Format YYYY-MM-DD, not earlier than 2004-01-01.

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

Used only when Time range = Custom. Defaults to today.

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

Optional raw Google Trends <code>date</code> value that overrides the fields above, e.g. <code>2024-01-01 2024-06-30</code>, hourly <code>2026-10-20T08 2026-10-21T20</code>, or <code>today 2-y</code>.

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

Google Trends category ID to disambiguate a term (0 = all categories). Common IDs: 3 Arts & Entertainment, 47 Autos & Vehicles, 44 Beauty & Fitness, 22 Books & Literature, 12 Business & Industrial, 5 Computers & Electronics, 7 Finance, 71 Food & Drink, 8 Games, 45 Health, 65 Hobbies & Leisure, 11 Home & Garden, 13 Internet & Telecom, 958 Jobs & Education, 19 Law & Government, 16 News, 299 Online Communities, 14 People & Society, 66 Pets & Animals, 29 Real Estate, 533 Reference, 174 Science, 18 Shopping, 20 Sports, 67 Travel. Full list: the <code>cat=</code> parameter in a Google Trends URL.

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

Which Google search to measure: Web, Image, News, YouTube or Google Shopping (froogle).

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

Interface language used by Google for region names, formatted dates and topic titles (e.g. <code>en-US</code>, <code>fr</code>, <code>de</code>). Does not filter the searches themselves.

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

Google's <code>tz</code> parameter: minutes <i>behind</i> UTC (0 = UTC, -60 = UTC+1 Paris winter, 300 = New York winter). Affects hourly/daily bucket boundaries. Output dates are always ISO UTC.

## `includeInterestOverTime` (type: `boolean`):

Time series of relative interest (0-100) plus computed average, peak and latest value.

## `includeInterestByRegion` (type: `boolean`):

Relative interest by country / subregion / city / metro.

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

Top and rising related search queries, including Breakout terms.

## `includeRelatedTopics` (type: `boolean`):

Top and rising related Knowledge Graph topics. Note: since 2026 Google returns an empty topics list to automated sessions (flagged USER_TYPE_SCRAPER), so this is best effort; an empty topics list is never charged on its own.

## `filterUnrelatedRisingQueries` (type: `boolean`):

Google sometimes mixes unrelated 'rising' queries into automated responses. When enabled, rising queries sharing no word with the search term or its top queries are moved to <code>relatedQueriesRisingFiltered</code> (kept for review, not deleted).

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

Granularity for Interest by region. <b>Auto</b> = what Google shows on the website (countries for Worldwide, subregions for a country). DMA (metro) works for the US. CITY: Google currently withholds city values from automated traffic; if it comes back empty the Actor automatically falls back to subregions (or US metros) and says so in <code>dataQualityNotes</code>.

## `includeLowSearchVolumeRegions` (type: `boolean`):

Also return regions where Google has too little data (value 0).

## `maxRegions` (type: `integer`):

Cap on Interest by region rows per report (sorted by interest, highest first).

## `compareTerms` (type: `boolean`):

Also build comparison reports where terms are measured on the same 0-100 scale, like typing <code>bim, revit</code> in Google Trends. Terms are grouped in chunks of 5. Each comparison group is one extra report.

## `outputFormat` (type: `string`):

<b>One item per term</b>: a structured report per term (nested arrays) — best for JSON/API. <b>Flat rows</b>: one row per data point with a <code>recordType</code> column — best for Excel, CSV, Google Sheets and BI tools. Structured reports are always also saved to the key-value store record <code>OUTPUT</code>.

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

How many reports to fetch in parallel (each on its own proxy session). Higher is faster but triggers more Google rate limits.

## `maxRetries` (type: `integer`):

On HTTP 429 or a block, the Actor rotates to a fresh IP + cookie and retries with exponential backoff (1s, 2s, 4s… up to 30s).

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

Google Trends aggressively rate-limits datacenter IPs. RESIDENTIAL proxies are strongly recommended (default).

## Actor input object example

```json
{
  "searchTerms": [
    "chatgpt",
    "gemini"
  ],
  "geo": "US",
  "timeRange": "today 12-m",
  "category": 0,
  "property": "web",
  "language": "en-US",
  "timezoneOffsetMinutes": 0,
  "includeInterestOverTime": true,
  "includeInterestByRegion": true,
  "includeRelatedQueries": true,
  "includeRelatedTopics": true,
  "filterUnrelatedRisingQueries": false,
  "regionResolution": "auto",
  "includeLowSearchVolumeRegions": false,
  "maxRegions": 250,
  "compareTerms": false,
  "outputFormat": "perTerm",
  "maxConcurrency": 3,
  "maxRetries": 8,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

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

No description

## `structuredReports` (type: `string`):

No description

## `runStats` (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 = {
    "searchTerms": [
        "chatgpt",
        "gemini"
    ],
    "geo": "US",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("capable_coach/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 = {
    "searchTerms": [
        "chatgpt",
        "gemini",
    ],
    "geo": "US",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("capable_coach/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 '{
  "searchTerms": [
    "chatgpt",
    "gemini"
  ],
  "geo": "US",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call capable_coach/google-trends-scraper --silent --output-dataset

```

## MCP server setup

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