# TikTok Search Scraper (`rastriq/tiktok-search-scraper`) Actor

Search TikTok for videos and users by keyword, or get all videos under a hashtag. Built for marketing teams tracking brand mentions and campaign performance.

- **URL**: https://apify.com/rastriq/tiktok-search-scraper.md
- **Developed by:** [Rastriq — Structured data from the world](https://apify.com/rastriq) (community)
- **Categories:** Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

../README.md

# Actor input Schema

## `mode` (type: `string`):

What to extract.<br><br><b>🔍 Search Videos</b> — find videos matching a keyword, with views, likes, comments, shares, and author info.<br><b>👥 Search Users</b> — find accounts matching a keyword, with follower counts and bios.<br><b>#️⃣ Hashtag Videos</b> — get all videos posted under a specific hashtag or challenge, with full engagement metrics.

## `searchQueries` (type: `array`):

Keywords to search for. Used in <b>Search Videos</b> and <b>Search Users</b> modes.<br><br>Examples:<br>• <code>nike campaign</code><br>• <code>sustainable fashion</code><br>• <code>iphone review</code><br><br>Add one keyword per line. Each keyword runs as a separate search.

## `hashtags` (type: `array`):

Hashtags to extract. Used in <b>Hashtag Videos</b> mode.<br><br>Accepts multiple formats:<br>• With #: <code>#madrid</code><br>• Without #: <code>madrid</code><br>• Full URL: <code>https://www.tiktok.com/tag/madrid</code><br><br>Add one per line.

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

Maximum items to extract <b>per keyword or hashtag</b>. Each keyword gets its own independent budget — e.g. 3 keywords × 100 = up to 300 items total, billed accordingly.<br><br>💡 <b>Tip:</b> Start with 10–20 for a quick test, then scale up once you're happy with the results.

## `includeSubtitles` (type: `boolean`):

Include video subtitle/caption text when available. Useful for analyzing what creators are <b>saying</b> about your brand, not just what they write in captions.<br><br>⚠️ May increase run time for large extractions.

## `maxRunSeconds` (type: `integer`):

Maximum total run time in seconds. The extraction stops gracefully when this limit is reached.

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

Connection settings. The default (datacenter proxy) works well and keeps costs low. Switch to residential only if you experience persistent blocks.

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

How many searches to run in parallel. Keep at 1–3 for best reliability.

## `proxyProvider` (type: `string`):

Which proxy provider to use.<br><br><b>auto</b> — use the Proxy configuration above (default).<br><b>decodo</b> — use Decodo residential proxy (requires <code>DECODO\_USER</code> and <code>DECODO\_PASS</code> environment variables set in Actor settings).

## `blockResources` (type: `boolean`):

Abort image, media, and font requests to reduce bandwidth. Recommended when using residential proxies. Has no effect on scraped data.

## `debugMode` (type: `boolean`):

Enable detailed logging for troubleshooting. Recommended only when diagnosing issues with Apify support.

## Actor input object example

```json
{
  "mode": "search_videos",
  "searchQueries": [
    "nike"
  ],
  "hashtags": [
    "madrid"
  ],
  "maxResults": 20,
  "includeSubtitles": false,
  "maxRunSeconds": 3600,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 1,
  "proxyProvider": "auto",
  "blockResources": true,
  "debugMode": 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 = {
    "searchQueries": [
        "nike"
    ],
    "hashtags": [
        "madrid"
    ],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rastriq/tiktok-search-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 = {
    "searchQueries": ["nike"],
    "hashtags": ["madrid"],
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("rastriq/tiktok-search-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 '{
  "searchQueries": [
    "nike"
  ],
  "hashtags": [
    "madrid"
  ],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rastriq/tiktok-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rastriq/tiktok-search-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/hE6wEpY73R8tj9UMo/builds/aYEAVjkOnFcLAgy04/openapi.json
