Platform guide
How to download TikTok videos with yt-dlp
TikTok is one of the easier platforms for yt-dlp: for a normal public video, the share URL works directly with no extra flags. The catches show up around the edges — region-blocked content, private accounts, and TikTok's photo-mode posts, which are not videos at all.
Quick answer
yt-dlp "https://www.tiktok.com/@user/video/1234567890"Paste the video URL as-is — the standard web URL from the share button works directly. Short vm.tiktok.com share links also resolve; yt-dlp follows the redirect.
Quality and formats
TikTok usually serves a handful of MP4 renditions, sometimes including a version without the burned-in watermark. What is available varies by video and region, so check before assuming:
yt-dlp -F "https://www.tiktok.com/@user/video/1234567890"The default selection picks the best available quality, so most people never need -f here. Use it only when the list shows a specific rendition you want.
Metadata is unusually rich
TikTok extraction returns solid metadata: uploader handle, the full description including hashtags, upload date, and engagement counts. That makes output templates like -o "%(uploader)s - %(title)s.%(ext)s" work well, and --write-info-json gives you the whole record if you are feeding a pipeline.
What commonly fails
- • Region-blocked videos. Some content is only served in certain countries. If a video plays for someone else but errors for you, geography is the first suspect.
- • Private accounts. If the account is private, the video is not reachable without an authenticated session that follows it — there is no flag that gets around this.
- • Photo-mode slideshows. These are image carousels with music, not videos, and yt-dlp support for them is unreliable — it changes between releases. If a slideshow fails, read the actual error and check the yt-dlp issue tracker rather than retrying with different flags.
The mistake to avoid
Do not loop over an entire profile at full speed from a single IP. TikTok rate-limits aggressively, and a burst of rapid requests turns working downloads into empty responses and blocks. If you are grabbing many videos, slow down with --sleep-requests and spread the work out.
Recurring sources
Pulling from the same sources on repeat?
Paste a link to preview what a maintained import API returns for it — across 500+ platforms.