TikTok Video Downloader
Pricing
from $2.39 / 1,000 tiktok videos
TikTok Video Downloader
Download TikTok videos as MP4 from post URLs or short links. Get permanent re-hosted download links in Apify storage, AWS S3, Google Cloud, DigitalOcean Spaces or Azure, plus title and cover.
Pricing
from $2.39 / 1,000 tiktok videos
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
2
Monthly active users
8 days ago
Last modified
Categories
Share
TikTok Video Downloader
TikTok Video Downloader saves public TikTok videos as MP4 files from post URLs or short links and gives you a permanent download link for each one.
| Paste tiktok.com/@user/video links or vt.tiktok.com, vm.tiktok.com and tiktok.com/t short links, and get each MP4 re-hosted to Apify storage, AWS S3, Google Cloud Storage, DigitalOcean Spaces or Azure Blob Storage, along with the caption, cover image, author, duration and file size. |
| ParseBird TikTok Suite • Trends, ads, LIVE, shop, stories, slideshows & videos | |||
|
TikTok Trends Scraper Trending hashtags, sounds, creators |
TikTok Ads Scraper Creative Center Top Ads |
TikTok Top Ads Scraper Top ads by likes tier & language |
TikTok Live Search Scraper LIVE rooms broadcasting now |
|
TikTok Shop Reviews Scraper Product reviews and ratings |
TikTok Story Viewer Active stories, no-watermark video |
TikTok Slideshow Downloader Photo-mode posts as image files |
TikTok Video Downloader You are here |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
Use Apify Actor parsebird/tiktok-video-downloader to download public TikTok videos as MP4 and get a permanent download link per video. Example with ApifyClient (Python): client.actor("parsebird/tiktok-video-downloader").call(run_input={"startUrls":["https://www.tiktok.com/@cznburak/video/7120985110991604993","https://vt.tiktok.com/ZSDHmaujt/"],"storageType":"apify"}). Inputs: startUrls array of strings, required (tiktok.com/@user/video/{id} or /photo/{id} URLs, vt.tiktok.com, vm.tiktok.com and tiktok.com/t/ short links, resolved automatically); region string, optional two-letter country code such as US or DE (fetches through an IP in that country so TikTok serves its CDN for that location); maxItems integer, optional (max videos downloaded and charged per run, empty = unlimited); storageType "apify"|"aws"|"gcp"|"digitalocean"|"azure", default "apify"; AWS: s3AccessKeyId, s3SecretAccessKey, s3Region, s3Bucket, s3Path (optional); Google Cloud: googleCloudProjectId, googleCloudServiceKeyJson, googleCloudBucketName, googleCloudPath (optional); DigitalOcean Spaces: digitalOceanAccessKeyId, digitalOceanSecretAccessKey, digitalOceanRegion, digitalOceanBucketName, digitalOceanEndpoint, digitalOceanAcl ("private"|"public-read"), digitalOceanPath (all three optional); Azure: azureAccountName, azureAccountKey, azureContainerName, azurePath (optional); customMapFunction string, optional JavaScript function (object) => {...} applied to each item; outputConnector string, optional Apify MCP connector ID (Notion, Todoist and others); deliverTarget string, optional; deliverMode "perPost"|"summary", default "perPost"; deliverMaxItems integer, optional. Output: one dataset row per startUrls entry with title, sourceUrl, downloadUrl, cover, storageType, status ("succeeded"|"failed"|"invalidUrl"|"unavailable"|"noVideoContent"|"timedOut"), jobId, error, postId, authorUsername, durationSeconds, width, height, fileSizeBytes, storageKey, downloadedAt, inputSource{queryIndex,url}. Pricing: pay per event "video-downloaded", charged only for succeeded downloads; duplicates and failures are free. API docs: https://docs.apify.com/api/client/python/ and https://docs.apify.com/api/client/js/. Token: https://console.apify.com/account/integrations.
What is TikTok Video Downloader?
TikTok Video Downloader is a bulk TikTok video downloader and TikTok API alternative. Give it a list of TikTok links, such as https://www.tiktok.com/@cznburak/video/7120985110991604993 or a share link like https://vt.tiktok.com/ZSDHmaujt/, and it downloads every video as an MP4 file and re-hosts it to your storage. You get a stable download link instead of TikTok's short-lived signed CDN URL, plus the video caption, cover image, author username, duration, resolution and file size.
Videos go to the run's Apify key-value store with zero setup, or straight into your own AWS S3, Google Cloud Storage, DigitalOcean Spaces or Azure Blob Storage bucket.
The easiest way to try it: open the Input tab, keep the two prefilled TikTok links, and click Start.
What can TikTok Video Downloader do?
- 🎬 Download TikTok videos as MP4. Each video is saved as an MP4 file named
tt-{postId}.mp4, and its exact size is reported infileSizeBytes. - 🔗 Resolve short links automatically.
vt.tiktok.com,vm.tiktok.comandtiktok.com/t/…links from the TikTok share menu are expanded to the underlying post. You don't need to open them yourself. - ☁️ Deliver to multiple clouds. Pick the Apify key-value store, or bring your own AWS S3, Google Cloud Storage, DigitalOcean Spaces or Azure Blob Storage.
- 📌 Get stable, re-hosted links. TikTok's own video URLs are signed and expire. The
downloadUrlpoints to your copy of the file instead. - 🌍 Target a regional CDN. Set an optional two-letter
regioncode and the video is fetched through an IP in that country, so TikTok serves it from its CDN for that location. - 🧩 Shape the output. Apply a
customMapFunctionin JavaScript to reshape each item before it's saved. - ♻️ Deduplicate automatically. If the same post appears twice in your input (for example, once as a full URL and once as a short link), it's downloaded and charged only once.
- 📤 Send results to Notion, Todoist and more. Deliver each video's status and download link through an Apify MCP connector.
- ⚙️ Use the Apify platform. Run it from the Apify API, set up schedules, connect integrations (Make, Zapier, n8n, Google Drive, Slack, webhooks), and export results as JSON, CSV, Excel, XML or HTML.
Supported TikTok sources
| TikTok source | How to target it | What you get |
|---|---|---|
| Video post | tiktok.com/@user/video/{id} in startUrls | The MP4 re-hosted to your storage, with title, cover and video details |
| Photo-mode post | tiktok.com/@user/photo/{id} in startUrls | Recognized as a valid post and reported as noVideoContent, because it holds a slideshow of images instead of a video. Never charged. |
| Short link | vt.tiktok.com/…, vm.tiktok.com/… or tiktok.com/t/… in startUrls | Resolved to the underlying post automatically |
To download the images of photo-mode posts, use TikTok Slideshow Downloader.
What data can you extract from TikTok?
| Field | Description |
|---|---|
title | The video caption, including hashtags |
downloadUrl | Permanent link to the MP4 in your chosen storage |
sourceUrl | Canonical TikTok URL of the post |
cover | Cover image URL of the video |
status | succeeded, failed, invalidUrl, unavailable, noVideoContent or timedOut |
error | Human-readable reason when the download did not succeed |
postId | Numeric TikTok post ID |
authorUsername | Username of the creator |
durationSeconds | Video length in seconds |
width / height | Video resolution in pixels |
fileSizeBytes | Exact size of the saved MP4 |
storageType / storageKey | Where the file was saved and its object key or path |
downloadedAt | When the file was saved (UTC) |
inputSource | The original input URL and its position (queryIndex) in startUrls |
How to download TikTok videos
- Open TikTok Video Downloader in Apify Console and sign in (or create a free Apify account).
- In TikTok video URLs, paste one link per line. Copy them from your browser's address bar or from TikTok's Share → Copy link button.
- Optional: set Max videos to cap how many videos the run downloads and charges for.
- Choose Storage. Keep Apify key-value store for zero setup, or pick your cloud and fill in its section (keys, region, bucket, optional path).
- Optional: enter a Region code such as
USorDE. - Click Start and wait for the run to finish. Short runs take a few seconds.
- Open the Output tab. Each row has a
downloadUrl. Click it to download the MP4, or export the whole table as JSON, CSV or Excel.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | array | Yes | — | TikTok post URLs or short links (vt.tiktok.com, vm.tiktok.com, tiktok.com/t/…), resolved automatically |
region | string | No | — | Two-letter country code (e.g. US, DE). Selects which TikTok CDN location the video is fetched from |
maxItems | integer | No | unlimited | Maximum number of videos to download and be charged for in this run |
storageType | string | No | apify | apify, aws, gcp, digitalocean or azure |
customMapFunction | string | No | — | JavaScript function applied to each output item, e.g. (object) => { return {...object} } |
outputConnector | string | No | — | MCP connector to deliver the results to (see below) |
deliverTarget | string | No | — | URL or ID of where the connector writes |
deliverMode | string | No | perPost | perPost (one record per video) or summary (one roll-up per run) |
deliverMaxItems | integer | No | — | Cap on how many records perPost delivers (ignored in summary) |
Storage configuration
| Storage | Fields |
|---|---|
| AWS S3 | s3AccessKeyId, s3SecretAccessKey, s3Region, s3Bucket, s3Path (optional) |
| Google Cloud Storage | googleCloudProjectId, googleCloudServiceKeyJson, googleCloudBucketName, googleCloudPath (optional) |
| DigitalOcean Spaces | digitalOceanAccessKeyId, digitalOceanSecretAccessKey, digitalOceanRegion, digitalOceanBucketName, digitalOceanEndpoint (optional), digitalOceanAcl (optional), digitalOceanPath (optional) |
| Azure Blob Storage | azureAccountName, azureAccountKey, azureContainerName, azurePath (optional) |
Keys and secrets are stored as secret input, encrypted and hidden in the run's input. The credentials only need permission to upload objects (for example, s3:PutObject on AWS or the Storage Object Creator role on Google Cloud). If uploads keep failing at the start of a run, the Actor stops early so it doesn't download videos it can't deliver, and it shows the storage error.
Input examples
Basic download
{"startUrls": ["https://www.tiktok.com/@cznburak/video/7120985110991604993","https://vt.tiktok.com/ZSDHmaujt/"],"storageType": "apify"}
With a region hint
{"startUrls": ["https://www.tiktok.com/@cznburak/video/7120985110991604993"],"region": "DE","storageType": "apify"}
Deliver to your own S3 bucket
{"startUrls": ["https://www.tiktok.com/@cznburak/video/7120985110991604993"],"storageType": "aws","s3AccessKeyId": "AKIAEXAMPLE","s3SecretAccessKey": "example-secret-key","s3Region": "us-east-1","s3Bucket": "my-tiktok-downloads","s3Path": "tiktok/videos"}
Capped run with output reshaping
{"startUrls": ["https://www.tiktok.com/@cznburak/video/7120985110991604993","https://vt.tiktok.com/ZSDHmaujt/"],"maxItems": 1,"customMapFunction": "(object) => { return { url: object.downloadUrl, status: object.status } }"}
Output example
Every dataset row corresponds to one entry in startUrls, and its shape is the same for every outcome. You can download the dataset as JSON, HTML, CSV or Excel.
Succeeded
{"title": "En Güzel Bağ Sevgidir🥺❤️","sourceUrl": "https://www.tiktok.com/@cznburak/video/7120985110991604993","downloadUrl": "https://api.apify.com/v2/key-value-stores/hlPBI1e5gqpafCOpH/records/tt-7120985110991604993.mp4?signature=5APgCqnzAGVSv6ipayiM","cover": "https://p16-common-sign.tiktokcdn-us.com/tos-alisg-p-0037/67aa7abe6dc74c97b9b0bc94176fbf28_1657983558~tplv-tiktokx-origin.image?dr=9636&x-expires=1791766800&...","storageType": "apify","status": "succeeded","jobId": "job_4698cf90","error": null,"postId": "7120985110991604993","authorUsername": "cznburak","durationSeconds": 30,"width": 576,"height": 1024,"fileSizeBytes": 6326163,"storageKey": "tt-7120985110991604993.mp4","downloadedAt": "2026-10-10T01:21:47Z","inputSource": {"queryIndex": 0,"url": "https://www.tiktok.com/@cznburak/video/7120985110991604993"}}
Photo-mode post (no video)
{"title": "¡Podemos tener más comunicación! 📣 ...","sourceUrl": "https://www.tiktok.com/@anamiriamyepez/photo/7498924643227536645","downloadUrl": null,"cover": "https://p16-common-sign.tiktokcdn.com/tos-maliva-i-photomode-us/4e11f114a249493eb708aa9977d014ca~tplv-photomode-image.jpeg?...","storageType": "apify","status": "noVideoContent","jobId": null,"error": "The post contains no video.","postId": "7498924643227536645","authorUsername": "anamiriamyepez","durationSeconds": null,"width": null,"height": null,"fileSizeBytes": null,"storageKey": null,"downloadedAt": null,"inputSource": {"queryIndex": 2,"url": "https://www.tiktok.com/@anamiriamyepez/photo/7498924643227536645"}}
Status values
status | Meaning | Charged |
|---|---|---|
succeeded | The MP4 was downloaded and saved; downloadUrl is set | Yes |
failed | The page or video could not be downloaded, or the upload to your storage failed; see error | No |
invalidUrl | Not a TikTok post URL, or a short link that is expired or invalid | No |
unavailable | The post does not exist, or it is private or deleted | No |
noVideoContent | A photo-mode post (slideshow) with no video | No |
timedOut | The run ran out of time before this video was downloaded | No |
Send results to Notion, Todoist and more (MCP connectors)
TikTok Video Downloader can deliver its results directly into the tools you already use, through Apify MCP connectors.
- Authorize a connector (Notion, Todoist, or any service whose MCP server offers non-destructive write tools) once in Apify Console → Settings → API & Integrations → MCP connectors.
- Pick it in the Send results to Notion, Todoist, … field.
- Fill in where and how to write:
- Destination target: paste the URL or ID. For Notion, use a page URL (for example
https://www.notion.so/My-Posts-24f8a1b2c3d44e5f8a9b0c1d2e3f4a5b) and share the page with your connector first via Notion's ••• → Connections menu. For Todoist, use a project URL or ID. Some services need none. - Write mode:
perPostwrites one record per video;summarywrites a single roll-up for the run. - Max records to deliver (optional): cap on how many records
perPostdelivers.
- Destination target: paste the URL or ID. For Notion, use a page URL (for example
Each video becomes one record with its status, source URL and download link. Failed downloads are delivered too, with their status and error, so the destination doubles as a download log.
Notion as a spreadsheet. When the target is a Notion page, the Actor creates a new database under it with one typed column per field (URL, number, date or text). Nested fields are flattened into their own columns, so inputSource becomes inputSource.url and inputSource.queryIndex. When the target is an existing database, the Actor fills the columns it already has (matched by name), and the rest of each record goes to the row's page body, so nothing is lost. The connector can't add columns to an existing database.
Your credentials stay yours. The Actor reaches your services only through your own authorized connector, and the connector field only accepts non-destructive tools. Delivery is best-effort and runs after the downloads: if a connector is misconfigured or a delivery fails, the run still finishes normally with all results intact, and the problem is reported in the run log. If the run is about to hit its timeout, delivery stops early, and the log shows how many records were delivered.
Links to Apify storage stay valid for as long as the run's storage is retained. Use your own cloud storage for permanent links.
Use TikTok Video Downloader with the API
Python (apify-client)
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("parsebird/tiktok-video-downloader").call(run_input={"startUrls": ["https://www.tiktok.com/@cznburak/video/7120985110991604993","https://vt.tiktok.com/ZSDHmaujt/",],"storageType": "apify",})for video in client.dataset(run["defaultDatasetId"]).iterate_items():print(video["status"], video["downloadUrl"])
JavaScript (apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('parsebird/tiktok-video-downloader').call({startUrls: ['https://www.tiktok.com/@cznburak/video/7120985110991604993'],storageType: 'apify',maxItems: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const video of items) {console.log(video.status, video.downloadUrl);}
Get your API token in Apify Console → Integrations.
Use cases
- Content archiving. Keep your own copy of your brand's or clients' TikTok videos in a bucket you control.
- Repurposing your own content. Pull MP4s of videos you own into editing tools or other platforms.
- Social media research. Collect videos with captions, authors and durations for trend analysis or media monitoring.
- Dataset building. Gather video files with resolution and size for computer vision or multimodal model evaluation.
- Automation pipelines. Combine with TikTok Trends Scraper to find trending videos, then download them here on a schedule.
How it works
- Each input is checked. Short links are expanded to the post they point to, and anything that isn't a TikTok post becomes an
invalidUrlrow. - The Actor loads the public post page and reads the post data TikTok embeds in it. No login or cookies from you are needed.
- Photo-mode posts are reported as
noVideoContent. For video posts, the Actor downloads the MP4 and checks that the file is complete. - The file is uploaded to the storage you chose, and a row with the
downloadUrlis saved to the dataset. - Optionally, the results are delivered through your MCP connector after all downloads finish.
Duplicate posts reuse the first result. If the run gets restarted on another server, it resumes where it left off without downloading or charging again.
How much does it cost to download TikTok videos?
TikTok Video Downloader uses pay-per-event pricing. Platform usage (compute, proxy and data transfer) is included in the event price.
| Event | When it is charged | Free | Bronze | Silver | Gold |
|---|---|---|---|---|---|
video-downloaded | One TikTok video downloaded and saved to your storage | $2.99 / 1,000 | $2.79 / 1,000 | $2.59 / 1,000 | $2.39 / 1,000 |
Examples (Free tier): 100 videos cost $0.299, and 1,000 videos cost $2.99.
Only succeeded rows are charged. Failed downloads, invalid URLs, unavailable posts, photo-mode posts, timed-out entries and duplicates are free. Use maxItems to cap the number of paid downloads. If you set a maximum cost per run, the Actor checks the budget before each download and stops when the next video would not fit. Storing files in your own cloud may incur charges from your cloud provider.
FAQ
What video quality does TikTok Video Downloader save?
It saves the H.264 MP4 that TikTok's web player streams for the post. The exact resolution depends on the upload and is reported in width and height. For example, the prefilled 30-second video is 576×1024 and about 6.3 MB.
How long do download links stay valid?
Links to Apify storage point to the run's default key-value store and follow your plan's data retention for unnamed storages. Links to your own S3, Google Cloud, Spaces or Azure bucket are permanent object URLs. Whether they open in a browser depends on the bucket's access settings (for Spaces you can set digitalOceanAcl to public-read).
Do I need a TikTok account or API key?
No. The Actor only reads public post pages and doesn't log in. Private, deleted and login-only posts are reported as unavailable.
What does the region option do?
It fetches the post through an IP address in the country you choose, so TikTok returns its CDN for that location. For example, in our tests DE returned tiktokcdn-eu.com addresses and US returned tiktokcdn-us.com addresses. Leave it empty unless you have a reason to pick a location.
Can I download a whole TikTok profile or hashtag?
Not directly. This Actor downloads videos you already have links for. Collect links first with a scraper such as TikTok Trends Scraper, then pass them to startUrls.
Why did a short link come back as invalidUrl?
Old or revoked share links redirect to TikTok's homepage instead of a post. Open the link in your browser to check. If it doesn't open a video, copy a fresh link from TikTok.
How does customMapFunction work?
It's a JavaScript function that receives each output item and returns the object to save, for example (object) => { return { url: object.downloadUrl, status: object.status } }. It runs in an isolated JavaScript engine. If it throws or doesn't return an object, the original item is saved and a warning is logged.
Can I schedule it or connect it to other tools? Yes. Use Apify schedules for recurring runs, and integrations or webhooks to send results to Google Drive, Slack, Make, Zapier, n8n or your own API.
I found a problem or need a feature. Open an issue in the Issues tab with the TikTok URL and what you expected.
Is it legal to download TikTok videos?
TikTok Video Downloader only reads publicly available TikTok posts. It does not log in, and it does not access private accounts or private user data. TikTok videos are still protected by their creators' copyright, so download and reuse content only when you own it, have permission, or your use is otherwise allowed by law. Your use must also follow TikTok's Terms of Service. If your results include personal data, you are responsible for handling it lawfully under regulations such as GDPR. When in doubt, consult a lawyer. Read more in Apify's guide: Is web scraping legal?
Other TikTok tools
| Actor | What it does |
|---|---|
| TikTok Slideshow Downloader | Download every image from TikTok photo-mode posts |
| TikTok Story Viewer | View and download active public TikTok stories by username |
| TikTok Trends Scraper | Scrape trending TikTok hashtags, videos, sounds and creators by country |
| TikTok Live Search Scraper | Search TikTok LIVE rooms by keyword |
| TikTok Shop Reviews Scraper | Scrape TikTok Shop product reviews by link or product ID |
| TikTok Ads Scraper | Scrape TikTok Top Ads from Creative Center |
Other video downloaders
| Actor | What it does |
|---|---|
| Twitter (X) Video Downloader | Download videos, GIFs and photos from X posts |
| Facebook Media Downloader | Download videos, reels and photos from public Facebook links |
| Pinterest Video Downloader | Download MP4 videos and images from Pinterest pins |
| YouTube Shorts Downloader | Get direct media download links for YouTube Shorts |