TikTok Search Scraper
Pricing
from $2.63 / 1,000 results
TikTok Search Scraper
Search TikTok videos and users by keyword. Returns clean, structured results to the dataset.
Pricing
from $2.63 / 1,000 results
Rating
0.0
(0)
Developer
Headless Agent
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Search TikTok videos and accounts by keyword and get the results as a clean dataset — ready to download as JSON, CSV, or Excel, or to process further via API.
Just enter your keywords and the Actor will run the search, automatically walk through multiple result pages, and save every video/user it finds to the dataset. Searches run in the English (US) region.
Features
- Multi-keyword search in a single run
- Automatic pagination (configurable pages per keyword)
- Total result cap to keep costs under control
- Bring-your-own browser cookies when TikTok requires a trusted session
- Apify Proxy support for anti-blocking needs
- Enriched video output: views, likes, comments, shares, music, hashtags, duration, cover, direct video play/download URLs
- Author info with avatar, bio, verified badge, and follower stats
- Suggested accounts from the search page included as user rows
- Raw mode: push full unmodified API items with every field (
rawResults)
How to use
- Fill in Search queries with one or more keywords.
- Set Results per page (1–20) and Max pages to fit your needs.
- (Optional) set Results limit to cap the total number of results.
- Click Start. Results appear in the Output / Dataset tab.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | string | – | A single keyword (used when searchQueries is empty) |
searchQueries | array of string | ["funny cats"] | List of keywords, processed one by one |
resultsPerPage | integer (1–20) | 12 | Results per API page |
maxPages | integer (1–10) | 1 | Paginated pages fetched per query |
cursorStart | integer | 0 | Initial cursor (0 = from the beginning; reuse a cursor from a previous run to continue) |
resultsLimit | integer | 50 | Total result cap across all queries (0 = no cap besides maxPages) |
rawResults | boolean | false | Push full raw API items with all fields instead of parsed rows |
cookiesJson | string | – | Browser cookies (see Cookies section) |
proxyConfiguration | object | { "useApifyProxy": false } | Proxy settings |
Example request
{"searchQueries": ["funny cats", "latte art"],"resultsPerPage": 12,"maxPages": 2,"resultsLimit": 40,"proxyConfiguration": { "useApifyProxy": true }}
Run via API:
curl -X POST "https://api.apify.com/v2/acts/<ACTOR_ID>/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries": ["funny cats"], "resultsPerPage": 12, "maxPages": 2}'
Run locally:
uv syncapify run
Example response
Each result is stored as one row in the dataset.
Video:
{"type": "video","searchQuery": "funny cats","id": "7679154654202154253","desc": "funny cat playing ball #catsoftiktok","createTime": 1787942554,"author": "@catlover (Cat Lover)","authorUniqueId": "catlover","authorNickname": "Cat Lover","authorAvatar": "https://p16-common-sign.tiktokcdn.com/avatar.jpeg","authorSignature": "Daily cute cats","authorVerified": false,"authorFollowerCount": 36800,"authorFollowingCount": 6,"authorVideoCount": 214,"authorHeartCount": 716300,"plays": 1200000,"likes": 85000,"comments": 1200,"shares": 300,"collects": 1500,"musicTitle": "original sound","musicAuthor": "catlover","hashtags": ["catsoftiktok"],"duration": 15,"cover": "https://p16-common-sign.tiktokcdn.com/cover.image","videoPlayUrl": "https://v16-webapp-prime.tiktok.com/video/...","videoDownloadUrl": "https://v16-webapp-prime.tiktok.com/video/...","url": "https://www.tiktok.com/@catlover/video/7679154654202154253"}
User / account (regular results and suggested accounts — suggestions carry "source": "suggestion"):
{"type": "user","searchQuery": "funny cats","uniqueId": "catlover","nickname": "Cat Lover","signature": "Funny Cats | Funny Animals","avatar": "https://p19-common-sign.tiktokcdn.com/avatar.webp","followers": 50000,"userId": "123456789","verified": false,"url": "https://www.tiktok.com/@catlover"}
Raw mode ("rawResults": true): each dataset row wraps the full unmodified API entry so it passes platform validation:
{"searchQuery": "funny cats","apiType": 1,"raw": {"type": 1,"item": { "...every field: video with all bitrateInfo variants, full author, music with playUrl, authorStats, statsV2, textExtra..." }}}
apiType mirrors the original numeric result type (1 = video, 2 = user, 4 = suggested-users card, whose entry carries user_list). Use raw mode when you need fields the parsed rows don't carry.
Run summary (stored in the OUTPUT key-value store record):
{"totalPushed": 24,"queries": ["funny cats", "latte art"]}
Cookies
If results come back empty and the log says TikTok requires a trusted session, fill in cookiesJson with cookies from a browser logged in to TikTok. Accepted formats:
- Object:
{ "sessionid": "...", "ttwid": "..." } - Playwright cookie list:
[ { "name": "...", "value": "..." } ] - A JSON string of either format above
Tips
- Start with
maxPages: 1and a smallresultsLimitwhen trying new keywords. - To resume an interrupted search, use the
cursorvalue from the previous run log ascursorStart. - If you get blocked frequently, enable
proxyConfigurationwith Apify Proxy. - Request estimate: total requests ≈ number of keywords ×
maxPages.
FAQ
Why are my results empty?
TikTok sometimes restricts search from fresh sessions. Provide fresh cookiesJson or enable the proxy, then run again.
Is a TikTok login required? No. Cookies are only needed when TikTok blocks anonymous sessions.
Which export formats are available? All built-in Apify dataset formats: JSON, CSV, Excel, XML, and RSS.