# TikTok Scraper — No Watermark Video & Data Extractor (`nano_tech/tiktok-scraper`) Actor

Lightning-fast TikTok & Douyin scraper. Extract no-watermark videos (MP4), direct audio (MP3), user profiles, captions, and engagement stats (views, likes, shares) in a single request. Built on a high-concurrency Rust engine for instant, reliable JSON data.

- **URL**: https://apify.com/nano\_tech/tiktok-scraper.md
- **Developed by:** [manas](https://apify.com/nano_tech) (community)
- **Categories:** Social media, Developer tools, Videos
- **Stats:** 1 total users, 0 monthly users, 0.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 Scraper — No Watermark Video & Data Extractor

> **The fastest, most reliable way to extract TikTok and Douyin data at scale.**

Extract TikTok and Douyin video metadata, watermark-free download links, MP3 audio URLs, and full creator stats from any number of URLs — in milliseconds. Built for data pipelines, content archiving, social media analytics, and automated media workflows.

---

### 🔥 Why Choose FetchTik?

Stop fighting rate limits, captchas, and IP blocks. Unlike slow browser-based scrapers (Puppeteer/Playwright) that take 10+ seconds per video and constantly crash, FetchTik uses a direct, high-throughput Rust backend architecture.

| Feature | FetchTik API | Standard Browser Scrapers |
| --- | --- | --- |
| **Speed per URL** | ~100–300 ms | 3–15 seconds |
| **Watermark-Free Video** | Yes — direct CDN links | Rarely available |
| **MP3 Audio Extraction** | Yes | Rarely available |
| **Regional Bypass** | Yes — signed proxy streaming | None |
| **Douyin Support** | Full Support | Limited / None |
| **Reliability** | 99.9% Success Rate | Blocked by captchas |

---

### ⚡ What Data Will I Get?

Paste in a list of URLs, hit Start, and get clean, structured JSON records instantly. Each record contains:

* **Video Links:** Watermark-free MP4, watermarked MP4, and direct CDN URLs.
* **Audio:** Direct MP3 audio track URLs.
* **Proxy Streaming:** Auto-generated signed proxy URLs to stream media directly through our servers if your local IP is blocked.
* **Creator Profile:** Username, nickname, avatar, follower count, and verified status.
* **Engagement Stats:** Exact view counts, likes, comments, shares, and saves.
* **Post Metadata:** Captions, hashtags, post dates, and pinned/top status.

---

### 🛠️ How to Use (Quickstart)

Using FetchTik is incredibly simple. No proxies or complex configurations are required.

1. **Enter URLs:** Paste your TikTok or Douyin links (supports standard, `vt.tiktok.com`, and `vm.tiktok.com` short links).
2. **Select Mode:** Leave on `all` to extract video, audio, and metadata in a single request.
3. **Click Start:** Watch the data pour in.

#### Example Input

```json
{
  "urls": [
    "https://www.tiktok.com/@tiktok/video/7106594312292453675",
    "https://vt.tiktok.com/ZSPjD4b6Q/"
  ],
  "mode": "all",
  "batch_size": 50,
  "push_errors": true
}

````

***

### 📊 Output Reference

Every URL produces one clean dataset record. We combine what other scrapers split into multiple API calls into a single, comprehensive JSON payload.

#### Success Record Example

```json
{
  "input_url": "https://www.tiktok.com/@tiktok/video/7106594312292453675",
  "status": "success",
  "post_id": "7106594312292453675",
  "caption": "how many frogs did you find? 🐸 check out tiktok’s #Minecraft community today! @Gorillo",
  "hashtags": [
    "Minecraft"
  ],
  "create_time": 1654632929,
  "type": "video",
  "source": "tiktok",
  "view_count": 563532,
  "like_count": 98719,
  "comment_count": 1290,
  "share_count": 127,
  "collect_count": 58626,
  "username": "tiktok",
  "nickname": "TikTok",
  "is_verified": false,
  "video_no_watermark": "https://v16m-default.tiktokcdn-us.com/...",
  "audio_direct_url": "https://v19-ies-music.tiktokcdn-us.com/...",
  "cover_static": "https://p16-common-sign.tiktokcdn-us.com/...",
  "proxy_urls": {
    "audio": "/api/proxy/download?url=...",
    "stream_video": "/api/proxy/stream?url=...",
    "video_no_watermark": "/api/proxy/download?url=..."
  },
  "extracted_at": "2026-06-15T01:51:40.203Z"
}

```

***

### 💼 Top Use Cases

- **Content Repurposing:** Download high-quality videos without watermarks for automated cross-posting to YouTube Shorts or Instagram Reels.
- **Social Media Analytics:** Track competitor view counts, likes, and engagement rates at massive scale.
- **Audio Extraction:** Build trending sound libraries by pulling direct MP3 files.
- **Content Archiving:** Save TikTok and Douyin videos before they are removed or muted.

***

### ❓ Frequently Asked Questions

**Do I need to buy residential proxies?**
No! Our engine handles all routing, IP rotation, and anti-bot bypasses automatically behind the scenes.

**Does it support Douyin (Chinese TikTok)?**
Yes. Both `tiktok.com` and `douyin.com` URLs are natively supported.

**What happens when a URL fails or the video is deleted?**
The scraper will retry automatically. If the video is truly deleted or private, the record is cleanly pushed to the dataset with `"status": "error"`, ensuring your data pipelines never break.

***

### 🏷️ Keywords

TikTok Scraper, TikTok API, Download TikTok No Watermark, Douyin Scraper, TikTok Video Extractor, Bulk TikTok Downloader, MP3 Audio Extractor, Fast Social Media Scraper, TikTok JSON.

# Actor input Schema

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

List of TikTok or Douyin URLs to extract. Supports full URLs, short links (vm.tiktok.com, vt.tiktok.com), and Douyin URLs.

## `batch_size` (type: `integer`):

How many URLs to send per request.

## `max_retries` (type: `integer`):

How many times to retry a failed batch before giving up.

## `retry_delay_ms` (type: `integer`):

Milliseconds to wait between retries.

## `push_errors` (type: `boolean`):

When true, failed URL extractions are pushed to the dataset with status:'error'.

## Actor input object example

```json
{
  "urls": [
    "https://vt.tiktok.com/ZSPjD4b6Q/",
    "https://www.tiktok.com/@tiktok/video/7106594312292453675"
  ],
  "batch_size": 50,
  "max_retries": 3,
  "retry_delay_ms": 2000,
  "push_errors": 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("nano_tech/tiktok-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("nano_tech/tiktok-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 '{}' |
apify call nano_tech/tiktok-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Scraper — No Watermark Video & Data Extractor",
        "description": "Lightning-fast TikTok & Douyin scraper. Extract no-watermark videos (MP4), direct audio (MP3), user profiles, captions, and engagement stats (views, likes, shares) in a single request. Built on a high-concurrency Rust engine for instant, reliable JSON data.",
        "version": "1.0",
        "x-build-id": "IqWRRLTgorgwdG9h7"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nano_tech~tiktok-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nano_tech-tiktok-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/nano_tech~tiktok-scraper/runs": {
            "post": {
                "operationId": "runs-sync-nano_tech-tiktok-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/nano_tech~tiktok-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-nano_tech-tiktok-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",
                "required": [
                    "urls"
                ],
                "properties": {
                    "urls": {
                        "title": "TikTok / Douyin URLs",
                        "type": "array",
                        "description": "List of TikTok or Douyin URLs to extract. Supports full URLs, short links (vm.tiktok.com, vt.tiktok.com), and Douyin URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "batch_size": {
                        "title": "Batch Size",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "How many URLs to send per request.",
                        "default": 50
                    },
                    "max_retries": {
                        "title": "Max Retries (per batch)",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many times to retry a failed batch before giving up.",
                        "default": 3
                    },
                    "retry_delay_ms": {
                        "title": "Retry Delay (ms)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Milliseconds to wait between retries.",
                        "default": 2000
                    },
                    "push_errors": {
                        "title": "Include Errors in Dataset",
                        "type": "boolean",
                        "description": "When true, failed URL extractions are pushed to the dataset with status:'error'.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
