# TikTok Reels & Video Downloader (`datapilot/tiktok-reels-video-downloader`) Actor

extract video ID, title, description, uploader, uploader ID, views, likes, comments, shares, duration, thumbnail, and video download URL. Supports multiple URLs, Residential Proxy, retries, JSON and regex extraction, and structured Apify Dataset output.

- **URL**: https://apify.com/datapilot/tiktok-reels-video-downloader.md
- **Developed by:** [Data Pilot](https://apify.com/datapilot) (community)
- **Categories:** Videos, Social media
- **Stats:** 5 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 result scrapes

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Reels & Video** Downloader is a powerful Apify Actor designed to discover, extract, and collect **TikTok Reels & Video** metadata and direct download links from any public TikTok video URL. This tool provides comprehensive **TikTok Reels & Video** intelligence including title, description, uploader details, view/like/comment/share counts, video duration, thumbnail, and a direct no-login download link for any accessible TikTok video. Whether you're building a content archiving tool, tracking creator performance, or conducting social media research, the TikTok Reels & Video Downloader delivers actionable **TikTok Reels & Video** insights efficiently.

With dual-layer JSON extraction, raw HTML regex fallback, retry-resilient requests, and reliable Apify Dataset delivery, the TikTok Reels & Video Downloader ensures comprehensive **TikTok Reels & Video** coverage across any list of video URLs. It focuses on key **TikTok Reels & Video** signals including engagement stats, uploader identity, and download URL, making it an essential tool for content research and creator analytics.

***

### 📋 Table of Contents

- [Features](#-features)
- [Data Source](#-data-source)
- [How It Works](#-how-it-works)
- [Input](#-input)
- [Output](#-output)
- [Technical Stack](#-technical-stack)
- [Data Fields](#-data-fields-explained)
- [Use Cases](#-use-cases)
- [Quick Start](#-quick-start)
- [Configuration](#-configuration)
- [Performance](#-performance)
- [Important Notes](#-important-notes)
- [License & Legal](#-license--legal)

***

### 🔥 Features

- **Dual JSON Extraction Strategy** – Parses both TikTok's modern `__UNIVERSAL_DATA_FOR_REHYDRATION__` block and the legacy `SIGI_STATE` block for maximum compatibility across page versions.
- **Raw HTML Regex Fallback** – Falls back to direct regex extraction of play address, cover image, and OpenGraph meta tags when structured JSON isn't available.
- **Direct Download Link Extraction** – Pulls the video's `playAddr`/`downloadAddr` and cleans escaped URL characters for a ready-to-use **TikTok Reels & Video** download link.
- **Full Engagement Metrics** – Extracts view count, like count, comment count, and share count for every video.
- **Duration Formatting** – Converts raw video duration in seconds into a clean `MM:SS` or `HH:MM:SS` display format.
- **Uploader Identity Resolution** – Extracts both the display nickname and the `@username` handle of the video's creator.
- **Retry-Resilient Requests** – Automatically retries on rate limits (429) and auth errors (401/403) with backoff delays.
- **Residential Proxy Support** – Apify residential proxy for reliable **TikTok Reels & Video** access.
- **Batch Processing** – Extract any number of TikTok video URLs in a single run.
- **Real-Time Dataset Push** – Pushes each **TikTok Reels & Video** record to Apify Dataset as soon as it's extracted.
- **Graceful Error Handling** – Skips a private, deleted, or geo-restricted video without stopping the whole run.

***

### 📊 Data Source

#### **TikTok Public Video Pages**

- **Authority**: TikTok's own public-facing video pages (`tiktok.com/@user/video/{id}`)
- **Access Method**: Browser-impersonated HTTP requests via , run through an executor for async compatibility
- **Coverage**: Any publicly accessible **TikTok Reels & Video** URL provided as input
- **Data**: Embedded rehydration/SIGI\_STATE JSON, or raw HTML meta tags as a fallback
- **Access**: Public video pages, no API key or login required
- **Update Frequency**: Reflects each **TikTok Reels & Video**'s current live state at time of run

***

### ⚙️ How It Works

The TikTok Reels & Video Downloader accepts a list of TikTok video URLs and fetches each page's HTML using a Chrome-impersonated HTTP session, retrying automatically on rate limits or auth errors. For each successfully fetched page, the Actor first attempts to parse the modern `__UNIVERSAL_DATA_FOR_REHYDRATION__` JSON block; if that's unavailable, it falls back to the legacy `SIGI_STATE` block. From whichever structured data is found, it extracts the video ID, description, uploader info, engagement stats, duration, and download/thumbnail URLs. If neither JSON block is present, the Actor falls back to direct regex extraction of the play address and OpenGraph meta tags from the raw HTML. Every video with a successfully resolved download URL is pushed to the Apify Dataset immediately after extraction.

**Key Processing Steps:**

1. **Input Parsing** – Accept a list of **TikTok Reels & Video** URLs
2. **Proxy Setup** – Configure Apify residential proxy for the impersonated HTTP session
3. **URL Loop** – Iterate through each provided TikTok video URL
4. **Page Fetch** – Request the video page's HTML with retry handling for rate limits and auth errors
5. **Rehydration JSON Parsing** – Attempt to extract structured data from `__UNIVERSAL_DATA_FOR_REHYDRATION__`
6. **SIGI\_STATE Fallback** – Attempt the legacy JSON block if the modern one isn't found
7. **Raw HTML Fallback** – Apply regex extraction on play address and meta tags as a final fallback
8. **URL Cleaning** – Unescape and clean the extracted download and thumbnail URLs
9. **Duration Formatting** – Convert raw seconds into a readable duration string
10. **Dataset Push** – Push each successfully extracted record to the Dataset immediately
11. **Rate Limiting** – Apply a short delay between video URL requests

**Key Benefits:**

- Pull **TikTok Reels & Video** metadata and download links for any public video without manual visits
- Get clean, no-watermark-aware download URLs directly from TikTok's own CDN references
- Monitor creator engagement metrics across a batch of videos
- Feed content archiving pipelines, creator analytics dashboards, or research tools
- Automate recurring **TikTok Reels & Video** extraction as new content is published

***

### 📥 Input

The Actor accepts the following input parameters:

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `startUrls` / `urls` | array or string | *(required)* | One or more **TikTok Reels & Video** URLs to extract. |
| `proxyConfiguration` | object | `{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}` | Apify proxy configuration for the extraction session. |

**Example Input:**

```json
{
  "startUrls": [
    "https://www.tiktok.com/@username/video/7123456789012345678",
    "https://www.tiktok.com/@anotheruser/video/7234567890123456789"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

**Extract a Single Video:**

```json
{
  "urls": "https://www.tiktok.com/@username/video/7123456789012345678"
}
```

**Extract Multiple Videos:**

```json
{
  "startUrls": [
    "https://www.tiktok.com/@user1/video/7111111111111111111",
    "https://www.tiktok.com/@user2/video/7222222222222222222"
  ]
}
```

***

### 📤 Output

The Actor pushes **TikTok Reels & Video** records with the following structure:

| Field | Type | Description |
|-------|------|-------------|
| `title` | string | Video title, derived from description or uploader name |
| `id` | string | The TikTok video ID |
| `source` | string | Always `"TikTok"` |
| `url` | string | The final resolved video page URL |
| `download_url` | string | Direct, cleaned download URL for the video file |
| `thumbnail` | string | Direct URL to the video's cover/thumbnail image |
| `duration` | string | Formatted video duration (`MM:SS` or `HH:MM:SS`) |
| `duration_raw` | integer | Raw video duration in seconds |
| `description` | string | Full video caption/description |
| `uploader` | string | Display nickname of the video's creator |
| `uploader_id` | string | The creator's `@username` handle |
| `view_count` | integer | Total view count |
| `like_count` | integer | Total like count |
| `comment_count` | integer | Total comment count |
| `share_count` | integer | Total share count |
| `timestamp` | integer | Unix timestamp of when the video was created |

**Example TikTok Reels & Video Record:**

```json
{
  "title": "Wait for it... this hack changed everything 🤯",
  "id": "7123456789012345678",
  "source": "TikTok",
  "url": "https://www.tiktok.com/@username/video/7123456789012345678",
  "download_url": "https://v16-webapp.tiktok.com/...",
  "thumbnail": "https://p16-sign.tiktokcdn.com/...",
  "duration": "00:27",
  "duration_raw": 27,
  "description": "Wait for it... this hack changed everything 🤯 #lifehack #viral",
  "uploader": "Jane Creator",
  "uploader_id": "janecreator",
  "view_count": 4820193,
  "like_count": 612044,
  "comment_count": 8321,
  "share_count": 19022,
  "timestamp": 1755072000
}
```

***

### 🧰 Technical Stack

- **HTTP Client:**  with Chrome impersonation for reliable access to TikTok's video pages
- **Concurrency:** `asyncio` with an executor bridge for running the impersonated client asynchronously
- **JSON Parsing:** `json` for extracting the rehydration and SIGI\_STATE data blocks
- **Pattern Matching:** `re` for both structured JSON extraction and raw HTML fallback parsing
- **Text Handling:** `html` for unescaping HTML entities in captions and titles
- **Date Handling:** `datetime` with timezone-aware UTC timestamps
- **Proxy:** Apify Proxy with `RESIDENTIAL` configuration by default
- **Logging:** Apify Actor logging system
- **Platform:** Apify Actor serverless environment

***

### 📊 Data Fields Explained

#### **Video Identity**

- **id**: The unique TikTok video ID
- **title**: A short title derived from the video's caption or uploader name
- **url**: The final, resolved video page URL after any redirects

#### **Media Assets**

- **download\_url**: Direct link to the video file itself
- **thumbnail**: Direct link to the video's cover image
- **duration / duration\_raw**: The video's length, formatted and in raw seconds

#### **Creator Details**

- **uploader**: The creator's display nickname
- **uploader\_id**: The creator's `@username` handle

#### **Engagement Metrics**

- **view\_count, like\_count, comment\_count, share\_count**: Public engagement totals at time of scrape

***

### 🎯 Use Cases

- **Content Archiving** – Save metadata and download links for videos you want to reference or preserve
- **Creator Analytics** – Track engagement metrics across a creator's video catalog
- **Trend Research** – Study caption text, duration, and engagement patterns across viral videos
- **Competitive Benchmarking** – Compare engagement stats across your own and competitor content
- **Academic Research** – Study public social media trends and engagement at scale
- **Media Monitoring** – Reference specific TikTok videos in reporting or analysis

***

### 🚀 Quick Start

#### **1. Prepare Input**

Go to Apify Console and enter:

```json
{
  "startUrls": ["https://www.tiktok.com/@username/video/7123456789012345678"]
}
```

#### **2. Run the Actor**

Click **Start**. The Actor will:

- Fetch each TikTok video page with retry handling
- Parse structured JSON data, falling back to HTML regex extraction if needed
- Extract metadata, engagement stats, and the download URL
- Push each successfully extracted record to the Dataset

#### **3. Monitor Progress**

Console shows:

```
[1/1] Extracting TikTok video: https://www.tiktok.com/@username/video/7123456789012345678
Successfully extracted: 'Wait for it... this hack changed everything' | Uploader: @janecreator | Views: 4820193 | Likes: 612044
🎉 Scraping complete! Successfully extracted 1 TikTok videos.
```

#### **4. View & Download Results**

- **Results Tab**: All **TikTok Reels & Video** records
- **Export**: JSON, CSV, Excel, or HTML
- **Filter**: By uploader or engagement metrics
- **API Access**: Available via the Apify API

***

### ⚙️ Configuration

Single video extraction:

```json
{
  "urls": "https://www.tiktok.com/@username/video/7123456789012345678"
}
```

Batch extraction:

```json
{
  "startUrls": [
    "https://www.tiktok.com/@user1/video/7111111111111111111",
    "https://www.tiktok.com/@user2/video/7222222222222222222"
  ]
}
```

Custom proxy group:

```json
{
  "startUrls": ["https://www.tiktok.com/@username/video/7123456789012345678"],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

***

### 📈 Performance

#### **Processing Speed**

- One HTTP request per video URL, with up to 3 retries on rate limits or auth errors
- 0.5 second delay between video requests to reduce blocking
- Faster than browser-based scraping since no rendering engine is required

#### **Resource Usage**

- Memory: Low, since no browser instance is launched
- Network: One request per **TikTok Reels & Video** URL, plus retries if needed
- Proxy: One residential proxy tunnel shared across the impersonated session for the run

***

### ⚠️ Important Notes

#### **Legal & Compliance**

- **Public Data Only**: Retrieves only publicly accessible **TikTok Reels & Video** content exposed on the video's own page
- **Privacy**: Downloading and reusing video content may be subject to copyright and TikTok's Terms of Service — use only for legitimate, permitted purposes
- **Legal**: Not legal advice — consult qualified professionals before using this data for compliance-sensitive decisions, especially around redistribution of downloaded content

#### **Data Quality**

- **Freshness**: Reflects each **TikTok Reels & Video**'s live state at time of run
- **Completeness**: Private, deleted, or geo-restricted videos will fail to extract and are skipped with a warning
- **Accuracy**: Sourced directly from TikTok's own embedded page data
- **Verification**: Cross-check high-stakes figures (views, likes) against the live TikTok app or website

#### **Best Practices**

- Always configure a residential proxy for the most reliable **TikTok Reels & Video** access
- Provide full, direct video URLs rather than shortened or profile links
- Re-run periodically to track how engagement metrics change over time
- Expect extraction to fail gracefully for private, deleted, or geo-restricted videos
- Respect content owners' rights before redistributing any downloaded video

***

### 📄 License & Legal

**Terms of Use:**

- Use for legitimate research, archiving, and analytics purposes
- Respect TikTok's Terms of Service and applicable copyright law
- Do not use for unauthorized redistribution of copyrighted video content
- Use **TikTok Reels & Video** data responsibly and in compliance with applicable privacy and copyright laws

**Disclaimer:**
TikTok Reels & Video Downloader is provided as-is for research and analytics purposes. Users are responsible for compliance with TikTok's ToS, copyright law, and all applicable regulations. This is not legal advice.

***

### ⚖️ TikTok Reels & Video Excellence

This Actor is optimized for **TikTok Reels & Video** research with:

- ✅ Dual-layer JSON extraction for maximum page-version compatibility
- ✅ Raw HTML regex fallback when structured data is unavailable
- ✅ Full engagement metrics and clean download links
- ✅ Retry-resilient requests with automatic backoff
- ✅ Real-time Dataset push
- ✅ Production-ready code

# Actor input Schema

## `startUrls` (type: `array`):

List of TikTok video or short links (supports standard and vt.tiktok.com links).

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

Select Residential Proxy to bypass TikTok rate limits and anti-bot protection.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.tiktok.com/@scout2015/video/6718335390845095173"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `crawlResults` (type: `string`):

No description

## `tiktokOverview` (type: `string`):

No description

# 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 = {
    "startUrls": [
        "https://www.tiktok.com/@scout2015/video/6718335390845095173"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datapilot/tiktok-reels-video-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 = { "startUrls": ["https://www.tiktok.com/@scout2015/video/6718335390845095173"] }

# Run the Actor and wait for it to finish
run = client.actor("datapilot/tiktok-reels-video-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 '{
  "startUrls": [
    "https://www.tiktok.com/@scout2015/video/6718335390845095173"
  ]
}' |
apify call datapilot/tiktok-reels-video-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datapilot/tiktok-reels-video-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/Dud5XHcmMA028xZ99/builds/OixTMGtZISNbad2X3/openapi.json
