Tiktok Search Scraper
Pricing
from $3.99 / 1,000 results
Tiktok Search Scraper
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScraperX
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 hours ago
Last modified
Categories
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 URL | Play count | Username, nickname, author IDs |
Caption (desc) | Likes (diggs) | Follower / following counts |
| Creation timestamp | Comments | Total hearts and video count |
| Duration, width, height, ratio | Shares | Avatar thumbnail |
| Play address & download address | Private-account flag | |
| Cover, origin cover, dynamic cover | Sound title, author, album | |
| Bitrate, codec, quality, definition | Sound play URL and covers | |
| Subtitle info tracks | Original-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
includeSearchTermson, every video carries thesearchTermthat found it — essential when you run several keywords in one job. - Direct media addresses.
playAddranddownloadAddrcome 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 work —
isAd,adAuthorizationandadLabelVersionseparate promoted content from organic. - Dataset building — media addresses and metadata support downstream video or ML pipelines.
How it works
- You supply search keywords, a region, sort mode and publish-time window.
- Each keyword is searched on TikTok with your region applied through cookies and language headers.
- Result pages are walked until your limit is reached — or indefinitely in unlimited mode.
- Every video is normalised into a flat record with nested objects for video, music, stats, author stats, challenges and duet info.
- Hashtag metadata is enriched where TikTok's search response left it incomplete.
- Rows stream into the dataset with the originating search term attached.
Quick start
- Open the Actor and enter your keyword(s) — e.g.
chatgpt. - Set Video Limit (minimum 30), or switch on Unlimited Mode.
- Pick a Region and, if you want fresh content only, a Publish Time Filter.
- 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
| Field | Type | Default | Description |
|---|---|---|---|
keywords | array | — (required) | One or more TikTok search terms. |
limit | integer | 10 | How many videos to scrape. Minimum 30 applies; ignored when unlimited mode is on. |
isUnlimited | boolean | false | Ignore the limit and keep scraping until TikTok returns no more results. |
region | string | US | Target 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. |
sortType | string | 0 | 0 relevance, 1 most liked, 2 newest first. |
publishTime | string | ALL_TIME | ALL_TIME, YESTERDAY, WEEK, MONTH, THREE_MONTH, SIX_MONTH. |
includeSearchTerms | boolean | true | Add searchTerm to each video so you know which keyword found it. |
enrichHashtags | boolean | true | Fill in missing hashtag cover and description fields (~0.5s per unique hashtag). |
proxyConfiguration | object | Apify Residential | This 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
What is trending this week for a keyword
{"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 ApifyClientclient = 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.
enrichHashtagsadds roughly 0.5s per unique hashtag. Turn it off for maximum speed on large runs.- Media addresses expire.
playAddr,downloadAddrand cover URLs point at TikTok's CDN — fetch them promptly if you need the files. - The
commentsfield mirrors what TikTok's search response returns and is typically empty; comment counts are instats.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.
Legal & responsible use
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.