TikTok Video Downloader - MP4 or MP3 avatar

TikTok Video Downloader - MP4 or MP3

Pricing

from $0.97 / 1,000 megabytes

Go to Apify Store
TikTok Video Downloader - MP4 or MP3

TikTok Video Downloader - MP4 or MP3

Download public TikTok videos as MP4, or just their sound as MP3, from video links. No login, no cookies. Each file is stored in the run with a direct link, and its row holds the file's size, length and resolution. A link that fails is not charged. $1.00 per 1,000 MB delivered ($0.001 per MB).

Pricing

from $0.97 / 1,000 megabytes

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Download public TikTok videos as MP4 files, or their sound as MP3: paste video links and get each one back as a real file, stored in the run with a direct link you can hand to a browser, a script or the next step of a workflow.

The honest part first. This pulls the copy TikTok serves for playback, so most videos arrive without a logo, but an uploader who burned the TikTok watermark into their own video is stuck with it and nothing here can take it out. Photo posts, slideshows, profiles, sounds, hashtags and live streams are not videos this can download, and some posts TikTok only serves in certain countries.

InputLinks to single public TikTok videos
OutputOne MP4, or a 128 kbit/s MP3, per link in the run's storage, plus a row per file with its direct link, size, length and resolution
Ceiling500 MB per video by default, up to 4,000, and about 716 MB of files per run at the default memory
SpeedRoughly 2 to 8 seconds per short video on measured runs, plus the run's start
Account neededNone, and no cookies
Price$1.00 per 1,000 MB delivered, which is $0.001 a megabyte, flat on every plan. The free plan's $5 a month covers about 5,000 MB

๐Ÿ” What TikTok Video Downloader does

One link in, one file out. It reads what TikTok offers for that post, picks the best copy at or below the quality you asked for, downloads it, checks the file actually plays as video or audio, stores it, and writes a row with a link to it.

Picture quality is measured on the short side, so 1080 means 1920x1080 for a landscape video and 1080x1920 for a vertical one. A video TikTok does not have at that size comes back at the closest it does have.

Links to Facebook, X or YouTube are not refused blindly: the run tells you which of our downloaders takes them. Duplicate links to the same post are skipped rather than downloaded twice.

๐Ÿ“‹ What data you get from each TikTok download

What you getField
The link you gave, and the siteurl, host
The caption, used as the titletitle
The creator's handleauthor
Length and picture size, measured on the finished filedurationSeconds, resolution
File type and sizeformat, fileSizeBytes
What the file counted as for billingbilledMegabytes
Where the file is: its record name and a direct linkmediaKey, mediaUrl
Every link that did not produce a file, with the reasonERRORS record in the key-value store

โ–ถ๏ธ How to download TikTok videos

  1. Open TikTok Video Downloader and click Try for free.
  2. Paste your links into TikTok video links, one per line, replacing the example.
  3. Pick a Max quality, or tick Audio only (MP3) if you only want the sound.
  4. Leave Max megabytes per video alone unless you want a tighter cap, then click Start.
  5. Take the files from Storage, or follow mediaUrl from each row.

๐Ÿ’ฐ How much does it cost to download TikTok videos?

$0.001 for every megabyte delivered. Flat on every Apify plan, no volume tiers. On the free plan, the $5 Apify gives you each month covers about 5,000 MB.

A file counts as whole megabytes, rounded up, and each row tells you its own figure in billedMegabytes. So a 5.1 MB video counts as 6.

Nothing is charged per megabyte for a link that fails, a video refused for being over your limit, a post that is not a video, or a link that belongs on another actor. Those never move any bytes.

Quality is the lever. A 360p copy of the same post is a fraction of the megabytes of the 1080p one, and audioOnly is smaller again.

๐Ÿ“ฅ What you give it

{
"urls": [
"https://www.tiktok.com/@hankgreen1/video/7047596209028074758"
],
"quality": "1080",
"audioOnly": false,
"maxMegabytes": 500
}
FieldDefaultWhat it is
urlsnone (the box holds one example link)One link per line, each to a single TikTok video. vm. and vt. short links, m. links and embed links are understood. Required.
quality1080best, 1080, 720, 480 or 360, measured on the short side. A bigger picture is a bigger file, and you pay by the megabyte.
audioOnlyfalseSave the sound as a 128 kbit/s MP3 instead of the video.
maxMegabytes500A video bigger than this is skipped before anything is downloaded, and it costs you nothing. One run holds roughly 70% of its memory in files, so raise the run's memory for anything large.

๐Ÿ“ค What you get back

A real row from a recent run, with the signed link trimmed:

{
"url": "https://www.tiktok.com/@hankgreen1/video/7047596209028074758",
"host": "tiktok",
"title": "TikTok video #7047596209028074758",
"author": "hankgreen1",
"durationSeconds": 21.27,
"resolution": "576x1024",
"format": "mp4",
"fileSizeBytes": 5076682,
"billedMegabytes": 6,
"mediaKey": "tiktok-7047596209028074758.mp4",
"mediaUrl": "https://api.apify.com/v2/key-value-stores/83C4HbXaY1Dk88AHA/records/tiktok-7047596209028074758.mp4?signature=..."
}
FieldHow to read it
mediaUrlThe direct link to the file. It works without a token, so you can pass it straight to whatever comes next.
mediaKeyThe name of the record in the run's key-value store, tiktok-<id>.mp4 or .mp3.
fileSizeBytesThe size of the file that was actually stored, checked against the stored copy after upload.
durationSeconds, resolutionMeasured on the finished file, not taken from the page.
titleThe caption. A post with no caption gets TikTok video #<id>, as above.

๐Ÿงพ Reading the output

Two places to look, and they never mix.

WhereWhat is in itBilled
The datasetOne row per file that was delivered and checkedyes, by the megabyte
ERRORS in the key-value storeA list of {url, error} for every link that did not produce a file, written as each one happensno

A link that fails never reaches the dataset, so a row in the dataset means a file exists. The error text says what happened in plain words: the post is not a video, the post is only served in some countries, the file is over your limit, the link belongs on another actor.

If not a single link produced a file, the run finishes as failed rather than pretending it worked.

๐Ÿ’ก What people use it for

  • Keeping your own posts as files, instead of trusting an app's download button.
  • Feeding clips into an editing or captioning step that needs a real file rather than a page.
  • Pulling the sound out of a set of posts as MP3s, for transcription or a music check.
  • Archiving a reference set of videos for a report, a pitch or a legal record.

From a video with no captions to a transcript, in three runs:

  1. Run TikTok Transcript Scraper on your links and copy the url of every row whose errorCode is NO_TRANSCRIPT.
  2. Paste those links here with Audio only (MP3) ticked.
  3. Give each row's mediaUrl to Video & Audio Transcriber in its mediaUrls box, with your own OpenAI key.

๐Ÿšง What it does not do

  • It cannot remove a watermark that is part of the video. The playback copy is what gets downloaded, so a logo the uploader baked in stays.
  • Photo posts and slideshows are not downloaded. Neither are profiles, sound pages, hashtag pages or live streams. Each gets a line in ERRORS saying so.
  • Country-limited posts fail. If TikTok only serves a post in some places, the run reports that rather than guessing.
  • Private and deleted posts are out of reach, the same as they are in a browser.
  • One link is one video. Give it a profile and it will not walk that account's posts.
  • The file is the file. No trimming, resizing or re-encoding happens here.
  • Short links are accepted but less tested than full tiktok.com/@name/video/<id> links, so prefer the full form where you have it.
  • Files live in the run's storage and go when the run's data is cleaned up. Copy anything you want to keep.

๐Ÿงญ Which downloader do you need?

If you wantUse
A public TikTok video as MP4, or its sound as MP3This one
A YouTube video, its audio or its subtitles as a fileYouTube Downloader Pro
A public Facebook video or reelFacebook Video Downloader
The spoken words rather than the fileTikTok Transcript Scraper
Video links to feed in, from a hashtagTikTok Hashtag Scraper
Video links to feed in, from a profile or a keyword searchTikTok Scraper
To post a video to your own TikTok accountTikTok Video Uploader Pro

โ“ Questions people ask

Do I need a TikTok account or cookies to download videos?

No. Public posts only, and nothing is logged in.

Will the TikTok video have a watermark?

Usually not, because the playback copy is what is fetched. If the uploader burned one into the video itself, it is in the file and it stays.

Can I download a whole TikTok profile?

Not here. This takes one video link at a time. Collect the links first with one of the scrapers in the table above, then feed them in.

It lands in ERRORS with the reason and costs you nothing per megabyte. The rest of the links carry on.

Can I get just the audio?

Yes. Tick audioOnly and each link comes back as a 128 kbit/s MP3 of that video's own sound.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/tiktok-video-downloader. Either way the run happens on your Apify account at the same price.

Copyright sits with whoever made the video, and TikTok's terms apply to you as a user. Downloading your own posts or material you have rights to is the safe ground. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

๐Ÿ†˜ If something breaks

Open the Issues tab on the actor page. Send the link that failed and the run ID, and paste the line for it from the ERRORS record. That line usually names the problem on its own.