TikTok Profile & Video Scraper avatar

TikTok Profile & Video Scraper

Pricing

from $2.40 / 1,000 profile scrapeds

Go to Apify Store
TikTok Profile & Video Scraper

TikTok Profile & Video Scraper

Scrape any public TikTok profile: followers, following, likes, verified, bio, avatar and recent videos (views, likes, comments, shares, date). No login. Fast via internal data.

Pricing

from $2.40 / 1,000 profile scrapeds

Rating

0.0

(0)

Developer

Bruno

Bruno

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

TikTok Profile & Videos Scraper

Scrape public TikTok profiles without login — bio, avatar, verification status, and follower/following/like/video counts, plus recent videos (views, likes, comments, shares) when TikTok includes them in the profile page. Uses browser-grade requests (got-scraping) through a residential proxy, since TikTok blocks datacenter IPs aggressively.

Why it's useful

TikTok profile and video stats are in high demand for influencer vetting, competitor tracking, growth monitoring and lead lists — and TikTok has no public API for this. This actor reads the same JSON TikTok's own front-end renders from, giving structured data straight from the source page.

How it works

  1. Fetches https://www.tiktok.com/@{username} with realistic browser headers and a residential proxy session.
  2. Parses the <script id="__UNIVERSAL_DATA_FOR_REHYDRATION__"> JSON blob embedded in the HTML (the same data TikTok's React app hydrates from) — no login, no cookies, no signed API calls.
  3. Reads __DEFAULT_SCOPE__["webapp.user-detail"].userInfo for the profile + stats, and scans the page's other scopes for any embedded video list to build recent_videos.
  4. If the page is blocked (captcha/403/429) or the JSON isn't found, retries with a fresh proxy session up to 5 times. If still blocked, it returns an honest error field — it never fabricates data.

Input

{
"usernames": ["tiktok", "@nasa", "https://www.tiktok.com/@nasa"],
"maxVideos": 30,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] },
"timeoutSecs": 30
}
  • usernames — required. Handles (@name), bare usernames (name) or full profile URLs — all normalized automatically.
  • maxVideos — cap on how many recent videos to keep per profile (0-200, default 30). Videos are only returned when TikTok's page includes them; this never invents entries.
  • proxyConfiguration — residential proxy strongly recommended. TikTok blocks Apify's datacenter IPs almost immediately.
  • timeoutSecs — per-request timeout (5-90s, default 30).

Output (per profile)

{
"username": "nasa",
"uniqueId": "nasa",
"nickname": "NASA",
"signature": "Exploring the universe...",
"verified": true,
"privateAccount": false,
"avatarLarger": "https://...",
"region": "US",
"stats": {
"followerCount": 24000000,
"followingCount": 12,
"heartCount": 300000000,
"videoCount": 900,
"diggCount": 0
},
"recent_videos": [
{
"id": "7123456789012345678",
"desc": "Look at this galaxy 🌌",
"createTime": "2026-01-15T18:00:00.000Z",
"stats": { "playCount": 500000, "diggCount": 40000, "commentCount": 1200, "shareCount": 3000 },
"coverUrl": "https://...",
"url": "https://www.tiktok.com/@nasa/video/7123456789012345678"
}
],
"profileUrl": "https://www.tiktok.com/@nasa",
"scrapedAt": "2026-09-25T12:00:00.000Z"
}

On a block after 5 retries, or if the account doesn't exist:

{ "username": "somehandle", "error": "blocked (needs residential proxy): HTTP 403 (attempt 5/5)" }

Notes

  • Recent videos are best-effort. TikTok often loads a profile's video grid via a separate signed item_list endpoint rather than the initial page JSON. When that happens, this actor returns the profile + stats and a recent_videos_note explaining it — it does not fake video data.
  • Public profiles only. Private accounts return privateAccount: true with whatever public fields TikTok exposes (no video data).
  • Charges 1 profile event per successfully scraped username.

⭐ Enjoying this Actor?

A quick rating/review helps others find it. Need the item_list video endpoint wired in too, or hashtag/sound scraping? Open a ticket on the Issues tab.