The free way to download every video from a TikTok profile is yt-dlp: point it at the profile URL, hand it your browser cookies, and let it pull the whole grid. Paste a profile below, pick whether you want the videos or just the audio, and copy the command:
Paste a TikTok URL, choose what to grab, and copy the command. It updates as you change the options.
Resolution is a maximum, not a guarantee. yt-dlp grabs the best quality at or below your pick, capped by what was actually uploaded. Choose 8K on a 720p video and you get 720p, not an error and not an upscale.
yt-dlp --merge-output-format mp4 "https://www.tiktok.com/@scout2015"The short version is three lines:
# All videos from a profile (cookies needed for the full listing)
yt-dlp --cookies-from-browser firefox "https://www.tiktok.com/@username"The rest of this page is the detail behind that command: why cookies are effectively required, how to make the pull resumable so you can re-run it as a backup, how to organize the filenames, and how to avoid getting rate-limited on a profile with thousands of clips.
This downloads someone's entire body of work, so respect it. Saving your own account, content you have rights to, or material the creator has licensed for reuse is fine; bulk-downloading and redistributing another creator's videos is not, and mass scraping can violate TikTok's Terms of Service. The natural, legitimate use here is backing up your own TikTok (before you delete the app, or just to keep an offline copy). What you do with the files is on you.
Point yt-dlp at the profile URL
A TikTok profile lives at https://www.tiktok.com/@username. Hand that URL to yt-dlp and it treats the profile as a playlist, enumerating every video the account has posted and downloading each one:
yt-dlp --cookies-from-browser firefox "https://www.tiktok.com/@username"There is no separate "download profile" flag. The profile URL is the instruction; yt-dlp's TikTok extractor walks the listing and queues each video. The @ is part of the URL, so keep it.
Cookies are effectively required
This is the part that trips people up. A single TikTok video will often download with no cookies at all, but a full profile pull almost always needs them. TikTok gates the profile listing behind its anti-bot layer, and without a logged-in session yt-dlp frequently gets an empty or truncated list (a handful of videos, or zero). Passing cookies makes the request look like your real browser session and unlocks the complete grid:
yt-dlp --cookies-from-browser firefox "https://www.tiktok.com/@username"Use Firefox, not Chrome. Since Chrome 127 (around July 2024), Chrome encrypts its cookie store with app-bound encryption: the decryption key is tied to the Chrome binary, so no external tool (yt-dlp included) can read Chrome cookies anymore, and closing Chrome first does not help because this is a design of the encryption, not a file lock. Firefox stores cookies in a plain SQLite database with no such binding, so --cookies-from-browser firefox is the source that reliably works in 2026. Log into TikTok in Firefox once, then run the command. If you prefer to keep cookies separate from your daily browser, export them to a file with a cookies.txt extension and pass --cookies cookies.txt instead.
Make it resumable with a download archive
If you are backing up a profile, you do not want to re-download everything every time you run the command. The --download-archive flag records the ID of every video it successfully grabs into a text file, then skips anything already in that file on the next run. Point a cron job or a manual re-run at the same archive and you only ever pull new videos:
# Organized, resumable backup: skip anything already grabbed
yt-dlp --cookies-from-browser firefox \
--download-archive tiktok-archive.txt \
-o "%(uploader)s/%(upload_date)s - %(id)s.%(ext)s" \
"https://www.tiktok.com/@username"That is the command I actually use for ongoing backups. The first run downloads the whole profile; every run after that finishes in seconds unless the account has posted something new. Keep tiktok-archive.txt alongside your video folder and it becomes a durable, incremental mirror of the account.
Organize the filenames
By default yt-dlp bakes the video ID into the filename, which is unreadable at scale. An output template (-o) builds a folder structure instead:
yt-dlp --cookies-from-browser firefox \
-o "%(uploader)s/%(upload_date)s - %(id)s.%(ext)s" \
"https://www.tiktok.com/@username"That puts every clip under a folder named for the account, with files sorted by upload date. The fields in the %(...)s placeholders are output-template variables; there are dozens of them (%(title)s, %(id)s, %(duration)s). Keeping the video ID in the name is deliberate here: it is what --download-archive matches on, and TikTok titles are often empty or duplicated, so the ID is the only reliably unique part.
Be polite so you do not get blocked
A profile with thousands of videos is a lot of requests in a short window, and that is exactly the pattern TikTok's rate limiter watches for. Throttle the bandwidth and add a pause between requests so the run looks less like a scraper:
# Be polite to avoid blocks on a big profile
yt-dlp --cookies-from-browser firefox -r 2M --sleep-requests 2 "https://www.tiktok.com/@username"-r 2M caps the download rate at 2 MB/s; --sleep-requests 2 waits two seconds between metadata requests. For a very large account, raise the sleep further. If a run does get blocked partway through, the download archive means you can wait, re-run, and pick up exactly where it stopped without re-fetching anything.
Keep yt-dlp current (TikTok breaks things often)
TikTok changes its site and its anti-bot defenses more aggressively than almost any other platform yt-dlp supports, so the extractor breaks more often here than for, say, YouTube. When a profile pull suddenly returns nothing or errors out, update before you debug anything else: yt-dlp -U (standalone binary), pipx upgrade yt-dlp, or brew upgrade yt-dlp. A stale yt-dlp against the current TikTok is the single most common reason these commands stop working. For the install commands and a complete flag reference, the yt-dlp cheat sheet covers it.
If you only need a single clip rather than the whole account, downloading a single TikTok video is the simpler case (often no cookies needed at all). The same bulk pattern here also applies to other platforms; see download a YouTube playlist or channel for the equivalent archive-and-template workflow on YouTube.
FAQ
See also
- Download a single TikTok video: the one-clip case, often with no cookies required.
- Download a YouTube playlist or channel: the same archive-and-template bulk workflow, for YouTube.
- Download a YouTube video: the single-video walkthrough, quality selection, and the bot check.
- yt-dlp cheat sheet: every flag worth knowing, in one reference.
Sources
Authoritative references this article was fact-checked against.
- yt-dlp README (official)github.com
- yt-dlp FAQ: passing cookies (official wiki)github.com
- Google Security Blog: app-bound encryption for Chrome cookies (Chrome 127)security.googleblog.com





