TikTok Video Search Scraper - Metrics & Filters avatar

TikTok Video Search Scraper - Metrics & Filters

Pricing

from $4.00 / 1,000 tiktok video founds

Go to Apify Store
TikTok Video Search Scraper - Metrics & Filters

TikTok Video Search Scraper - Metrics & Filters

Search TikTok videos by keyword or hashtag and get views, likes, comments, shares, engagement rate, duration, hashtags and creator data. Filter by minimum views, likes, or duration. Cookieless, provider-backed, MCP-ready.

Pricing

from $4.00 / 1,000 tiktok video founds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

30

Total users

11

Monthly active users

a day ago

Last modified

Share

TikTok Video Search Scraper - Metrics & Filters is an Apify Actor for researchers, marketers, and AI agents that want to search TikTok videos by keyword or hashtag and receive one normalized record per video. 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.

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:

  • TikTok Profile Posts Scraper - Creator Feed Data for creator feed enrichment when you have a public profile URL or ID.
  • TikTok Profile Videos Scraper for creator video enrichment when you want to continue from selected records.

Practical scenario

Maya, 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. The Actor returns rows with authorUsername, caption, playCount, likeCount, shareCount, engagementRate, durationSeconds, and videoUrl. Maya 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.

FieldTypeDescription
searchQueriesarray of stringsKeyword searches. Each keyword runs its own paginated search.
hashtagsarray of stringsTikTok hashtags to search, with or without #.
maxResultsPerQueryintegerMaximum videos to return and charge for per query, from 1 to 10000. Default: 50.
sortBystringKeyword search ordering: relevance, most-liked, or date-posted. Default: relevance.
datePostedstringKeyword recency window: yesterday, this-week, this-month, last-3-months, last-6-months, or all-time. Default: all-time.
regionstringTwo-letter region code such as US, GB, or DE. Default: US.
minPlaysintegerKeep videos with at least this many plays. Default: 0.
minLikesintegerKeep videos with at least this many likes. Default: 0.
minCommentsintegerKeep videos with at least this many comments. Default: 0.
minSharesintegerKeep videos with at least this many shares. Default: 0.
minDurationSecondsintegerKeep videos at least this long, in seconds. Default: 0.
maxDurationSecondsintegerKeep videos no longer than this many seconds. Default: 0.
includePhotoPostsbooleanIncludes TikTok image carousel posts when enabled. Default: true.
maxPagesPerQueryintegerSafety cap on provider pages per query. Default: 20.
providerOrderstringProvider routing: scrapecreators-first, sociavault-first, scrapecreators-only, or sociavault-only.
includeRawDatabooleanAdds the raw provider payload to each row as rawResult. Default: false.

Focused input example

{
"searchQueries": ["nike running"],
"hashtags": ["running"],
"maxResultsPerQuery": 25,
"sortBy": "most-liked",
"datePosted": "all-time",
"region": "US",
"minPlays": 10000,
"includePhotoPosts": true,
"providerOrder": "scrapecreators-first",
"includeRawData": false
}

Output

The Actor stores normalized video rows in the default dataset. A run summary is stored in the key-value store under RUN_SUMMARY.

FieldTypeDescription
searchTypestringWhether the row came from a keyword or hashtag search.
querystringThe keyword or hashtag that returned the row.
hashtagstringThe hashtag searched, when applicable.
providerstringBackend provider that served the row.
resultPositioninteger1-based rank within the query.
pageintegerProvider page where the row was found.
isPhotoPostbooleanTrue for TikTok image carousel posts.
videoIdstringTikTok aweme/video ID.
videoUrlstringCanonical TikTok URL.
captionstringVideo caption text.
createdAtstringISO 8601 post timestamp.
durationSecondsintegerVideo length in seconds.
regionstringTikTok region code.
authorIdstringCreator numeric user ID.
authorSecUidstringCreator stable secUid.
authorUsernamestringCreator handle.
authorNicknamestringCreator display name.
authorVerifiedbooleanCreator verification flag.
authorAvatarUrlstringCreator avatar URL.
playCountintegerView count.
likeCountintegerLike count.
commentCountintegerComment count.
shareCountintegerShare count.
collectCountintegerSave count.
engagementRatenumber(likes + comments + shares) / plays, rounded to 4 decimals.
coverUrlstringThumbnail URL.
imageUrlsarrayImage URLs for photo posts.
hashtagsarrayHashtags found in the caption.
musicIdstringMusic track ID.
musicTitlestringMusic track title.
musicAuthorstringMusic track author.
scrapedAtstringISO 8601 scrape timestamp.

Illustrative output record

{
"searchType": "keyword",
"query": "nike running",
"provider": "scrapecreators",
"resultPosition": 1,
"page": 1,
"isPhotoPost": false,
"videoId": "7412345678901234567",
"videoUrl": "https://www.tiktok.com/@runner/video/7412345678901234567",
"caption": "suitable nike running shoes #running #nike",
"createdAt": "2024-06-01T00:00:00.000Z",
"durationSeconds": 32,
"region": "US",
"authorUsername": "runner",
"authorNickname": "Runner",
"authorVerified": true,
"playCount": 250000,
"likeCount": 12000,
"commentCount": 340,
"shareCount": 210,
"collectCount": 90,
"engagementRate": 0.0502,
"coverUrl": "https://p16-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/cover.jpg",
"hashtags": ["running", "nike"],
"musicTitle": "Original sound",
"scrapedAt": "2026-07-01T12:00:00.000Z"
}

How it works

This Actor uses public TikTok video data through provider-backed routing. The live contract shows two backend providers: ScrapeCreators and SociaVault. The default order is scrapecreators-first, with alternate routing available through providerOrder. The input schema also shows pagination controls, regional localization, and client-side quality filters that are applied after fetching. The dataset schema defines the normalized row shape, and the output schema points to the default dataset plus the RUN_SUMMARY record for execution diagnostics and provider telemetry.

Pricing

This Actor uses Pay per event pricing plus Apify platform usage.

  • apify-actor-start is charged once when the Actor starts after input validation.
  • TikTok Video Found is charged once per video saved to the dataset after quality filters.
  • Filtered-out videos are not charged.

The video event uses tiered pricing, and the exact current rates are shown in the live Pricing tab on Apify. As an example, if a run saves fifty videos, the event total is based on fifty TikTok Video Found events plus one Actor start event, with any platform usage billed separately according to your Apify plan and the live Pricing tab.

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.
  • provider identifies which backend served the row.
  • searchType, query, and hashtag show how the record was found.
  • engagementRate is calculated from likes, comments, and shares divided by plays.
  • scrapedAt and createdAt help separate post time from collection time.

Scope and pagination guidance:

  • maxResultsPerQuery sets the saved-video cap per keyword or hashtag.
  • maxPagesPerQuery sets a safety ceiling on provider pages per query.
  • providerOrder controls provider routing when you want a specific backend sequence.
  • The default dataset is the primary machine-readable result set, and RUN_SUMMARY adds run-level telemetry.

Use via Apify API

Python

import os
from apify_client import ApifyClient
client = 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. If you are building an agent workflow, keep includeRawData off by default and turn it on only when you need provider payload inspection.

Continue the workflow

  • Then use TikTok Ads Library Scraper for Ad Research to continue from TikTok Video Search Scraper - Metrics & Filters discovery into content data for the selected records.
  • Then use Truth Social Scraper to extend TikTok Video Search Scraper - Metrics & Filters with a neighboring social-media research source when the brief calls for Truth data.

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 does provider routing work?

providerOrder lets you choose the backend sequence. The default is scrapecreators-first, and the live contract also exposes sociavault-first, scrapecreators-only, and sociavault-only.

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, provider telemetry, 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 provider 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.