TikTok-Api: a Playwright-backed scraper wrapper with an honest scope
The Unofficial TikTok API Wrapper In Python
At a glance
- What is it?
- The most star-repository Python wrapper for TikTok scraping is refreshingly explicit about what it cannot do, and it needs a real browser plus a working proxy to do what it can.
- Who is it for?
- TikTok-Api does one narrow job well: reading the parts of TikTok that a logged-out visitor can see, through a real browser, with a documented API for users, videos, hashtags, sounds, comments and trending lists. The README is unusually candid about the ceiling.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 44 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The README states its own limits in the second paragraph
Most scraper wrappers oversell. This one opens with a scope statement that is worth quoting in full because it decides whether the project is right for you: it is designed to retrieve data from TikTok, it cannot be used to post or upload content on behalf of a user, and it has no support for any user-authenticated routes. The rule that follows is the useful one: if you cannot access it while logged out on the website, you cannot access it here.
That single constraint explains the whole shape of the API. There are methods for fetching user details, videos, comments, hashtags, sounds, playlists and trending lists, and there is nothing for publishing. The repository topics match: tiktok-trending-page, tiktok-downloader, tiktok-compilations, tiktok-signature, tiktok-automation. It is a read-only extraction layer with a signature generation component for the endpoints that need one.
The project is davidteather/TikTok-Api with 6644 stars, 1214 forks and 151 open issues, MIT licensed, on the `main` branch, last pushed on 2026-08-24. The open issue count is high relative to the star count, and the README explains why in a sentence worth taking seriously: TikTok changes things up, so the codebase runs into similar issues as it has before.
Installation pulls Playwright and a browser with it
Installation is two commands, and the second one is the reason this package is heavier than a typical HTTP client wrapper:
pip install TikTokApi
python -m playwright installThat browser download is not optional. The library depends on `playwright>=1.36.0,<2.0` to drive a real Chromium instance, which is how it gets past the endpoints that a plain HTTP request cannot reach. The full dependency set from setup.py is short and tells the story: `requests>=2.31.0,<3.0`, `httpx>=0.27.0,<1.0`, and `proxyproviders>=0.2.1,<0.3.0` alongside Playwright. The project supports Python 3.9 through 3.13, with 3.9 as the floor.
Docker is supported and the README is straightforward about it, including the note that the Dockerfile installs TikTokApi from pip rather than from the cloned source:
docker pull mcr.microsoft.com/playwright:focal
docker build . -t tiktokapi:latest
docker run -v TikTokApi --rm tiktokapi:latest python3 your_script.pyThe base image is Microsoft's Playwright build for focal, so the browser comes from the image rather than from a separate download step. The command assumes your script is named `your_script.py` and lives at the root of the directory, which the README states explicitly.
EmptyResponseException means TikTok thinks you are a bot
The README has a section titled Common Issues and leads with a single exception: EmptyResponseException, which it explains means TikTok is blocking the request and detecting you as a bot. It notes this can be a problem with your setup or with the library itself, and then gives the practical fix, which is a proxy.
This is the central operational fact about scraping TikTok from a datacenter. The library ships a companion package called ProxyProviders specifically so you can swap providers with a single line through `create_sessions(proxy_provider=...)`, and there is an example file for it. The README also links to a written lesson on the difference between proxy tiers, which is the thing most people get wrong: datacenter proxies are cheap and often already on TikTok's block list, while residential proxies work and cost more.
It is worth reading that recommendation with the surrounding context rather than as an endorsement. The README's sponsor block sits above the content and includes paid placements and affiliate links for proxy vendors and for competing paid TikTok data APIs, and the author says so explicitly. The package itself is free and open source. The advice about residential proxies is correct and the incentive behind it is disclosed, which is about as good as this gets in the scraping library space.
A Script object and a set of keyword methods
The API surface follows a consistent shape: create a `TikTok` object from a session, then call keyword methods on it. The examples directory in the repository makes the coverage concrete, with separate files for comments, hashtags, playlists, proxy providers, search, sounds, trending, users, videos and video keyword search.
That file list is the best documentation of what actually works, more useful than the summary on the homepage. `trending_example.py` and `hashtag_example.py` cover the discovery surface, `video_example.py` and `comment_example.py` cover the detail surface, and `search_example.py` covers full text search over video descriptions. The project also publishes documentation at davidteather.github.io/TikTok-Api, which is where the reference for each method's keyword arguments lives.
One detail from the repository structure is worth flagging: `tests/` and a `Dockerfile` at the root, plus a `.devcontainer/` for editor setup and a `.sphinx/` directory, which is how the docs site is built. The presence of a real test suite matters more here than usual, because against a target that changes without notice, a library can only tell you it broke once something regresses.
Version 7.3.3 and a release history that is mostly sponsorship
The current version in setup.py is 7.3.3, and the published releases tell you something about the project's rhythm. The three most recent tags are v7.3.3, described as a new sponsor addition to the README, v7.3.2, described as a sponsor README bump, and V7.3.1, described as re-adding a sponsor, with an empty body.
That is worth naming without spin. Some of the recent release activity is promotional rather than functional, so the tag history is not a reliable signal of development pace. The `CITATION.cff` file and the Zenodo DOI badge at the top of the README suggest this is treated as research-adjacent software, which is an interesting contrast with the commercial scraping market around it.
For a user, the practical reading is simple. Pin to a version you have verified, read the release notes for actual code changes rather than assuming each tag is a feature drop, and treat the last push date of 2026-08-24 as the more useful signal of activity. The 151 open issues are the other useful signal, and the README's advice to check closed issues first for known problems is exactly right for this kind of project.
Where this fits against the official API and paid alternatives
The comparison the project itself invites is against paid data APIs, and its own sponsor block names several of them. That comparison favours the paid services on reliability and disfavours this library on cost. What the free library wins on is control: you run the browser, you hold the data, and you decide how much request volume to generate.
Against the official TikTok API, this library is not really a competitor. The official API is authenticated and supports content publishing and user-authorized operations. TikTok-Api deliberately does none of that. Choosing between them is usually easy once you decide whether you need to write to TikTok or only read it, and if you only need to read public content at low volume, this library avoids the approval process entirely.
There is a third option worth naming: doing nothing and downloading a dataset. For trend analysis, historical research or influencer measurement, a purchased dataset from a vendor is often cheaper than maintaining browser infrastructure and proxy budgets. The README's own description of the project as free and open source, with sponsors covering the work, is the strongest argument for the library, and its dependence on Playwright plus residential proxies is the strongest argument against running it at scale.
Editorial conclusion
TikTok-Api does one narrow job well: reading the parts of TikTok that a logged-out visitor can see, through a real browser, with a documented API for users, videos, hashtags, sounds, comments and trending lists. The README is unusually candid about the ceiling. There is no posting, no upload, and no user-authenticated route, so if you need account-level actions this is the wrong tool and the official API is the only road. The parts worth understanding before you commit are the dependency on Playwright and the proxy question, because TikTok blocks datacenter IPs aggressively and an EmptyResponseException usually means exactly that. Start by running the user example, and if it fails on the first request, get a residential proxy working before debugging anything else.
Frequently asked questions
Can TikTok-Api post videos or work with logged in accounts?
No, and the README states this directly. The library is designed to retrieve data only, cannot post or upload content on a user's behalf, and has no support for any user-authenticated routes. The rule it gives is that if you cannot reach it while logged out on the TikTok website, you cannot reach it through this wrapper. For publishing or account-level actions, the official API is the only path.
Why do I get an EmptyResponseException from TikTok-Api?
The README explains that EmptyResponseException means TikTok is blocking the request and detecting you as a bot, which can be a setup problem or a library problem. The practical fix is a proxy, and specifically a residential one rather than a cheap datacenter IP, since datacenter ranges are frequently already blocked. The library bundles a ProxyProviders integration so you can switch providers through a single `create_sessions` argument.
Does TikTok-Api need Playwright installed?
Yes. Installation is `pip install TikTokApi` followed by `python -m playwright install`, and the second step downloads the browser Playwright drives. Playwright is a hard dependency in setup.py, pinned to `>=1.36.0,<2.0`, because the wrapper needs a real Chromium instance rather than a plain HTTP request to reach most TikTok endpoints. The Dockerfile handles this by basing on the Microsoft Playwright image for focal.
Which Python versions does TikTok-Api support?
Python 3.9 and later. setup.py sets `python_requires` to `>=3.9` and the classifiers list 3.9 through 3.13, and the README repeats that installation requires python3.9 or newer. The package requires a browser and a working proxy before any of it is useful, so the interpreter version is rarely the limiting factor.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/davidteather-tiktok-api)