# TikTok Video Scraper (`electrabot.info/tiktok-video-scraper`) Actor

Get full TikTok video data from video links: plays, likes, comments, shares, saves, author, music, hashtags, and posting time. No login, no cookies. Pay per video.

- **URL**: https://apify.com/electrabot.info/tiktok-video-scraper.md
- **Developed by:** [electra bot](https://apify.com/electrabot.info) (community)
- **Categories:** Social media
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 videos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Video Scraper

Get **full TikTok video data** from video links — plays, likes, comments,
shares, saves, author profile, music, hashtags, mentions, duration, and exact
posting time — as JSON, CSV, or Excel.

No login, no cookies, no browser. Paste video URLs (or short links, or bare
video IDs) and get structured records back.

**Pay per result** — you're charged per video delivered. Removed or private
videos are reported and **not charged**.

***

### What can I use it for?

- **Campaign & influencer tracking** — monitor the exact play/like/comment/share/save counts of sponsored posts over time.
- **Competitor analysis** — measure which of a competitor's videos actually perform, and what sounds and hashtags they ride.
- **Trend research** — engagement ratios (saves-to-plays, shares-to-plays) are the virality signals; get them as numbers, not screenshots.
- **Social listening & AI** — descriptions, hashtags, and engagement in a stable schema, ready for dashboards or models.
- **UGC rights & attribution** — resolve any short link to its canonical video, author, and music credit.

***

### Input

| Field | Required | Description |
|-------|----------|-------------|
| **Video URLs or IDs** | ✔ | Any mix of full links (`https://www.tiktok.com/@user/video/123…`), short links (`vm.tiktok.com/…`, `vt.tiktok.com/…`), or bare numeric video IDs. Each video is one billable result. |
| **Proxy configuration** | – | **Automatic by default:** datacenter proxy first, escalating to RESIDENTIAL only if TikTok blocks it — you don't pay residential rates unless it's actually needed. |

### Output

One record per video:

```json
{
  "videoId": "7650013911164488991",
  "url": "https://www.tiktok.com/@nba/video/7650013911164488991",
  "description": "🏆 Knicks mount the largest comeback in NBA Finals History…",
  "createTime": "2026-06-18T02:11:40+00:00",
  "playCount": 27000000,
  "likeCount": 1900000,
  "commentCount": 8049,
  "shareCount": 70900,
  "saveCount": 86021,
  "authorHandle": "nba",
  "authorName": "NBA",
  "authorVerified": true,
  "authorFollowerCount": 27100000,
  "authorTotalLikes": 1100000000,
  "authorVideoCount": 22900,
  "musicTitle": "original sound",
  "musicIsOriginal": true,
  "hashtags": ["nbafinals", "nba", "basketball", "knicks"],
  "mentions": [],
  "durationSeconds": 133,
  "coverUrl": "https://p16-sign.tiktokcdn-us.com/…",
  "categories": ["Sports News", "Sports"],
  "language": "en",
  "countryCreated": "US",
  "isAd": false,
  "isPinned": false,
  "isAiGenerated": false,
  "duetEnabled": true,
  "stitchEnabled": false
}
```

All five engagement counters (including **saves**, which most tools skip) come
as real integers — no "27M" strings to parse. Every video also carries its
author's **follower count, total likes, and video count** (free influencer
context, no extra request), TikTok's own **content categories**, and an
**AI-generated-content flag**.

### Reliability

- **Fail-loud contract** — a changed TikTok page format raises a loud error instead of silently delivering hollow records.
- **Dead videos handled per-item** — a removed, private, or region-locked video is reported with the exact reason (and not charged) while the rest of the batch continues.
- **Tiered proxy** — datacenter first, automatic escalation to residential only when blocked.
- **Resumable** — if a run is aborted or capped, resurrect it: already-delivered videos are never re-scraped or re-charged.

### Usage from code

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("electrabot.info/tiktok-video-scraper").call(
    run_input={"videoUrls": [
        "https://www.tiktok.com/@nba/video/7650013911164488991",
        "https://vm.tiktok.com/ZMabcdef/",
    ]}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["authorHandle"], item["playCount"], item["hashtags"])
```

### FAQ

**Why did one of my videos fail?**
TikTok reports removed, private, and region-locked videos with a status code;
we surface the exact reason per video in the run's `SUMMARY` and don't charge
for it. The rest of the batch continues.

**Do you download the video files?**
No — this actor delivers the video's *data* (stats, author, music, hashtags),
not the media file.

**Can it scrape a whole profile or hashtag?**
This actor is deliberately focused on video URLs — that's what keeps it fast
and cheap. Tell us in the Issues tab if you'd use a profile scraper.

**Is scraping TikTok legal?**
This actor accesses only publicly available video pages. You are responsible
for complying with applicable laws and TikTok's Terms of Service.

***

### Disclaimer

**This is an unofficial tool. It is not affiliated with, endorsed by, sponsored by,
or in any way officially connected to TikTok or ByteDance Ltd.** "TikTok" and
related names, marks, and logos are trademarks of their respective owners and
are used here for descriptive purposes only.

This actor accesses only **publicly available** information. You are responsible
for ensuring your use complies with applicable laws, TikTok's Terms of Service,
and applicable rate-limiting rules. Use it ethically and at your own risk.

# Actor input Schema

## `videoUrls` (type: `array`):

TikTok video links (https://www.tiktok.com/@user/video/123...), short links (vm.tiktok.com/...), or bare numeric video IDs. Each video is one result.

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

Automatic by default: datacenter proxy first, escalating to RESIDENTIAL only if TikTok blocks it. Pin a group to skip escalation.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.tiktok.com/@nba/video/7650013911164488991"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `videos` (type: `string`):

One record per video: full engagement stats, author, music, hashtags, and timing.

## `runSummary` (type: `string`):

Requested/scraped/failed counts and per-video failure reasons.

# 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 = {
    "videoUrls": [
        "https://www.tiktok.com/@nba/video/7650013911164488991"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("electrabot.info/tiktok-video-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 = {
    "videoUrls": ["https://www.tiktok.com/@nba/video/7650013911164488991"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("electrabot.info/tiktok-video-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 '{
  "videoUrls": [
    "https://www.tiktok.com/@nba/video/7650013911164488991"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call electrabot.info/tiktok-video-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ScSCoBmCPN2yVLDJU/builds/tzl6hwNw0boKqdMp8/openapi.json
