TikTok Search Scraper
Pricing
from $1.60 / 1,000 results
TikTok Search Scraper
Scrape all public TikTok videos that use a given music/sound URL. Get captions, stats, covers, author profiles, and music details with pagination and proxy support.
Pricing
from $1.60 / 1,000 results
Rating
0.0
(0)
Developer
Alien Force
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
Overview
Scrape TikTok search results by keyword — videos, photos, or users — in one Apify Actor.
The TikTok Search Scraper turns any public TikTok search query into clean, structured data: captions, views, likes, covers, music, author profiles, and more. Use it for content research, trend monitoring, influencer discovery, competitor tracking, or bulk export to CSV/JSON and your own pipelines.
Whether you need TikTok video search results, photo/carousel posts, or user profiles matching a keyword, you get paginated results with optional sort and date filters — without manual scrolling.
Key Features
- TikTok keyword search scraper: Run one search query and pull public results at scale.
- Videos, photos, and users: Scrape TikTok search tabs for video posts, image posts, or creator profiles.
- Trend & content research ready: Capture captions, engagement stats, covers, play URLs, and music metadata.
- Influencer / user discovery: Find TikTok accounts by keyword with follower counts, bios, and profile links.
- Sort and date filters: Relevance, most liked, or latest — plus date-posted windows (videos and photos).
- Pagination to your limit: Keep fetching until you hit your max results or TikTok runs out of pages.
- Proxy support: Datacenter proxies by default; switch to residential if TikTok starts blocking.
- Clear run reporting: Empty or blocked outcomes stay out of the dataset and show up in logs / a key-value report.
Input Schema
Input Properties
-
searchQuery- Type:
string(required) - Description: Keyword or phrase to search on TikTok (single query per run).
- Example:
"the rock"
- Type:
-
searchType- Type:
string - Description: Which search results to scrape:
videos,photos, orusers. Default isvideos. - Example:
"videos"
- Type:
-
limit- Type:
integer - Description: Maximum number of results to scrape for the run. Set to
0for no soft cap (the run still stops when TikTok reports no more results). Default is10. - Example:
100
- Type:
-
sortType- Type:
string - Description: Sort preference for videos and photos:
relevance,mostLiked, orlatest. Default isrelevance. Ignored forusers. - Example:
"mostLiked"
- Type:
-
datePosted- Type:
string - Description: Publish-time filter for videos and photos:
all,24h,week,month,3months, or6months. Default isall. Ignored forusers. - Example:
"week"
- Type:
-
proxyConfiguration- Type:
object - Description: Use Apify
RESIDENTIALproxies. Optionally pick a Country in the proxy dropdown — that ISO code drives TikTokregion/ timezone so they match the exit IP (full Apify residential country list supported). - Example:
{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
- Type:
searchQuery is required.
Input Example
{"searchQuery": "the rock","searchType": "videos","limit": 100,"sortType": "relevance","datePosted": "all","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Output
One dataset row per result. The shape depends on searchType.
Common fields
| Field | Type | Description |
|---|---|---|
searchType | string | videos, photos, or users |
searchQuery | string | Search query used for the run |
Videos (searchType: "videos")
| Field | Type | Description |
|---|---|---|
id | string | Video ID |
desc | string | null | Caption |
createTime | integer | null | Create time (Unix timestamp, seconds) |
url | string | null | Canonical video URL |
author | object | null | Author details (id, uniqueId, nickname, signature, verified, avatarThumb, secUid) |
stats | object | null | Engagement (diggCount, shareCount, commentCount, playCount, collectCount) |
music | object | null | Music / sound (id, title, authorName, playUrl) |
video | object | null | Media (id, duration, cover, playAddr, downloadAddr, width, height) |
Photos (searchType: "photos")
Same as videos for id, desc, createTime, url, author, stats, and music, plus:
| Field | Type | Description |
|---|---|---|
imagePost | object | null | Photo post (title, cover, images[] with imageURL) |
Users (searchType: "users")
| Field | Type | Description |
|---|---|---|
uid | string | null | User ID |
uniqueId | string | Username handle |
nickname | string | null | Display name |
signature | string | null | Bio |
followerCount | integer | null | Follower count |
heartCount | integer | null | Total likes on the profile |
verified | boolean | null | Verified flag |
avatar | string | null | Avatar URL |
secUid | string | null | Stable account ID |
profileUrl | string | null | Canonical profile URL |
Output Example (videos)
{"searchType": "videos","searchQuery": "the rock","id": "7635425590299970838","desc": "Mae Young > Marilyn Monroe The Rock is one lucky birthday boy! ...","createTime": 1777761063,"url": "https://www.tiktok.com/@onthisdayinwwe/video/7635425590299970838","author": {"id": "7050958181346116614","uniqueId": "onthisdayinwwe","nickname": "OnThisDayInWWE","signature": "Milestone moments in WWE history...","verified": false,"avatarThumb": "https://...","secUid": "MS4wLjABAAAA..."},"stats": {"diggCount": 377,"shareCount": 30,"commentCount": 3,"playCount": 75000,"collectCount": 54},"music": {"id": "7635425604015229719","title": "original sound","authorName": "OnThisDayInWWE","playUrl": "https://..."},"video": {"id": "7635425590299970838","duration": 111,"cover": "https://...","playAddr": "https://...","downloadAddr": null,"width": 576,"height": 1024}}
Output Example (users)
{"searchType": "users","searchQuery": "avengers","uid": "6589561205014249478","uniqueId": "raviprajapati0012","nickname": "Avengers official","signature": "Avengers lover","followerCount": 23700,"heartCount": 746758,"verified": false,"avatar": "https://...","secUid": "MS4wLjABAAAA...","profileUrl": "https://www.tiktok.com/@raviprajapati0012"}
Some media fields (for example video.downloadAddr) may be null when TikTok does not include them in the response. Play and cover URLs can expire; fetch them promptly if you need the files.
Handling of empty and blocked runs
Failed or empty outcomes are kept out of the dataset and reported in the REPORT record in the run's key-value store (when skips are recorded), alongside warnings or errors in the log.
- No results for the query: the run fails after a session refresh attempt. Use a different query, loosen filters, or check proxies.
- Blocked / empty upstream responses: automatically retried. If nothing could be scraped, the run fails with a clear message suggesting residential proxies.
- Partial success: if some pages succeed and later pages stop, rows already saved stay in the dataset.
The run's status message reports how many results were scraped and how many issues were skipped.