TikTok Search Scraper - [Videos, Hashtags & Users]
Pricing
Pay per event + usage
TikTok Search Scraper - [Videos, Hashtags & Users]
Scrape TikTok keyword, top, hashtag, and user search results. Provider-backed, no cookies required, perfect for SEO and AI agents, MCP optimized.
Pricing
Pay per event + usage
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
13
Total users
2
Monthly active users
9 days ago
Last modified
Categories
Share
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 is provider-backed, requires no cookies, 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.
- Use 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. |
providerOrder | string | Provider preference: ScrapeCreators first or SociaVault first, or single-provider modes. |
maxResultsPerQuery | integer | Maximum normalized rows saved per query or hashtag. |
maxPagesPerQuery | integer | Safety cap for provider pagination 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. |
trim | boolean | Requests trimmed provider responses when supported. |
includeRawData | boolean | Adds raw provider payloads to each row for debugging and custom parsing. |
Focused input example
{"searchQueries": ["nike running"],"searchType": "keyword","hashtags": ["running"],"userQueries": ["nike"],"providerOrder": "scrapecreators-first","region": "US","datePosted": "all-time","sortBy": "relevance","maxResultsPerQuery": 25,"maxPagesPerQuery": 3,"trim": true,"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. |
provider | Provider that returned the row. |
query | Search query or hashtag. |
hashtag | Hashtag for hashtag search rows. |
resultPosition | Position in the normalized result list. |
page | Provider page used to fetch the row. |
cursor | Cursor used for that provider 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","provider": "scrapecreators","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 is built as a provider-backed TikTok search scraper and uses the configured provider order to fetch results. It supports ScrapeCreators primary with SociaVault fallback, SociaVault primary with ScrapeCreators fallback, and single-provider modes. 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. The actor also supports trim for provider payload handling and includeRawData for storing raw provider data alongside normalized rows.
Pricing
This actor uses Pay per event pricing on the Apify platform. 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. The Apify platform usage shown in the run details and the live Pricing tab determines the full cost view, including platform usage alongside event charges.
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 provider usage, counts, 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 provider-backed and normalized into the dataset.
- Search scope follows the selected inputs: keyword, top, hashtag, user, or combined search routing.
includeRawDatacan carry raw provider payloads for debugging and custom parsing.
Pagination and cost guidance:
maxResultsPerQuerycontrols how many normalized rows are saved per query or hashtag.maxPagesPerQuerylimits provider pagination 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,providerOrder: "scrapecreators-first",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 the provider supports it. For larger workflows, start with a lower maxResultsPerQuery, review the returned profiles or videos, and then execution enrichment on the selected records.
Continue the workflow
- Then use TikTok Shop Creators Scraper - Showcase Leads to continue from TikTok Search Scraper - Videos, Hashtags & Users discovery into content data for the selected records.
- Then use TikTok Shop Product Scraper — Prices, Variants, Reviews (US) to continue from TikTok Search Scraper - Videos, Hashtags & Users discovery into content data for the selected records.
Design note
I found that the dataset schema exposes both video and user search fields in one normalized record shape, with recordType distinguishing the row type and scrapedAt always present on saved rows. That makes the output 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 provider usage, counts, 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.