# TikTok Search Suggestions Scraper: a-z, questions, CSV/JSON (`tallyrake/tiktok-autocomplete-scraper`) Actor

TikTok search suggestions as CSV/JSON rows: seed, query sent, suggestion, rank, expansion (a-z, question words, prepositions; comparisons and numbers optional), region, language, stable id.

- **URL**: https://apify.com/tallyrake/tiktok-autocomplete-scraper.md
- **Developed by:** [Tallyrake Data](https://apify.com/tallyrake) (community)
- **Categories:** Social media, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 suggestion rows

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## TikTok Search Suggestions Scraper: a-z, questions, CSV/JSON

TikTok search-box suggestions as CSV/JSON rows. Give it seed keywords; it requests the suggestions TikTok shows as a user types, for the seed, seed + a to z, question words, and prepositions (comparisons and numbers only if you enable those expansions), for the region and language you set. One flat row per unique suggestion per seed, each with a stable `id`. $0.25 per 1,000 rows.

This is **not** video scraping, **not** profile scraping, and **not** hashtag stats. It does not return video IDs, captions, view counts, follower counts, or challenge/hashtag metrics. It is the dropdown list from TikTok's search box, nothing else.

Same engine, other search boxes: [Google](https://apify.com/tallyrake/google-autocomplete-scraper), [YouTube](https://apify.com/tallyrake/youtube-autocomplete-scraper), [Amazon](https://apify.com/tallyrake/amazon-autocomplete-scraper), [Bing](https://apify.com/tallyrake/bing-autocomplete-scraper), [DuckDuckGo](https://apify.com/tallyrake/duckduckgo-autocomplete-scraper), [Etsy](https://apify.com/tallyrake/etsy-autocomplete-scraper), [Pinterest](https://apify.com/tallyrake/pinterest-autocomplete-scraper). Same input shape, same flat rows, one run per engine.

### What you get

| Field | Example |
|---|---|
| `id` | stable per seed, region, language, query and suggestion |
| `keyword` | `makeup` (your seed) |
| `query` | `makeup` (the exact string sent) |
| `suggestion` | `makeup tutorials` |
| `rank` | `1` (position in TikTok's list for that query) |
| `expansion` | `direct`, `alphabet`, `question`, `preposition`, `comparison`, `number`, `depth` |
| `modifier` | `b`, `how`, `for`, `vs` |
| `depth` | `1` or `2` |
| `hotLevel` | TikTok's `hot_level` flag, or `null` |
| `ecomIntent` | TikTok's `ecom_intent` flag, or `null` |
| `language`, `region` | `en`, `us` |
| `engine` | `tiktok` |
| `fetchedAt` | ISO timestamp |

Rows are deduplicated per seed (case-insensitive), so a suggestion that appears under several modifiers is counted once, under the first query that produced it.

Want the file instead of running the actor? A keyword list from live autocomplete for your seeds is $10, made to order, at https://tallyrake.com/files (CSV and XLSX by email within 24 hours of your order details).

### Example input

```json
{
  "keywords": ["makeup"],
  "expansions": ["alphabet", "questions", "prepositions"],
  "depth": 1,
  "language": "en",
  "region": "us",
  "proxyConfiguration": { "useApifyProxy": true }
}
```

Paste seeds one per line. The default expansions send 52 queries per seed (1 seed + 26 letters + 14 question words + 11 prepositions = 52). Comparisons and numbers are not in that 52; they are extra expansions. One seed is not one billable unit: you are billed unique dataset rows, not queries.

Proxy defaults to Apify Proxy with no proxy group (datacenter). TikTok localises suggestions by exit IP as well as the `region` parameter; pin a country on the proxy for a genuine other market.

### Recipes

**Content brief for one topic.** Seeds: your topic. Expansions: questions, prepositions. Depth 1. Output: the questions and phrasings TikTok suggests for the topic, each with the engine rank on the query that first produced it (dedup keeps the first hit, not a single global order).

**Keyword list for a niche.** Seeds: 10 to 50 head terms. Expansions: alphabet. Depth 2. TikTok returns about 10 suggestions per query, and `maxQueriesPerKeyword` (default 300) caps the requests per seed, so one seed can produce at most 3,000 dataset rows before dedup (at most $0.75 at $0.25 per 1,000). Empty queries bill $0. Start at concurrency 3; the log shows 429 or 403 when a proxy or a split is needed.

**Localized suggestions.** Same seeds, `language` and `region` set per run. Rows carry both codes so runs can be merged. For a market that is not the run's own IP, enable Apify Proxy and pin that country.

**Brand and competitor monitoring.** Seeds: brand names. Expansions: comparisons, questions. Schedule daily. Diff the `suggestion` column between runs.

### Reliability and cost

Pay per event: $0.25 per 1,000 dataset rows, plus Apify platform usage for the run. Empty queries produce no rows and no results charge. Every request is paced with a jittered delay (`pacingMs`, default 200 ms). If the engine answers 429 or 403, the run rotates its session and retries.

No soaked run has been measured on Apify yet, so this README does not state a success rate or a platform-usage cost.

### Cost limit

If a run reaches the "Maximum total charge per run" you set, it stops in process rather than being aborted by the platform: the run ends with status SUCCEEDED, and the run status message on the run detail says how many rows were written and how many were found but not written and not billed. Re-running the same input writes and bills the same prefix again, so raise the cap before re-running if you want the rest.

### Bigger jobs

Running thousands of TikTok keywords, or need this as a one-off file instead of a run? We build custom exports — any keywords, countries and date ranges, delivered as flat CSV or JSON within 24 hours: https://tallyrake.com/datasets/

### Limits

This is TikTok's suggestion list for the region and language you set, at the time of the run. It carries no search volume. TikTok returns about 10 suggestions per query. Export CSV for Excel and Google Sheets. Export JSON for pipelines.

It is not a video scraper, not a profile scraper, and not a hashtag-stats scraper. It does not log in, does not download media, and does not walk search-result pages.

### Where this sits on the shelf

Apify Store, read 2026-10-15. This actor is not published; the $0.25 per 1,000 rows figure above is the placeholder price, and the maintainer sets pay-per-result on the Store. Nothing in this build charges a custom event. One default dataset row is one result.

| Listing | Users (30d) | Total users | Price per 1,000 rows |
|---|---|---|---|
| memo23/tiktok-suggestions-scraper | 30 | 80 | $2.00 |
| tallyrake/tiktok-autocomplete-scraper (this actor) | 0 | 0 | $0.25 |

# Actor input Schema

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

One seed per line. Each seed is expanded (see Expansions) and every expanded query is sent to TikTok's search-suggestion endpoint.

## `expansions` (type: `array`):

How to fan each seed out. alphabet: seed + a..z (26 queries). questions: who/what/why/how/when/where/which/is/are/can/does/do/will/should + seed (14). prepositions: seed + for/with/without/to/near/in/on/from/like/after/before (11). comparisons: seed + vs/or/versus/and (4). numbers: seed + 1..5/10/2026 (7). The plain seed is always queried.

## `depth` (type: `integer`):

1 = expand the seeds only. 2 = also send every first-level suggestion back to TikTok (capped by Max queries per keyword).

## `maxQueriesPerKeyword` (type: `integer`):

Cap on the number of suggestion requests made per seed, across expansions and depth.

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

Interface language code sent as app_language, e.g. en, de, es, pt, ja.

## `region` (type: `string`):

Two-letter country code sent as region / priority_region, e.g. us, gb, de, in, br. TikTok also localises by exit IP; turn on Apify Proxy and pin a country for a genuine other market.

## `dedupe` (type: `boolean`):

Keep the first occurrence of each suggestion per seed keyword (case-insensitive).

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

Apify Proxy, datacenter by default (leave proxy groups empty). The run rotates its session on HTTP 429 or 403. Residential is optional if datacenter is blocked.

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

Parallel suggestion requests. 3 is the house default; up to 10 with Apify Proxy.

## `pacingMs` (type: `integer`):

Base jittered delay between requests per worker; 0 disables pacing.

## Actor input object example

```json
{
  "keywords": [
    "makeup"
  ],
  "expansions": [
    "alphabet",
    "questions",
    "prepositions"
  ],
  "depth": 1,
  "maxQueriesPerKeyword": 300,
  "language": "en",
  "region": "us",
  "dedupe": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 3,
  "pacingMs": 200
}
```

# Actor output Schema

## `suggestions` (type: `string`):

All suggestion rows (one per suggestion per seed).

## `csv` (type: `string`):

The same rows as CSV.

# 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": [
        "makeup"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tallyrake/tiktok-autocomplete-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": ["makeup"] }

# Run the Actor and wait for it to finish
run = client.actor("tallyrake/tiktok-autocomplete-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 '{
  "keywords": [
    "makeup"
  ]
}' |
apify call tallyrake/tiktok-autocomplete-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tallyrake/tiktok-autocomplete-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/847xfwL13VHdNtlrj/builds/ZoSq3sJKXxbfcGwqP/openapi.json
