# Google Trends Scraper (`devilscrapes/google-trends-scraper`) Actor

Download historical Google Trends data for any keyword set: interest over time, geo breakdown, related queries, and topics. Export to CSV or JSON. Up to 100 keywords per run.

- **URL**: https://apify.com/devilscrapes/google-trends-scraper.md
- **Developed by:** [DevilScrapes](https://apify.com/devilscrapes) (community)
- **Categories:** Marketing
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

<img src=".actor/icon.svg" width="160" alt="Google Trends Scraper" />

## Google Trends Scraper

**$2.02 / 1,000 rows** — Download historical Google Trends data for any keyword set: interest over time, geographic breakdowns, related queries, and related topics. Export Google Trends to CSV or JSON in one click. No quota caps. No API key required.

_We do the dirty work so your dataset arrives clean._ 😈

Google Trends is the best free signal for search demand — but accessing it programmatically has been broken since pytrends stopped working in April 2025 and the official Trends API remains invite-only. This Actor is the Google Trends Python alternative your pipeline needs: it talks to the same internal JSON endpoints the Google Trends SPA uses, batches past the five-keyword limit transparently, and delivers structured dataset rows ready for SEO analysis, content planning, and market research.

### 🎯 What this scrapes

This Google Trends scraper pulls four data widgets for every keyword you submit:

| Widget | Endpoint | What you get |
|---|---|---|
| Interest over time | `/trends/api/widgetdata/multiline` | 0–100 weekly/monthly interest scores over your chosen window |
| Interest by region | `/trends/api/widgetdata/multiGeo` | Country or state-level breakdowns with geo codes |
| Related queries | `/trends/api/widgetdata/relatedsearches` | Top and rising search queries related to your keyword |
| Related topics | `/trends/api/widgetdata/relatedsearches` | Top and rising topic clusters (entities) linked to your keyword |

One dataset row per data point. A single keyword with interest-over-time over 12 months emits ~52 rows. All four widgets for one keyword emit ~200 rows.

**Important — relative normalization:** Google Trends values are relative 0–100 scores normalized within the requested window and keyword set. Cross-run comparisons require identical geo, timeframe, and keyword sets. This is a Google Trends constraint, not an Actor limitation.

### 🔥 Features

- **All four widgets** — interest over time, geo breakdown, related queries, and related topics in one run.
- **Batch beyond the 5-keyword limit** — submit up to 100 keywords; the Actor batches them silently in groups of ≤5 with a minimum 2-second inter-batch delay.
- **We rotate residential proxies** — exit IPs cycle through Apify's residential pool; Google Trends blocks datacenter IPs within 2–3 requests. We handle that so you don't have to.
- **We rotate browser fingerprints** — each request impersonates a real Chrome or Firefox TLS + HTTP/2 session via curl-cffi. Standard Python HTTP clients emit detectable signatures; we don't.
- **We retry with exponential backoff** — 429s trigger a fresh proxy session and a 2 s → 4 s → 8 s → 16 s → 30 s wait. Up to 5 attempts per request.
- **Partial-success surfacing** — if one widget fails after all retries, the Actor logs an error, emits zero rows for that widget, and continues. We never silently return an empty dataset.
- **`maxResults` cap** — set an optional row limit per keyword to keep test runs cheap.
- **Pydantic v2 validation** — every input field validated before any network call; invalid timeframe strings are rejected immediately with a clear error message.
- **Timeframe presets** — seven preset tokens (past 24 hours through all-time since 2004).
- **Export Google Trends to CSV, JSON, Excel, or XML** — Apify's dataset download handles all formats.

### 💡 Use cases

- **Content calendar planning** — track interest-over-time for a topic list to identify seasonal peaks and plan publication timing.
- **SEO keyword opportunity scoring** — compare relative interest across a keyword set and prioritize by trend direction rather than static search volume.
- **Bulk download Google Trends data** — pull historical interest scores for 100 keywords in a single scheduled run without hitting quota limits.
- **Competitor brand monitoring** — pull related queries for a competitor's brand to discover what problems their customers are searching for.
- **Market entry research** — use geo breakdowns to see which countries show the highest relative interest in your product category before deciding where to expand.
- **Trend alerting** — schedule a recurring Actor run on a fixed keyword list and diff interest scores to catch emerging demand spikes before they saturate.
- **Long-tail keyword discovery** — mine related queries and topics for terms that existing keyword tools miss because they fall below their volume threshold.
- **Academic and market research** — download historical Google Trends data in bulk for modelling, forecasting, or index construction. The Google Trends Python alternative for researchers whose pytrends workflows broke in 2025.

### ⚙️ How to use it

1. Open the Actor input form in Apify Console (or the API).
2. Enter your **Keywords** — one per line, up to 100. The Actor batches them automatically.
3. Set **Geographic region** — a BCP-47 country code like `US`, `GB`, or `DE`. Leave empty for worldwide data.
4. Choose a **Timeframe** from the dropdown — from the past 24 hours to all-time since 2004.
5. Optionally limit **Widgets** to only the ones you need (fewer widgets = fewer API calls = faster and cheaper runs).
6. Set **Max results** if you want to cap output per keyword during development (0 = unlimited).
7. Leave **Proxy configuration** set to RESIDENTIAL — datacenter IPs will be blocked by Google within a few requests.
8. Click **Start**. Results stream into the default dataset and can be exported as JSON, CSV, Excel, or XML.

#### Single keyword example

```json
{
  "keywords": ["python"],
  "geo": "US",
  "timeframe": "today 12-m",
  "category": 0,
  "widgets": ["interest_over_time", "related_queries"],
  "maxResults": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
````

#### Multi-keyword comparison example

```json
{
  "keywords": ["python", "javascript", "rust", "go", "typescript"],
  "geo": "US",
  "timeframe": "today 5-y",
  "category": 0,
  "widgets": ["interest_over_time", "interest_by_region"],
  "maxResults": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

### 📥 Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | string list | yes | — | 1–100 search terms. Batched in groups of ≤5. |
| `geo` | string | no | `""` (worldwide) | BCP-47 country code, e.g. `US`, `GB`, `DE`. |
| `timeframe` | select | no | `today 12-m` | One of 7 preset tokens (see dropdown). |
| `category` | integer | no | `0` | Google Trends category ID. 0 = All categories. |
| `widgets` | string list | no | all four | Which data widgets to retrieve. |
| `maxResults` | integer | no | `0` (unlimited) | Max rows per keyword across all widgets. |
| `proxyConfiguration` | proxy | no | RESIDENTIAL | Apify Proxy settings. RESIDENTIAL recommended. |

**Valid timeframe tokens:**

| Token | Window |
|---|---|
| `now 1-d` | Past 24 hours |
| `now 7-d` | Past 7 days |
| `today 1-m` | Past 30 days |
| `today 3-m` | Past 90 days |
| `today 12-m` | Past 12 months |
| `today 5-y` | Past 5 years |
| `all` | All time (since 2004) |

Custom date ranges (`"2025-01-01 2025-06-01"`) are not supported in v1 and will be rejected with a validation error.

### 📤 Output

One dataset row per data point. The `widget` field tells you which widget produced each row.

| Field | Type | Nullable | Description |
|---|---|---|---|
| `keyword` | string | no | Input keyword |
| `widget` | string | no | `interest_over_time`, `interest_by_region`, `related_queries`, or `related_topics` |
| `date` | string | yes | ISO 8601 UTC; populated for interest-over-time rows only |
| `geo` | string | no | Input geo filter (empty = worldwide) |
| `timeframe` | string | no | Input timeframe token |
| `value` | integer | string | null | yes | 0–100, or `"Breakout"` for explosive-growth related terms |
| `formattedValue` | string | yes | API display string |
| `label` | string | yes | Related search term or topic label; null for time-series and geo rows |
| `geoCode` | string | yes | Sub-region code, e.g. `US-CA`; interest-by-region only |
| `geoName` | string | yes | Sub-region display name, e.g. `California`; interest-by-region only |
| `isPartial` | boolean | no | True for the last incomplete time bucket |
| `scrapedAt` | string | no | ISO 8601 UTC when this row was written |

**Interest over time example:**

```json
{
  "keyword": "python",
  "widget": "interest_over_time",
  "date": "2025-05-01T00:00:00Z",
  "geo": "US",
  "timeframe": "today 12-m",
  "value": 82,
  "formattedValue": "82",
  "label": null,
  "geoCode": null,
  "geoName": null,
  "isPartial": false,
  "scrapedAt": "2026-06-01T09:14:33Z"
}
```

**Related queries example (with Breakout):**

```json
{
  "keyword": "python",
  "widget": "related_queries",
  "date": null,
  "geo": "US",
  "timeframe": "today 12-m",
  "value": "Breakout",
  "formattedValue": "Breakout",
  "label": "python django",
  "geoCode": null,
  "geoName": null,
  "isPartial": false,
  "scrapedAt": "2026-06-01T09:14:45Z"
}
```

### 💰 Pricing

| Event | Rate | Trigger |
|---|---|---|
| Actor start | $0.02 | Once per run at boot |
| Result emitted | $0.002 | Per row pushed to the dataset |

**Effective cost: ~$2.02 per 1,000 rows.** You pay only for results that land — no data, no charge (beyond the one-time $0.02 start fee).

No credit card required to try the Actor — Apify's free tier includes $5 of monthly credits.

### 🚧 Limitations

- **Relative values only** — Google Trends values are 0–100 relative scores normalized within your request. Absolute search volumes are not available from the Trends API.
- **No custom date ranges in v1** — only the seven preset timeframe tokens are supported. Custom `YYYY-MM-DD YYYY-MM-DD` strings will be rejected. This is planned for v2.
- **No real-time / trending-searches surface** — this Actor targets the historical interest data widgets, not the live "trending now" feed.
- **No city-level geo drill-down** — state/province level is the finest granularity available reliably across timeframes.
- **Cross-batch normalization for >5 keywords** — Google Trends normalizes values within each batch of ≤5 keywords. When you submit more than 5 keywords, the Actor processes them in sequential batches, and values across batches are not directly comparable. This is a Google Trends API constraint.
- **Residential proxy required** — datacenter IPs are blocked within a few requests. The Actor defaults to RESIDENTIAL proxies; disabling this will lead to rapid blocking.
- **Rate limits at high volume** — even with residential proxies and backoff, very large runs (>100 keyword batches in a short window) may encounter sustained 429s. The Actor surfaces partial success and never silently returns empty results.

### ❓ FAQ

**Why are all values relative (0–100) instead of absolute search volume?**
Google does not expose absolute search volume in the Trends API. The 0–100 scale is normalized to the peak value within the requested keyword set and timeframe. To compare keywords across separate runs, you must include the same reference keyword in every run.

**Can I compare trends across different runs?**
Only if all runs use the same keyword set, geo, and timeframe. Even then, Google's normalization can shift slightly between requests. For reproducible comparisons, include a stable "anchor" keyword in every batch.

**Why does a related term show "Breakout" instead of a number?**
"Breakout" is Google's signal that the query grew more than 5,000% in the selected timeframe — typically a very new or viral topic. The Actor preserves this string exactly as returned; it is not a scraping error.

**Is this a Google Trends Python alternative to pytrends?**
Yes. pytrends became unreliable in April 2025 when Google changed the session authentication flow. This Actor hits the same internal JSON endpoints the Google Trends web app uses, bypassing the deprecated pytrends approach entirely.

**What happens if Google blocks a request?**
We rotate the proxy session and exit IP, then retry up to 5 times with exponential backoff (2 s → 30 s). If all 5 attempts fail for a widget, we log an error, emit zero rows for that widget, and continue with the next. The run status message reports exactly how many rows landed vs. were skipped.

**Is the Google Trends API officially supported for this use?**
The Actor uses the same unauthenticated JSON endpoints the Google Trends web application uses. No official API key or Google account is required. We maintain the same posture as other high-volume Trends tools used for research and marketing.

**How many keywords can I submit per run?**
Up to 100. The Actor batches them in groups of ≤5 (the Google Trends API limit per explore call), with at least a 2-second pause between batches to stay within rate limits.

**Can I export Google Trends data to CSV or Excel?**
Yes. Once the run completes, click **Export** in the Apify dataset view and choose CSV, Excel, JSON, or XML. No additional tooling needed.

### 💬 Your feedback

Spotted a bug or a broken widget? Use the **Issues** tab on the Apify Store listing.

Want a feature — custom date ranges, city-level geo, or a comparison-anchor mode? Drop a note in Issues and we'll prioritize by demand.

Happy scraping. 😈

# Actor input Schema

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

One or more search terms to look up on Google Trends. Up to 100 keywords; the Actor batches them in groups of 5 as required by the Trends API.

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

BCP-47 country code to restrict results (e.g. <code>US</code>, <code>GB</code>, <code>DE</code>). Leave empty for worldwide data.

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

Time window for the query. Must be one of the seven preset tokens — custom date ranges are not supported in v1.

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

Google Trends category filter. 0 = All categories. See the Google Trends category list for numeric IDs.

## `widgets` (type: `array`):

Which data widgets to retrieve. Defaults to all four. Valid values: <code>interest\_over\_time</code>, <code>interest\_by\_region</code>, <code>related\_queries</code>, <code>related\_topics</code>.

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

Maximum number of dataset rows to emit per keyword across all widgets. 0 means unlimited.

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

Apify Proxy settings. RESIDENTIAL proxies are recommended — Google Trends blocks datacenter IPs within a few requests.

## Actor input object example

```json
{
  "keywords": [
    "python",
    "javascript"
  ],
  "geo": "US",
  "timeframe": "today 12-m",
  "category": 0,
  "widgets": [
    "interest_over_time",
    "interest_by_region",
    "related_queries",
    "related_topics"
  ],
  "maxResults": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

All dataset items as JSON.

## `datasetItemsCsv` (type: `string`):

Same data exported to CSV.

## `datasetView` (type: `string`):

Open the run dataset in the Console.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "python",
        "javascript"
    ],
    "geo": "US",
    "timeframe": "today 12-m",
    "category": 0,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("devilscrapes/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 = {
    "keywords": [
        "python",
        "javascript",
    ],
    "geo": "US",
    "timeframe": "today 12-m",
    "category": 0,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("devilscrapes/google-trends-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "python",
    "javascript"
  ],
  "geo": "US",
  "timeframe": "today 12-m",
  "category": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call devilscrapes/google-trends-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=devilscrapes/google-trends-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Trends Scraper",
        "description": "Download historical Google Trends data for any keyword set: interest over time, geo breakdown, related queries, and topics. Export to CSV or JSON. Up to 100 keywords per run.",
        "version": "0.9",
        "x-build-id": "ef8T1qcHvYPVhHC36"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/devilscrapes~google-trends-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-devilscrapes-google-trends-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/devilscrapes~google-trends-scraper/runs": {
            "post": {
                "operationId": "runs-sync-devilscrapes-google-trends-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/devilscrapes~google-trends-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-devilscrapes-google-trends-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "keywords"
                ],
                "properties": {
                    "keywords": {
                        "title": "Keywords",
                        "minItems": 1,
                        "maxItems": 100,
                        "type": "array",
                        "description": "One or more search terms to look up on Google Trends. Up to 100 keywords; the Actor batches them in groups of 5 as required by the Trends API.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "geo": {
                        "title": "Geographic region",
                        "type": "string",
                        "description": "BCP-47 country code to restrict results (e.g. <code>US</code>, <code>GB</code>, <code>DE</code>). Leave empty for worldwide data.",
                        "default": ""
                    },
                    "timeframe": {
                        "title": "Timeframe",
                        "enum": [
                            "now 1-d",
                            "now 7-d",
                            "today 1-m",
                            "today 3-m",
                            "today 12-m",
                            "today 5-y",
                            "all"
                        ],
                        "type": "string",
                        "description": "Time window for the query. Must be one of the seven preset tokens — custom date ranges are not supported in v1.",
                        "default": "today 12-m"
                    },
                    "category": {
                        "title": "Category ID",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Google Trends category filter. 0 = All categories. See the Google Trends category list for numeric IDs.",
                        "default": 0
                    },
                    "widgets": {
                        "title": "Widgets to fetch",
                        "type": "array",
                        "description": "Which data widgets to retrieve. Defaults to all four. Valid values: <code>interest_over_time</code>, <code>interest_by_region</code>, <code>related_queries</code>, <code>related_topics</code>.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "interest_over_time",
                            "interest_by_region",
                            "related_queries",
                            "related_topics"
                        ]
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of dataset rows to emit per keyword across all widgets. 0 means unlimited.",
                        "default": 0
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy settings. RESIDENTIAL proxies are recommended — Google Trends blocks datacenter IPs within a few requests.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
