TikTok Video Search Scraper — Keywords, Hashtags & Filters
Pricing
from $2.00 / 1,000 tiktok video founds
TikTok Video Search Scraper — Keywords, Hashtags & Filters
Search TikTok videos by keyword or hashtag and get views, likes, comments, shares, saves, engagement rate, duration, hashtags, music and creator data. Filter by minimum views, likes or duration, cap videos per creator, sort by relevance or likes. No cookies.
Pricing
from $2.00 / 1,000 tiktok video founds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
55
Total users
24
Monthly active users
5 days ago
Last modified
Categories
Share
What is TikTok Video Search Scraper?
TikTok Video Search Scraper searches TikTok videos by keyword or hashtag and returns one clean record per video for researchers, marketers and AI agents. No TikTok login, cookies or proxy setup is needed. It accepts plain-text keywords in searchQueries or hashtags in hashtags, then returns fields such as videoUrl, caption, playCount, likeCount, commentCount, shareCount, collectCount, engagementRate, durationSeconds, creator identifiers, and timestamps. Each dataset row represents one TikTok video result, making the output useful for filtering, ranking, enrichment, and downstream analysis.
| You give | You get | Price |
|---|---|---|
| Keywords and/or hashtags, plus optional view, like, duration and per-creator filters | One row per video: URL, caption, hashtags, views, likes, comments, shares, saves, engagement rate, duration, music and creator | $2 per 1,000 videos (video-found), Apify platform usage included; filtered videos are free |
Best fit and connected workflows
This Actor fits workflows that start with discovery and continue into deeper review:
- Topic research from a keyword list, such as product terms, niche phrases, or campaign themes.
- Hashtag exploration when you want the feed tied to a specific tag.
- Performance screening with thresholds for views, likes, comments, shares, and duration.
- Creator review based on the returned creator fields and video metrics.
- AI agent workflows through Apify MCP, where a tool call returns structured TikTok video rows.
For downstream enrichment after discovery, use the returned TikTok records with:
- When you want follower counts and bios for the creators you found, continue with the TikTok Profile Scraper and pass the
authorUsernamevalues. - When you want to know which hashtags are trending before you search, start with the TikTok Trending Hashtags Scraper and feed its
hashtag_namevalues intohashtags.
Practical scenario
A social media manager starts with the keyword nike running and the hashtag running. She sets minPlays to surface higher-traffic videos, keeps includePhotoPosts enabled, and uses sortBy: most-liked for the keyword search. She sets maxVideosPerAuthor to 1 so the list covers many different creators. The Actor returns rows with authorUsername, caption, playCount, likeCount, shareCount, engagementRate, durationSeconds, and videoUrl. She reviews the creators and captions, then opens the most relevant video URLs to shortlist formats for a new campaign brief.
Input
Use plain text keywords in searchQueries, hashtags in hashtags, or both. At least one of those fields should contain values.
| Field | Type | Description |
|---|---|---|
searchQueries | array of strings | Keyword searches. Each keyword runs its own paginated search. |
hashtags | array of strings | TikTok hashtags to search, with or without #. |
maxResultsPerQuery | integer | Maximum videos to return and charge for per query, from 1 to 10000. Default: 50. |
sortBy | string | Keyword search ordering: relevance, most-liked, or date-posted. Default: relevance. |
datePosted | string | Keyword recency window: yesterday, this-week, this-month, last-3-months, last-6-months, or all-time. Default: all-time. |
region | string | Two-letter region code such as US, GB, or DE. Default: US. |
minPlays | integer | Keep videos with at least this many plays. Default: 0. |
minLikes | integer | Keep videos with at least this many likes. Default: 0. |
minComments | integer | Keep videos with at least this many comments. Default: 0. |
minShares | integer | Keep videos with at least this many shares. Default: 0. |
minDurationSeconds | integer | Keep videos at least this long, in seconds. Default: 0. |
maxDurationSeconds | integer | Keep videos no longer than this many seconds. Default: 0. |
includePhotoPosts | boolean | Includes TikTok image carousel posts when enabled. Default: true. |
maxVideosPerAuthor | integer | Keep at most this many videos per creator (0 = no limit). Default: 0. |
maxPagesPerQuery | integer | Safety cap on search pages per query. Default: 20. |
Focused input example
{"searchQueries": ["nike running"],"hashtags": ["running"],"maxResultsPerQuery": 25,"sortBy": "most-liked","datePosted": "all-time","region": "US","minPlays": 10000,"includePhotoPosts": true,"maxVideosPerAuthor": 2}
Output
The Actor stores normalized video rows in the default dataset. A run summary is stored in the key-value store under RUN_SUMMARY.
| Field | Type | Description |
|---|---|---|
searchType | string | Whether the row came from a keyword or hashtag search. |
query | string | The keyword or hashtag that returned the row. |
hashtag | string | The hashtag searched, when applicable. |
resultPosition | integer | 1-based rank within the query. |
page | integer | Search results page where the row was found. |
isPhotoPost | boolean | True for TikTok image carousel posts. |
videoId | string | TikTok aweme/video ID. |
videoUrl | string | Canonical TikTok URL. |
caption | string | Video caption text. |
createdAt | string | ISO 8601 post timestamp. |
durationSeconds | integer | Video length in seconds. |
region | string | TikTok region code. |
authorId | string | Creator numeric user ID. |
authorSecUid | string | Creator stable secUid. |
authorUsername | string | Creator handle. |
authorNickname | string | Creator display name. |
authorVerified | boolean | Creator verification flag. |
authorAvatarUrl | string | Creator avatar URL. |
playCount | integer | View count. |
likeCount | integer | Like count. |
commentCount | integer | Comment count. |
shareCount | integer | Share count. |
collectCount | integer | Save count. |
engagementRate | number | (likes + comments + shares) / plays, rounded to 4 decimals. |
coverUrl | string | Thumbnail URL. |
imageUrls | array | Image URLs for photo posts. |
hashtags | array | Hashtags found in the caption. |
musicId | string | Music track ID. |
musicTitle | string | Music track title. |
musicAuthor | string | Music track author. |
scrapedAt | string | ISO 8601 scrape timestamp. |
Example output record from a real run (avatar and cover URLs left out)
{"searchType": "keyword","query": "nike running","resultPosition": 1,"page": 1,"isPhotoPost": false,"videoId": "7694350820791291167","videoUrl": "https://www.tiktok.com/@justinehuang_/video/7694350820791291167","caption": "alphafly 4 hyper pink 💓⚡️🔥 #Running #alphafly #shoes #marathon #nike unreleased","createdAt": "2026-10-08T17:31:16.000Z","durationSeconds": 16,"region": "US","authorId": "6737339887018705925","authorUsername": "justinehuang_","authorNickname": "justine","playCount": 4498,"likeCount": 199,"commentCount": 4,"shareCount": 24,"collectCount": 16,"engagementRate": 0.0505,"hashtags": ["running", "alphafly", "shoes", "marathon", "nike"]}
How it works
The Actor runs a public TikTok search for each keyword or hashtag, reads result pages until it reaches maxResultsPerQuery or maxPagesPerQuery, removes duplicates, applies your filters and saves one row per video. Filters run before any charge. The output schema points to the default dataset plus the RUN_SUMMARY record with counts, filter stats and the stop reason.
Pricing
This Actor uses Pay per event with Apify platform usage included.
video-found(TikTok Video Found): $2 per 1,000 videos saved to the dataset after your filters.apify-actor-start: a tiny charge once per run.- Filtered-out and duplicate videos are not charged.
Example: a run that saves 50 videos costs $0.10 in video events, plus the configured Actor-start event. maxResultsPerQuery caps each keyword or hashtag. See the Pricing tab for current rates.
Use with AI agents (MCP)
This Actor is available as an Apify Actor usable through Apify MCP. It is a structured tool for asking for TikTok video search results by keyword or hashtag and receiving normalized rows with engagement metrics, creator data, and URLs.
Exact Actor identity: khadinakbar/tiktok-video-search-scraper
Find TikTok videos for the keyword "protein recipe" and the hashtag "mealprep". Return rows with creator username, caption, plays, likes, comments, shares, engagement rate, duration, and video URL. Use a minimum plays filter of 10000 and keep photo posts if they match.
How to interpret the output:
- Each dataset row represents one saved TikTok video record.
searchType,query, andhashtagshow how the record was found.engagementRateis calculated from likes, comments, and shares divided by plays.scrapedAtandcreatedAthelp separate post time from collection time.
Scope and pagination guidance:
maxResultsPerQuerysets the saved-video cap per keyword or hashtag.maxPagesPerQuerysets a safety ceiling on search pages per query.maxVideosPerAuthorspreads results across creators.- The default dataset is the primary machine-readable result set, and
RUN_SUMMARYadds run-level telemetry.
Use via Apify API
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("khadinakbar/tiktok-video-search-scraper").call(run_input={"searchQueries": ["nike running"],"maxResultsPerQuery": 25,"sortBy": "most-liked","minPlays": 10000,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["videoUrl"], item["playCount"], item["engagementRate"])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('khadinakbar/tiktok-video-search-scraper').call({searchQueries: ['nike running'],maxResultsPerQuery: 25,sortBy: 'most-liked',minPlays: 10000,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) {console.log(item.videoUrl, item.playCount, item.engagementRate);}
Best results and outcome guidance
A useful setup is to keep the query focused, then add filters that match the signal you want to study. Keyword searches work well for topic discovery, while hashtags help when you already know the conversation tag. sortBy: most-liked is a practical choice for review queues, and datePosted narrows keyword searches to a recent window. When you want shorter clips, set maxDurationSeconds; when you want higher-engagement rows, use minPlays, minLikes, minComments, or minShares. Set maxVideosPerAuthor to 1 when you want a creator-discovery list with one video per account.
Continue the workflow
- When you want to research paid TikTok creatives on the same topic, continue with the TikTok Ads Library Scraper.
- When you want profile details for the creators you found, pass
authorUsernamevalues to the TikTok Profile Scraper.
Design note
I found that the dataset contract includes collectCount and engagementRate, while the overview view highlights the more review-friendly fields authorUsername, caption, playCount, likeCount, commentCount, shareCount, engagementRate, durationSeconds, createdAt, and videoUrl. That shape makes the default dataset easy to scan while still preserving the fuller record for downstream use.
FAQ
When should I use keywords vs hashtags?
Use searchQueries for topic phrases such as product names, recipes, or campaign themes. Use hashtags when you want the TikTok hashtag feed for a tag such as fitness or running. You can also combine both in the same run.
How many videos can I expect per keyword?
It depends on the keyword. Popular topics fill maxResultsPerQuery quickly; narrow phrases or strict filters return fewer. Raise maxPagesPerQuery or relax the filters for more rows.
What is the difference between the dataset and RUN_SUMMARY?
The default dataset holds one row per saved TikTok video. RUN_SUMMARY stores execution diagnostics, filter stats, cost estimates, and stop reason information.
Can I use this Actor in an MCP workflow?
Yes. It is an Apify Actor usable through Apify MCP, which makes it a good fit for structured search-and-return workflows in agents.
How are video positions and pages represented?
resultPosition is the 1-based rank within a query, and page shows the search results page where the row was found.
Responsible use
Use the output in ways that respect TikTok's Terms of Service, applicable privacy and data-protection laws, and the rights of the creators whose public content appears in search results. Review your own obligations before storing, sharing, or automating decisions from the returned data.