# TikTok Video Downloader — No Watermark MP4 + Metadata (`hipersoft/tiktok-downloader`) Actor

Download TikTok videos without watermark in bulk. Paste video or photo-slideshow URLs and get a clean HD MP4 download link plus full metadata: caption, author, play/like/comment/share counts, sound and cover — one row per post as JSON, CSV or Excel. For creators, research and n8n.

- **URL**: https://apify.com/hipersoft/tiktok-downloader.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** Videos, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00175 / video downloaded

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## TikTok Video Downloader — No Watermark MP4 + Full Metadata

Download TikTok videos without the watermark, in bulk. Paste one or more TikTok links and get a clean HD MP4 download link for each post — plus the full data behind it: caption, author, sound, cover image and every engagement number (views, likes, comments, shares). Photo slideshows are supported too: you get each image in the post. One tidy row per URL, ready to export as JSON, CSV or Excel.

This is the cheap, no-nonsense way to save TikTok clips at scale for content creators, marketers, researchers and anyone building an automated media pipeline.

### Why use this TikTok downloader

- 🎬 **No watermark** — every video comes back with a clean, watermark-free MP4 link (the watermarked version is included too, if you want it).
- 🖼️ **HD quality** — get the high-definition download link when the post has one.
- 📊 **Full metadata** — caption, author handle and name, upload date, duration, view/like/comment/share counts, sound title and cover image.
- 🖇️ **Photo posts supported** — TikTok photo/slideshow posts return every image, not just video.
- 🔗 **Any TikTok link** — full video URLs, short share links (vm./vt.tiktok.com) and bare video IDs all work.
- 📦 **Bulk in one run** — drop in a whole list of URLs and get one clean record per post.
- 💸 **Cheapest per-video pricing** — pay only for the posts you actually download, with volume discounts as you scale.
- 📤 **Export anywhere** — JSON, CSV or Excel, or pull straight from the dataset into your own tools, Make or n8n.

### What you get

Each post is one dataset record like this:

```json
{
  "source": "tiktok",
  "inputUrl": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
  "id": "6718335390845095173",
  "url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
  "title": "Scramble up ur name & I'll try to guess it #foryoupage",
  "authorUniqueId": "scout2015",
  "authorNickname": "Scout, Suki & Stella",
  "authorId": "53279706535428096",
  "authorAvatar": "https://.../avatar.jpeg",
  "createTime": "2019-07-27T13:32:38.000Z",
  "duration": 10,
  "cover": "https://.../cover.jpeg",
  "downloadUrl": "https://.../video-no-watermark.mp4",
  "downloadUrlHd": "https://.../video-hd.mp4",
  "watermarkedUrl": "https://.../video-watermarked.mp4",
  "playCount": 159200,
  "likeCount": 35155,
  "commentCount": 5721,
  "shareCount": 1475,
  "downloadCount": 252,
  "musicTitle": "original sound - tiffanie.yunque",
  "musicAuthor": "tiff",
  "musicUrl": "https://.../sound.mp3",
  "images": [],
  "isPhotoPost": false
}
```

### Input

Give the downloader a list of TikTok URLs. That's it.

```json
{
  "postUrls": [
    "https://www.tiktok.com/@scout2015/video/6718335390845095173",
    "https://www.tiktok.com/@tiktok/video/7106594312292453675"
  ],
  "maxItems": 0
}
```

| Field | Description |
| --- | --- |
| `postUrls` | One or more TikTok video or photo-slideshow URLs (required). Full links, short share links (vm./vt.tiktok.com) and bare video IDs all work. Plain strings or `{ "url": "..." }` objects. |
| `maxItems` | Maximum number of posts to download (0 = no limit; process every URL). |
| `proxyConfiguration` | Optional. Not needed for normal use — leave it off. |

### Output fields

| Field | Description |
| --- | --- |
| `id` | TikTok post ID. |
| `url` | Canonical post URL. |
| `title` | Post caption / description. |
| `authorUniqueId` / `authorNickname` | Author handle and display name. |
| `authorId` / `authorAvatar` | Author ID and avatar image. |
| `createTime` | Upload time (ISO 8601). |
| `duration` | Video length in seconds. |
| `cover` | Cover / thumbnail image. |
| `downloadUrl` | No-watermark MP4 download link. |
| `downloadUrlHd` | HD download link when available. |
| `watermarkedUrl` | Watermarked MP4 link. |
| `playCount` / `likeCount` / `commentCount` / `shareCount` / `downloadCount` | Engagement stats. |
| `musicTitle` / `musicAuthor` / `musicUrl` | Sound used in the post. |
| `images` | Array of image URLs for photo/slideshow posts. |
| `isPhotoPost` | `true` when the post is a photo slideshow instead of a video. |

### Use cases

- **Save clean videos** — grab watermark-free TikTok videos for reposting, editing or archiving.
- **Content research** — pull captions, sounds and engagement stats across a batch of posts to study what performs.
- **Sound & music sourcing** — capture the audio track and cover for each post.
- **Photo slideshow export** — download every image from TikTok photo posts in one go.
- **Automation** — feed a list of URLs from a spreadsheet, Make or n8n and get structured records back with direct download links.

### FAQ

**Does it remove the TikTok watermark?** Yes — `downloadUrl` is the clean, watermark-free MP4. The original watermarked link is also included if you prefer it.

**Can I download many videos at once?** Yes. Put as many URLs as you like in `postUrls` and you get one record per post.

**Does it work with short share links?** Yes — `vm.tiktok.com` and `vt.tiktok.com` links, full URLs and bare video IDs are all accepted.

**What about photo (slideshow) posts?** Fully supported. `isPhotoPost` will be `true` and every image URL is returned in `images`.

**Do I need a proxy?** No. Proxy is optional and off by default.

**How much does it cost?** Pay-per-event: a tiny charge per run plus a small charge per post downloaded, with tier discounts as your volume grows. See the **Pricing** tab for current rates.

### Notes

This tool retrieves media and public metadata for TikTok posts whose URLs you provide. It is an independent tool and is not affiliated with, endorsed by or connected to TikTok; all names and trademarks belong to their respective owners. Only download content you own or have the right to use, and respect TikTok's terms and applicable copyright law. Public content only.

# Actor input Schema

## `postUrls` (type: `array`):

One or more TikTok video or photo-slideshow URLs to download. Accepts full links (https://www.tiktok.com/@user/video/123...), short share links (vm.tiktok.com/xxxx, vt.tiktok.com/xxxx) and bare video IDs. You can paste plain strings or {"url": "..."} objects.

## `maxItems` (type: `integer`):

Maximum number of posts to download (0 = no limit; process every URL you provide).

## `proxyConfiguration` (type: `object`):

Optional proxy. Not required — leave off to run on a direct connection. Enable only if you specifically want requests routed through a proxy.

## Actor input object example

```json
{
  "postUrls": [
    "https://www.tiktok.com/@scout2015/video/6718335390845095173",
    "https://www.tiktok.com/@tiktok/video/7106594312292453675"
  ],
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The results as dataset items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "postUrls": [
        "https://www.tiktok.com/@scout2015/video/6718335390845095173",
        "https://www.tiktok.com/@tiktok/video/7106594312292453675"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/tiktok-downloader").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "postUrls": [
        "https://www.tiktok.com/@scout2015/video/6718335390845095173",
        "https://www.tiktok.com/@tiktok/video/7106594312292453675",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/tiktok-downloader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "postUrls": [
    "https://www.tiktok.com/@scout2015/video/6718335390845095173",
    "https://www.tiktok.com/@tiktok/video/7106594312292453675"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call hipersoft/tiktok-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/tiktok-downloader"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DNLbnuMUYmvF0dbr6/builds/6gwIaXPWR3wyELfJ8/openapi.json
