TikTok Discover Scraper With Search Suggestions
Pricing
from $4.99 / 1,000 results
TikTok Discover Scraper With Search Suggestions
TikTok Discover Scraper extracts public discovery data, including trending searches, search suggestions, keywords, hashtags, creators, and related content. Analyze emerging topics and search trends to uncover content opportunities, audience interests, and viral trends.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
TikTok Search Suggestions Scraper — Keywords & Videos as JSON
TikTok Search Suggestions Scraper turns one seed term into the exact phrases TikTok's own search box offers, in rank order and tagged with TikTok's own language code, plus — in the same run — the TikTok videos that seed surfaces in search. Suggestion rows and video rows both come back as one typed, normalized JSON schema: no HTML, no selectors, nothing to parse before an agent, a spreadsheet or a data pipeline can use it. Read on for every input, every output field, and exactly how far past TikTok's 8-phrase cap the alphabet expansion goes.
What is TikTok Search Suggestions Scraper?
TikTok Search Suggestions Scraper is a keyword-research tool for TikTok's own autocomplete box. Give it a seed term and it returns the phrases TikTok's search suggestion surface offers for that term, each carrying a rank position, TikTok's own language tag, the tokenised query and a stable group ID. On the same run it can also pull the companion TikTok videos that same seed surfaces in search. No TikTok account, login or cookie is used anywhere in a run — not on the keyless request path, and not on the Playwright-driven browser transport reserved for the two signature-gated video and account surfaces.
- 🔤 Turn a seed term into ranked TikTok search suggestions, with language tag, query tokens and a stable
groupId - 🔠 Push past TikTok's hard 8-phrase cap with optional a–z / 0–9 expansion
- 🎬 Pull the companion TikTok videos that same seed surfaces in search
- 📤 Export as JSON, CSV, Excel or XML straight from the Apify dataset
- 🛡️ No proxy setup required by default — the run starts direct and escalates only if TikTok pushes back
What data does TikTok Search Suggestions Scraper collect?
Every run can return up to three kinds of row: search-suggestion rows, TikTok video rows, and the creator and sound metadata carried inside each video row.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Search suggestions | suggested phrase, rank in the box, language tag, stable de-dup ID | suggestion.term, suggestion.position, suggestion.language, suggestion.groupId |
| TikTok videos | caption, creation time, engagement stats, media URL | text, createTimeISO, diggCount, playCount, mediaUrls |
| Creator & sound metadata (nested in video rows) | author handle, follower count, sound title and author | authorMeta.name, authorMeta.fans, musicMeta.musicName, musicMeta.musicAuthor |
Need more TikTok data?
If keyword and video data from search isn't the whole job, API Empire also publishes TikTok Hashtag Scraper With Sticker Text & Language for hashtag-driven video feeds with on-screen text and caption-language fields, and TikTok Profile Videos API Scraper With Playlist Details for pulling a known creator's own video catalogue and playlists. Run this Actor first to find the phrase and the videos ranking for it, then hand the hashtags or handles it surfaces to either of those Actors to go deeper.
Why not build this yourself?
TikTok's suggestion and video-search surfaces are not a stable, documented public API — they are the same internal endpoints the TikTok web app calls, and two of them actively resist a plain HTTP client. /api/search/general/full/ (videos) and /api/search/user/full/ (accounts) answer HTTP 200 with a zero-byte body to any curl-style request, even one carrying valid session cookies — only a signed request produced by a loaded, script-patched browser page returns real data. A WAF challenge page also answers HTTP 200, so a DIY scraper that only checks status codes will run green while silently returning nothing.
Keeping a scraper like this working means maintaining a keyless HTTP client for the suggestion endpoint, a signature-aware headless-browser transport for the video and account endpoints, a proxy-escalation ladder that only steps up when a request is actually blocked (never on status code alone), and retry logic that will not re-scrape and double-charge rows that already pushed successfully. That is a standing engineering commitment, not a one-off script — and it is the maintenance burden this Actor already carries for you.
Why do developers and teams scrape TikTok?
For AI engineers and agent builders
Feed a brand or product seed term into an agent's tool loop and get back TikTok's own autocomplete phrases — suggestion.term, suggestion.language and the stable suggestion.groupId — as typed JSON ready to drop into a vector store or a RAG index, with no HTML to parse first. An agent can chain a suggestion lookup ahead of a content-generation step, using the ranked phrases as the seed list for a keyword-expansion tool, then call this Actor again on each expanded phrase to keep building the graph.
For marketers and brand teams
Turn a single product or brand seed into the long-tail phrases TikTok's search box is already suggesting to users, complete with TikTok's own language tag so a global team can see which markets are asking about a topic. Turning on alphabet expansion surfaces phrases behind the platform's 8-result cap, giving a content calendar more raw material than a single manual search ever would, while the companion video rows show which existing videos already rank for that seed.
For researchers and analysts
Every suggestion and video row here comes from TikTok's own public, logged-out search surfaces, so a researcher can track how the autocomplete box for a topic shifts over time by re-running the same seed and diffing on suggestion.groupId, TikTok's own stable identifier for a phrase. No account, consent flow, or private data is touched — the scope is limited to what a visitor typing the same term into the search bar would see.
For developers building data products
A keyword-research product built on this Actor can call it through the Apify API on a schedule, storing suggestion.term, suggestion.position and suggestion.language per seed over time to build a TikTok search-trend feature without operating a browser fleet, a proxy pool or a block-detection layer directly. maxSuggestionsPerSeed puts a hard, predictable ceiling on how many charged rows a single scheduled seed can emit, which matters when a schedule runs unattended.
How to scrape TikTok (step by step)
- Open TikTok Search Suggestions Scraper on its Apify Store listing and click Try for free.
- Add one or more terms to 🌱 Seed terms to research (
startUrls) — the only required input. - Decide what comes back: leave 🔤 Suggestion rows only off for suggestions plus videos, or turn it on for a keyword-only run, and set a language filter or a per-seed cap if you want a bounded, predictable row count.
- Click Save & Start and let the run finish.
- Open Storage → Dataset and export the results as JSON, CSV, Excel or XML, or read them straight from the Apify API.
What to do when TikTok changes its structure
TikTok's search and suggestion endpoints are actively maintained targets, and this Actor is maintained against them. When TikTok changes a payload shape, the fix lands here and the dataset's field names and types stay the same on your end — no pipeline rewrite required on your side. No specific turnaround time is promised.
⬇️ Input
TikTok Search Suggestions Scraper takes 8 parameters, defined in the Actor's published input schema. Only startUrls is required.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
startUrls | Yes | array of strings | Plain search terms work best — protein powder, skincare, phonk. Also accepted: a hashtag with or without #, and a TikTok URL (a search?q= link, a /tag/<name> link or an @handle link) — the term or handle is extracted from it. | ["protein powder", "skincare"] |
suggestionsOnly | No | boolean, default false | ON → keyword-research mode: suggestion rows only, no browser at all. Fastest and cheapest run. OFF → you also get video rows for each seed, capped by maxItems. | true |
expandWithAlphabet | No | boolean, default false | Fires up to 37 lookups per seed instead of 1, and a single seed can emit a few hundred charged rows. Leave off for a quick look; turn on for a long-tail keyword list. | false |
expansionCharset | No | string, enum, default "az09" | Only used when expandWithAlphabet is on. az09 (a–z and 0–9 — 36 extra lookups, widest), az (a–z only — 26 extra lookups), 09 (0–9 only — 10 extra lookups, fastest). | "az09" |
maxSuggestionsPerSeed | No | integer, 0–2000, default 0 | Hard stop on how many suggestion rows one seed may emit, applied after de-duplication and after the language filter. 0 means no cap. | 100 |
suggestionLanguages | No | array of strings | TikTok's own two-letter language tag on each phrase, e.g. en, my, it, ms. Leave empty to keep every language. | ["en"] |
maxItems | No | integer, 0–500, default 10 | How many TikTok videos to pull for each seed from the keyword search feed. 0 means no cap from you — the run still stops at the platform's own limit. | 10 |
proxyConfiguration | No | object, proxy editor | Turn on Apify Proxy here if you already know you need a specific proxy group up front. | { "useApifyProxy": false } |
Example input, every parameter shown:
{"startUrls": ["protein powder", "skincare", "https://www.tiktok.com/search?q=phonk"],"suggestionsOnly": false,"expandWithAlphabet": true,"expansionCharset": "az","maxSuggestionsPerSeed": 200,"suggestionLanguages": ["en"],"maxItems": 25,"proxyConfiguration": { "useApifyProxy": false }}
The most common input mistake is turning on expandWithAlphabet for a long startUrls list without also setting maxSuggestionsPerSeed — every phrase and every video row is charged at the same rate, so an uncapped expansion across many seeds is the fastest way to run up an unexpectedly large bill.
⬆️ Output
Every run writes typed, normalized rows to one Apify dataset with a single, stable shape shared by suggestion rows and video rows — fields that don't apply to a given row type are null or [], never a fabricated value. Export as JSON, CSV, Excel or XML, or read the dataset over the Apify API. The default dataset view surfaces 14 columns for the suggestion fields; the full row carries considerably more, all documented below.
Scraped search suggestion
{"hashtag": "protein powder","count": 1,"rowType": "suggestion","suggestion": {"term": "protein powder for women","normalizedTerm": "protein powder for women","position": 2,"groupId": "7229384712983746561","source": "sug","language": "en","tokens": ["protein", "powder", "for", "women"],"isPersonalized": false,"recallReason": "sug","searchUrl": "https://www.tiktok.com/search?q=protein+powder+for+women","seed": "protein powder","seedSuffix": null,"matchedQuery": "protein powder"},"scrapedAt": "2026-07-29T12:00:00Z","runId": "a1B2c3D4e5F6g7H8","statsExact": null,"id": null,"text": null,"createTime": null,"createTimeISO": null,"isAd": null,"isMuted": null,"authorMeta": { "id": null, "name": null, "nickName": null, "verified": null, "signature": null, "bioLink": null, "avatar": null, "privateAccount": null, "following": null, "fans": null, "heart": null, "video": null, "digg": null },"musicMeta": { "musicName": null, "musicAuthor": null, "musicOriginal": null, "musicAlbum": null, "playUrl": null, "coverMediumUrl": null, "musicId": null },"webVideoUrl": null,"mediaUrls": [],"videoMeta": { "height": null, "width": null, "duration": null, "coverUrl": null, "originalCoverUrl": null, "definition": null, "format": null, "originalDownloadAddr": null, "downloadAddr": null, "subtitleUrls": [], "slideshowImages": [] },"diggCount": null,"shareCount": null,"playCount": null,"collectCount": null,"commentCount": null,"mentions": [],"hashtags": [],"effectStickers": [],"isSlideshow": null,"isPinned": null,"input": "protein powder","discoveryInfo": { "breadcrumbs": [], "relatedTags": [], "url": "https://www.tiktok.com/search?q=protein+powder+for+women", "tag": "protein powder", "type": "suggestion" }}
suggestion.term, suggestion.position, suggestion.language, suggestion.groupId, suggestion.normalizedTerm, suggestion.source, suggestion.tokens, suggestion.isPersonalized, suggestion.recallReason, suggestion.searchUrl, suggestion.seed, suggestion.seedSuffix and suggestion.matchedQuery are the fields that actually vary on a suggestion row. Every other key above is the same video-row field kept present and null so the dataset stays one shape.
Scraped video
{"hashtag": "protein powder","count": 2,"id": "7614464525332516118","text": "High protein pizza bowl meal prep, ready in 20 minutes #mealprep #highproteinmeals","createTime": 1772880681,"createTimeISO": "2026-03-05T09:44:41Z","isAd": false,"isMuted": false,"authorMeta": {"id": "6873734221858341889","name": "balancewithnu","nickName": "Nu | Meal Prep + Cooking","verified": false,"signature": "high protein, low effort meals","bioLink": null,"avatar": "https://p16-sign.tiktokcdn-us.com/....jpeg","privateAccount": false,"following": 202,"fans": 49642,"heart": 812000,"video": 317,"digg": 1204},"musicMeta": {"musicName": "original sound","musicAuthor": "balancewithnu","musicOriginal": true,"musicAlbum": "","playUrl": "https://sf16-....mp3","coverMediumUrl": "https://p16-....jpeg","musicId": "7210909845497580000"},"webVideoUrl": "https://www.tiktok.com/@balancewithnu/video/7614464525332516118","mediaUrls": ["https://v16m-....mp4"],"videoMeta": {"height": 1024,"width": 576,"duration": 18,"coverUrl": "https://p16-....jpeg","originalCoverUrl": "https://p16-....jpeg","definition": "540p","format": "mp4","originalDownloadAddr": "https://v16m-....mp4","downloadAddr": "https://v16m-....mp4","subtitleUrls": [],"slideshowImages": [],"playAddr": "https://v16m-....mp4"},"diggCount": 784,"shareCount": 124,"playCount": 21634,"collectCount": 340,"commentCount": 9,"mentions": [],"hashtags": [{ "id": "228", "name": "mealprep", "title": "", "cover": "" }],"effectStickers": [],"isSlideshow": false,"isPinned": false,"input": "protein powder","discoveryInfo": { "breadcrumbs": [], "relatedTags": ["protein powder for women", "protein powder recipes"], "url": "https://www.tiktok.com/search?q=protein+powder", "tag": "protein powder", "type": "search" },"statsExact": { "playCount": 21634, "diggCount": 784, "shareCount": 124, "commentCount": 9, "collectCount": 340 },"rowType": "video","suggestion": null,"scrapedAt": "2026-07-29T12:00:03Z","runId": "a1B2c3D4e5F6g7H8"}
Notes on fields worth reading before you build a pipeline on them:
authorMeta.bioLinkis alwaysnull. TikTok's search payload does not ship a bio link on any author record it returns, so this key stays in the schema for stability but never populates.videoMeta.originalDownloadAddrmirrorsdownloadAddr. TikTok's search response ships exactly one download address; the distinct playable stream is exposed separately asvideoMeta.playAddr.hashtags[].titleandhashtags[].coverare empty stubs on this surface — TikTok's search payload carries the hashtagidandnamebut not those two.statsExactisnullunless TikTok'sstatsV2block is present on that item; when present it carries the exact, unrounded counter values instead of the rounded ones indiggCount/playCount/etc.discoveryInfo.relatedTagson a video row is the list of suggestion phrases collected for that same seed earlier in the run —[]when no suggestions were collected for it.mentionsis parsed from the caption's own@handlemarkup; it is[], not a placeholder, when the caption names no one.
How does TikTok Search Suggestions Scraper compare to other TikTok scrapers?
| Feature | TikTok Search Suggestions Scraper | Generic alternative |
|---|---|---|
| Suggestions past the 8-phrase cap | a–z / 0–9 expansion, up to 37 lookups per seed, de-duplicated on TikTok's own groupId | Not documented on TikTok Search Suggestions Scraper (vistics), whose README shows one query per seed, as observed on its Apify Store listing on 2026-07-30 |
| Companion video data | Optional video rows from the same seed, in the same dataset | TikTok Search Suggestions Scraper (vistics) returns suggestion rows only, as observed on its Apify Store listing on 2026-07-30 |
| Query tokens exposed | suggestion.tokens, parsed from TikTok's own cut_query | Not documented on TikTok Search Suggestions Scraper (vistics)'s listing, as observed on 2026-07-30 |
| Stable de-duplication key | TikTok's own groupId | TikTok Search Suggestions Scraper (vistics) documents a relevance score field with no id-based de-dup, as observed on 2026-07-30 |
| Signature-gated video/account endpoints | Handled with a dedicated signed-browser transport, kept separate from the keyless suggestion path | TikTok User Search Scraper (clockworks) and Tiktok Search Scraper (epctex) return video/user data without documenting this distinction, as observed on their listings on 2026-07-30 |
If you're building an AI agent or a RAG pipeline, the output-format row is the decision-maker: parsing HTML inside an agent loop is a reliability failure mode, not a feature. A stable, typed JSON schema is what lets an agent or an ETL job trust the same field names run after run.
How many results can you scrape with TikTok Search Suggestions Scraper?
TikTok's suggestion box itself returns a hard cap of 8 phrases per lookup — asking for more (count=20 or count=50 in the query string) still returns 8. The only way past that cap is expandWithAlphabet, which re-queries the seed with each character in expansionCharset appended: up to 37 total lookups per seed with az09, 27 with az, or 11 with 09, each producing at most 8 phrases before de-duplication on TikTok's own groupId. maxSuggestionsPerSeed (0–2000, default 0 = no cap) then trims the deduplicated set down further if you set it.
For video rows, maxItems accepts 0–500 (default 10; 0 is treated internally as the schema's own ceiling of 500, not as literally unlimited). Regardless of the maxItems value you set, the video transport pages a maximum of 8 times per seed at up to 20 raw rows per page, so no single seed can return more than roughly 160 raw search-result rows in one run — and after TikTok's own account-card rows and duplicate video ids are filtered out, the number of video rows actually written is normally lower than that ceiling.
Integrate TikTok Search Suggestions Scraper and automate your workflow
TikTok Search Suggestions Scraper works with any language or tool that can send an HTTP request.
REST API integration
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("tiktok-discover-scraper-with-search-suggestions").call(run_input={"startUrls": ["protein powder"],"suggestionsOnly": True,"expandWithAlphabet": True,"expansionCharset": "az","suggestionLanguages": ["en"],"maxSuggestionsPerSeed": 100,})for row in client.dataset(run["defaultDatasetId"]).iterate_items():if row["rowType"] == "suggestion":print(row["suggestion"]["position"], row["suggestion"]["term"])
Works in Python, Node.js, Go, Ruby, cURL.
Automation platforms (n8n, Make, LangChain)
The Apify platform ships an official n8n community node and a Make app that can start any Actor by its ID and read back its dataset — point either one at tiktok-discover-scraper-with-search-suggestions to drop this Actor's suggestion and video rows straight into a workflow without writing an HTTP call by hand. On the LangChain side, Apify's own ApifyDatasetLoader reads a finished run's dataset directly into LangChain documents, which is a natural fit for feeding suggestion phrases into a downstream retrieval or generation step.
Is it legal to scrape TikTok?
Yes — TikTok Search Suggestions Scraper reads only publicly visible TikTok surfaces: the same suggestion box and search results any logged-out visitor sees, with no login, cookie or session token involved. Suggestion rows carry no personal data at all — they are TikTok's own phrase, rank and language metadata. Video rows do carry public creator information (handle, display name, follower count), which counts as personal data in most jurisdictions: store and use it under a lawful basis, in line with GDPR, CCPA and equivalent laws where they apply. Consult legal counsel for commercial use cases involving bulk personal data.
❓ Frequently asked questions
Does TikTok Search Suggestions Scraper work without a TikTok account?
Yes. No TikTok login, cookie or session token is used on either transport this Actor runs — the keyless suggestion client and the signed-browser video client are both logged-out.
How often is the scraped data updated?
Every run fetches live from TikTok at the moment it executes — nothing is cached or served from a prior run. Re-run the Actor whenever you need a fresh read.
What happens when a seed term returns no suggestions?
A zero-suggestion result is reported as zero rows, not retried into a fabricated row. It is a genuine, valid outcome for a very rare or nonsense seed, and the same run continues to any remaining seeds and to the video step if suggestionsOnly is off.
Can I scrape private or login-gated TikTok content?
No. Only TikTok's public, logged-out suggestion and search surfaces are queried. Content behind a private account or a login wall is not accessible through this Actor.
How much does a run cost?
$0.005 per row pushed to the dataset (row_result), and a suggestion row costs exactly the same as a video row — there is no separate per-search or per-lookup charge. If suggestion fetching fails for a seed after every retry, no row is pushed for that seed, so a failed lookup is never charged.
Does TikTok Search Suggestions Scraper work for AI agent workflows and LLM pipelines?
Yes. It is callable as an HTTP endpoint from any agent framework through the Apify API, and every response is typed JSON — no parsing step before passing a row to an LLM.
How does TikTok Search Suggestions Scraper handle TikTok's anti-bot system?
Every request is judged on body shape, not HTTP status, because TikTok's blocked and challenged surfaces still answer 200. Requests start with no proxy and escalate through Apify Datacenter and then Apify Residential proxy tiers only when TikTok's response looks like a WAF challenge or a soft block — never on status code alone. Once any row has been pushed for a seed, that seed's retry logic stops re-trying on a fresh IP, so a mid-run failure can never duplicate (and double-charge) rows already written.
How does TikTok Search Suggestions Scraper compare to other TikTok scrapers?
As observed on their Apify Store listings on 2026-07-30, TikTok Search Suggestions Scraper (vistics) returns one suggestion query per seed with no documented expansion or video companion data; TikTok User Search Scraper (clockworks) and Tiktok Search Scraper (epctex) focus on user and video search respectively, without a keyword-suggestion feature. This Actor combines ranked search suggestions, an expansion path past TikTok's 8-phrase cap, and the companion video rows in one dataset.
Does TikTok Search Suggestions Scraper return data in a format LLMs can use directly?
Yes. Every row is typed, normalized JSON with stable field names — no HTML, no selectors. Pass it directly into an LLM's context window, index it into a vector store, or route it through an agent tool.
Can I use TikTok Search Suggestions Scraper without managing proxies?
Yes. Runs start with no proxy at all, and only escalate to Apify's own Datacenter and Residential proxy tiers automatically if TikTok pushes back. Setting proxyConfiguration is optional, for when you already know you need a specific proxy group up front.
What happens when TikTok changes its structure or blocks the scraper?
This Actor is actively maintained against TikTok's suggestion and search surfaces. Field names and types on your end stay stable across a fix — no numeric turnaround time is promised.
💬 Your feedback
Found a bug, or a field that doesn't match what TikTok actually sent you? Open an issue on this Actor's Issues tab in Apify Console, or reach out through the contact link on its Apify Store listing. Reports like these are how the Actor stays accurate as TikTok's own surfaces change.