Scraping Central is reader-supported. When you buy through links on our site, we may earn an affiliate commission.

Tutorial

How to Scrape TikTok Data in 2026

Learn how to scrape TikTok videos, profiles, and trending data in 2026. Covers API approaches, browser scraping, and third-party services.

TikTok is one of the most scraped social platforms for trend analysis, influencer research, and content monitoring. However, it is heavily protected. Here are the working methods.

What You Can Scrape from TikTok

  • Video metadata (likes, comments, shares, views)
  • User profile information (followers, bio, videos)
  • Hashtag and trending data
  • Comment threads
  • Sound/music usage data

Method 1: ScraperAPI (Recommended)

ScraperAPI handles TikTok's anti-bot protection automatically.

import requests
from bs4 import BeautifulSoup

API_KEY = "YOUR_SCRAPERAPI_KEY"

response = requests.get(
    "http://api.scraperapi.com",
    params={
        "api_key": API_KEY,
        "url": "https://www.tiktok.com/@username",
        "render": "true"
    }
)

soup = BeautifulSoup(response.text, "html.parser")
# TikTok embeds data in SIGI_STATE or __UNIVERSAL_DATA_FOR_REHYDRATION__
scripts = soup.find_all("script")
for script in scripts:
    if script.string and "SIGI_STATE" in str(script.string):
        print("Found TikTok data payload")
        break

Method 2: TikTok's Hidden API

TikTok's web app uses internal API endpoints that return JSON data.

import requests
from curl_cffi import requests as cffi_requests

# User info API
user_url = "https://www.tiktok.com/api/user/detail/"
params = {
    "uniqueId": "username",
    "msToken": ""  # Required - obtain from browser session
}

# Use curl_cffi for TLS fingerprint matching
response = cffi_requests.get(
    user_url,
    params=params,
    impersonate="chrome136",
    headers={
        "Referer": "https://www.tiktok.com/",
    }
)

if response.status_code == 200:
    data = response.json()
    user = data.get("userInfo", {}).get("user", {})
    stats = data.get("userInfo", {}).get("stats", {})
    print(f"Nickname: {user.get('nickname')}")
    print(f"Followers: {stats.get('followerCount')}")
    print(f"Videos: {stats.get('videoCount')}")

Method 3: Playwright with Stealth

from playwright.sync_api import sync_playwright
import json

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()

    api_data = []
    page.on("response", lambda r: api_data.append(r) if "/api/" in r.url else None)

    page.goto("https://www.tiktok.com/@username")
    page.wait_for_load_state("networkidle")

    # Extract embedded JSON data
    data = page.evaluate("""
        () => {
            const el = document.getElementById('__UNIVERSAL_DATA_FOR_REHYDRATION__');
            return el ? JSON.parse(el.textContent) : null;
        }
    """)

    if data:
        print(json.dumps(data, indent=2)[:1000])

    browser.close()

TikTok's Anti-Scraping Measures

TikTok employs aggressive protection including:

  • Device fingerprinting via their tt_webid and msToken cookies
  • Request signing with X-Bogus and _signature parameters
  • Rate limiting tied to both IP and device fingerprint
  • Frequent API endpoint changes

Recommendation

For reliable TikTok scraping at any scale, use a managed API service like ScraperAPI or ScrapingAnt. TikTok updates their protection frequently, making self-maintained scrapers expensive to keep working.