# Tiktok Video Downloader Scraper (`soft_alexist/tiktok-video-downloader-scraper`) Actor

Quickly extract direct download URLs from TikTok videos without watermarks or third-party tools. This scraper processes individual TikTok links and returns clean, downloadable video URLs — perfect for content creators, researchers, and data analysts who need programmatic video access.

- **URL**: https://apify.com/soft\_alexist/tiktok-video-downloader-scraper.md
- **Developed by:** [Soft Alexist](https://apify.com/soft_alexist) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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: Extract Video Download Links Fast
---

### What Is TikTok?

TikTok is the world's leading short-form video platform with billions of users creating and sharing content daily. Videos range from entertainment clips to educational content, tutorials, and promotional material. While TikTok's web interface makes sharing and viewing easy, programmatically accessing video download links has traditionally required manual workarounds or browser extensions — until now. The **TikTok Video Downloader Scraper** automates this process, delivering direct download URLs instantly.

---

### Overview

The **TikTok Video Downloader Scraper** extracts downloadable video links from individual TikTok posts. It is designed for:

- **Content creators** archiving or backing up their own content
- **Researchers** collecting video data for academic studies
- **Social media managers** bulk-downloading client content for editing and repurposing
- **Developers** building integrations that require programmatic video access
- **Data analysts** analyzing TikTok content at scale

Key advantages include simplicity (single output field), reliable URL extraction, and error tolerance via `ignore_url_failures` for batch processing without interruptions.

---

### Input Format

The scraper accepts a minimal JSON configuration:

```json
{
  "urls": [
    "https://www.tiktok.com/@man_fuwa/video/7617854844279393556?is_from_webapp=1&sender_device=pc",
    "https://www.tiktok.com/@username/video/7629876543210987654"
  ],
  "ignore_url_failures": true
}
````

| Field | Type | Description |
|---|---|---|
| `urls` | array | Array of direct TikTok video URLs. Supports individual video links from `tiktok.com/@[username]/video/[video_id]`. Can include query parameters like `is_from_webapp=1`. |
| `ignore_url_failures` | boolean | If `true`, the scraper continues running if some URLs fail. If `false`, the scraper stops on the first failure. Default: `true` |

#### Input Requirements

- **URL format:** Only direct video links (e.g., `https://www.tiktok.com/@username/video/12345...`) are supported
- **Batch size:** Add URLs one by one or paste a pre-prepared bulk list
- **Query parameters:** The scraper handles URLs with query parameters (e.g., `?is_from_webapp=1`) automatically
- **Rate limits:** For large batches, introduce pauses between requests to avoid rate limiting

> **Tip:** Extract video IDs from the URL pattern `/@[username]/video/[ID]` for easy batch creation.

***

### Output Format

The scraper returns a single, highly practical field per video:

#### Output Structure

```json
{
  "download_url": "https://ytdlp.online/api/v1/file/TikTok%20video%20%237645109011255168264.mp4",
  "from_url": "https://www.tiktok.com/@tut72313x3w/video/7645109011255168264?is_from_webapp=1"
}
```

| Field | Type | Description |
|---|---|---|
| `Download URL` | string | Direct, downloadable link to the video file. This URL points to the raw video binary, typically without watermarks. The URL is valid for a limited time and can be used to download the video programmatically or in a browser. |

#### Output Characteristics

- **Clean downloads:** The returned URL typically bypasses TikTok's watermarks, delivering the original video quality
- **Format:** MP4 or similar video format, ready for immediate use
- **Validity:** URLs are typically valid for a limited duration (hours to days); store or download videos promptly
- **Direct access:** No external dependencies or third-party API keys required

***

### How to Use

1. **Collect video URLs** — Navigate to TikTok.com, find videos you need, and copy the full URL from the address bar or share link.
2. **Prepare input list** — Paste URLs into the `urls` array, one per line. Use bulk edit for large lists.
3. **Configure error handling** — Set `ignore_url_failures` to `true` for uninterrupted batch processing.
4. **Run the scraper** — Execute the actor and monitor progress in the run log.
5. **Download videos** — Use the returned URLs to download videos via curl, wget, or any HTTP client.

**Practical workflow:**

```bash
curl -O "[Download URL]"  # Download video to current directory
```

**Common scenarios:**

- Downloading personal archive of your own content
- Batch-fetching videos for editing or remix projects
- Collecting research data for academic analysis

***

### Use Cases & Applications

- **Personal backup:** Archive your own TikTok content for safekeeping
- **Content creation:** Download videos for remixing, editing, or inspiration
- **Research & analysis:** Collect video datasets for academic or business intelligence studies
- **Workflow automation:** Integrate video downloads into media processing pipelines
- **Accessibility:** Access content for offline viewing or archival purposes

The **TikTok Video Downloader Scraper** eliminates the friction of finding and accessing video files, enabling creators and analysts to work with TikTok content programmatically.

***

### Important Legal & Compliance Notes

⚠️ **Disclaimer:** Ensure your use complies with TikTok's Terms of Service and applicable copyright laws:

- **Personal use only:** Download only videos you own or have explicit permission to download
- **Copyright respect:** Do not redistribute copyrighted content without proper licensing
- **Platform compliance:** Review TikTok's ToS regarding scraping and automated access
- **Regional restrictions:** Some jurisdictions have specific regulations around video downloading

This scraper is intended for legitimate use cases such as personal archival, research, and content creation within legal bounds. Users are solely responsible for ensuring compliance with applicable laws and platform policies.

***

### Conclusion

The **TikTok Video Downloader Scraper** simplifies video access by automating URL extraction and returning clean, downloadable links. Whether archiving personal content, conducting research, or integrating videos into workflows, this tool eliminates manual effort and delivers reliable results. Start with a single video URL or scale to hundreds — the scraper handles both with ease and grace.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the videos urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## Actor input object example

```json
{
  "urls": [
    "https://www.tiktok.com/@man_fuwa/video/7617854844279393556?is_from_webapp=1&sender_device=pc"
  ],
  "ignore_url_failures": true
}
```

# 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 = {
    "urls": [
        "https://www.tiktok.com/@man_fuwa/video/7617854844279393556?is_from_webapp=1&sender_device=pc"
    ],
    "ignore_url_failures": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("soft_alexist/tiktok-video-downloader-scraper").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 = {
    "urls": ["https://www.tiktok.com/@man_fuwa/video/7617854844279393556?is_from_webapp=1&sender_device=pc"],
    "ignore_url_failures": True,
}

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

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.tiktok.com/@man_fuwa/video/7617854844279393556?is_from_webapp=1&sender_device=pc"
  ],
  "ignore_url_failures": true
}' |
apify call soft_alexist/tiktok-video-downloader-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=soft_alexist/tiktok-video-downloader-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tiktok Video Downloader Scraper",
        "description": "Quickly extract direct download URLs from TikTok videos without watermarks or third-party tools. This scraper processes individual TikTok links and returns clean, downloadable video URLs — perfect for content creators, researchers, and data analysts who need programmatic video access.",
        "version": "0.0",
        "x-build-id": "DrbDnZJ43VfSdrs6a"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/soft_alexist~tiktok-video-downloader-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-soft_alexist-tiktok-video-downloader-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/soft_alexist~tiktok-video-downloader-scraper/runs": {
            "post": {
                "operationId": "runs-sync-soft_alexist-tiktok-video-downloader-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/soft_alexist~tiktok-video-downloader-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-soft_alexist-tiktok-video-downloader-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the videos urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the videos urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
