TikTok Search Scraper - [Videos, Hashtags & Users]
Pricing
from $4.00 / 1,000 scraped tiktok search results
TikTok Search Scraper - [Videos, Hashtags & Users]
Scrape TikTok keyword, top, hashtag and user search results in one run: videos, creators, captions, engagement metrics and profile URLs. No cookies or login required. Works with Apify MCP and the API.
Pricing
from $4.00 / 1,000 scraped tiktok search results
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
28
Total users
6
Monthly active users
9 days ago
Last modified
Categories
Share
What is TikTok Search Scraper - Videos, Hashtags & Users?
TikTok Search Scraper is an Apify Actor for keyword, top, hashtag, and user search across TikTok. It accepts search queries, hashtags, and creator-name or brand-name user queries, then stores one normalized dataset record per returned search result. Those records can represent videos, top search items, hashtags, or user profiles, with useful fields such as video IDs and URLs, captions, creator usernames, profile URLs, follower counts, and engagement metrics when returned. The actor requires no cookies or TikTok login and is usable through Apify MCP for natural-language workflows.
Best fit and connected workflows
This actor fits workflows that start with TikTok discovery and end with targeted enrichment or downstream analysis. Common routing patterns include:
- Search by keyword to collect TikTok videos for content research, social listening, or trend triage.
- Search by hashtag to gather topical video rows around a subject or campaign term.
- Search by user query to identify creator profiles and public profile metrics.
- Use
searchType: allwhen you want keyword videos, top results, and user profiles from the same search query. - Send discovered public profile URLs or IDs into TikTok Profile Posts Scraper - Creator Feed Data when you want creator feed enrichment for selected profiles.
- Send discovered public profile URLs or IDs into TikTok Profile Videos Scraper when you want profile video enrichment for selected creators.
Practical scenario
Maya is preparing a creator shortlist for a running-shoe campaign. She starts with searchQueries: ["nike running"], searchType: "keyword", and userQueries: ["nike"]. The actor returns a first page of video rows and profile rows. Maya reviews videoUrl, caption, authorUsername, playCount, likeCount, and profileUrl to separate creator-led videos from brand-owned profiles. Her next action is to open the strongest profile records in a downstream profile scraper for deeper creator review.
Inputs
| Field | Type | Purpose |
|---|---|---|
searchQueries | array of strings | Keywords or phrases to search on TikTok. Used with searchType. |
searchType | string | Search surface for searchQueries: keyword, top, users, or all. |
keywordQueries | array of strings | Always runs keyword video search for these queries. |
topQueries | array of strings | Always runs top search for these queries. Top search can include videos and photo carousels. |
hashtags | array of strings | Hashtags to search, with or without #. |
userQueries | array of strings | Creator profile searches by keyword, brand name, or person name. |
maxResultsPerQuery | integer | Maximum normalized rows saved per query or hashtag. |
maxPagesPerQuery | integer | Safety cap for result pages fetched per search target. |
region | string | Alpha-2 country code for search localization when supported. |
datePosted | string | Time filter for keyword search. |
publishTime | string | Time filter for top search. Defaults to datePosted when omitted. |
sortBy | string | Sort order for keyword and top search where supported. |
includeRawData | boolean | Adds the raw source payload to each row for debugging and custom parsing. |
Focused input example
{"searchQueries": ["nike running"],"searchType": "keyword","hashtags": ["running"],"userQueries": ["nike"],"region": "US","datePosted": "all-time","sortBy": "relevance","maxResultsPerQuery": 25,"maxPagesPerQuery": 3,"includeRawData": false}
Output fields
The default dataset stores normalized rows with a shared shape across videos, top results, hashtag results, and user profiles.
| Field | Meaning |
|---|---|
recordType | video, top_result, or user. |
searchType | keyword, top, hashtag, or users. |
query | Search query or hashtag. |
hashtag | Hashtag for hashtag search rows. |
resultPosition | Position in the normalized result list. |
page | Result page used to fetch the row. |
cursor | Pagination cursor for that result page. |
contentType | TikTok content type when returned. |
videoId, videoUrl | Video identifiers and URLs. |
caption, createdAt | Video text and creation timestamp. |
authorUsername, authorNickname, authorVerified | Creator metadata for video rows. |
username, profileUrl, nickname, bio, verified | Profile metadata for user rows. |
playCount, likeCount, commentCount, shareCount, collectCount | Video engagement metrics when returned. |
followerCount, followingCount, heartCount, videoCount, privateAccount | Public profile metrics when returned. |
hashtags, musicId, musicTitle, musicAuthor | Tag and sound metadata when returned. |
scrapedAt | Timestamp when the row was saved. |
Illustrative dataset record
{"recordType": "video","searchType": "keyword","query": "nike running","resultPosition": 1,"page": 1,"cursor": 10,"contentType": "video","videoId": "7452069943757114646","videoUrl": "https://www.tiktok.com/@creator/video/7452069943757114646","caption": "New running shoes today","createdAt": "2026-01-01T00:00:00.000Z","authorUsername": "creator","authorNickname": "Creator Name","authorVerified": true,"playCount": 2932976,"likeCount": 197747,"commentCount": 347,"shareCount": 26467,"collectCount": 10436,"scrapedAt": "2026-06-11T00:00:00.000Z"}
How it works
The actor fetches TikTok search results through a managed data provider with an automatic fallback provider, so no cookies or TikTok account are needed. Results are normalized into the default dataset, while OUTPUT and RUN_SUMMARY records in the default key-value store provide terminal run details for automation and agent workflows: COMPLETE, PARTIAL, VALID_EMPTY (no matching results), INVALID_INPUT, and an unsuccessful run status when every search target fails upstream. includeRawData stores the raw source payload alongside normalized rows.
Pricing
This actor uses Pay per event pricing with Apify platform usage included. The charged events are:
apify-actor-start: charged once when the actor starts after input validation.search-result-scraped: charged for each TikTok search result row successfully saved to the dataset.
For example, if a run saves twenty-five result rows, the start event is charged once and the per-row event is charged twenty-five times. See the Pricing tab for current event prices.
Use with AI agents (MCP)
This Actor is available through Apify MCP as a tool for TikTok search discovery. The exact Actor identity is khadinakbar/tiktok-search-scraper.
Tool description: use it to search TikTok by keyword, top search, hashtag, or user query and return normalized dataset rows with videos, profiles, metrics, and metadata for downstream agent steps.
Search TikTok for "nike running" and return keyword videos plus creator profiles from the first page. Keep the result set focused, then surface the top candidate profiles for follow-up enrichment.
Output interpretation:
- Read dataset rows from the default dataset to inspect videos, top results, hashtags, or user profiles.
- Use
runSummaryfor counts, routes used, and terminal status in agent pipelines. - Use
runOutputfor machine-readable terminal outcome details, including useful result counts and PPE charge counts.
Provenance and scope:
- Rows are normalized into one dataset shape across videos, top results and profiles.
- Search scope follows the selected inputs: keyword, top, hashtag, user, or combined search routing.
includeRawDatacan carry the raw source payload for debugging and custom parsing.
Pagination and cost guidance:
maxResultsPerQuerycontrols how many normalized rows are saved per query or hashtag.maxPagesPerQuerylimits result pages per target.- Larger result targets increase per-row event counts and therefore total PPE usage.
Apify API example
import { ApifyClient } from "apify-client";const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const run = await client.actor("khadinakbar/tiktok-search-scraper").call({searchQueries: ["nike running"],searchType: "keyword",hashtags: ["running"],userQueries: ["nike"],region: "US",maxResultsPerQuery: 25,maxPagesPerQuery: 3,includeRawData: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Best results and outcome guidance
Choose the narrowest search input that matches the task. Use searchQueries for topic exploration, hashtags for tag-based discovery, and userQueries for creator lookup. When you need a broader sweep from one term, searchType: "all" combines keyword, top, and user search for each query. Use region when localization matters, and use sortBy, datePosted, and publishTime to shape the returned order where TikTok supports it. For larger workflows, start with a lower maxResultsPerQuery, review the returned profiles or videos, and then enrich the selected records.
Pick the right TikTok search Actor
This Actor is the mixed-discovery option: keyword videos, Top results, hashtag videos and creator profiles under one schema in one run. For a single surface, a focused Actor from the same developer is usually the better fit:
| When you need | Use |
|---|---|
| Keyword or hashtag videos with minimum views, likes or duration filters | TikTok Video Search Scraper |
| Creator profiles only, for a keyword or brand search | TikTok User Search Scraper |
| A deep feed and analytics for one hashtag | TikTok Hashtag Scraper |
| Keyword videos, Top results and creators mixed in one dataset | This Actor |
Builder's note
I designed one normalized record shape for video and user rows, with recordType distinguishing them and scrapedAt on every saved row, so mixed-surface runs stay easy to route in downstream automation.
FAQ
How should I route a keyword search versus a user search?
Use searchQueries with searchType: "keyword" when you want video results around a topic. Use userQueries when you want creator profiles returned as user rows.
When should I use searchType: "all"?
Use searchType: "all" when you want the same query to produce keyword videos, top results, and user profile matches in one run.
How do I move from discovery to enrichment?
After this Actor returns public profile URLs or IDs, send those records into TikTok Profile Posts Scraper - Creator Feed Data or TikTok Profile Videos Scraper for profile-focused follow-up.
How do I keep pagination focused?
Set maxPagesPerQuery to a small value for discovery runs, then increase it only for broader collection tasks. Pair it with maxResultsPerQuery to shape the final dataset size.
How do I inspect run details in automation?
Read the default dataset for result rows, then read RUN_SUMMARY and OUTPUT from the default key-value store for counts, routes used, and terminal outcome data.
Responsible use
Use the actor for lawful research, monitoring, and enrichment workflows that respect TikTok access rules and the rights of others. Review the returned public data in the context of your own compliance, privacy, and platform obligations before storing or acting on it.