TikTok Profile Videos API Scraper avatar

TikTok Profile Videos API Scraper

Pricing

$19.99/month + usage

Go to Apify Store
TikTok Profile Videos API Scraper

TikTok Profile Videos API Scraper

TikTok Profile Videos API Scraper collects video data from any public TikTok profile, including captions, likes, comments, shares, and video URLs. Ideal for analytics, content tracking, and influencer research. Get structured JSON or CSV outputs easily with Apify’s scalable platform.

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

0

Monthly active users

a day ago

Last modified

Share

TikTok Profile Video Scraper — Captions, Stats & Sound Data

TikTok Profile Video Scraper reads a public TikTok creator's upload feed and returns every video as structured JSON — caption, real hashtags and mentions, play/like/comment/share/save counts, an ISO-8601 post date, sound metadata, and the video's play and download URLs. No TikTok login, cookie, or account is required. Point it at one profile or a hundred and get one row per upload, ready to export as JSON, CSV, Excel or XML — start a run to see the full field set on your own creators.

What is TikTok Profile Video Scraper?

TikTok Profile Video Scraper is a TikTok video scraper scoped to one entity: a creator's public upload feed. Give it a profile URL or username and it returns one dataset row per video — caption, engagement counts, post date, sound metadata, and media URLs — as typed JSON, with no HTML to parse. The source code accepts no credential field of any kind, so no TikTok login, cookie, or session token is ever required or used. It's built for social media analysts, influencer researchers, and developers or AI engineers who need TikTok creator data in a clean, consistent schema.

What TikTok video data is publicly available to scrape?

Everything a logged-out visitor sees on a creator's public profile and video pages is accessible without a TikTok account; content behind a login wall is not.

Data categoryPublicly availableRestricted (needs TikTok login)
Captions, hashtags and mentions
Engagement counts (plays, likes, comments, shares, saves)
Post date and video duration
Creator username, nickname, follower count
Sound / music metadata
Video play and download URLs✅ (signed, expiring)
Full comment threadsTikTok's authenticated comment surface
Private-account videosFollowing the account while logged in

TikTok Profile Video Scraper only returns publicly visible data — what any visitor sees. Nothing behind a login wall.

What data can I extract with TikTok Profile Video Scraper?

TikTok Profile Video Scraper returns video identity and caption fields, engagement and creator metrics, and TikTok's full nested media objects on every row.

Field nameDescription
id / aweme_idThe video's TikTok ID (same value on both keys)
urlCanonical video URL, built from the requested profile and video ID
desc / descriptionFull caption text, and a trimmed alias of the same text
createTime / createTimeISOUnix seconds and ISO-8601 UTC post timestamp
scrapedAtISO-8601 UTC timestamp of when this run read the video
profile_username / profile_urlThe profile you requested, and its canonical URL
playCount, diggCount, commentCount, shareCount, collectCountPlays, likes, comments, shares and saves, as flat integer columns
durationSecondsVideo length in seconds
isPhotoPosttrue for TikTok photo carousels, which carry no video file
videoPlayUrl / videoDownloadUrlSigned CDN play and download URLs (null on photo posts)
hashtags / hashtagNamesReal hashtags read from TikTok's caption annotations, as objects and as a plain name list
mentions / mentionedUsernamesMentioned or collaborating creators, as objects and as a plain username list
authorUsername, authorNickname, authorFollowerCountFlat creator summary columns
authorTikTok's full raw author object (avatars, verified flag, secUid, region, and more)
videoTikTok's full raw video object (bitrate ladder, codec, covers, dimensions)
musicNormalized sound object (title, artist, duration, original-sound flag, cover and play URLs)
challenges / cha_listTikTok's hashtag ("challenge") records attached to the video
stats / authorStatsTikTok's raw nested statistics objects, kept alongside the flat columns above

Video identity and caption fields

id, aweme_id, url, desc, description, createTime, createTimeISO, scrapedAt, profile_username, profile_url, hashtags, hashtagNames, mentions, mentionedUsernames, isPhotoPost, videoPlayUrl, videoDownloadUrl — everything that identifies the video, when it was posted, what it says, and where its file lives.

Engagement and creator metrics

playCount, diggCount, commentCount, shareCount, collectCount, durationSeconds, authorUsername, authorNickname, authorFollowerCount — the numbers TikTok's feed publishes for the video and the creator behind it.

🤖 Add-on: Need additional TikTok data?

Looking for videos by hashtag instead of by creator? TikTok Hashtag Scraper and TikTok Discover Scraper cover keyword, tag and search-based discovery, so you can pair creator feeds from this actor with tag-driven or keyword-driven runs from either of them.

Why not build this yourself?

TikTok has no general-purpose public API that hands a third party a creator's full public video feed with engagement counts — the platform's own developer program is scoped to approved apps acting on their own linked account, not arbitrary public profiles. Building a scraper yourself means solving TikTok's WAF challenge, which answers HTTP 200 for both real pages and refusals, so you can't trust a status code at all. You'd need a real browser to mint session cookies, a TLS-fingerprint-matched HTTP client to replay them, a way to classify every response by body shape instead of status, and a proxy budget for the datacenter and residential tiers TikTok's feed endpoint actually accepts. This actor's engine already does all of that — including re-warming its session automatically before it rots — so none of that maintenance lands on you.

How to use TikTok Profile Video Scraper

TikTok Profile Video Scraper runs on Apify, so there's no separate signup, API key registration, or app-review process — you use your Apify account.

  1. Open TikTok Profile Video Scraper on its Apify Store page and click Try for free.
  2. Paste one or more TikTok profile URLs or bare usernames into Profiles to scrape (startUrls) — this is the only required input.
  3. Set Max videos per profile (maxVideos, default 10, 0 for no cap) and pick a Row order (sortOrder: newest or oldest).
  4. Leave Proxy on its default — the actor escalates direct → datacenter → residential by itself — or select RESIDENTIAL up front to skip straight to the tier TikTok's feed actually serves from.
  5. Start the run, then download or stream the results as JSON, CSV, Excel or XML from the Apify Console, or read the dataset through the Apify API.

How to scale to bulk video extraction

startUrls is an array, so bulk scraping needs no separate mode or extra step: list as many profile URLs or usernames as you want, one per line, and every one of them is scraped within the same run. Each row is tagged with profile_username, so a single dataset covering dozens of creators can still be split back out per profile after export.

What can you do with TikTok video data?

  • 📊 A social media analyst tracking a brand's TikTok output uses playCount, diggCount and createTimeISO to chart posting cadence and engagement trend over time.
  • 🎯 A talent scout vetting creators for a campaign uses authorFollowerCount alongside playCount and collectCount to check whether a creator's engagement actually matches their follower count.
  • 🏷️ A content strategist studying hashtag performance uses hashtagNames and mentionedUsernames to see which tags and collaborators correlate with a creator's best-performing uploads.
  • 🎵 A trend researcher uses the music object's id and is_original flag to find which sounds a creator reuses versus which uploads carry original audio.
  • 🤖 An AI engineer building a TikTok trend-monitoring agent feeds the JSON rows — caption, hashtags, engagement counts — directly into a RAG pipeline or an LLM prompt to summarize a creator's recent themes, with no HTML parsing step in between.

Because every run is reachable through the Apify API, any agent framework that can make an HTTP call can trigger a run and read the results back as structured data.

How does TikTok Profile Video Scraper handle rate limits and blocking?

TikTok answers HTTP 200 for both real pages and refusals, so the actor never trusts a status code — every response is classified by its body shape (empty, a small WAF-challenge page, or a real multi-hundred-KB payload). A headless Chromium browser solves TikTok's WAF challenge once per creator to mint session cookies, then a curl_cffi client impersonating Chrome replays the profile feed using those cookies. A WAF-shaped response triggers up to two session re-warms before the actor escalates one rung up its proxy ladder — direct → datacenter → residential — since TikTok's feed is served far more reliably from residential exits. Sessions are proactively refreshed after 12 minutes of age, ahead of where they have been observed to degrade. If a profile's feed can't be read at all, that profile is logged as failed and the run continues with the rest; once a video has been emitted for a profile, the engine will not restart it from scratch, so a later failure only stops that profile with what was already collected. If an entire run returns zero videos, it ends as failed with the reason, rather than finishing green with an empty dataset.

⬇️ Input

ParameterRequiredTypeDescriptionExample value
startUrlsYesarray of stringsTikTok profile URLs (https://www.tiktok.com/@username) or bare usernames (mrbeast). One per line.["https://www.tiktok.com/@mrbeast"]
maxVideosNointeger (min 0, default 10)How many videos to return per profile. Use 0 for every video the profile feed exposes (slower, more pages).10
sortOrderNostring enum (default "newest")newest or oldest. TikTok's own sort flag is a no-op — it returns the identical newest-first page — so oldest is applied to the videos collected in this run; with maxVideos: 0 that is the profile's true oldest-first order."newest"
proxyConfigurationNoobject (proxy editor, prefill {"useApifyProxy": false})TikTok refuses its feed endpoint from many exit IPs (HTTP 200 with an empty body). Left off, the actor escalates direct → datacenter → residential by itself; selecting RESIDENTIAL skips the two dead rungs.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

Example input

{
"startUrls": [
"https://www.tiktok.com/@mrbeast",
"khaby.lame"
],
"maxVideos": 25,
"sortOrder": "newest",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

⬆️ Output

Every run writes typed, normalized JSON to an Apify dataset — one row per video, with a consistent field set across runs. Export the dataset as JSON, CSV, Excel or XML from the Apify Console, or read it directly through the Apify API or apify_client.

This actor is billed pay-per-event on a single event, row_result: every video row written to the dataset is charged under row_result, because the only place the actor writes to the dataset is the one Actor.push_data(row, charged_event_name="row_result") call made once per video. A profile that fails outright (private, deleted, or unreadable) never reaches that call, so it produces no row and is never charged — it only shows up in the run log as a failed profile.

Example output

{
"id": "7671203948120340485",
"aweme_id": "7671203948120340485",
"url": "https://www.tiktok.com/@mrbeast/video/7671203948120340485",
"desc": "we spent 7 days in a submarine #ocean #challenge",
"description": "we spent 7 days in a submarine #ocean #challenge",
"createTime": 1785013200,
"createTimeISO": "2026-07-24T09:00:00Z",
"scrapedAt": "2026-07-30T12:05:41Z",
"profile_username": "mrbeast",
"profile_url": "https://www.tiktok.com/@mrbeast",
"playCount": 41200000,
"diggCount": 3980000,
"commentCount": 52100,
"shareCount": 104300,
"collectCount": 287600,
"durationSeconds": 612,
"isPhotoPost": false,
"videoPlayUrl": "https://v16-webapp-prime.tiktok.com/video/tos/useast5/tos-useast5-pve-0068/example/",
"videoDownloadUrl": "https://v16-webapp-prime.tiktok.com/video/tos/useast5/tos-useast5-pve-0068/example/",
"hashtagNames": ["ocean", "challenge"],
"mentionedUsernames": [],
"authorUsername": "mrbeast",
"authorNickname": "MrBeast",
"authorFollowerCount": 118700000,
"hashtags": [
{ "name": "ocean", "id": "228104" },
{ "name": "challenge", "id": "10201" }
],
"mentions": null,
"music": {
"id": 7671203901234567890,
"id_str": "7671203901234567890",
"title": "original sound",
"author": "MrBeast",
"duration": 612,
"is_original": true,
"is_original_sound": true,
"is_copyrighted": false,
"user_count": null,
"status": null,
"play_url": {
"uri": "https://sf16-ies-music.tiktokcdn.com/obj/example.mp3",
"url_list": ["https://sf16-ies-music.tiktokcdn.com/obj/example.mp3"],
"data_size": null,
"width": null,
"height": null,
"file_hash": null,
"file_cs": null
}
},
"author": {
"uniqueId": "mrbeast",
"nickname": "MrBeast",
"verified": true,
"secUid": "MS4wLjABAAAAexampleSecUidValue",
"region": "US"
},
"video": {
"duration": 612,
"ratio": "1080p",
"codecType": "h264",
"definition": "1080p",
"bitrate": 2104556
},
"stats": {
"playCount": 41200000,
"diggCount": 3980000,
"commentCount": 52100,
"shareCount": 104300,
"collectCount": 287600
},
"authorStats": {
"followerCount": 118700000
},
"cha_list": [
{ "id": "228104", "title": "ocean", "desc": null, "view_count": null, "user_count": null }
]
}

How does it work?

TikTok Profile Video Scraper opens the requested profile in a headless Chromium browser once, letting the real browser JavaScript clear TikTok's WAF challenge and mint the session cookies (msToken, ttwid, and the WAF's own tokens) that the feed endpoint expects. Every following request — the profile page and TikTok's creator video feed — replays through a curl_cffi client fingerprinted as Chrome, carrying those cookies, and pages through the feed with a time cursor until it hits your maxVideos cap or TikTok stops returning new videos. Because TikTok answers HTTP 200 for refusals as well as real pages, the actor classifies every response by its body shape rather than its status code, and escalates through a direct → datacenter → residential proxy ladder when a response comes back refused. Only the same public, logged-out feed a browser visitor would see is ever touched, and the output schema — flat columns plus TikTok's raw item — stays the same even when TikTok changes its page markup.

Integrations

TikTok Profile Video Scraper runs on Apify, so it's reachable anywhere the Apify API is — no separate signup or credential system to manage.

Calling TikTok Profile Video Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraper-engine/tiktok-profile-videos-api-scraper").call(
run_input={
"startUrls": ["https://www.tiktok.com/@mrbeast", "khaby.lame"],
"maxVideos": 25,
"sortOrder": "newest",
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["profile_username"], item["desc"], item["playCount"])

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

No-code tools (n8n, Make, LangChain)

In n8n, use the HTTP Request node (or the community Apify node) pointed at this actor's run endpoint with your API token, then pass the returned dataset ID into a second HTTP Request node to fetch items. In Make, use Apify's own app module to run the actor and iterate the dataset items in a subsequent module. In LangChain or a custom agent framework, wrap the apify_client call above as a tool function and feed the returned JSON rows straight into your chain or agent context.

Scraping publicly available data, including public TikTok videos and creator profile fields, is broadly permitted in many jurisdictions, but the specifics depend on where you operate and how you use the data. TikTok Profile Video Scraper returns only what any logged-out visitor can already see — no login, cookie or private content is accessed. Because the output includes fields tied to identifiable creators (usernames, nicknames, follower counts), personal-data regimes such as GDPR and CCPA can apply to how you store, process and reuse it, even though the underlying content is public. Consult legal counsel if your use case involves bulk storage of personal data.

Frequently asked questions

What TikTok video fields does TikTok Profile Video Scraper return?

The five most-used fields are desc (caption), createTimeISO (post date), playCount, diggCount and hashtagNames — see What data can I extract above for the full field list, including the nested author, video and music objects.

Does TikTok Profile Video Scraper require a TikTok account or login?

No. The input schema has no field for a cookie, session ID or token, and the engine never authenticates — it only reads the same public profile and feed pages a logged-out visitor would see.

How many TikTok videos can I extract in one run?

As many as the public feed exposes. Set maxVideos per profile, or 0 to walk the entire feed until TikTok stops returning new videos or the actor reaches the start of TikTok's history — there's no separate cap imposed by the actor itself.

What happens if a profile is private or doesn't exist?

The run logs that profile as failed and moves to the next one — no rows are fabricated for it. Internally, the actor requires TikTok's profile page to expose a secUid before it will page the feed; a private, deleted or nonexistent profile never carries one, so it's treated as unreadable rather than silently returning zero videos as a success.

Can I scrape multiple TikTok profiles at once?

Yes. startUrls is an array — add one profile URL or username per line and all of them are processed in the same run, each row tagged with profile_username.

Does TikTok Profile Video Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes, as an HTTP endpoint. It isn't registered on a dedicated MCP server, but any agent framework that can call the Apify API — including through apify_client — can start a run and read the dataset back as tool output.

How does TikTok Profile Video Scraper compare to other TikTok scrapers?

As observed on the Apify Store on 2026-07-30: novi/tiktok-user-api covers profile videos plus comments in one actor and accepts usernames, URLs or numeric user IDs; khadinakbar/tiktok-profile-scraper returns profile-level metrics with a computed influencer score but treats video stats as best-effort and null-safe rather than a primary output; openclawai/tiktok-douyin-bilibili-scraper spans three platforms and multiple content modes (videos, comments, live rooms) with a unified cross-platform schema. TikTok Profile Video Scraper is scoped to one thing — a creator's video feed — and keeps TikTok's complete raw item on every row alongside the flat columns, rather than trimming the payload down to a fixed field list.

Does TikTok Profile Video Scraper return data in a format LLMs can use directly?

Yes. Every row is typed, normalized JSON with consistent field names across runs — no HTML, no selectors. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.

What happens when TikTok changes its layout or anti-bot system?

The actor is maintained and its output schema is designed to stay stable across TikTok's page and payload changes, since the engine classifies responses by body shape rather than by brittle HTML selectors. No specific update or fix turnaround time is promised.

Can I use TikTok Profile Video Scraper without managing proxies or browser infrastructure?

Yes. The headless-browser session warm-up and the direct → datacenter → residential proxy escalation both run inside the actor — you only supply profiles and, optionally, a preferred proxy tier.

Which TikTok video fields work best for AI training data and RAG indexing?

For RAG, index desc (the caption text) alongside hashtagNames and mentionedUsernames for entity context. For training data, playCount, diggCount, commentCount, shareCount and collectCount are consistently present, typed integers across every row, making them reliable numeric features.

ScraperWhat it extracts
TikTok Discover ScraperTikTok videos from a keyword, hashtag, username or search/tag URL
TikTok Hashtag ScraperTikTok videos surfacing under a hashtag or keyword search
Instagram Profile Reels ScraperReels from public Instagram profiles, by username or profile URL
Instagram Post ScraperInstagram posts, reels and carousels from profiles or single post URLs
YouTube Metadata Scraper (Hashtag Video Finder)Full video metadata, comments and transcripts behind a YouTube hashtag

💬 Your feedback

Found a bug or missing a field? Let us know through the Issues tab on this Actor's Apify Store page, or contact Scraper Engine support directly — reports get triaged into the next maintenance pass.