# ✅ TikTok Search Video Scraper (`datamagnet/video-search-actor`) Actor

Search TikTok videos by keyword and collect the matching video results in one place. It returns the raw video records exactly as provided, and keeps loading more pages automatically until your result limit is reached or no more matches are available.

- **URL**: https://apify.com/datamagnet/video-search-actor.md
- **Developed by:** [Datamagnet](https://apify.com/datamagnet) (community)
- **Categories:** Videos, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Video Search Scraper

Find TikTok videos by keyword and collect the matching results in one place with this easy-to-use video search scraper. It is built for marketers, researchers, creators, and analysts who want to discover TikTok video content related to a topic without manually scrolling through search results. Enter a search term, set your result limit, and get back the matching video records exactly as they are returned by the source. This makes it simple to review video performance, compare creators, and build content or trend reports faster.

### Key Features

- **Extract** TikTok video search results for any keyword you choose.
- **Collect** matching videos automatically until you reach your desired result limit.
- **Preserve** the returned video data exactly as provided, so you can review all available fields.
- **Capture** useful details like captions, creator profiles, music info, and engagement counts.
- **Support** trend research, competitor tracking, and content discovery workflows.
- **Save** time by avoiding manual searching and copying of video results.
- **Scale** from a handful of results to larger collections with automatic paging.

### Use Cases

#### Trend Research

Marketing teams use this actor to search for videos around a topic, product, or niche and quickly see what kind of content is appearing in search results. The returned fields such as `desc`, `stats`, `createTime`, and `author.nickname` help teams spot recurring themes, popular creators, and engagement patterns.

#### Competitor Monitoring

Brands and agencies can search for a competitor name, product category, or campaign phrase to see which videos are associated with it. By reviewing `author.uniqueId`, `author.verified`, `stats.playCount`, and `video.cover`, they can compare visibility and identify which creators or formats are getting attention.

#### Creator Discovery

Influencer managers and partnership teams can search by niche keywords to find creators publishing relevant videos. The output includes creator details like `author.nickname`, `author.uniqueId`, `author.followerCount`, and `author.avatarThumb`, making it easier to shortlist accounts for outreach.

#### Content Inspiration

Social media managers can search for topics their audience cares about and review the actual video captions and metadata. Fields like `desc`, `music.title`, `music.authorName`, and `stats.commentCount` help them understand what style, sound, and message are resonating.

#### Performance Analysis

Analysts can collect search results and compare engagement signals across videos in one place. With `stats.diggCount`, `stats.shareCount`, `stats.collectCount`, `stats.commentCount`, and `stats.downloadCount`, it becomes easier to identify which videos are attracting the strongest response.

#### Archive and Reporting

Teams building internal reports can store the returned records for later review and comparison. Because the actor returns the video data exactly as received, it is useful for maintaining a consistent snapshot of search results over time.

### Input

| Field | Type | Required | Description | Example |
|---|---|---:|---|---|
| keyword | string | Yes | The word or phrase you want to search for in videos. | cat |
| max\_results | integer | No | The maximum number of videos to collect before stopping. If left blank, the actor will keep going until it runs out of matching results. | 100 |

### Output

| Field | Type | Description |
|---|---|---|
| id | string | Unique ID of the video result. Useful for identifying the same video later. |
| vl1 | boolean | A yes/no flag included with the result by the source. |
| desc | string | The video caption or description shown with the post. |
| isAd | boolean | Shows whether the video is marked as an advertisement. |
| music | object | Music details attached to the video, including title, creator, and cover images. |
| stats | object | Engagement numbers such as likes, views, shares, saves, comments, and downloads. |
| video | object | Video file and preview details such as cover image, size, duration, and playback links. |
| author | object | Creator profile details such as name, username, follower count, and profile image. |
| digged | boolean | Indicates whether the video has been liked by the source account. |
| secret | boolean | Shows whether the video is restricted or hidden. |
| duetInfo | object | Information about duet relationships for the video. |
| itemMute | boolean | Indicates whether the video is muted. |
| collected | boolean | Shows whether the video has been saved or collected. |
| forFriend | boolean | Indicates whether the video is shared for friends only. |
| textExtra | array | Extra text tags or mentions found in the post. |
| challenges | array | Challenge or hashtag-related items attached to the video. |
| createTime | integer | The time the video was created, stored as a timestamp. |
| duetEnabled | boolean | Shows whether duets are allowed on the video. |
| officalItem | boolean | Indicates whether the video is marked as official. |
| privateItem | boolean | Shows whether the video is private. |
| showNotPass | boolean | Indicates whether the video has a visibility or review issue. |
| originalItem | boolean | Shows whether the video is original content. |
| shareEnabled | boolean | Indicates whether sharing is allowed. |
| stitchEnabled | boolean | Shows whether stitching is allowed. |
| itemCommentStatus | integer | Comment status for the video, as provided by the source. |

### Sample Output

```json
{
  "id": "7664176756164709640",
  "vl1": false,
  "desc": "The cat that just wanted to drink in peace... 🥶",
  "isAd": false,
  "music": {
    "id": "7664176793936595719",
    "album": "",
    "title": "original sound - Nabins",
    "playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tiktok-obj/7664393207895313170.mp3",
    "duration": 27,
    "original": false,
    "authorName": "Nabins",
    "coverLarge": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/590d80a91770c77b5683c116666e63db~tplv-tiktokx-cropcenter:100:100.webp?...",
    "coverThumb": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/590d80a91770c77b5683c116666e63db~tplv-tiktokx-cropcenter:100:100.webp?...",
    "coverMedium": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/590d80a91770c77b5683c116666e63db~tplv-tiktokx-cropcenter:100:100.webp?..."
  },
  "stats": {
    "diggCount": 1401,
    "playCount": 14472,
    "shareCount": 56,
    "collectCount": 140,
    "commentCount": 37,
    "downloadCount": 8
  },
  "video": {
    "id": "7664176756164709640",
    "cover": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/o4fd5f3ABACEA4g93yDBpqQuXIA9yPVjJFACCY~tplv-tiktokx-origin.image?...",
    "ratio": "1080p",
    "width": 1080,
    "height": 1920,
    "bitrate": 963530,
    "duration": 27400,
    "playAddr": "https://v19e.tiktokcdn.com/d250c4454690068bffb48649b1caf565/6a5f12ce/video/tos/alisg/tos-alisg-pve-0037/oUThSLGbrEDFtERp5cIIe7DAoQvAEeJTuUe0K5/?...",
    "shareCover": [],
    "encodedType": "normal",
    "originCover": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oMeUkvrZE8GuTcIIDoL7pI6DD06eIADeTKAShA~tplv-tiktokx-360p.webp?...",
    "reflowCover": "",
    "downloadAddr": "https://v19e.tiktokcdn.com/f46428c0284d71262bf93a7e226e78d3/6a5f12ce/video/tos/alisg/tos-alisg-pve-0037/oEAToTXhGEVI0ce7AvLQSPrpKDeIUGDIIcAeEu/?...",
    "dynamicCover": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/o4fd5f3ABACEA4g93yDBpqQuXIA9yPVjJFACCY~tplv-tiktokx-origin.image?...",
    "videoQuality": "normal",
    "encodeUserTag": ""
  },
  "author": {
    "id": "7351058192253846535",
    "ftc": false,
    "secUid": "MS4wLjABAAAASiYtSwRhWw05eK-VNVYFmiDIeq4Vo8syusqwboiQ5txA0D9-Aobv8lr9uSiHtmhn",
    "secret": false,
    "nickname": "Nabins",
    "relation": 0,
    "uniqueId": "iamnabins",
    "verified": false,
    "signature": "저는 달에 갈거예요\nContact-iamnabins2@gmail.com\nModel @Mito_Arisaka",
    "avatarThumb": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/590d80a91770c77b5683c116666e63db~tplv-tiktokx-cropcenter:100:100.webp?...",
    "duetSetting": 0,
    "avatarLarger": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/590d80a91770c77b5683c116666e63db~tplv-tiktokx-cropcenter:1080:1080.webp?...",
    "avatarMedium": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/590d80a91770c77b5683c116666e63db~tplv-tiktokx-cropcenter:720:720.webp?...",
    "openFavorite": false,
    "followerCount": 332987,
    "stitchSetting": 0,
    "commentSetting": 0,
    "followingCount": 0,
    "privateAccount": false,
    "downloadSetting": 0
  },
  "digged": false,
  "secret": false,
  "duetInfo": {
    "duetFromId": "0"
  },
  "itemMute": false,
  "collected": false,
  "forFriend": false,
  "textExtra": [],
  "challenges": [],
  "createTime": 1784505600,
  "duetEnabled": false,
  "officalItem": false,
  "privateItem": false,
  "showNotPass": false,
  "originalItem": false,
  "shareEnabled": true,
  "stitchEnabled": false,
  "itemCommentStatus": 0
}
```

### How It Works

1. Enter the keyword you want to search for, such as a product name, topic, or niche.
2. Set the maximum number of results if you want to limit how many videos are collected.
3. Run the actor and let it search for matching videos automatically.
4. The actor keeps gathering more results until it reaches your limit or there are no more matches.
5. Review the returned records and use them in your reporting, research, or content workflow.

### Getting Started

Getting started is simple: click **Try for free**, enter your search keyword, optionally set the maximum number of results, and click **Run**. No coding or setup is required. Once the run finishes, you can view and download the results in **JSON, CSV, or Excel** format. This makes it easy to share the data with your team or import it into your existing workflow.

### Frequently Asked Questions

#### Do I need technical skills?

No. This actor is designed for non-technical users who want to search for videos and collect the results in one place. You only need to enter a keyword and start the run.

#### How fast does it run?

Speed depends on how many matching videos are available and how many results you ask for. Smaller searches usually finish quickly, while larger collections may take longer because the actor keeps fetching more results until it reaches your limit.

#### What format is the output?

The results are available in formats that are easy to work with, including JSON, CSV, and Excel. You can choose the format that best fits your reporting, analysis, or sharing needs.

#### Is this legal to use?

This actor is intended for lawful research, analysis, and business use. You are responsible for making sure your use complies with applicable laws, platform rules, and your organization’s policies.

#### Can I schedule it to run automatically?

Yes, you can run it whenever you need fresh results, and it can also be scheduled as part of a regular workflow. That makes it useful for ongoing monitoring of keywords, creators, or content trends.

# Actor input Schema

## `keyword` (type: `string`):

Enter the word or phrase you want to search for in videos.

## `max_results` (type: `integer`):

The maximum number of videos to return.

## Actor input object example

```json
{
  "keyword": "cat",
  "max_results": 100
}
```

# 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 = {
    "keyword": "cat"
};

// Run the Actor and wait for it to finish
const run = await client.actor("datamagnet/video-search-actor").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 = { "keyword": "cat" }

# Run the Actor and wait for it to finish
run = client.actor("datamagnet/video-search-actor").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 '{
  "keyword": "cat"
}' |
apify call datamagnet/video-search-actor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GtesVBDOfpd1bXovp/builds/AllgFVthucCHZ0SBY/openapi.json
