TikTok Search Scraper (Pay Per Result)
Pricing
$0.15 / 1,000 tiktok posts
TikTok Search Scraper (Pay Per Result)
Search TikTok by keyword and export videos with full metadata: views, likes, comments, shares, bookmarks, hashtags, channel stats with follower counts, music and direct CDN video URLs. Batch many keywords per run, zero duplicate posts, no video downloads. $0.15 per 1K posts.
Pricing
$0.15 / 1,000 tiktok posts
Rating
0.0
(0)
Developer
Yevhenii Molodtsov
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
5
Monthly active users
3 days ago
Last modified
Categories
Share
Search TikTok by keywords and get videos with full metadata — engagement metrics (views, likes, comments, shares, bookmarks), channel info, music, subtitles, POI and direct CDN video URLs. No video downloads: fast runs, small footprint.
Input
{"keywords": ["artificial intelligence"],"maxItems": 1000,"sortType": "RELEVANCE","location": "US","includeSearchKeywords": true}
| Field | Type | Default | Description |
|---|---|---|---|
keywords | array | — (required) | Search terms, each searched independently |
maxItems | integer | 1000 | Global cap on output items |
maxItemsPerKeyword | integer | — | Optional per-keyword cap |
sortType | enum | RELEVANCE | RELEVANCE, MOST_LIKED, DATE_POSTED |
location | string | US | ISO 3166-1 alpha-2 country code; results as seen from that region |
includeSearchKeywords | boolean | true | Adds keyword + inputSource to each item |
proxyConfiguration | object | Apify RESIDENTIAL | Proxy settings |
Output
One dataset item per video, e.g.:
{"inputSource": "artificial intelligence","id": "7668211941134847250","title": "…","views": 116870,"likes": 3806,"comments": 43,"shares": 617,"bookmarks": 267,"hashtags": ["ai", "tech"],"channel": { "id": "…", "name": "…", "username": "…", "avatar": "…", "verified": true, "url": "…", "followers": 1606104, "following": 47, "videos": null, "likes": 0 },"uploadedAt": 1785402000,"uploadedAtFormatted": "2026-07-30T09:00:00.000Z","video": { "width": 1080, "height": 1440, "ratio": "1080p", "duration": 36.1, "url": "https://…", "cover": "https://…", "thumbnail": "https://…" },"song": { "id": 7668211998743612000, "title": "…", "artist": "…", "album": null, "duration": 36, "cover": "https://…" },"subtitleInformation": null,"postPage": "https://www.tiktok.com/@user/video/7668211941134847250","poi": null,"keyword": "artificial intelligence"}
Proxies (this is where the cost lives)
TikTok's search endpoint blocks North-American exit IPs (they return a zero-byte HTTP
200, indistinguishable from a bad request shape). It does not require residential IPs —
EU datacenter exits work fine. The actor therefore rotates exits over
GB, DE, FR, NL, PL, ES, IT, SE regardless of the location input (location is still
sent to TikTok as its region param; result sets are not strongly geo-partitioned).
The Actor ships with its own datacenter proxies — users do not supply any. Sources, in order:
proxyConfiguration.proxyUrlsfrom input (explicit user override)PROXY_URL_TEMPLATEenv var — a literal{country}is substitutedCUSTOM_PROXY_URL/OXYLABS_DC_PROXY_URLenv var — its-country-XXtoken is rewritten- Apify Proxy — only when input explicitly sets
useApifyProxy: true
There is deliberately no automatic fallback to Apify residential. Residential costs ~$10/GB against ~$0.50–1.50/GB for our own datacenter exits, so a silent failover would multiply cost per 1k items ~6x ($0.014 → $0.088) and, at a low price point, quietly turn every run into a loss. If the configured proxy breaks, the run fails loudly instead.
Apify's own datacenter proxies can't substitute: US-only on our plan, and measured 1/5 success against TikTok search.
Limits worth knowing
- TikTok caps a single query string at ~200 unique results. The actor widens coverage by searching surface variants of the keyword and by rotating exit countries — both are real keyword searches, so results stay on-topic. Expect ~200–420 items per keyword.
- Expansion stops automatically once queries stop returning enough new items, because each extra query costs a full-size response whether or not its items are new.
sortTypeis applied client-side: TikTok acceptssort_type/publish_timeon this endpoint but ignores them.- No post is ever written twice within a run, across keywords, variants and exits.
Local development
npm installapify run # reads INPUT from storage/key_value_stores/default/INPUT.json
Statistics (throughput, proxy MB per 1k items) are stored in the STATISTICS
key of the run's key-value store.