# TikTok Scraper — Profiles, Videos, Views, Captions (Cheap PPE) (`tictechid/vanzi-tiktok-scraper`) Actor

TikTok scraper for posts and reels: likes, views, play counts, captions, comments, shares, and author info from profile or video URLs. Clean JSON for research, monitoring, and automation. Affordable PPE alternative to heavier TikTok suites.

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

## Pricing

from $0.40 / 1,000 results

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## TikTok Scraper - Posts, Reels & Profile Metadata

Turn public TikTok profiles and video links into clean, pipeline-ready metadata in one run. Paste one `@handle` or dozens — get **profile stats once per account**, plus post/reel engagement (likes, views, comments, shares, captions, timestamps) as snake\_case JSON. Built for marketers, analysts, and automation stacks that need reliable TikTok data **without residential proxies**.

> **Note:** Only **public** profiles and videos. Private, geo-blocked, or removed content may return empty rows for that URL (the run still completes).

### Why Use This Tool?

- **Automate brand & creator tracking:** Stop copy-pasting TikTok stats by hand.
- **Bulk-ready:** Feed many profile URLs in a single Apify run — built for brand lists, not one-off clicks.
- **Optional profile metadata:** Turn on **`scrape_profile`** to add followers, following, video count, and bio once per account — leave it off for a lean videos-only dataset.
- **Cleaner downstream data:** Consistent snake\_case fields for sheets, warehouses, n8n/Make, or your own API.
- **Lower ops cost:** Lightweight HTTP path — no Playwright browser farm, **no residential proxy required**.

### Why Choose This Actor?

- **TikTok-focused:** Profiles and direct video URLs in one Actor
- **Optional profile row:** set `scrape_profile: true` for `media_type: "profile"` at the top of each profile’s results
- **Date filter (`until`):** Keep only posts newer than a date — perfect for “this month” monitoring
- **Soft-fail empties:** One blocked URL does not crash the whole bulk run
- **Apify-native:** Console, schedules, webhooks, API, Make, n8n, Zapier
- **PPE pricing:** Pay for starts + results — easy to forecast

### Features

- Scrape **TikTok profile URLs** and **direct video URLs**
- **Bulk `start_urls`** in one run (deduped)
- Optional **`scrape_profile`** — profile metadata once per profile (followers, following, video count, handle, display name)
- Post/reel fields: caption, likes, views/plays, comments, shares, author, posted time, cover, music title when available
- Optional **`until`** date filter (ISO / `YYYY-MM-DD`)
- Optional Apify **datacenter** proxy (residential never required)
- Dataset export: JSON, CSV, Excel from the run page

### Use Cases

- **Social listening & brand monitoring** across creator lists
- **Influencer vetting** — follower counts + recent engagement in one dataset
- **Competitive tracking** for product / wellness / DTC TikTok accounts
- **Content ops** — archive captions and URLs for briefs or RAG
- **Agency reporting** — schedule weekly/monthly Apify runs into Sheets or BI

### Input Example

```json
{
  "start_urls": [
    "https://www.tiktok.com/@kesehatantubuh.id",
    "https://www.tiktok.com/@another.creator"
  ],
  "max_items": 100,
  "scrape_profile": false,
  "until": "2026-09-01",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

| Field | What it does |
| --- | --- |
| `start_urls` | Profile and/or video URLs (required) |
| `max_items` | Cap on dataset items (default 20; `0` = safe ceiling 5000). Free-tier tip: keep **≤ 100** |
| `scrape_profile` | Optional — when `true`, emit one profile metadata row before videos (default `false`) |
| `until` | Optional — keep posts **newer than** this date |
| `proxyConfiguration` | Optional Apify proxy; prefer **datacenter** / none |

### Output Examples

**Profile metadata** (when `scrape_profile: true` — one row per profile URL, first):

```json
{
  "id": "7280671026532172846",
  "media_type": "profile",
  "platform": "tiktok",
  "handle": "healthwithanya",
  "author": "Health With Anya",
  "url": "https://www.tiktok.com/@healthwithanya",
  "follower_count": 33800,
  "following_count": 120,
  "video_count": 358,
  "like_count": 450000
}
```

**Video / reel metadata:**

```json
{
  "url": "https://www.tiktok.com/@kesehatantubuh.id/video/7666667836370062613",
  "caption": "Kalau belakangan ini suka lupa…",
  "like_count": 23,
  "view_count": 1338,
  "play_count": 1338,
  "comment_count": 0,
  "share_count": 1,
  "author": "kesehatantubuh.id",
  "handle": "kesehatantubuh.id",
  "posted_at": "2026-07-26T03:06:58",
  "media_type": "video",
  "platform": "tiktok"
}
```

### How to Run on Apify

1. Open **TikTok Scraper** on Apify and click **Try for free** / **Start**.
2. Paste one or more public TikTok profile or video URLs into **start\_urls**.
3. Set **max\_items** (keep ≤ 100 on free tier). Optionally set **until** for “posts since …”.
4. Optionally enable **Scrape profile metadata**. Run. Open the **Dataset** tab — videos/posts by default; with the toggle on, a **profile** row per account comes first.
5. Download JSON / CSV / Excel, or connect via Apify API, schedule, or Make / n8n / Zapier.

#### Run from your stack (API sketch)

```bash
curl -X POST "https://api.apify.com/v2/acts/tictechid~vanzi-tiktok-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"start_urls":["https://www.tiktok.com/@kesehatantubuh.id"],"max_items":50,"proxyConfiguration":{"useApifyProxy":true}}'
```

Use the Actor id with a **`~`** in API paths: `tictechid~vanzi-tiktok-scraper`.

### Pricing

Pay-per-event (PPE):

- **`actor-start`** — once per run
- **`result`** — once per dataset item (including profile rows)

Target list price ≈ **$0.30–0.50 per 1,000 results**. Check **Cost → Pricing** on the Actor page for live tiers.

### Usage Limits

- **Free tier:** 5 runs total. Keep **max items per run ≤ 100** while testing. Upgrade to continue.
- **Paid plans:** Unlimited runs per Apify limits.

> Multiple runs require an Apify paid plan. See [Apify Pricing](https://apify.com/pricing?fpr=maxknj).

### FAQ

**Do I need a TikTok login?** No — public pages only.

**Do I need a residential proxy?** No. Datacenter or none first.

**What if a profile has no new posts this month?** You still get the **profile metadata** row so follower/video counts stay fresh.

**Can I scrape many brands at once?** Yes — put all profile URLs in `start_urls` for one bulk run.

**Support:** Open an Issue on the Actor page or email **contact@tictech.id**.

***

### Also from TicTech

Need speech-to-text for Reels / TikTok / Shorts / Facebook? Try our proven multi-platform Transcriber used by 2,000+ Apify users:

**[TikTok · Instagram · Facebook · YouTube Shorts Transcriber](https://apify.com/tictechid/anoxvanzi-Transcriber)** — timestamps, multi-language, bulk URLs, PPE pricing.

Full catalog: [apify.com/tictechid](https://apify.com/tictechid)

For more details, contact the maintainer or email us at contact@tictech.id

TikTok scraper · TikTok API alternative · TikTok profile scraper · video metadata · likes views comments · reels · social listening · influencer analytics · bulk scrape · TicTech vanzi

# Actor input Schema

## `start_urls` (type: `array`):

TikTok profile URLs (@user) or direct video URLs.

## `max_items` (type: `integer`):

Maximum number of posts/reels to output. Use 0 for a safe ceiling of 5000. For free-tier testing, keep this small.

## `scrape_profile` (type: `boolean`):

When true, add one profile metadata row (followers, video count, bio) before video/post rows. Default false keeps output lean (videos/posts only).

## `until` (type: `string`):

Optional. Only keep posts newer than this date (ISO-8601 or YYYY-MM-DD). Older posts are skipped.

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

Optional Apify proxy. Datacenter / no-proxy first. Residential is NOT required and not recommended for v1.

## Actor input object example

```json
{
  "start_urls": [
    "https://www.tiktok.com/@kesehatantubuh.id"
  ],
  "max_items": 20,
  "scrape_profile": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Scraped post/reel metadata rows.

# 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 = {
    "start_urls": [
        "https://www.tiktok.com/@kesehatantubuh.id"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tictechid/vanzi-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 = { "start_urls": ["https://www.tiktok.com/@kesehatantubuh.id"] }

# Run the Actor and wait for it to finish
run = client.actor("tictechid/vanzi-tiktok-scraper").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 '{
  "start_urls": [
    "https://www.tiktok.com/@kesehatantubuh.id"
  ]
}' |
apify call tictechid/vanzi-tiktok-scraper --silent --output-dataset

```

## MCP server setup

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

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/0qkbRbeQEdAcBBfzD/builds/dw9i77WF5bZxtxZDQ/openapi.json
