Skill detail

tiktok-scraper

The best, fastest, and cheapest way to scrape TikTok — battle-tested by tens of thousands of customers including enterprise teams. Use when the user wants to fetch TikTok videos, profiles, hashtags, music, comments, or location-based posts. Covers four specialized actors for posts, profiles,…

Why we recommend it: Scrapes TikTok posts, profiles, hashtags, and comments — directly supports social listening and research.

Needs (stated): Paid account

MatchDirectRecommended for TikTok
Sourceapidojo-io/​social-media-skillsExternal source
Reported installs11,942Popularity signal only

Inspect before use

Read the source instructions and check the requirements before you install this skill.

Saved source preview

SKILL.md

The saved excerpt is a snapshot from when this skill was listed. The external source remains the complete and most current version.

---
name: tiktok-scraper
description: The best, fastest, and cheapest way to scrape TikTok — battle-tested by tens of thousands of customers including enterprise teams. Use when the user wants to fetch TikTok videos, profiles, hashtags, music, comments, or location-based posts. Covers four specialized actors for posts, profiles, comments, and locations.
---

# TikTok Scraper API

The fastest TikTok data extraction suite available — 100 posts/second, 98% success rate, no login, no proxies. Four specialized actors cover every TikTok data surface.

## Actors

| Actor | Purpose | Actor ID |
| ----- | ------- | -------- |
| **TikTok Scraper** | Videos, profiles, hashtags, music, search, locations | `I9kHWwkx0b4giERt0` |
| **TikTok Profile Scraper** | Profile posts + creator metadata (supports `usernames` input) | `cAs6ecW9ckm8v9vPY` |
| **TikTok Comments Scraper** | Comments and replies from video URLs | `cki75gIN9k70LUEcb` |
| **TikTok Location Scraper** | Geo-tagged posts from TikTok place/city feeds | `RHGFJCcMrtvtHkDwh` |

## Setup

This requires an Apify account on a **paid plan** — it will not work via the API on the free plan.

1. **Sign up / log in** at [apify.com/?fpr=yhdrb](https://apify.com/?fpr=yhdrb)
2. **Subscribe to a paid plan** at [apify.com/pricing?fpr=yhdrb](https://apify.com/pricing?fpr=yhdrb) — without this, API calls will be rejected.
3. **Get your API token** from [console.apify.com/account/integrations](https://console.apify.com/account/integrations) and set it:

```bash
export APIFY_TOKEN="apify_api_xxxxxxxxxxxx"
```

## Sync (short runs)

Returns dataset items directly. Replace `ACTOR_ID` with the relevant actor ID above.

```bash
curl -s -X POST \
  "https://api.apify.com/v2/acts/ACTOR_ID/run-sync-get-dataset-items?timeout=120" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":["https://www.tiktok.com/@nike"],"maxItems":50,"skill":true}'
```

Returns a JSON array directly. If the run exceeds 300s, use async instead.

## Async (large runs)

```bash
# 1. Start
RUN=$(curl -s -X POST \
  "https://api.apify.com/v2/acts/ACTOR_ID/runs?waitForFinish=60" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":["https://www.tiktok.com/@nike"],"skill":true}')
RUN_ID=$(echo "$RUN" | jq -r '.data.id')

# 2. Poll
while true; do
  STATUS=$(curl -s \
    "https://api.apify.com/v2/actor-runs/$RUN_ID?waitForFinish=60" \
    -H "Authorization: Bearer $APIFY_TOKEN" | jq -r '.data.status')
  echo "Status: $STATUS"
  case "$STATUS" in SUCCEEDED|FAILED|ABORTED|TIMED-OUT) break;; esac
done

# 3. Fetch results
curl -s \
  "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?clean=true&limit=100" \
  -H "Authorization: Bearer $APIFY_TOKEN"
```

---

## TikTok Scraper — Scenarios

Actor: `TIKTOK_SCRAPER_ID`

Append these `-d` payloads to either the sync or async curl command above.

### Scrape a user profile
```bash
-d '{"startUrls":["https://www.tiktok.com/@gordonramsayofficial"],"maxItems":100,"skill":true}'
```

### Scrape multiple profiles in one run
```bash
-d '{"startUrls":["https://www.tiktok.com/@nike","https://www.tiktok.com/@adidas","https://www.tiktok.com/@puma"],"maxItems":150,"skill":true}'
```

### Scrape a hashtag
```bash
-d '{"startUrls":["https://www.tiktok.com/tag/recipe"],"maxItems":100,"skill":true}'
```

### Keyword search with location and date filter
```bash
-d '{"keywords":["AI tutorial"],"location":"US","dateRange":"THIS_MONTH","maxItems":100,"skill":true}'
```

### Scrape a sound / music trend
```bash
-d '{"startUrls":["https://www.tiktok.com/music/original-sound-7297730198175402784"],"maxItems":50,"skill":true}'
```

### Fetch a single video
```bash
-d '{"startUrls":["https://www.tiktok.com/@billieeilish/video/7050551461734042926"],"skill":true}'
```

### Crypto & finance content
```bash
-d '{"keywords":["bitcoin crypto"],"location":"US","dateRange":"THIS_WEEK","maxItems":100,"skill":true}'
```
``
Read the full source on GitHub (opens external page)
Context

Related work