Tiktok Search Scraper avatar

Tiktok Search Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Tiktok Search Scraper

Tiktok Search Scraper

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

ScraperX

ScraperX

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 hours ago

Last modified

Share

TikTok Search Scraper — Find Viral Videos by Keyword with Region & Date Targeting

Search TikTok by keyword and export every matching video as structured data — caption, hashtags, engagement counts, the creator's full stats, the sound, and direct video/cover URLs including playable and downloadable addresses.

Target a specific country, sort by relevance, likes or recency, and narrow to a publish-time window — then let unlimited mode run until TikTok has nothing left to give.


What you get

🎬 Video📊 Engagement👤 Creator & sound
Video ID and canonical URLPlay countUsername, nickname, author IDs
Caption (desc)Likes (diggs)Follower / following counts
Creation timestampCommentsTotal hearts and video count
Duration, width, height, ratioSharesAvatar thumbnail
Play address & download addressPrivate-account flag
Cover, origin cover, dynamic coverSound title, author, album
Bitrate, codec, quality, definitionSound play URL and covers
Subtitle info tracksOriginal-sound flag
Hashtags (challenges) with covers
Mentions and hashtag positions (textExtra)
Duet/stitch settings, ad flags, effect stickers

Key features

  • Keyword search with real depth. Enter one or many search terms; each is searched independently and every match is returned as its own row.
  • Unlimited mode. Turn it on and the Actor keeps paging until TikTok stops returning results — no arbitrary ceiling on a keyword you care about.
  • 27-country region targeting. The region is applied through cookies and Accept-Language headers, not just a query parameter — so you get genuinely local results rather than US results with a flag on them.
  • Three sort modes. Relevance, most liked, or newest first.
  • Publish-time filtering. Yesterday, last week, month, three months, six months, or all time.
  • Hashtag enrichment. Missing hashtag cover images and descriptions are filled in automatically (roughly half a second per unique hashtag) so your hashtag data is complete, not partial.
  • Keyword attribution. With includeSearchTerms on, every video carries the searchTerm that found it — essential when you run several keywords in one job.
  • Direct media addresses. playAddr and downloadAddr come with each video, alongside cover, origin cover and dynamic cover images.
  • Residential-first reliability. The Actor always runs on Apify Residential proxies with 3 retries. Supply custom proxy URLs and they are tried first, with residential as automatic fallback.

Use cases

  • Trend discovery — find what is going viral for a keyword right now, filtered to the last day or week.
  • Competitor & category research — search your product category and see who owns the conversation.
  • Influencer discovery — the creator's follower count and total hearts travel with every video, so ranking creators takes one export.
  • Localised market research — run the same keyword across several regions and compare what surfaces.
  • Campaign and hashtag tracking — monitor your branded term and total the reach.
  • Sound and audio research — spot which sounds keep appearing in top results for a niche.
  • Content ideation — captions and hashtags for the top-performing videos in your space, in one table.
  • Ad-intelligence workisAd, adAuthorization and adLabelVersion separate promoted content from organic.
  • Dataset building — media addresses and metadata support downstream video or ML pipelines.

How it works

  1. You supply search keywords, a region, sort mode and publish-time window.
  2. Each keyword is searched on TikTok with your region applied through cookies and language headers.
  3. Result pages are walked until your limit is reached — or indefinitely in unlimited mode.
  4. Every video is normalised into a flat record with nested objects for video, music, stats, author stats, challenges and duet info.
  5. Hashtag metadata is enriched where TikTok's search response left it incomplete.
  6. Rows stream into the dataset with the originating search term attached.

Quick start

  1. Open the Actor and enter your keyword(s) — e.g. chatgpt.
  2. Set Video Limit (minimum 30), or switch on Unlimited Mode.
  3. Pick a Region and, if you want fresh content only, a Publish Time Filter.
  4. Click Start, then export the Output tab as JSON (recommended) or CSV.

Minimal input

{
"keywords": ["chatgpt"],
"limit": 50,
"region": "US",
"sortType": "0",
"publishTime": "ALL_TIME"
}

Input configuration

FieldTypeDefaultDescription
keywordsarray— (required)One or more TikTok search terms.
limitinteger10How many videos to scrape. Minimum 30 applies; ignored when unlimited mode is on.
isUnlimitedbooleanfalseIgnore the limit and keep scraping until TikTok returns no more results.
regionstringUSTarget country (ISO alpha-2): US, GB, CA, AU, IN, DE, FR, ES, IT, NL, JP, KR, BR, PT, MX, TR, RU, PL, ID, TH, VN, PH, AR, CN, TW, HK, BD.
sortTypestring00 relevance, 1 most liked, 2 newest first.
publishTimestringALL_TIMEALL_TIME, YESTERDAY, WEEK, MONTH, THREE_MONTH, SIX_MONTH.
includeSearchTermsbooleantrueAdd searchTerm to each video so you know which keyword found it.
enrichHashtagsbooleantrueFill in missing hashtag cover and description fields (~0.5s per unique hashtag).
proxyConfigurationobjectApify ResidentialThis Actor always runs on Apify Residential proxies (3 retries); any Apify group you pick is overridden. Custom proxy URLs are tried first (3 retries), with residential as fallback.

Output data

One row per video.

Top level

url, id, desc (caption), createTime, author (username), nickname, authorId, authorSecId, avatarThumb, authorPrivate, challenges (hashtags), textExtra (hashtag and mention positions), effectStickers, stickersOnItem, diversificationLabels, locationCreated, isAd, adAuthorization, adLabelVersion, duetEnabled, stitchEnabled, duetDisplay, stitchDisplay, duetInfo, shareEnabled, itemCommentStatus, itemMute, privateItem, secret, originalItem, officalItem, warnInfo, takeDown, downloadSetting, scheduleTime, plus searchTerm when enabled.

video

id, width, height, ratio, duration, cover, originCover, dynamicCover, shareCover, reflowCover, zoomCover, playAddr, downloadAddr, bitrate, bitrateInfo, codecType, encodedType, encodeUserTag, format, definition, videoQuality, volumeInfo, subtitleInfos.

stats

playCount, diggCount (likes), commentCount, shareCount.

authorStats

followerCount, followingCount, heart, heartCount, videoCount, diggCount.

music

id, title, authorName, album, original, duration, playUrl, coverLarge, coverMedium, coverThumb.

textExtra[]

hashtagName, hashtagId, userUniqueId, userId, secUid, start, end, type, subType, isCommerce, awemeId.

Example output (trimmed)

{
"url": "https://www.tiktok.com/@examplecreator/video/7558512477600861471",
"id": "7558512477600861471",
"desc": "5 ChatGPT prompts that actually saved me time this week #chatgpt #productivity",
"createTime": "1786451234",
"author": "examplecreator",
"nickname": "Example Creator",
"authorId": "6789012345",
"avatarThumb": "https://p16-sign.tiktokcdn.com/…",
"searchTerm": "chatgpt",
"stats": {
"playCount": 2140000,
"diggCount": 184000,
"commentCount": 3120,
"shareCount": 14800
},
"authorStats": {
"followerCount": 612000,
"followingCount": 184,
"heartCount": 18400000,
"videoCount": 412
},
"video": {
"width": 1080,
"height": 1920,
"duration": 47,
"definition": "720p",
"format": "mp4",
"cover": "https://p16-sign.tiktokcdn.com/…",
"playAddr": "https://v16-webapp.tiktok.com/…",
"downloadAddr": "https://v16-webapp.tiktok.com/…"
},
"music": {
"id": "7123456789012345678",
"title": "original sound",
"authorName": "examplecreator",
"original": true,
"duration": 47
},
"challenges": [
{ "hashtagName": "chatgpt" },
{ "hashtagName": "productivity" }
],
"isAd": false,
"duetEnabled": true,
"stitchEnabled": true
}

Illustrative values — a live run returns current TikTok data.


Usage examples

{
"keywords": ["ai tools"],
"limit": 200,
"sortType": "1",
"publishTime": "WEEK",
"region": "US"
}

Compare the same keyword across markets

Run once per region and merge the exports:

{
"keywords": ["skincare routine"],
"limit": 100,
"region": "GB"
}

Exhaustive keyword sweep

{
"keywords": ["your brand name"],
"isUnlimited": true,
"sortType": "2",
"publishTime": "MONTH"
}

Multi-keyword research with attribution

{
"keywords": ["meal prep", "meal prep ideas", "high protein meal prep"],
"limit": 150,
"includeSearchTerms": true
}

Pivot the export on searchTerm to see which phrasing surfaces the strongest content.

Faster runs

{
"keywords": ["travel hacks"],
"limit": 500,
"enrichHashtags": false
}

Run it from your own code

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraperx/tiktok-search-scraper").call(run_input={
"keywords": ["chatgpt"],
"limit": 100,
"sortType": "1",
"publishTime": "WEEK",
"region": "US",
})
for v in client.dataset(run["defaultDatasetId"]).iterate_items():
print(v["stats"]["playCount"], "|", v["author"], "|", v["desc"][:60])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });
const run = await client.actor('scraperx/tiktok-search-scraper').call({
keywords: ['chatgpt'],
limit: 100,
region: 'US',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL

curl -X POST "https://api.apify.com/v2/acts/scraperx~tiktok-search-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"keywords":["chatgpt"],"limit":100,"region":"US"}'

Integrations

Push videos to Google Sheets, Airtable, Slack, Make, Zapier, Google Drive or your own endpoint via webhooks, and use Schedules for continuous keyword and trend monitoring.


Pricing

Pay-per-event: a small Actor-start charge plus a charge per video row delivered to your dataset. Current rates are on the Pricing tab of this Actor's page, and Apify shows an estimate before and during every run.

Because this Actor always runs on Apify Residential proxies, that proxy traffic is billed separately by the platform according to your plan. Be deliberate with Unlimited Mode — it runs until TikTok stops returning results.


Limits & good to know

  • Minimum 30 videos per run when unlimited mode is off.
  • Unlimited mode has no ceiling. It stops only when TikTok runs out of results — check your cost estimate before using it on a broad keyword.
  • Region is applied via cookies and language headers, which strongly influences results but does not guarantee that every video is from that country.
  • Residential proxies are enforced. Any Apify proxy group you select is overridden; custom proxy URLs are tried first with residential as fallback.
  • enrichHashtags adds roughly 0.5s per unique hashtag. Turn it off for maximum speed on large runs.
  • Media addresses expire. playAddr, downloadAddr and cover URLs point at TikTok's CDN — fetch them promptly if you need the files.
  • The comments field mirrors what TikTok's search response returns and is typically empty; comment counts are in stats.commentCount.
  • Public content only — private accounts and restricted videos are not returned.
  • Default run options are 4 GB memory and a 1-hour timeout — raise the timeout for unlimited runs.

FAQ

Do I need a TikTok account or API key? No. The Actor searches public TikTok content without authentication.

How do I get results for a specific country? Set region to the ISO alpha-2 code. It is applied through cookies and Accept-Language headers for genuinely local relevance.

What do the sort types mean? 0 relevance, 1 most liked, 2 newest first.

How do I only get recent videos? Set publishTime to YESTERDAY, WEEK or MONTH.

Can I scrape everything for a keyword? Yes — enable isUnlimited. Watch the cost estimate, since the run continues until TikTok has no more results.

How do I know which keyword found a video? Leave includeSearchTerms on; each row carries a searchTerm field.

Can I download the videos? The Actor returns playAddr and downloadAddr URLs. Fetching the files themselves is up to you, and subject to TikTok's terms and copyright.

Why is the minimum 30? That is the smallest batch TikTok's search returns reliably; asking for fewer would just discard data you already paid to fetch.

Which export format should I use? JSON — video, music, stats and authorStats are nested objects.


This Actor collects only publicly available TikTok search results — the same videos any visitor can find. It does not log in, follow accounts, or access private content. Videos, captions and sounds remain the property of their creators, and usernames, avatars and bios are personal data. Ensure your use complies with TikTok's terms, copyright law, and GDPR or comparable regulations. Media addresses are provided as metadata; downloading and reusing video files is your responsibility.

Support

Need extra fields, comment extraction, or a custom TikTok research pipeline? Open an issue on the Issues tab of this Actor.