Request a tool
All toolsGuidesMCP serverRequest a toolPlatformsCategories
TikTok Hashtag Scraper icon

TikTok Hashtag Scraper

Scrape any TikTok hashtag for videos, views, likes, comments, shares and author data. No login or API key. $0.25 per 1,000 videos.

5 from 1 review on Apify 258 runs on Apify $0.00025 per result ($0.25 / 1,000)
Run this in the cloudRun on Apify →

Social Media Scrapers

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust hashtags, startUrls, resultsPerPage (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00025 per result = $0.25 per 1,000

You are charged forWhenPrice
Result returnedCharged per video returned. Failed/empty runs not charged.$0.00025

Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-06-23, and they are what you are actually charged.

Inputs

FieldWhat it doesType
hashtagsHashtags (with or without #) to pull videos from.array
startUrlsOr paste TikTok /tag/ URLs (https://www.tiktok.com/tag/cats).array
resultsPerPageMax videos per hashtag. Charged per result.integer
sessionCookiesOptional — leave empty and the run works as normal. Hashtag feeds are pulled keyless first; a built-in session only covers the tags that come back empty. Supply your own TikTok account cookie here to get a private rate limit that no other user shares. In Chrome, on a logged-in tiktok.com tab: F12 → Application → Cookies → copy the `sessionid` value. Paste one per line; several are rotated.array
notionConnectorOptional. Deliver results to your connected Notion via Apify MCP connectors.string
notionParentIdOptional Notion database/data-source id.string

What you get

A structured dataset — each result includes fields like:

textplayCountdiggCountcommentCountwebVideoUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Social Media Scrapers

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

TikTok Sound Scraper iconSocial Media Scrapers

TikTok Sound Scraper

Scrape every TikTok video using a sound: views, likes, comments, shares, author and music data. $0.25 per 1,000 videos, flat at every volume.

Ready to run — no setup

TikTok Followers & Following Scraper iconSocial Media Scrapers

TikTok Followers & Following Scraper

Extract any TikTok account's public followers or following list with bios, avatars, regions, verified badges and counts.

Ready to run — no setup

Instagram Comments Scraper iconSocial Media Scrapers

Instagram Comments Scraper

Scrape Instagram post and reel comments at $0.40 per 1,000, flat at every volume, plus a $0.001 run start. Text, likes, replies, author, verified badge.

5 use cases

Twitter (X) Search Scraper iconSocial Media Scrapers

Twitter (X) Search Scraper

Scrape X (Twitter) search results by keyword and advanced query. Full text, engagement, author, media. $0.40 per 1,000 tweets plus a $0.00005 run start.

Ready to run — no setup

Twitter (X) List Scraper iconSocial Media Scrapers

Twitter (X) List Scraper

Scrape every tweet from any X (Twitter) list: full text, likes, retweets, views, media, hashtags and author profile.

Ready to run — no setup

Threads Scraper iconSocial Media Scrapers

Threads Scraper

Scrape public Threads profiles and recent posts without login: bios, followers, post text, likes, timestamps and media URLs. From $0.40 per 1,000 results.

Ready to run — no setup

See all Social Media Scrapers →

⚡ TikTok Hashtag Scraper — Videos by Hashtag (No Login, No API Key)

Pull every video under any TikTok hashtag — no login, no API key, no proxy. Feed it hashtags (with or without #) or /tag/ URLs and get back each video with views, likes, comments, shares, saves, video & cover URLs, music/sound, author and timestamps. Export to JSON, CSV or Excel, call it from the API, or have results delivered straight to Notion. Just $0.25 per 1,000 results — the cheapest TikTok hashtag scraper on the market.

> No account. No signing keys. No msToken to paste. Paste a hashtag and run.

Why this scraper wins

  • 🔓 Keyless, sign-free, proxy-free — no login, no API key, no signing keys, and no proxy needed. It just works.
  • 🛡️ Not fooled by IP-reputation decoys — TikTok serves flagged addresses a stripped page with placeholder numbers. This Actor does not read that page, so the counts you get are the real ones.
  • 💸 $0.25 / 1,000 results, pay-per-result — the lowest rate on the market, billed only for videos actually returned. Empty and failed runs cost nothing.
  • 🧹 Clean, flat records — one tidy object per video, ready for sheets, dashboards or LLM pipelines.
  • 📬 Built-in Notion delivery — push every run into Notion via Apify connectors, zero extra code.
  • 🚦 Honest errors — a clear errorCode row (BLOCKED, RATE_LIMITED, NO_RESULTS) when something goes wrong, instead of silent emptiness.

What you can scrape

ModeInputReturns
Hashtaghashtags (e.g. cats, #spacex)Videos under each hashtag
Tag URLa /tag/ URL in startUrlsVideos under that hashtag

You can mix both in one run — hashtags parsed out of /tag/ URLs are merged with the hashtags list and de-duplicated, so a tag listed twice is only scraped (and only billed) once.

Want profiles, search and single videos too? Use the all-in-one TikTok Scraper.

Input

FieldTypeDescription
hashtagsarrayHashtags (with or without #) to pull videos from.
startUrlsarrayOr paste TikTok /tag/ URLs, e.g. https://www.tiktok.com/tag/cats.
resultsPerPageintegerMax videos per hashtag (1–2000, default 50). Charged per result.
sessionCookiesarrayOptional. Your own TikTok sessionid cookie(s), one per line — see *Throughput and your own cookie*.
proxyConfigurationobjectOptional — this scraper needs no proxy.
notionConnectorstringOptional Notion connector ID for delivery via Apify MCP connectors.
notionParentIdstringOptional Notion database/data-source id.

Input field names follow the conventions used across similar Actors on the Store, so switching an existing workflow over is usually a drop-in change.

Example input

{
  "hashtags": ["cats", "#spacex"],
  "startUrls": ["https://www.tiktok.com/tag/parkour"],
  "resultsPerPage": 200
}

Throughput and your own cookie

Runs work out of the box: every tag is pulled keyless first, exactly as before, and that path needs nothing from you. Only when a tag comes back empty does the run retry it through a built-in session, so a quiet tag returns videos instead of a blank.

That built-in session is shared across everyone using the Actor, so under heavy concurrent load it can be rate-limited. If you are pulling a lot of tags and want a rate limit nobody else shares, paste your own TikTok sessionid into sessionCookies (Chrome: F12 → Application → Cookies → sessionid, one per line). It is optional, it replaces the built-in session rather than adding to it, and an expired or missing cookie just means the run stays on the keyless path instead of failing.

Calling it from the API

curl -X POST "https://api.apify.com/v2/acts/Dami_Studio~tiktok-hashtag-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"hashtags":["cats"],"resultsPerPage":100}'

The response is the dataset itself — an array of the records shown below — so it drops straight into a script with no second call.

Output (one record per video)

{
  "ok": true,
  "type": "video",
  "id": "7300000000000000000",
  "webVideoUrl": "https://www.tiktok.com/@catlover/video/7300000000000000000",
  "text": "best nap ever 😴 #cats #catsoftiktok",
  "createTime": "2024-06-12T14:00:00.000Z",
  "hashtags": ["cats", "catsoftiktok"],
  "region": "US",
  "playCount": 2400000,
  "diggCount": 318000,
  "commentCount": 4200,
  "shareCount": 9100,
  "collectCount": 15000,
  "downloadCount": 800,
  "isAd": false,
  "video": {
    "duration": 23,
    "cover": "https://...jpg",
    "dynamicCover": "https://...webp",
    "playAddr": "https://...mp4",
    "downloadAddr": "https://...mp4"
  },
  "music": { "id": "...", "title": "original sound", "authorName": "catlover", "original": true, "duration": 23 },
  "author": { "id": "...", "uniqueId": "catlover", "nickname": "Cat Lover", "avatar": "https://...jpg" }
}

Field reference

FieldMeaning
idTikTok's own numeric video id, as a string. Stable — use it as your primary key.
webVideoUrlCanonical tiktok.com/@handle/video/<id> link you can open in a browser.
textThe caption exactly as posted, emoji and hashtags included.
createTimePosting time as an ISO-8601 UTC string, ready to sort or bucket by day.
hashtagsEvery hashtag parsed out of the caption — useful for co-occurrence analysis.
regionTwo-letter country code of the posting account, when TikTok exposes it.
playCount / diggCountViews and likes.
commentCount / shareCount / collectCountComments, shares, and saves/bookmarks.
downloadCountTimes the video was downloaded, when reported.
isAdtrue for promoted/branded content, so you can filter paid posts out of organic analysis.
video.durationLength in seconds.
video.cover / video.dynamicCoverStatic thumbnail and animated preview.
video.playAddrDirect MP4 without the watermark.
video.downloadAddrDirect MP4 with the standard TikTok watermark.
music.*Sound id, title, creator handle and whether it is an original sound — this is how you spot a trend built on one audio track.
author.*Poster's id, @handle, display name and avatar.

Media URLs (cover, playAddr, downloadAddr, avatar) are CDN links that expire after a while. If you need the files, fetch them soon after the run rather than months later.

What people use it for

  • Trend tracking — run the same hashtag on a schedule and diff playCount day over day to see what is actually accelerating rather than what is merely large.
  • Creator discovery — group results by author.uniqueId and rank by median views to find accounts that consistently perform inside a niche.
  • Sound research — group by music.id to find the audio track a trend is riding before it saturates.
  • Competitive/brand monitoring — watch a branded hashtag and catch the videos driving it, including whether they are ads (isAd).
  • Dataset building — flat records with stable ids feed straight into a warehouse, a spreadsheet or an LLM pipeline.

Pricing

$0.25 per 1,000 videos ($0.00025 each), with no run-start fee. Flat rate — no volume tiers, no plan gates, no minimums — and you are charged only for videos actually returned. That single number applies on every plan, from your very first run, and it is the cheapest rate on the market for this job.

> Price change on 19 August 2026: the per-video rate stays at $0.25 per 1,000, and a $0.001 run-start fee is added. There is no run-start fee before that date.

Billing

One charge applies today: $0.00025 per video actually delivered, and nothing else. There is no run-start fee until 19 August 2026, when a $0.001 fee per run begins. Diagnostics, duplicates, blocked look-ups and no-result runs never incur the per-result fee — a run that returns nothing is free today.

Because billing is per delivered video, resultsPerPage is also your budget control: resultsPerPage: 100 across 3 hashtags can cost at most 300 × $0.00025 = $0.075. Duplicate videos appearing under several of your hashtags are pushed once and billed once.

Limitations — the honest list

  • Public data only. Private accounts, friends-only posts and deleted videos are not reachable, and never will be by a keyless Actor.
  • Hashtag feeds are ranked, not exhaustive. TikTok decides which videos a tag page surfaces and in what order. You get up to 2,000 per hashtag, and that is a large sample of the tag — not a guarantee of every video ever posted under it.
  • Counts are point-in-time. playCount and friends are whatever TikTok reported at the moment of the run. For trend work, schedule repeated runs and store the snapshots.
  • Some fields can be null. region, downloadCount, music and parts of author are absent on some videos depending on what TikTok returns; the record is still emitted with the fields it does have.
  • Requests are paced. The Actor deliberately throttles itself to stay well inside upstream rate limits. Large pulls therefore take minutes, not seconds — a 2,000-video hashtag is roughly a few minutes of runtime. Raise the run timeout if you queue many big hashtags in one go.
  • Upstream hiccups are reported, not hidden. If a hashtag cannot be fetched you get an uncharged errorCode row (BLOCKED, RATE_LIMITED, NO_RESULTS) explaining which tag failed and why; the run still ends SUCCEEDED and other hashtags still deliver.
  • A misspelled hashtag returns nothing. There is no fuzzy matching — #catsoftikok is simply a different (empty) tag.
  • Provide at least one hashtag or /tag/ URL. With neither, there is nothing to scrape.

FAQ

Do I need a TikTok account? No. Public hashtag pages are pulled keyless, and sessionCookies is optional — supply one only if you want a rate limit that nobody else shares.

Do I need a proxy? No. This scraper needs no proxy at all — that's a key advantage. It works from any IP. The proxyConfiguration field exists only if you want to route traffic through your own network for policy reasons.

How many videos can I get per hashtag? Up to 2,000 per hashtag via resultsPerPage; the default is 50.

Do I write # or not? Either. A leading # is stripped for you, so cats and #cats are the same input.

Can I run several hashtags at once? Yes — pass an array. Each is scraped up to resultsPerPage, and videos that appear under more than one of them are de-duplicated so you are not billed twice.

Are the view counts real? Yes. TikTok shows flagged addresses a decoy page with placeholder numbers; this Actor does not read that page, so the counts it returns are the ones TikTok actually reports.

Can I download the videos? The record includes both a watermark-free (video.playAddr) and a watermarked (video.downloadAddr) MP4 URL. Fetch them yourself soon after the run — CDN links expire.

How do I get results into Notion? Connect Notion in Apify, then pass notionConnector (and optionally notionParentId). Every delivered row is written to your database automatically.

It returned an errorCode row — why? That's the Actor telling you exactly what happened (BLOCKED, RATE_LIMITED, NO_RESULTS) instead of failing silently. Those rows are free.

Is scraping this legal? The Actor reads only public information that TikTok serves to anyone, and no personal login is involved. You remain responsible for how you use the data — check your local rules on personal data before storing profiles at scale.