TikTok Hashtag Scraper avatar

TikTok Hashtag Scraper

Pricing

$19.99/month + usage

Go to Apify Store
TikTok Hashtag Scraper

TikTok Hashtag Scraper

Scrape TikTok hashtags at scale and collect detailed video data. Extract views, likes, comments, shares, captions, sounds, creators, and posting dates. Ideal for trend research, influencer analysis, and content insights. Export clean structured data in JSON, CSV, or Excel.

Pricing

$19.99/month + usage

Rating

5.0

(2)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

110

Total users

0

Monthly active users

a day ago

Last modified

Share

TikTok Hashtag Scraper — Videos, Engagement and Creator Data

TikTok Hashtag Scraper searches TikTok for any hashtag or keyword you provide and turns every video on the result page into a structured JSON row — caption, exact like/share/play/save/comment counts, creator handle and follower count, sound metadata, and direct video and download URLs. No TikTok login, cookie or API key is needed. Every field keeps the same name and type on every run, so the output loads straight into a spreadsheet, a database, or an LLM pipeline. Start a run on the Actor's Apify Console page to pull the current TikTok search result set for your own hashtag.

What is TikTok Hashtag Scraper?

TikTok Hashtag Scraper is an Apify Actor that runs TikTok's own hashtag and keyword search and converts every video card in the result feed into a clean, typed dataset row — no HTML parsing, no CSS selectors to maintain. It requires no TikTok account, login, or API key: every request the Actor makes is logged out, the same as a visitor browsing tiktok.com/search without signing in. It's built for social media managers tracking a hashtag campaign, content researchers studying what's trending under a tag, and developers or AI engineers who need TikTok video and creator data as clean structured input for a pipeline or agent.

What TikTok hashtag video data is publicly available to scrape?

Everything TikTok Hashtag Scraper returns is visible to any logged-out visitor who searches a hashtag on tiktok.com — no account is required to see it.

Data categoryPublicly visible (no login)Gated behind TikTok login
Video caption, ID and canonical URLYes
Engagement counts (likes, shares, plays, saves, comments)Yes, as a current snapshotHistorical/time-series counts are not exposed by the search surface
Creator handle, nickname, avatar, verified flagYes
Creator follower / following / total-likes / video countsYesFull follower and following lists — login required
Sound title, author, ID and playable URLYes
Video and download URLsYes (TikTok-signed, expiring)
Hashtags and @mentions in the captionYes
Comment thread textNot returned by this ActorA dedicated comments surface, separate from search
Creator bio linkNot returned by this ActorTikTok's search and video-detail payloads never include it

TikTok Hashtag Scraper only returns publicly visible data — what any visitor sees without logging in. Nothing behind a login wall.

What data can I extract with TikTok Hashtag Scraper?

Each row carries the searched hashtag, the video's own identity fields, the creator and sound metadata attached to it, and the full engagement and media set TikTok's search surface exposes. Coverage figures below are measured by the Actor's source against a live sample of 123 videos across 4 hashtags.

FieldDescription
hashtagThe term (from startUrls) that produced this row
idTikTok's numeric video ID
textVideo caption/description
createTime / createTimeISOUnix timestamp and the equivalent true-UTC ISO-8601 timestamp
webVideoUrlCanonical tiktok.com/@<handle>/video/<id> link
isAdTikTok's own paid-content flag
hashtagsEvery hashtag on the video, as { "name": "..." } — present on 119/123 (96.7%) of measured videos
mentions@handles mentioned in the caption, each as { "userUniqueId", "userId", "secUid" } — rare, present on 4/123 (3.3%) of measured videos

👤 Creator and sound metadata

FieldDescription
authorMeta.id / .name / .nickNameCreator's numeric ID, handle (uniqueId) and display name
authorMeta.verified / .privateAccount / .ttSellerVerified-badge, private-account and TikTok Shop seller flags
authorMeta.signatureCreator's bio text; null when the profile has none
authorMeta.bioLinkAlways null — TikTok's search and video-detail payloads never carry a bio link on this surface (0/123 search items, 0/20 detail pages measured)
authorMeta.avatarCreator avatar image URL
authorMeta.following / .fans / .heart / .video / .diggCreator's following count, follower count, total likes received, video count, and likes the creator has given
musicMeta.musicName / .musicAuthor / .musicIdSound title, sound's credited author, and TikTok's sound ID
musicMeta.musicOriginalWhether the sound is the creator's own original audio
musicMeta.musicAlbumAlbum name; null for the rest — only 23/123 (18.7%) of measured sounds carry one
musicMeta.playUrl / .coverMediumUrlPlayable audio URL and sound cover image

📊 Engagement, video and download fields

FieldDescription
diggCount / shareCount / playCount / collectCount / commentCountLikes, shares, plays, saves and comments; null when TikTok omitted that counter for a video
mediaUrlsEvery deduplicated playback/download URL TikTok's payload exposes for the video; empty for photo/slideshow posts, which carry no video file
videoMeta.height / .width / .durationRendition dimensions in pixels and duration in seconds
videoMeta.coverUrl / .originalCoverUrlThumbnail and original-cover image URLs
videoMeta.definition / .formatQuality label (e.g. 540p) and container format (e.g. mp4)
videoMeta.downloadAddr / .originalDownloadAddrTikTok's single download address — both keys hold the identical URL; TikTok does not expose a second, higher-quality file
isMutedAlways null — the key is absent on 123/123 measured live items

🤖 Add-on: Need additional TikTok data?

If you need a specific creator's whole upload history rather than a hashtag's search results, pair this Actor with TikTok Profile Videos API Scraper, which pulls every video from a public profile. To search by keyword, hashtag, username or a raw TikTok URL in a single input list, see TikTok Discover Scraper.

Why not build this yourself?

TikTok has no public, self-serve API for searching arbitrary hashtags — its search endpoint is an internal, signed surface meant for the web app, not third-party developers. Building and keeping a scraper for it working means solving three ongoing problems yourself: TikTok rotates the signature scheme and trust cookies (ttwid, msToken) that a search request needs, so a client that doesn't warm up a real browser session gets a silent, HTTP-200 response with an empty body; TikTok challenges unfamiliar sessions with a WAF page that also returns HTTP 200, so status-code checks alone can't tell a real result from a block; and getting past both reliably usually means paying for rotating datacenter and residential proxies on top of the engineering time. This Actor already absorbed that cost once — its original request-based engine went completely dead (HTTP 200, 0-byte body, on every transport tested) and had to be rebuilt around a warmed, signed browser fetch with a proxy ladder that escalates on response shape, not status code.

How to use TikTok Hashtag Scraper

TikTok Hashtag Scraper runs entirely on the Apify platform — no separate signup or credentials beyond your Apify account.

  1. Open TikTok Hashtag Scraper on its Apify Console page and click Try for free.
  2. Enter one or more entries in Hashtags or keywords (startUrls) — the only required input.
  3. Optionally set Maximum videos per hashtag (maxData), Order rows within each hashtag (sortOrder), and a Proxy route (proxyConfiguration).
  4. Click Start and follow the run log — it reports how many videos were reachable and how many rows were pushed per hashtag.
  5. Open the Dataset tab and export your results as JSON, JSONL, CSV, Excel, HTML table, or XML.

How to scale to bulk video extraction

startUrls is an array, so a single run can hold as many hashtags or keywords as you want to search — each one is looked up separately and every row it produces carries that term in its own hashtag column, so one dataset can hold several tags at once without mixing them up. Duplicate terms (case-insensitive) are collapsed automatically before the run starts.

What can you do with TikTok hashtag video data?

  • 📊 A social media manager tracking a branded hashtag uses diggCount, shareCount and playCount to see which videos under the tag are driving reach this week.
  • 🎯 An influencer marketer scanning a niche hashtag uses authorMeta.name and authorMeta.fans to shortlist creators already posting in that space before reaching out.
  • 🎵 A trend analyst groups videos by musicMeta.musicId to see which sound is carrying a hashtag's growth.
  • 🗓️ A data team uses createTimeISO to track how a tag's video volume shifts over time, joining hashtag datasets on id.
  • 🤖 An AI engineer feeds the typed rows — text, hashtags, authorMeta — directly into a RAG pipeline or an agent tool, since every field name and type stays fixed across runs and needs no additional parsing.

How does TikTok Hashtag Scraper handle rate limits and blocking?

The Actor opens a warmed, headless browser session that first visits TikTok's /explore page to mint the ttwid and msToken trust cookies a search request needs, then issues an in-page signed fetch to TikTok's own search endpoint. By default it starts with a direct connection — no proxy — and only escalates to Apify's datacenter proxy, then residential proxy, when a response comes back in a shape that means "not trusted": a 0-byte body or a small WAF-challenge page. Escalation is driven purely by that response shape, never by HTTP status, because a dead or blocked TikTok surface still answers with status 200. Once at least one row has been pushed for a hashtag, that hashtag is never retried on a fresh IP, which prevents duplicate rows. If every proxy tier is exhausted for a hashtag without a usable response, the run logs it as failed for that tag and continues with the rest of your list.

⬇️ Input

ParameterRequiredTypeDescriptionExample value
startUrlsYesarrayHashtags or keywords, one per line. The # is optional. A https://www.tiktok.com/tag/<name> or /search?q= URL is accepted and the term is read from it. A @username is accepted but is searched as a keyword — this Actor has no profile mode. Default: ["travel"]["travel", "photodump"]
maxDataNointegerHow many rows to keep per hashtag. TikTok's live ceiling is about 30–34 videos per term, so higher values simply return everything that exists. Minimum 1, maximum 1000, default 1020
sortOrderNostring (enum: relevance, date, popularity)Re-orders the rows this run collected. relevance keeps TikTok's own search order untouched, date sorts collected rows newest-first, popularity sorts by play count. Default relevance"date"
proxyConfigurationNoobjectOptional. The run starts with a direct connection, then escalates to datacenter and residential proxy only if TikTok refuses the session. Default {"useApifyProxy": false}{"useApifyProxy": true}

Example input

{
"startUrls": ["travel", "photodump", "#hiking"],
"maxData": 20,
"sortOrder": "date",
"proxyConfiguration": { "useApifyProxy": false }
}

⬆️ Output

Every run writes one typed JSON row per video to the Actor's dataset — the same field names and types on every run, regardless of which hashtags you searched. Export the dataset as JSON, JSONL, CSV, Excel, HTML table, or XML from the Dataset tab or the Apify API.

Example output

{
"hashtag": "travel",
"id": "7658445776103804173",
"text": "one week in the Dolomites #travel #hiking",
"createTime": 1751584888,
"createTimeISO": "2026-07-03T23:21:28Z",
"isAd": false,
"isMuted": null,
"authorMeta": {
"id": "6727448659015533061",
"name": "mountainbrynn",
"nickName": "Brynn",
"verified": false,
"signature": "alps + a backpack",
"bioLink": null,
"avatar": "https://p16-sign.tiktokcdn-us.com/mountainbrynn-avatar.jpeg",
"privateAccount": false,
"ttSeller": false,
"following": 412,
"fans": 27500,
"heart": 1900000,
"video": 288,
"digg": 1204
},
"musicMeta": {
"musicName": "original sound",
"musicAuthor": "Brynn",
"musicOriginal": true,
"musicAlbum": null,
"playUrl": "https://sf16-ies-music.tiktokcdn.com/original-sound.mp3",
"coverMediumUrl": "https://p16-sign.tiktokcdn-us.com/original-sound-cover.jpeg",
"musicId": "7658445751139733806"
},
"webVideoUrl": "https://www.tiktok.com/@mountainbrynn/video/7658445776103804173",
"mediaUrls": [
"https://v16-webapp-prime.tiktok.com/video/tos/useast2a/mountainbrynn-play.mp4"
],
"videoMeta": {
"height": 1024,
"width": 576,
"duration": 27,
"coverUrl": "https://p16-sign.tiktokcdn-us.com/mountainbrynn-cover.jpeg",
"originalCoverUrl": "https://p16-sign.tiktokcdn-us.com/mountainbrynn-origcover.jpeg",
"definition": "540p",
"format": "mp4",
"originalDownloadAddr": "https://v16-webapp-prime.tiktok.com/video/tos/useast2a/mountainbrynn-download.mp4",
"downloadAddr": "https://v16-webapp-prime.tiktok.com/video/tos/useast2a/mountainbrynn-download.mp4"
},
"diggCount": 857700,
"shareCount": 12400,
"playCount": 5200000,
"collectCount": 91300,
"commentCount": 3120,
"mentions": [],
"hashtags": [{ "name": "travel" }, { "name": "hiking" }]
}

How does it work?

TikTok Hashtag Scraper opens a real, headless browser session and visits TikTok's /explore page first to mint the trust cookies a search request needs — the same warm-up a browser goes through before TikTok trusts it. It then runs an in-page fetch of TikTok's own search endpoint, signed with the same parameters a real browser session would send, and reads the video cards out of the response. Every card is passed through a dedicated parser that builds the same fixed set of fields every time, applies your sortOrder, and trims to maxData before pushing rows to the dataset. Only what TikTok's public search page shows a logged-out visitor is ever read — there is no login step and no private data is touched. Because parsing lives in its own layer, the output schema stays stable even when TikTok changes its site or app internals.

Integrations

TikTok Hashtag Scraper runs on the Apify platform, so it works with anything that can call the Apify API or use Apify's existing app integrations.

Calling TikTok Hashtag Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("tiktok-hashtag-scraper").call(run_input={
"startUrls": ["travel", "photodump"],
"maxData": 20,
"sortOrder": "date",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["id"], item["diggCount"])

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

No-code tools (n8n, Make, Zapier)

Apify's own apps for Make and Zapier expose a "Run Actor" action — point it at tiktok-hashtag-scraper, map your hashtags into the startUrls field, and pass the run's dataset into the rest of your flow. In n8n, the community Apify node (or a plain HTTP Request node against the Apify API) can start the Actor and fetch its dataset the same way. See Apify's integrations documentation for the full list of supported apps and webhook events.

Scraping publicly available TikTok data is generally lawful, but the creator and video data this Actor returns can qualify as personal data under regimes like GDPR and CCPA because it includes a creator's handle, display name, bio and follower counts alongside their content. TikTok Hashtag Scraper only collects what any logged-out visitor sees on TikTok's public search page — it uses no login and reaches no private data. If you store or process that data at scale, you are responsible for having a lawful basis to do so and for complying with TikTok's own Terms of Service. Consult legal counsel if your use case involves bulk storage of personal data.

❓ Frequently asked questions

What TikTok hashtag video fields does TikTok Hashtag Scraper return?

The top fields are text (caption), diggCount/playCount/shareCount/commentCount (engagement), authorMeta.name and authorMeta.fans (creator identity and reach), createTimeISO (publish time), and webVideoUrl (the canonical link). See the field tables above for every field this Actor returns.

Does TikTok Hashtag Scraper require a TikTok account or login?

No. The Actor makes every request logged out and accepts no credential input of any kind — it works the same way a visitor browsing TikTok's public search page would.

How many TikTok videos can I extract per hashtag?

About 30–34. TikTok's search feed returns one page per term, and a second page comes back empty even when the response claims more results exist. Setting maxData above that measured ceiling does not produce more rows — it simply returns everything the feed actually holds.

What happens if a hashtag search returns zero results?

No dataset rows are pushed for that hashtag, so no item_result charge applies to it. The run log records reachable=0 pushed=0 for that tag so you can confirm TikTok genuinely returned nothing rather than the run failing silently. If every attempt against that tag came back as a blocked response instead of a genuine empty result, the run log reports the tag as failed rather than empty.

Can I scrape multiple hashtags or keywords at once?

Yes. Pass as many entries as you like into startUrls; each is searched independently and every resulting row is labelled with the hashtag value it came from, so one dataset can hold results for several tags without mixing them up.

Does TikTok Hashtag Scraper work with Claude, ChatGPT and other AI agent tools?

It is not exposed through a dedicated MCP server, but it is fully callable as an HTTP endpoint through the Apify API by any agent framework that can make an API call — including custom tool definitions for Claude, ChatGPT, or a LangChain/LlamaIndex agent.

How does TikTok Hashtag Scraper compare to other TikTok hashtag scrapers?

As observed on the Apify Store on 2026-07-30, clockworks' TikTok Hashtag Scraper documents a similar authorMeta/musicMeta/videoMeta output shape but states a hard 400–800-results-per-hashtag ceiling and pushes a separate uncharged error item on failures with an errorCode field — this Actor instead measures and states a real ~30–34-videos-per-hashtag ceiling and pushes no dataset row at all for a hashtag that returns nothing. Lexis Solutions' TikTok Trending Hashtags Scraper, also checked 2026-07-30, targets a different entity entirely — hashtag-level trend and audience analytics gated behind an uploaded TikTok session cookie — rather than the individual videos under a tag.

Does TikTok Hashtag Scraper return data in a format LLMs can use directly?

Yes. Every row is typed, normalized JSON with consistent field names across runs — no HTML to parse and no selectors to write. Pass it directly to an LLM prompt, index it into a vector store, or feed it to an agent tool as-is.

What happens when TikTok changes its layout or anti-bot system?

The output schema is maintained to stay stable even when TikTok's site changes underneath it — this Actor's search engine has already been rebuilt once after TikTok's previous request-based surface stopped returning data entirely. No specific turnaround time is promised for future changes.

Can I use TikTok Hashtag Scraper without managing proxies or browser infrastructure?

Yes. The Actor runs its own headless browser session and proxy ladder — starting with a direct connection and escalating to Apify's datacenter and residential proxies only if needed — entirely inside the Actor run. You don't configure a browser or a proxy pool yourself.

Which TikTok hashtag video fields work best for AI training data and RAG indexing?

For RAG, index text (the caption) alongside hashtags and authorMeta.signature for semantic context. For training data, diggCount, playCount, shareCount, commentCount and createTimeISO return as consistently typed primitives across every row, making them reliable numeric and temporal features.

ScraperWhat it extracts
TikTok Discover ScraperKeyword, hashtag, username or TikTok URL search across TikTok's discovery surfaces in one Actor
TikTok Profile Videos API ScraperEvery video posted by a specific TikTok creator, from their public profile
Instagram Reel Virality Intelligence ScraperInstagram Reels with engagement and virality metrics — the same video entity on a different platform
YouTube Channel Finder With Creator AnalyticsChannel-level creator search and analytics on YouTube

💬 Your feedback

Found a bug, or need a field this Actor doesn't return yet? Let us know by creating an issue on the Actor's Issues tab in Apify Console — technical feedback directly shapes what gets fixed and built next.