# ✅ 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 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/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## 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

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "✅ TikTok Search Video Scraper",
        "description": "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.",
        "version": "0.0",
        "x-build-id": "AllgFVthucCHZ0SBY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/datamagnet~video-search-actor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-datamagnet-video-search-actor",
                "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/datamagnet~video-search-actor/runs": {
            "post": {
                "operationId": "runs-sync-datamagnet-video-search-actor",
                "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/datamagnet~video-search-actor/run-sync": {
            "post": {
                "operationId": "run-sync-datamagnet-video-search-actor",
                "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": [
                    "keyword"
                ],
                "properties": {
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Enter the word or phrase you want to search for in videos."
                    },
                    "max_results": {
                        "title": "Maximum results",
                        "type": "integer",
                        "description": "The maximum number of videos to return."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
