TikTok Search Scraper (Pay Per Result) avatar

TikTok Search Scraper (Pay Per Result)

Pricing

$0.15 / 1,000 tiktok posts

Go to Apify Store
TikTok Search Scraper (Pay Per Result)

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

Yevhenii Molodtsov

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

5

Monthly active users

3 days ago

Last modified

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
}
FieldTypeDefaultDescription
keywordsarray— (required)Search terms, each searched independently
maxItemsinteger1000Global cap on output items
maxItemsPerKeywordintegerOptional per-keyword cap
sortTypeenumRELEVANCERELEVANCE, MOST_LIKED, DATE_POSTED
locationstringUSISO 3166-1 alpha-2 country code; results as seen from that region
includeSearchKeywordsbooleantrueAdds keyword + inputSource to each item
proxyConfigurationobjectApify RESIDENTIALProxy 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:

  1. proxyConfiguration.proxyUrls from input (explicit user override)
  2. PROXY_URL_TEMPLATE env var — a literal {country} is substituted
  3. CUSTOM_PROXY_URL / OXYLABS_DC_PROXY_URL env var — its -country-XX token is rewritten
  4. 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.
  • sortType is applied client-side: TikTok accepts sort_type/publish_time on this endpoint but ignores them.
  • No post is ever written twice within a run, across keywords, variants and exits.

Local development

npm install
apify 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.