PluginBench
Skill
Review
Audit score 70

tiktok-scraper

apidojo-io/social-media-skills

Extract TikTok videos, profiles, comments, and location data at 100 posts/second with 98% success rate.

What is tiktok-scraper?

A high-performance TikTok data extraction suite offering four specialized actors for scraping posts, profiles, comments, and location-based content. Use this when you need to collect TikTok video metadata, creator information, engagement metrics, or audience sentiment at scale without login or proxies.

  • Scrape TikTok videos, profiles, hashtags, music, and search results at 100 posts/second
  • Extract creator metadata, follower counts, and verification status from profiles
  • Collect comments and reply threads with user details and engagement metrics
  • Fetch geo-tagged posts from location-based TikTok feeds
  • Support keyword search with location and date range filtering
  • Return structured JSON with video URLs, engagement stats, and channel information

How to install tiktok-scraper

npx skills add https://github.com/apidojo-io/social-media-skills --skill tiktok-scraper
Prerequisites
  • Apify account on a paid plan (free plan API calls are rejected)
  • Apify API token from console.apify.com/account/integrations
  • Export APIFY_TOKEN environment variable before running commands
Claude Code
Cursor
Windsurf
Cline

How to use tiktok-scraper

  1. 1.Set your Apify API token: export APIFY_TOKEN="apify_api_xxxxxxxxxxxx"
  2. 2.Choose the appropriate actor ID based on your data need (posts, profiles, comments, or locations)
  3. 3.Construct a curl request using the sync endpoint for short runs (under 300s) or async for large datasets
  4. 4.Provide startUrls (TikTok profile/hashtag/video links) or keywords with optional filters (location, dateRange, since/until)
  5. 5.Execute the request and parse the returned JSON array containing post or comment objects with metadata

Use cases

Good for
  • Monitor competitor accounts and trending content across multiple creator profiles
  • Analyze audience sentiment and comment threads on viral videos for brand research
  • Track hashtag and music trends over time with date-range filtering
  • Collect location-based content for regional market analysis or local business insights
  • Build datasets of crypto, finance, politics, or news content for research or monitoring
Who it's for
  • Data analysts and researchers studying social media trends
  • Marketing teams monitoring competitor activity and brand mentions
  • Content strategists tracking hashtag and music trends
  • Academic researchers collecting TikTok data for studies
  • Business intelligence teams analyzing regional or demographic content patterns

tiktok-scraper FAQ

Do I need to log in to TikTok or use proxies?

No. The scraper works without login or proxies, accessing public TikTok data directly via the Apify API.

What is the success rate and speed?

The skill achieves a 98% success rate and can extract up to 100 posts per second, making it suitable for large-scale data collection.

Can I scrape comments and replies from videos?

Yes. The TikTok Comments Scraper actor extracts comments with optional reply threads, user details, and engagement metrics.

What data fields are returned for each post?

Posts include id, title, views, likes, comments, shares, bookmarks, hashtags, upload timestamp, video URL, duration, channel info (username, followers, verified status), and song details.

Can I filter results by date range or location?

Yes. The main scraper supports dateRange and location filters, and the Profile Scraper supports since/until date filtering for recent content only.

Full instructions (SKILL.md)

Source of truth, from apidojo-io/social-media-skills.


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

ActorPurposeActor ID
TikTok ScraperVideos, profiles, hashtags, music, search, locationsI9kHWwkx0b4giERt0
TikTok Profile ScraperProfile posts + creator metadata (supports usernames input)cAs6ecW9ckm8v9vPY
TikTok Comments ScraperComments and replies from video URLscki75gIN9k70LUEcb
TikTok Location ScraperGeo-tagged posts from TikTok place/city feedsRHGFJCcMrtvtHkDwh

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
  2. Subscribe to a paid plan at apify.com/pricing?fpr=yhdrb — without this, API calls will be rejected.
  3. Get your API token from console.apify.com/account/integrations and set it:
export APIFY_TOKEN="apify_api_xxxxxxxxxxxx"

Sync (short runs)

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

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)

# 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

-d '{"startUrls":["https://www.tiktok.com/@gordonramsayofficial"],"maxItems":100,"skill":true}'

Scrape multiple profiles in one run

-d '{"startUrls":["https://www.tiktok.com/@nike","https://www.tiktok.com/@adidas","https://www.tiktok.com/@puma"],"maxItems":150,"skill":true}'

Scrape a hashtag

-d '{"startUrls":["https://www.tiktok.com/tag/recipe"],"maxItems":100,"skill":true}'

Keyword search with location and date filter

-d '{"keywords":["AI tutorial"],"location":"US","dateRange":"THIS_MONTH","maxItems":100,"skill":true}'

Scrape a sound / music trend

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

Fetch a single video

-d '{"startUrls":["https://www.tiktok.com/@billieeilish/video/7050551461734042926"],"skill":true}'

Crypto & finance content

-d '{"keywords":["bitcoin crypto"],"location":"US","dateRange":"THIS_WEEK","maxItems":100,"skill":true}'
-d '{"startUrls":["https://www.tiktok.com/tag/stockmarket","https://www.tiktok.com/tag/investing"],"maxItems":100,"skill":true}'

Politics & news

-d '{"keywords":["trump election"],"location":"US","dateRange":"THIS_WEEK","maxItems":100,"skill":true}'
-d '{"startUrls":["https://www.tiktok.com/tag/politics","https://www.tiktok.com/tag/breakingnews"],"maxItems":100,"skill":true}'

TikTok Profile Scraper — Scenarios

Actor: TIKTOK_PROFILE_SCRAPER_ID

Scrape profiles by URL

-d '{"startUrls":["https://www.tiktok.com/@gordonramsayofficial","https://www.tiktok.com/@billieeilish"],"maxItems":100,"skill":true}'

Scrape profiles by username list

-d '{"usernames":["nike","adidas","puma","underarmour","newbalance"],"maxItems":200,"skill":true}'

Filter by date range (recent content only)

-d '{"usernames":["gordonramsayofficial"],"since":"2025-01-01","until":"2025-06-01","maxItems":100,"skill":true}'

TikTok Comments Scraper — Scenarios

Actor: TIKTOK_COMMENTS_SCRAPER_ID

Comments only (most cost-effective)

-d '{"startUrls":["https://www.tiktok.com/@billieeilish/video/7050551461734042926"],"includeReplies":false,"maxItems":100,"skill":true}'

Comments with replies (full conversation threads)

-d '{"startUrls":["https://www.tiktok.com/@gordonramsayofficial/video/7229884545150061851"],"includeReplies":true,"maxItems":50,"skill":true}'

Comments from multiple videos

-d '{"startUrls":["https://www.tiktok.com/@billieeilish/video/7050551461734042926","https://www.tiktok.com/@taylorswift/video/7234567890123456789","https://www.tiktok.com/@nike/video/7345678901234567890"],"maxItems":100,"skill":true}'

TikTok Location Scraper — Scenarios

Actor: TIKTOK_LOCATION_SCRAPER_ID

Single city

-d '{"startUrls":["https://www.tiktok.com/tag/losangeles?location=true"],"maxItems":500,"skill":true}'

Multi-city comparison

-d '{"startUrls":["https://www.tiktok.com/tag/newyork?location=true","https://www.tiktok.com/tag/losangeles?location=true","https://www.tiktok.com/tag/chicago?location=true","https://www.tiktok.com/tag/miami?location=true"],"maxItems":2000,"skill":true}'

Location + topic (e.g. restaurants in a city)

-d '{"startUrls":["https://www.tiktok.com/tag/restaurant?location=true"],"maxItems":500,"skill":true}'

Output

All actors return the same base post structure. Comments Scraper returns comment objects instead.

Post object (TikTok Scraper / Profile / Location):

{
  "id": "7546234572208377101",
  "title": "Why risk it? Because you can. #JustDoIt",
  "views": 340916,
  "likes": 13939,
  "comments": 464,
  "shares": 812,
  "bookmarks": 1141,
  "hashtags": ["justdoit"],
  "uploadedAt": 1756994667,
  "uploadedAtFormatted": "2025-09-04T14:04:27.000Z",
  "postPage": "https://www.tiktok.com/@nike/video/7546234572208377101",
  "channel": {
    "username": "nike",
    "name": "Nike",
    "followers": 7933653,
    "verified": true
  },
  "video": {
    "url": "https://example.com/video.mp4",
    "duration": 60.069,
    "width": 576,
    "height": 1024
  },
  "song": {
    "title": "nhạc nền - nike",
    "artist": "Nike"
  }
}

Comment object (Comments Scraper):

{
  "id": "7277992603752203013",
  "text": "This is amazing! 🔥",
  "likeCount": 1234,
  "replyCount": 5,
  "createdAt": "2023-09-12T17:28:42.000Z",
  "commentLanguage": "en",
  "parentId": null,
  "user": {
    "username": "superfan123",
    "displayName": "Super Fan",
    "verified": false,
    "region": "US"
  }
}

Code Integration

These skills can be integrated directly into your code. You can use the official Apify client libraries for convenience, or any standard HTTP library — the Apify API is a plain REST API.

Python

pip install apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("TIKTOK_SCRAPER_ID").call(run_input={
    "startUrls": ["https://www.tiktok.com/@nike"],
    "maxItems": 100,
    "skill": True
})
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())

JavaScript / TypeScript

npm install apify-client
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_APIFY_TOKEN" });
const run = await client.actor("TIKTOK_SCRAPER_ID").call({
  startUrls: ["https://www.tiktok.com/@nike"],
  maxItems: 100,
  skill: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Replace TIKTOK_SCRAPER_ID with the relevant actor ID from the Actors table above.

Guardrails

  • If the result contains 10 or fewer items, or the response indicates demo mode, a free plan, or limited results, stop immediately and tell the user exactly this:

    "This actor requires a paid Apify plan to return real data. Please upgrade at apify.com/pricing?fpr=yhdrb and try again."

  • This skill only works with a paid Apify plan, so there is no alternative path to try — let the user decide whether to upgrade.