Scrape TikTok Profiles and Videos at Scale (2026)

Thirdwatch's TikTok Scraper returns TikTok videos and user profiles by keyword, hashtag, or handle at $0.006 per record — full engagement metrics, music attribution, hashtags, creator follower counts — without requiring a login or API access. Built for influencer researchers, brand-monitoring teams, trend analysts, and creator-economy analytics workflows.

Why scrape TikTok without API

TikTok is the fastest-growing social platform globally. According to Sensor Tower's 2024 mobile-app report, TikTok exceeded 2 billion monthly active users with the highest engagement-per-user across major platforms. For brand monitoring, influencer research, and trend discovery, TikTok is non-negotiable. The blocker for systematic access: TikTok's Research API gates behind academic-institution approval, and the Marketing API is restricted to active advertisers. Both take weeks of onboarding to access basic public-content data.

The job-to-be-done is structured. An influencer-research team builds a creator shortlist of 200 accounts in a niche (cooking, beauty, fitness) with engagement metrics. A brand-monitoring team watches 30 brand-related hashtags daily for mention surfaces. A trend analyst tracks viral content across hashtags hourly to surface early breakouts. A creator-economy analyst compares engagement rates across creator tiers to inform pricing models. All reduce to query + searchType + max results returning structured rows.

How does this compare to the alternatives?

Three options for getting TikTok data into a pipeline:

Approach Cost per 1,000 records Reliability Setup time Maintenance
TikTok Research API Free with quotas Official Weeks (academic affiliation required) Strict access criteria
TikTok-specific influencer SaaS $5K–$50K/year High, includes audience demographics Hours Vendor lock-in
Thirdwatch TikTok Scraper $6 ($0.006 × 1,000) Production-tested with XHR interception 5 minutes Thirdwatch tracks TikTok changes

TikTok's Research API is the official path but the academic-institution gate excludes most commercial use cases. The TikTok Scraper actor page gives you the public-data layer at pay-per-result pricing without the gate.

How to scrape TikTok in 4 steps

Step 1: How do I authenticate against Apify?

Sign in at apify.com (free tier, no credit card), open Settings → Integrations, and copy your personal API token. Every example below assumes the token is in APIFY_TOKEN:

export APIFY_TOKEN="apify_api_xxxxxxxxxxxxxxxx"

Step 2: How do I pull videos from a creator watchlist?

Pass @username-prefixed handles, set searchType: "videos", and choose your per-creator depth.

import os, requests, pandas as pd

ACTOR = "thirdwatch~tiktok-scraper"
TOKEN = os.environ["APIFY_TOKEN"]

CREATORS = ["@chefmike", "@khaby.lame", "@charlidamelio",
            "@bellapoarch", "@willsmith"]

resp = requests.post(
    f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
    params={"token": TOKEN},
    json={
        "queries": CREATORS,
        "searchType": "videos",
        "maxResults": 200,
        "maxResultsPerQuery": 40,
    },
    timeout=600,
)
df = pd.DataFrame(resp.json())
print(f"{len(df)} videos across {df.authorUsername.nunique()} creators")

5 creators × 40 videos each = 200 records, costing $1.20.

Step 3: How do I rank creators by engagement rate?

Engagement rate (interactions per follower per video) is the canonical creator-quality metric. TikTok engagement rates run materially higher than Instagram (5-15% vs 1-3%) due to the algorithm's wider distribution.

df["engagement"] = df.likeCount + df.commentCount * 5 + df.shareCount * 10
df["engagement_rate"] = df.engagement / df.authorFollowers.replace(0, 1)

ranked = (
    df[df.authorFollowers >= 100000]
    .groupby("authorUsername")
    .agg(median_engagement_rate=("engagement_rate", "median"),
         median_views=("viewCount", "median"),
         followers=("authorFollowers", "first"),
         video_count=("id", "count"))
    .sort_values("median_engagement_rate", ascending=False)
)
print(ranked.head(15))

Weighting comments 5x and shares 10x reflects their relative effort cost — a share is high-intent virality, a like is low-effort. Median engagement rate filters out one-off viral videos that distort the average.

Step 4: How do I track trending content by hashtag?

Switch to hashtag queries with searchType: "videos", sort by view velocity (views per hour since posting).

HASHTAGS = ["#foodtok", "#cooking", "#recipe", "#easyrecipes"]

resp2 = requests.post(
    f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
    params={"token": TOKEN},
    json={"queries": HASHTAGS, "searchType": "videos",
          "maxResults": 400, "maxResultsPerQuery": 100},
    timeout=900,
)
hash_df = pd.DataFrame(resp2.json())
hash_df["createdAt"] = pd.to_datetime(hash_df.createdAt)
hash_df["age_hours"] = (pd.Timestamp.utcnow() - hash_df.createdAt).dt.total_seconds() / 3600
hash_df["views_per_hour"] = hash_df.viewCount / hash_df.age_hours.clip(lower=1)

trending = hash_df[
    hash_df.age_hours <= 48
].sort_values("views_per_hour", ascending=False).head(20)
print(trending[["authorUsername", "description", "viewCount",
                "age_hours", "views_per_hour", "url"]])

Views-per-hour is a much better trending signal than absolute view count — it surfaces fresh viral content before it peaks rather than after.

Sample output

A single video record looks like this. Five rows of this shape weigh ~5 KB.

{
  "id": "7345678901234567890",
  "description": "Easy 15-minute pasta recipe #cooking #recipe #foodtok",
  "url": "https://www.tiktok.com/@chefmike/video/7345678901234567890",
  "authorName": "Chef Mike",
  "authorUsername": "chefmike",
  "authorFollowers": 1250000,
  "authorVerified": true,
  "viewCount": 8500000,
  "likeCount": 425000,
  "commentCount": 3200,
  "shareCount": 18000,
  "bookmarkCount": 95000,
  "duration": 47,
  "createdAt": "2026-03-15T14:30:00Z",
  "musicTitle": "original sound",
  "musicAuthor": "Chef Mike",
  "hashtags": ["cooking", "recipe", "foodtok"],
  "isAd": false
}

id is TikTok's globally unique video identifier — the canonical key for cross-snapshot dedup. viewCount, likeCount, shareCount, and bookmarkCount are the core engagement signals; bookmarkCount (saves) is underrated as a quality signal — high bookmarks relative to likes indicates content viewers want to come back to. isAd: true distinguishes paid-promotion videos from organic content, useful for filtering branded-content noise out of organic-trend analysis.

Common pitfalls

Three things go wrong in production TikTok pipelines. Counter rounding — TikTok displays counts as 8.5M for large numbers; the actor parses to integers, but rounding loses precision (8.5M could be anywhere from 8.45M to 8.55M). For viral-content velocity tracking, this is fine; for absolute precision on smaller-scale measurements, expect ±0.5% rounding error. Trending hashtag drift — a hashtag's video composition changes hourly as new content overtakes old; for trend tracking, snapshot frequently rather than relying on one large pull. Music attributionmusicTitle: "original sound" means the creator used their own audio (no attribution to a separate music track); when tracking music-driven trends, filter out original-sound rows to focus on viral audio adoption.

Thirdwatch's actor uses Camoufox + Playwright with XHR-response interception (TikTok's web search renders client-side, so attaching a response listener BEFORE navigation is required to capture the data). The 4096 MB max memory and 600-second timeout headroom mean even multi-hashtag batch runs complete cleanly. Pair TikTok with our Instagram Scraper and YouTube Scraper for full cross-platform creator research. A fourth subtle issue worth flagging is that TikTok's viewCount includes auto-play views from For You page scrolls (typically ~1 second of playback), which inflates absolute view counts vs. genuine watch time; for engagement-quality analysis weight likes and shares more heavily than raw views. A fifth pattern: TikTok's algorithm sometimes resurfaces older videos when a creator goes viral, so a video with a 2-month-old createdAt but rapidly-growing viewCount is a legitimate signal of late-stage virality, not a data error. A sixth note for brand teams: isAd: true only flags videos where the creator used TikTok's official Branded Content disclosure — many sponsored posts skip the disclosure label, so isAd is a high-precision but low-recall signal. A seventh and final pattern: TikTok video URLs occasionally redirect across CDN regions, which means the same video can return slightly different url strings on consecutive scrapes; always dedupe on id (TikTok's stable internal video ID) rather than url.

Related use cases

Frequently asked questions

Do I need a TikTok account or API access?

No. Thirdwatch's TikTok Scraper accesses publicly visible video and profile pages without login, cookies, or API credentials. This sidesteps TikTok's Research API (gated behind academic-affiliate approval) and the Marketing API (restricted to advertisers), both of which require multi-week onboarding for what is effectively public information.

How much does it cost?

Thirdwatch charges $0.006 per record on the FREE tier and drops to $0.003 at GOLD volume. A 50-creator daily monitoring batch at 25 videos each costs roughly $7-$8 per refresh. Daily cadence over 50 creators costs ~$220/month — meaningfully below TikTok-focused influencer SaaS subscriptions.

What's the difference between videos and users search types?

searchType: "videos" returns individual video records with full engagement metrics (views, likes, comments, shares, bookmarks, duration). searchType: "users" returns profile-level metadata (followers, total likes, video count, bio). For trend research and viral-content discovery use videos; for creator shortlist building and follower-growth tracking use users.

Can I scrape hashtag and keyword search?

Yes. Pass #hashtag-prefixed terms or plain keywords in queries. The actor uses TikTok's web search response and intercepts the XHR endpoints that power TikTok's For You page client-side rendering. Hashtag results work reliably; keyword results depend on TikTok surfacing them in the public web search (some niche keywords return sparse results).

What metadata is returned per video?

20 fields per video: id, description, url, authorName, authorUsername, authorUrl, authorFollowers, authorVerified, viewCount, likeCount, commentCount, shareCount, bookmarkCount, duration (seconds), createdAt (ISO 8601), musicTitle, musicAuthor, thumbnailUrl, hashtags array, isAd flag. The author-level fields (authorFollowers, authorVerified) avoid a separate user-profile fetch when you also want creator context per video.

How does this compare to clockworks/tiktok-scraper?

clockworks/tiktok-scraper (156K users) is cheaper per result ($0.0037) and covers a broader surface area including challenges and trends. Thirdwatch's actor is priced higher but ships a single tighter schema across video and user search modes, making it simpler to integrate into mixed-use pipelines. For pure cost at large scale, clockworks wins; for schema simplicity, this one wins.

Run the TikTok Scraper on Apify Store — pay-per-record, free to try, no credit card to test.