# TikTok Keyword Suggestions Scraper — Autocomplete + Volume (`memo23/tiktok-suggestions-scraper`) Actor

Scrape TikTok autocomplete search suggestions for any seed keyword. A–Z & 0–9 expansion, recursive keyword trees, and true per-country results via proxy — every phrase scored by a volume proxy so in-demand terms rise to the top. Metadata: rank, hot-level, intent. JSON or CSV

- **URL**: https://apify.com/memo23/tiktok-suggestions-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, AI, Agents
- **Stats:** 18 total users, 17 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 tiktok suggestions

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

<h1 align="center">TikTok Keyword Suggestions Scraper 🔎</h1>

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/tiktok-suggestions-logo.png" alt="TikTok Keyword Suggestions Scraper" width="160"/>
</p>

Turn any seed keyword into hundreds of **ranked TikTok autocomplete suggestions** — the exact phrases real users see when they start typing in TikTok search. Built for TikTok SEO, content planning, trend discovery, and ad/keyword research.

Most "autocomplete dumps" hand you an unsorted list. This actor adds the three things that make it a real keyword tool:

- 📊 **Volume proxy** — a relative popularity score for every phrase (how many query variants surfaced it).
- 🌳 **Recursive keyword trees** — feed suggestions back in as seeds to mine the long tail several levels deep.
- 🌍 **Truly localized regions** — country-pinned residential exits, because TikTok localizes by IP, not by a query param (most tools get this wrong).

> Pure HTTP. No login, no token, no browser, no CAPTCHA solver.

---

### Why use this scraper?

- **Find what people actually search on TikTok** — autocomplete is TikTok telling you, in its own words, what its users type.
- **Rank by popularity, not just A–Z** — the volume proxy floats in-demand phrases to the top instead of dumping an unsorted list.
- **Scale one seed into hundreds** — A–Z / 0–9 expansion and recursive depth multiply each seed into a deep long-tail set.
- **Real per-country data** — pin an exit to each region and a US sweep and a DE sweep genuinely differ.
- **Cheap and fast** — a light public endpoint, fetched in parallel. Billed per suggestion.

---

### Overview

The actor outputs **one row per suggestion** (not one row per seed). Each row carries the phrase plus its ranking signals — volume proxy, TikTok's own rank, hot-level, e-commerce-intent, region, language, and the recursion depth it was found at. Run it with a single seed for a quick autocomplete pull, or with A–Z expansion + recursion across multiple regions for an exhaustive keyword map.

---

### Supported inputs

| You provide | The actor does |
|---|---|
| One or more **seed keywords** | Fetches TikTok autocomplete suggestions for each |
| **A–Z / 0–9 expansion** toggles | Appends each letter/digit → long-tail completions (~26× / 10× more ideas) |
| **Recursive depth** (0–3) | Feeds discovered suggestions back as new seeds → keyword tree |
| **Regions + languages** | Sweeps each locale; with Apify Proxy, each region is a real country-pinned exit |

---

### Use cases

| Audience | What they get |
|---|---|
| TikTok creators & SEO | The exact phrases to put in captions, hashtags, and on-screen text |
| Social & content marketers | Trend and niche discovery before a topic saturates |
| E-commerce / TikTok Shop | The `ecomIntent` flag highlights buying-intent suggestions |
| Performance / ads teams | Demand language for TikTok Ads targeting |
| Tool & dashboard builders | A cheap, fast suggestion feed to power your own product |

---

### How it works

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-tiktok-suggestions.png" alt="How it works" width="900"/>
</p>

1. Each seed is expanded into a set of query variants (the seed itself, plus optional A–Z / 0–9 suffixes), multiplied across the regions and languages you ask for.
2. All variants are fetched **in parallel** against TikTok's public autocomplete endpoint (`/api/search/general/sug/`).
3. Every returned phrase is aggregated: identical suggestions are merged, and a **volume proxy** counts how many distinct variants surfaced each — a relative popularity signal.
4. If recursive depth > 0, the discovered suggestions become the next round of seeds (bounded by a request budget).
5. Results are ranked per seed (volume proxy, then TikTok's own rank) and written one row per suggestion.

> **Note on regions:** TikTok localizes suggestions by **exit IP**, not by the `region` parameter. For genuinely different per-country results, enable **Apify Proxy (Residential)** — the actor then pins an exit to each region's country. Without a proxy, all regions reflect the run's own IP (still fine for a single locale).

---

### Input configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `keywords` | string[] | — (required) | Seed terms to get suggestions for |
| `expandAlphabet` | boolean | `false` | Append a–z to each seed for long-tail expansion |
| `expandNumbers` | boolean | `false` | Append 0–9 to each seed |
| `expansionDepth` | integer | `0` | Recursively re-seed from discovered suggestions (0–3) |
| `regions` | string[] | `["US"]` | ISO country codes; real localization needs proxy (see above) |
| `languages` | string[] | `["en"]` | Language codes for `app_language` |
| `maxSuggestionsPerKeyword` | integer | `0` | Cap per seed after ranking (0 = no cap) |
| `maxItems` | integer | `1000` | Hard cap on total rows (charging-aware) |
| `deduplicateSuggestions` | boolean | `false` | Collapse the same phrase across seeds into one row |
| `includeMetadata` | boolean | `true` | Include TikTok's rank / hot-level / e-comm-intent signals |
| `maxConcurrency` | integer | `10` | Simultaneous requests |
| `proxy` | object | off | Optional; enable for true multi-region |

#### Example input

```json
{
  "keywords": ["coffee", "matcha"],
  "expandAlphabet": true,
  "expansionDepth": 0,
  "regions": ["US"],
  "languages": ["en"],
  "maxItems": 1000
}
````

***

### Output overview

Every row is a single suggestion with its ranking signals. Rows are ordered by `rank` within each `seedKeyword` (1 = most popular by volume proxy). Export as JSON, CSV, Excel, or pull via the Apify API.

#### Output sample

```json
{
  "suggestion": "berlin nights cafe",
  "seedKeyword": "berlin cafe",
  "query": "berlin cafe",
  "region": "US",
  "language": "en",
  "rank": 1,
  "volumeProxy": 6,
  "tiktokRank": 0,
  "depth": 1,
  "surfacedByQueries": ["berlin cafe", "berlin cafe n", "berlin cafe s"],
  "source": "sug",
  "hotLevel": "0",
  "ecomIntent": "1",
  "groupId": "6943606858285580941",
  "scrapedAt": "2026-06-24T10:23:00.000Z"
}
```

#### Key output fields

| Field | Meaning |
|---|---|
| `suggestion` | The autocomplete phrase TikTok serves |
| `seedKeyword` | The seed it derives from |
| `query` | The exact query variant that surfaced it |
| `rank` | Rank within its seed (1 = top), by volume proxy |
| `volumeProxy` | How many query variants surfaced this phrase — relative popularity |
| `tiktokRank` | The position TikTok itself ranked it at (lower = higher) |
| `depth` | Recursion depth it was found at (0 = direct seed) |
| `hotLevel` / `ecomIntent` | TikTok's trending / buying-intent flags |
| `region` / `language` | Locale it was found in |
| `scrapedAt` | ISO timestamp |

***

### FAQ

**Does this need a TikTok login, API key, or token?**
No. It uses TikTok's public web autocomplete endpoint over plain HTTP.

**Is `volumeProxy` an exact search volume?**
No — it's a *relative* popularity signal (how many query variants surfaced the phrase). It's excellent for ranking ideas against each other, not a substitute for paid search-volume data.

**Why do all my regions return the same results?**
TikTok localizes by exit IP. Enable Apify Proxy (Residential) to pin each region to its country; otherwise all regions reflect the run's IP. See the note under *How it works*.

**How many suggestions per seed?**
TikTok returns up to ~10 per query. With A–Z expansion that becomes hundreds of long-tail ideas per seed; recursion deepens it further.

**Can I get suggestions in other languages?**
Yes — set `languages` (e.g. `["es","ar"]`). For the strongest localization, combine with a matching-country proxy.

**Will huge expansions run forever?**
No. A built-in request budget caps total fetches and logs when it truncates, so an A–Z + deep-recursion run stays bounded.

***

### Support

Questions, custom fields, or a tailored scraper? Email **muhamed.didovic@gmail.com** or open an issue on the actor's Issues tab. Issues are monitored and usually answered within a day.

***

### Additional services

Need this wired into a pipeline — scheduled runs, a webhook into your CRM/warehouse, a custom-shaped dataset, or a different platform's autocomplete? I build and maintain bespoke scrapers. Reach out at **muhamed.didovic@gmail.com**.

***

### Explore more scrapers

Browse the rest of the portfolio (Yelp, Airbnb, Expedia, Tours & Activities, and more) on the author's Apify page: **https://apify.com/memo23**

***

### ⚠️ Disclaimer

This Actor collects **publicly available** TikTok search-autocomplete data for legitimate research, SEO, and market-analysis purposes. It does not log in, bypass authentication, or access private or personal data. Use of this Actor must comply with TikTok's Terms of Service and all applicable laws including data-protection regulations (GDPR, CCPA, etc.). The Actor's authors are not responsible for any misuse. Users must:

- Respect rate limits and avoid overloading TikTok's infrastructure
- Not use scraped data to violate user privacy or terms
- Use the data in compliance with applicable jurisdictions
- Not republish scraped content in violation of copyright

We do not store any scraped data; the Actor returns it directly to your Apify dataset for your authorized use. TikTok is a trademark of its respective owner; this Actor is not affiliated with, endorsed by, or sponsored by TikTok or ByteDance Ltd.

***

### SEO Keywords

tiktok keyword tool, tiktok search suggestions, tiktok autocomplete scraper, tiktok seo keywords, tiktok keyword research, tiktok trending searches, tiktok content ideas, tiktok hashtag research, tiktok long-tail keywords, tiktok search api, tiktok keyword discovery, tiktok marketing tool, social media keyword research, tiktok shop keywords, tiktok ads keyword research, tiktok autocomplete api, keyword suggestions scraper, tiktok trends, apify tiktok scraper, tiktok json csv export

# Actor input Schema

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

One or more seed terms to fetch TikTok autocomplete suggestions for. Each seed is expanded into long-tail suggestions ranked by a relative volume proxy.

## `expandAlphabet` (type: `boolean`):

Append every letter a–z to each seed ("coffee a", "coffee b", …) to surface hundreds of long-tail completions per seed. Multiplies the request count ~26× — keep concurrency reasonable.

## `expandNumbers` (type: `boolean`):

Append every digit 0–9 to each seed. Useful for versioned or listicle terms ("top 5", "iphone 15").

## `expansionDepth` (type: `integer`):

Feed returned suggestions back in as new seeds, building a keyword tree. 0 = seeds only (default). 1–2 recommended; higher values grow the request count exponentially.

## `regions` (type: `array`):

ISO 2-letter country codes, e.g. US, GB, DE. TikTok localises suggestions by <b>exit IP</b>, not by this value — so the actor pins the proxy exit to each region's country for genuinely different per-country results (verified: a US sweep returns English, a JP sweep returns Japanese). <b>Paying users are auto-routed through premium country-pinned residential proxies</b> (no setup needed); free users can enable Apify Proxy below for the same. Without any proxy, regions are best-effort (reflect the run's IP). A suggestion appearing across many regions earns a higher volume proxy. Defaults to \["US"].

## `languages` (type: `array`):

Language codes to query, e.g. en, es, ar. Defaults to \["en"].

## `maxSuggestionsPerKeyword` (type: `integer`):

Cap on suggestions returned per seed keyword, applied after ranking by volume proxy. 0 = no per-seed cap.

## `maxItems` (type: `integer`):

Hard cap on the total number of suggestion rows pushed to the dataset (charging-aware).

## `deduplicateSuggestions` (type: `boolean`):

When enabled, a suggestion surfaced by multiple seeds collapses into one row (volume proxy summed). When disabled (default), one row per (seed, suggestion) keeps full seed attribution.

## `includeMetadata` (type: `boolean`):

Include TikTok's raw per-suggestion signals: rank, hot level, e-commerce intent, source, group ID and language.

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

Maximum simultaneous requests to TikTok. The endpoint is light, so 10–20 is safe.

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

Optional. <b>Paying users are automatically routed through premium country-pinned residential proxies</b> — no setup needed for true multi-region results. Free users: enable Apify Proxy (Residential) here for the same per-region country pinning, or leave OFF to go direct (fine for a single locale; the endpoint works without a proxy).

## Actor input object example

```json
{
  "keywords": [
    "coffee",
    "vegan recipe"
  ],
  "expandAlphabet": false,
  "expandNumbers": false,
  "expansionDepth": 0,
  "regions": [
    "US"
  ],
  "languages": [
    "en"
  ],
  "maxSuggestionsPerKeyword": 0,
  "maxItems": 1000,
  "deduplicateSuggestions": false,
  "includeMetadata": true,
  "maxConcurrency": 10,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# 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": [
        "coffee",
        "vegan recipe"
    ],
    "regions": [
        "US"
    ],
    "languages": [
        "en"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/tiktok-suggestions-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": [
        "coffee",
        "vegan recipe",
    ],
    "regions": ["US"],
    "languages": ["en"],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/tiktok-suggestions-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": [
    "coffee",
    "vegan recipe"
  ],
  "regions": [
    "US"
  ],
  "languages": [
    "en"
  ]
}' |
apify call memo23/tiktok-suggestions-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Keyword Suggestions Scraper — Autocomplete + Volume",
        "description": "Scrape TikTok autocomplete search suggestions for any seed keyword. A–Z & 0–9 expansion, recursive keyword trees, and true per-country results via proxy — every phrase scored by a volume proxy so in-demand terms rise to the top. Metadata: rank, hot-level, intent. JSON or CSV",
        "version": "0.0",
        "x-build-id": "MJiKt4uagVPKVal3n"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~tiktok-suggestions-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-tiktok-suggestions-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/memo23~tiktok-suggestions-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-tiktok-suggestions-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/memo23~tiktok-suggestions-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-tiktok-suggestions-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": "Seed keywords",
                        "type": "array",
                        "description": "One or more seed terms to fetch TikTok autocomplete suggestions for. Each seed is expanded into long-tail suggestions ranked by a relative volume proxy.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "expandAlphabet": {
                        "title": "A–Z expansion",
                        "type": "boolean",
                        "description": "Append every letter a–z to each seed (\"coffee a\", \"coffee b\", …) to surface hundreds of long-tail completions per seed. Multiplies the request count ~26× — keep concurrency reasonable.",
                        "default": false
                    },
                    "expandNumbers": {
                        "title": "0–9 expansion",
                        "type": "boolean",
                        "description": "Append every digit 0–9 to each seed. Useful for versioned or listicle terms (\"top 5\", \"iphone 15\").",
                        "default": false
                    },
                    "expansionDepth": {
                        "title": "Recursive expansion depth",
                        "minimum": 0,
                        "maximum": 3,
                        "type": "integer",
                        "description": "Feed returned suggestions back in as new seeds, building a keyword tree. 0 = seeds only (default). 1–2 recommended; higher values grow the request count exponentially.",
                        "default": 0
                    },
                    "regions": {
                        "title": "Regions",
                        "type": "array",
                        "description": "ISO 2-letter country codes, e.g. US, GB, DE. TikTok localises suggestions by <b>exit IP</b>, not by this value — so the actor pins the proxy exit to each region's country for genuinely different per-country results (verified: a US sweep returns English, a JP sweep returns Japanese). <b>Paying users are auto-routed through premium country-pinned residential proxies</b> (no setup needed); free users can enable Apify Proxy below for the same. Without any proxy, regions are best-effort (reflect the run's IP). A suggestion appearing across many regions earns a higher volume proxy. Defaults to [\"US\"].",
                        "default": [
                            "US"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "languages": {
                        "title": "Languages",
                        "type": "array",
                        "description": "Language codes to query, e.g. en, es, ar. Defaults to [\"en\"].",
                        "default": [
                            "en"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxSuggestionsPerKeyword": {
                        "title": "Max suggestions per seed",
                        "type": "integer",
                        "description": "Cap on suggestions returned per seed keyword, applied after ranking by volume proxy. 0 = no per-seed cap.",
                        "default": 0
                    },
                    "maxItems": {
                        "title": "Max total results",
                        "type": "integer",
                        "description": "Hard cap on the total number of suggestion rows pushed to the dataset (charging-aware).",
                        "default": 1000
                    },
                    "deduplicateSuggestions": {
                        "title": "Deduplicate across seeds",
                        "type": "boolean",
                        "description": "When enabled, a suggestion surfaced by multiple seeds collapses into one row (volume proxy summed). When disabled (default), one row per (seed, suggestion) keeps full seed attribution.",
                        "default": false
                    },
                    "includeMetadata": {
                        "title": "Include suggestion metadata",
                        "type": "boolean",
                        "description": "Include TikTok's raw per-suggestion signals: rank, hot level, e-commerce intent, source, group ID and language.",
                        "default": true
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "type": "integer",
                        "description": "Maximum simultaneous requests to TikTok. The endpoint is light, so 10–20 is safe.",
                        "default": 10
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. <b>Paying users are automatically routed through premium country-pinned residential proxies</b> — no setup needed for true multi-region results. Free users: enable Apify Proxy (Residential) here for the same per-region country pinning, or leave OFF to go direct (fine for a single locale; the endpoint works without a proxy).",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
