A TikTok scraper is software that requests TikTok's own web and app endpoints, signs those requests the way the app does, and turns the JSON that comes back into rows you can use. It is not magic and it is not stable. TikTok signs its requests, rate-limits them, challenges them and bans accounts that trip the checks, so every scraper is in a maintenance race it is currently losing or currently winning.
That is worth saying up front because most of the work in a TikTok scraper is not the scraping. It is the signature layer, the proxy pool and the parser you rewrite when a field is renamed. Whether you should run one depends entirely on what you are collecting, and for a lot of jobs the answer is no.
What a TikTok scraper actually does
Every option on this page, hosted or free, does the same four things.
- Builds a signed request. TikTok's endpoints require signature parameters generated from the request and a device fingerprint. Getting these right is the hard part and the reason abandoned projects stop working.
- Routes it through an exit. Data-center IPs get challenged fast, so serious scrapers use residential proxies and rotate them.
- Parses an undocumented response. These are private endpoints. Field names change without notice.
- Handles the block. An empty 200, a captcha, or a slow throttle, each needing different backoff.
Tools differ mainly in which of those four you pay someone else to do.
The tools, compared
| Tool | What it is | Cost |
|---|---|---|
| Apify, clockworks/tiktok-scraper | Hosted actor. Feed it hashtags, profiles, search queries or video URLs; get profiles, views, likes, shares, descriptions, subtitles, music and comments. 288,428 total users, 98.3% reported success rate | From $1.70 per 1,000 results |
| Bright Data | 13+ hosted TikTok scrapers, including dedicated Comments, Posts, Profiles, Followers and Shop datasets, search-based or URL-based | $1.50 per 1,000 records pay-as-you-go, $1.30 on Scale. 5,000 free credits a month |
| ScraperAPI | The unblocking layer rather than TikTok endpoints: proxy rotation, anti-bot handling, captcha solving. You still write the parser | Per successful request |
| davidteather/TikTok-Api (GitHub) | The live Python option. 6.6k stars, MIT, last commit August 2026. Reads trending, user, hashtag and search data. Needs Python 3.9+, playwright install, an ms_token cookie from your browser, and residential proxies to stay unblocked | Free, plus your proxy bill and your time |
| drawrowfly/tiktok-scraper (GitHub) | The one most tutorials still link to. 5.2k stars, 86 open issues, and no commit since May 2023. Not formally archived, but treat it as reference code rather than a working tool | Free |
| Browser extensions (T-FYP Scraper and similar) | Export videos, comments and profiles from pages you have open, including search results and the For You page. No infrastructure, no scale | Free or cheap |
If you are searching for "tiktok scraper python" and hoping for a pip install that just works, the honest version is that the library is free and the proxies are not. Budget for both.
What breaks them
- Signatures. When TikTok changes how requests are signed, every scraper that generates them breaks at once. Maintained projects ship a fix in days. Unmaintained ones never do, which is what happened to a lot of the GitHub code still ranking for this query.
- Captchas and empty responses. TikTok's block signal is often a 200 with nothing in it rather than an error. Code that assumes an empty list means "no results" will quietly report that a topic has no videos.
- Rate limits. Aggressive paging from one exit gets throttled, then challenged, then blocked. This is why hosted actors charge per record: you are buying the proxy pool.
- Account bans. Anything that scrapes from a logged-in session puts that account at risk. Never point a scraper at an account you care about.
- Silent shape changes. A renamed field does not raise an error. It produces a column of nulls that nobody notices until someone builds a chart on it.
Terms and the legal bit
TikTok's Terms of Service prohibit using robots, spiders, crawlers, scrapers or other automated means not provided by TikTok to access the service or extract data without written permission. That is a contract term, and breaching it can cost you accounts and API access. It is separate from whether scraping is lawful where you are, which varies by country and by what you collect.
Two practical points. Comments and profiles are personal data about real people in most jurisdictions, so storing and republishing them carries obligations that have nothing to do with TikTok. And public availability is not permission: academic guidance is blunt that the terms ban automated scraping even though the pages are public. None of this is legal advice. If the project is commercial or the dataset is large, ask a lawyer before you ask an engineer.
When scraping is the right tool
It genuinely is, sometimes.
- You need the video files or covers themselves, not metadata.
- You need a field nobody exposes through an API, like subtitle text or a specific Shop attribute.
- You are collecting at a volume where per-record pricing stops making sense and running your own pool is cheaper.
- It is a one-off. Scrape it, use it, throw the code away, and do not pretend it is infrastructure.
It is the wrong tool when you want an answer rather than a dataset. "What are people searching for in my niche" is not a scraping problem, and you will spend three weeks on proxies to find out that the number you wanted was never on a page.
The routes that need no scraper
Two of them.
Official APIs. If you are an academic, the Research API gives you keyword video search and comments, free, with a documented schema and 1,000 requests a day. If you are building a product, Login Kit, Display, Content Posting, the Business APIs and TikTok Shop each cover their own job. Our map of every TikTok API says which one does what, and the Research API guide covers the application.
An MCP server. This is the option that did not exist two years ago. TokConnect runs the signature and proxy layer and exposes TikTok as tools an agent or a script can call: video, creator, hashtag and sound search, autocomplete, video detail, comments and replies, plus Creator Search Insights topics with their 7-day search volumes and content-gap flags. The endpoint is https://mcp.tokconnect.com/mcp over Streamable HTTP with Authorization: Bearer YOUR_TOKCONNECT_KEY, keys are free at app.tokconnect.com, and the free tier is 100 credits at one credit per call.
Here is the no-scraper version of "search TikTok and print the results", with pip install mcp:
import asyncio, json, os
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
URL, AUTH = "https://mcp.tokconnect.com/mcp", {
"Authorization": f"Bearer {os.environ['TOKCONNECT_KEY']}"}
async def search(keyword, count=20):
async with streamablehttp_client(URL, headers=AUTH) as (r, w, _):
async with ClientSession(r, w) as s:
await s.initialize()
res = await s.call_tool("search_videos", {
"keyword": keyword, "count": count, "sort": "most_liked"})
return json.loads(res.content[0].text)["videos"]
for v in asyncio.run(search("mechanical keyboard")):
print(f'{v["playCount"]:>10,} views @{v["authorUniqueId"]:<20} '
f'{v["desc"][:55]}')
The example above uses the Python SDK's 1.x line. In mcp 2.0 and later, which is what pip install mcp gives you today, the helper is streamable_http_client, the headers move onto an httpx2.AsyncClient passed as http_client, and the context manager yields two streams:
import httpx2
from mcp.client.streamable_http import streamable_http_client
async with streamable_http_client(URL, http_client=httpx2.AsyncClient(headers={"Authorization": f"Bearer {KEY}"})) as (read, write):
async with ClientSession(read, write) as session:
...Both forms return the same 26 tools. We ran both against the server on 19 September 2026.
No Playwright, no ms_token, no proxy list. A real two-page run of that search is saved as a snapshot, and the search API guide explains the paging.
What it does not do, so you can rule it out quickly: it does not post or upload, it does not download video files, it does not transcribe audio, it does not touch private accounts or anything behind a login, and it is not affiliated with TikTok. If any of those is your requirement, you are back to a scraper or to the Content Posting API, and the tradeoffs above are the ones to weigh.
Search TikTok for the top 20 videos on a keyword I give you, sorted by likes. For the three with the most comments, pull 50 comments each and summarise what people are asking for. Give me a table of the videos with handle, views, likes and comment count.
Frequently asked questions
What is the best TikTok scraper?
It depends what you are collecting. For profiles, hashtags and video metadata at volume, the Apify Clockworks actor is the most used option at about $1.70 per 1,000 results, with Bright Data cheaper per record at $1.50 and a 5,000-credit monthly free tier. For comments specifically, Apify's comments actor at $0.005 per result is purpose-built. For a Python project you control, davidteather/TikTok-Api is the live library, but budget time for proxies and breakage. If what you want is search demand or trend data rather than page content, none of them is the right tool.
Is there a free tool that can scrape TikTok comments?
There are free-ish ones. Browser extensions such as T-FYP Scraper export comments from pages you have open, which works for a handful of videos and does not scale. Apify includes $5 of free monthly credits, which is about 1,000 comments from the comments actor. davidteather/TikTok-Api is free and open source and can read comments, but you maintain it. TokConnect's free tier is 100 credits, and one comments call is one credit. See exporting TikTok comments for the full comparison.
How to scrape comments from TikTok?
Pick the route that matches your volume. One video: open it, expand the comments and use a browser extension. A few hundred videos: run an Apify actor with a list of URLs and download the CSV. Ongoing, inside a script or an agent: call an API that returns comments as JSON with a cursor, so you page through rather than parse HTML. The comments API guide has the endpoints and a Python example.