# TikTok Search Scraper — Videos by Keyword, No Login (`memo23/tiktok-search-scraper`) Actor

Search TikTok by any keyword and scrape every matching video — no login, no cookies. Get video URL, description, play/like/comment/share/save counts, posting date, creator handle with follower count, music, and hashtags for every result. Multiple keywords per run.

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

## Pricing

from $0.49 / 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/platform/actors/running/actors-in-store#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

## TikTok Search Scraper

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

**Search TikTok by any keyword and scrape every matching video — no login, no cookies.** Paste one or more keywords and get back the videos TikTok's search ranks for them, each with URL, description, posting date, play / like / comment / share / save counts, **the creator's handle and follower count**, music, and hashtags. From **$0.49 per 1,000 videos**. Export as JSON, CSV, or Excel.

### Why Use This Scraper?

- **Real search results** — the same ranked results the TikTok app shows for a query, including videos posted hours ago.
- **No TikTok account needed** — no cookies, no session, no 2FA. Your account is never involved.
- **Full engagement stats per video** — plays, likes, comments, shares, saves, downloads, and reposts on every row.
- **Creator context built in** — each video carries its author's handle, verification flag, and follower count.
- **Music and hashtag data** — see which sounds and tags the ranking videos use.
- **Coming soon: watermark-free video downloads** — an optional `downloadVideos` add-on ($2 per 1,000 videos) is rolling out now; once live, every row also gets a `downloadedVideoUrl` pointing at the clean MP4 saved to your run's storage.
- **Multiple keywords per run** — every row is tagged with its source keyword.
- **Clean, flat output** — one row per video, ready for SEO research, trend tracking, or content planning.

### Overview

This Actor returns **one dataset row per video** in each keyword's search results, in TikTok's own ranking order. For each keyword it pages through the result list until TikTok stops returning videos or your cap is reached. Data is retrieved through a third-party TikTok data provider, so no TikTok credentials are ever required.

### Supported Inputs

| Input | What you get |
|---|---|
| A single keyword (e.g. `specialty coffee`) | The ranked videos TikTok's search returns for it |
| Multiple keywords | Results for all of them in one run, each row tagged by `keyword` |

- Phrases are fine — queries are sent exactly as you type them, like in the app's search bar.
- **Not supported:** hashtag feeds (use the TikTok Hashtag Scraper), profile URLs (use the TikTok Followers Scraper), video URLs.

> Pure HTTP. No browser, no CAPTCHA solver, no cookies.

### Use Cases

| Audience | How they use it |
|---|---|
| SEO / content teams | See what ranks on TikTok search for target queries — TikTok is a primary search engine for Gen Z |
| Trend researchers | Track emerging topics with engagement numbers attached |
| Influencer marketers | Find creators ranking for niche queries, pre-filtered by follower count |
| Brands / agencies | Monitor what surfaces for brand and product searches |

### How It Works

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

1. **Search** — each keyword is submitted to TikTok search exactly as typed.
2. **Paginate** — results are walked offset by offset in ranking order until TikTok stops returning videos (or until your cap).
3. **Emit** — every video is pushed to the dataset as its own row with engagement stats, creator info, music, and hashtags.

### Input Configuration

| Field | Type | Required | Notes |
|---|---|---|---|
| `keywords` | array of strings | Yes | Keywords or phrases to search, one per line. |
| `maxResultsPerKeyword` | integer | No | Cap videos per keyword. Omit to page until TikTok stops returning results. |

> **Current data-source limit:** TikTok's search feed presently serves roughly the **top ~20 videos per keyword** — requests for deeper pages return no additional results. For higher volume, add keyword variations (e.g. `"specialty coffee"`, `"specialty coffee shop"`, `"third wave coffee"`); each variation returns its own top results. This is an upstream limitation, not a cap of this actor — if TikTok reopens deeper paging, the actor picks it up automatically with no change needed.

#### Example input

```json
{
    "keywords": ["specialty coffee", "home barista setup", "third wave coffee"],
    "maxResultsPerKeyword": 20
}
```

### Output Overview

Each item is a flat object describing one video in a keyword's ranked search results. Runs stream to the default dataset, exportable as JSON, CSV, Excel, or via the API.

### Output Samples

```json
{
    "keyword": "specialty coffee",
    "videoId": "7667220342615624991",
    "url": "https://www.tiktok.com/@alexidotmp3/video/7667220342615624991",
    "description": "Trying Specialty Coffee Shops in LA: Ep. 11 | Mandarin | Pasadena #losangeles #coffee #specialtycoffee #coffeeshop",
    "createTime": "2026-07-27T14:51:00.000Z",
    "authorUsername": "alexidotmp3",
    "authorNickname": "Alexi",
    "authorVerified": false,
    "authorFollowerCount": 1991,
    "playCount": 9018,
    "likeCount": 631,
    "commentCount": 19,
    "shareCount": 111,
    "collectCount": 104,
    "durationSec": 160,
    "coverUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-...",
    "musicTitle": "original sound - alexidotmp3",
    "hashtags": ["losangeles", "coffee", "specialtycoffee", "coffeeshop"]
}
```

### Key Output Fields

| Field | Description |
|---|---|
| `keyword` | The search query this row came from |
| `videoId` / `url` | Video ID and direct TikTok link |
| `description` / `createTime` | Caption text and posting date (ISO 8601) |
| `authorUsername` / `authorNickname` / `authorId` / `authorSecUid` | The creator's identifiers |
| `authorVerified` / `authorFollowerCount` | The creator's badge and audience size |
| `playCount` / `likeCount` / `commentCount` / `shareCount` | Core engagement counters |
| `collectCount` / `downloadCount` / `repostCount` | Saves, downloads, and reposts |
| `durationSec` / `coverUrl` | Video length and thumbnail |
| `musicId` / `musicTitle` / `musicAuthor` | The sound used |
| `hashtags` | All hashtags on the video |

### FAQ

**Do I need to log in or provide cookies?**
No. The Actor never touches your TikTok account.

**How many results can I get per keyword?**
As many as TikTok's search serves for that query. Broad queries page deep; niche queries can end after a page or two — the Actor stops when TikTok does, so you may receive fewer rows than your cap. That's TikTok's result depth, not a scraper limit.

**Are results ranked?**
Yes — rows arrive in TikTok's own search ranking order, top result first.

**Can I search hashtags or profiles with this?**
Use the dedicated actors for those: the TikTok Hashtag Scraper walks a tag's full feed and the TikTok Followers & Following Scraper handles accounts. This Actor is for free-text keyword search.

**Can I download the videos themselves?**
Video download is rolling out now as an optional add-on: watermark-free MP4s saved to the run's key-value store, $2 per 1,000 videos on top of the per-result price. The `downloadVideos` toggle appears in the input as soon as billing for it is enabled.

**What does it cost?**
Pay per result: from **$0.49 per 1,000 videos**, plus a small per-run start fee. No subscription.

### Support

Found a bug or need a field added? Open an issue on the Actor's **Issues** tab in Apify Console, or email <muhamed.didovic@gmail.com>.

### Additional Services

Need a custom TikTok or social-media scraper, enrichment pipeline, or a private version of this Actor? Custom builds available — reach out at <muhamed.didovic@gmail.com>.

### Explore More Scrapers

- **[TikTok Followers & Following Scraper](https://apify.com/memo23/tiktok-followers-scraper)** — followers, following, and suggested accounts with per-account stats
- **[TikTok Hashtag Scraper](https://apify.com/memo23/tiktok-hashtag-scraper)** — every video posted under a hashtag, with engagement stats
- **[Social Video Transcript Scraper](https://apify.com/memo23/tiktok-profile-videos-cheerio)** — captions and AI transcripts for TikTok and Instagram videos
- **[TikTok Keyword Suggestions Scraper](https://apify.com/memo23/tiktok-suggestions-scraper)** — autocomplete and keyword expansion

Browse the full portfolio: [muhamed-didovic.github.io](https://muhamed-didovic.github.io/)

### 🤖 For AI Agents & LLM Apps

**Purpose:** Return TikTok's ranked video search results for free-text keywords, with engagement stats and creator info.

**Minimal tested input:**

```json
{ "keywords": ["specialty coffee"], "maxResultsPerKeyword": 20 }
```

**Output:** array of flat objects, one per video. Fields: `keyword`, `videoId`, `url`, `description`, `createTime`, `authorUsername`, `authorNickname`, `authorId`, `authorSecUid`, `authorVerified`, `authorFollowerCount`, `playCount`, `likeCount`, `commentCount`, `shareCount`, `collectCount`, `downloadCount`, `repostCount`, `durationSec`, `coverUrl`, `musicId`, `musicTitle`, `musicAuthor`, `hashtags`.

**Behavior & billing:** Pay-per-event — one charge per result. TikTok's search feed currently serves ~20 top videos per keyword; for more volume send keyword variations (each carries its source `keyword` in the output). Multiple keywords allowed per call. No login/cookies required.

### ⚠️ Disclaimer

This Actor accesses publicly available data on TikTok for legitimate research, market-intelligence, and business-analysis purposes. It does not log in, bypass authentication, or access private content. Use of this Actor must comply with TikTok's Terms of Service and all applicable laws, including data-protection regulations (GDPR, CCPA, etc.). The 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 platform terms
- Process any personal data only with a lawful basis and in compliance with their jurisdiction
- Not republish scraped content in violation of copyright

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

### SEO Keywords

tiktok search scraper, tiktok keyword search api, scrape tiktok search results, tiktok video search export, tiktok search results to csv, tiktok seo research, tiktok keyword research tool, what ranks on tiktok search, tiktok serp scraper, tiktok content discovery, tiktok trend search, tiktok video finder, tiktok search api no login, tiktok keyword monitoring, tiktok search analytics, tiktok gen z search engine, tiktok content research tool, no login tiktok scraper, tiktok data extraction, social media search scraper, tiktok competitor search monitoring, apify tiktok scraper

# Actor input Schema

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

Keywords or phrases to search TikTok for — one per line. Each keyword returns the videos TikTok's search ranks for it, the same results you'd see in the app. TikTok currently serves the top ~20 videos per keyword, so add keyword variations for more volume. Example: \["specialty coffee", "home barista setup"]. Required, no default.

## `maxResultsPerKeyword` (type: `integer`):

Maximum number of videos to collect per keyword. Use it to cap cost or sample the results. Leave empty to collect everything TikTok returns (currently the top ~20 per keyword — a data-source limit). Example: 20. Default: unlimited.

## Actor input object example

```json
{
  "keywords": [
    "specialty coffee",
    "home barista setup"
  ]
}
```

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

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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 = { "keywords": ["specialty coffee"] }

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/DLoekSbRLDB9EIYMn/builds/6MvI5ZOzKaG1Sta3q/openapi.json
