Skip to main content
Thirdwatchthirdwatch
Social media

Scrape TikTok Profiles and Videos at Scale (2026)

Pull TikTok videos + creator profiles using Thirdwatch — no login. Views, likes, hashtags, music, follower counts. Python recipes inside.

Apr 27, 2026 · 5 min read · 1,200 words
See the scraper →

Thirdwatch's TikTok Scraper returns TikTok videos and user profiles by keyword, hashtag, or handle — 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.

▶ Skip the setup: Run this as a ready-to-go task on Apify → — pre-loaded with the exact configuration from this guide. No code required.

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 Pay per result 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 — small enough to run on demand at the actor's pay-per-result pricing.

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 production-grade anti-bot tooling + 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 uses pay-per-result pricing with tiered volume discounts at higher commitments. A 50-creator daily monitoring batch at 25 videos each scales cheaply enough for a daily refresh — 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?

Thirdwatch starts at $0.005/result. clockworks/tiktok-scraper starts around $0.0037 and covers a broader surface including challenges and trends; Thirdwatch offers a tighter schema across video and user search modes.

Related

Try it yourself

100 free credits, no credit card.

About 30 real searches. Add the MCP to Claude or Cursor in two minutes.