TikTok Profile Videos API Scraper & Reposted Videos
Pricing
from $2.99 / 1,000 results
TikTok Profile Videos API Scraper & Reposted Videos
TikTok Profile Videos API Scraper extracts video data from any TikTok profile, including captions, URLs, thumbnails, metrics, sounds, hashtags, and timestamps. Ideal for content analysis, trend tracking, monitoring creators, and automating high-quality, structured TikTok data collection
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
1
Bookmarked
7
Total users
0
Monthly active users
12 days ago
Last modified
Categories
Share
TikTok Reposted Videos Scraper — Amplified Creators & Bio Data
This TikTok scraper reads a creator's public profile and returns three things in one dataset: the videos they posted themselves, the videos they reposted from other creators (row_type, original_creator_username, original_creator_follower_count), and every @handle a caption mentions (mentioned_usernames, mention_count). Each amplified handle is then enriched once with follower count, bio text, bio link and business-account status. Input is a list of profile URLs or bare usernames; output is one JSON row per video, exportable as JSON, CSV, Excel or XML. It is built for partnerships, influencer-marketing and brand-safety teams who need to know not just how big a creator is, but who they already promote for free.
What is TikTok Profile Videos API Scraper & Reposted Videos?
TikTok Profile Videos API Scraper & Reposted Videos is a profile-level TikTok scraper that walks a creator's own video feed and their Reposts tab, then resolves the amplification graph hiding inside both surfaces — reposted creators and caption @mentions — into a clean, enriched dataset. It reads TikTok's public web pages logged out; no TikTok account, cookie or login is required or accepted anywhere in the input schema.
- Discovery by profile URL or bare handle — one
startUrlsentry per creator, no search query needed. - Two independent amplification signals per row — who a video reposts (
original_creator_*) and who a caption mentions (mentioned_usernames), merged into a singleamplified_usernamesshortlist. - One cached enrichment lookup per distinct amplified creator — follower count, likes, video count, bio text, bio link and commerce-account flag, shared across every row that names that handle.
- Full video metadata on every row — publish time as a real ISO-8601 timestamp, play/like/comment/share/save counts, music and hashtag data, and the raw TikTok payload alongside the parsed fields.
- A partner-only filter (
onlyAmplificationRows) that drops every row that doesn't name another creator, so the dataset can double as a pure outreach shortlist. - Export to JSON, CSV, Excel or XML directly from the Apify dataset, or pulled through the Apify API/SDK.
What data can I extract with TikTok Profile Videos API Scraper & Reposted Videos?
Every dataset row is a video — either one the creator posted or one they reposted — carrying the full amplification graph resolved for that video.
| Field | Example value | Use case |
|---|---|---|
row_type / is_repost | "repost" / true | Split owned content from reposted content in a query or pivot |
url | https://www.tiktok.com/@sevenbucksprod/video/74951... | Canonical link; on a repost row this points at the original video |
id / aweme_id | "74951..." | Stable video identifier (aweme_id is an alias of id) |
desc / description | "Behind the scenes..." | Caption text (description is a trimmed alias of desc) |
created_at_iso | "2026-07-14T16:02:11Z" | Sort or filter by publish date without parsing a unix timestamp |
original_creator_username | "sevenbucksprod" | Who this repost actually promotes |
original_creator_follower_count | 412300 | Size of the account being amplified |
original_video_url | https://www.tiktok.com/@sevenbucksprod/video/74951... | Direct link to the reposted video |
mentioned_usernames | ["sevenbucksprod"] | Every @handle named in the caption |
mention_count | 1 | Quick filter for captions that name someone |
amplified_usernames_text | "sevenbucksprod" | Flattened, table-ready partner list |
top_partner_follower_count | 412300 | Size of the largest partner named on the row |
top_partner_bio_link | https://sevenbucksprod.com | Outreach-ready contact link for the top partner |
play_count / digg_count / comment_count / share_count / collect_count | 1840000 / 210400 / 1820 / 4410 / 9900 | Standard TikTok engagement metrics |
author_username / author_follower_count | "sevenbucksprod" / 412300 | Author of the video actually shown on this row |
profile_username / profile_url | "therock" / https://www.tiktok.com/@therock | The creator you queried — unchanged on every row, even reposts |
video | { "playAddr": {...}, "downloadAddr": {...}, "width": 1080, ... } | Duration, cover images, and signed CDN play/download URLs |
music / added_sound_music_info | { "title": "...", "author": "...", "is_original": true, ... } | Sound metadata, including the original-sound flag |
hashtags | ["behindthescenes"] | Caption hashtags parsed from the rich-text entities |
is_photo_post / image_count | false / null | Flags photo-carousel posts instead of leaving them silently video-less |
amplified_creator_profiles | [{ "username": "sevenbucksprod", "follower_count": 412300, ... }] | Full enrichment card for every amplified handle on the row |
Amplification and partner data
The fields that make this dataset different from a plain video scrape live on two sides of every row. On the repost side, original_creator_username, original_creator_nickname, original_creator_id, original_creator_sec_uid, original_creator_verified and original_creator_follower_count identify who a reposted video actually belongs to. On the mention side, mentioned_usernames, mentioned_user_ids and mentioned_sec_uids are parsed straight out of the caption's textExtra entries with no extra request. Both feed into amplified_usernames — the de-duplicated shortlist for that row — and each entry in that list is looked up once and returned as an object inside amplified_creator_profiles, plus flattened for the table view as top_partner_username, top_partner_follower_count, top_partner_heart_count, top_partner_video_count, top_partner_bio_link, top_partner_signature and top_partner_is_commerce_account. A partnerships analyst can go from "this creator reposted somebody" to "here is that partner's follower count and bio link" without leaving the dataset.
Targeting and segmentation data
row_type and is_repost split owned videos from reposts so you can analyze either surface separately. mention_count and amplified_creator_count let you rank rows by how much amplification they carry, and the onlyAmplificationRows input collapses that into a binary filter — keep only rows that name somebody. created_at_iso supports date-range filtering downstream, and sortOrder controls whether the rows for a given run come back newest-first (TikTok's native order) or re-sorted oldest-first within whatever was fetched.
Why not build this yourself?
TikTok does not publish a public API for a creator's own video feed, their Reposts tab, or the caption-mention graph inside a video payload — everything here comes from TikTok's own web endpoints, the same ones a logged-out browser calls. Building a reliable reader against them yourself means solving problems this Actor already solves in production:
- TikTok's WAF answers everything with HTTP 200. A plain
requests.Sessiongets a ~1,462-byte JavaScript challenge page back with a 200 status —raise_for_status()passes, the page parses as "empty," and a naive scraper reports zero results on a technically successful run. The signal that matters is the response's byte shape, not its status code. - Clearing the challenge requires a real browser. A headless Chromium page has to actually load
tiktok.com/@handle, solve the JS challenge, and mint the cookies (_waftokenid,waforigin_id,waforiginalreid,msToken,ttwid,tt_csrf_token,s_v_web_id) that every subsequent request replays. - The session rots. A warmed session degrades after roughly 15–20 minutes of use, so a long-running scrape needs to detect the rot by response shape and re-warm proactively, not just retry blindly.
- The Reposts tab is reputation-gated. It can return HTTP 200 with a 0-byte body on a session TikTok doesn't trust, independent of the WAF challenge — a different failure mode that needs its own detection and fallback path (proxy escalation, then a brand-new browser session) rather than a generic retry.
- A failed retry can silently duplicate rows if the scraper restarts a profile from page one after partway succeeding. Preventing that requires tracking, per profile, whether any row has already been emitted before allowing a restart.
Why does a plain HTTP scraper see zero results here?
Because TikTok's protection layer (Slardar WAF) never signals failure with an HTTP error code — every dead response, whether a WAF challenge, a signed-endpoint refusal, or a thin page, comes back as status 200. A scraper that checks response.status_code alone will treat all of these as success and either crash on missing fields or silently return nothing. This Actor classifies every response by body shape instead — content length and specific markers distinguish a real payload from a challenge page, a 0-byte refusal, or a thin HTML shell — and only escalates proxy tier or re-warms the browser session when the shape says the current one is dead.
Use TikTok's own app or a manual profile visit when you need a one-off look at a single creator. Use this Actor when you need the same read repeated across a list of creators, on a schedule, with the amplification graph and enrichment already resolved into structured rows.
How to use data extracted from TikTok?
Partnership and influencer-marketing teams
Feed a shortlist of creators into startUrls, leave includeReposts and enrichAmplifiedCreators on, and the dataset comes back as a ready partnership map: every account each creator already promotes for free, with top_partner_follower_count and top_partner_bio_link attached. Sort by amplified_creator_count to find the creators with the widest existing network before you pitch a paid collaboration, or turn on onlyAmplificationRows to strip the dataset down to rows that name somebody.
Agencies vetting a creator roster
Run a client's shortlist of candidate creators on a recurring Apify schedule and diff the amplified_usernames sets run over run. A creator whose reposts and mentions keep landing inside your client's own category is a safer bet than one whose amplification graph never overlaps it — and because enrichment is cached per run, checking ten creators costs one profile lookup per distinct partner they share, not ten.
Market research and competitive intelligence
Run a set of brand or competitor TikTok accounts with onlyAmplificationRows enabled and treat the output as an edge list: profile_username reposts or mentions top_partner_username. Aggregating those edges across a run maps which creators a category's biggest accounts already amplify, without hand-checking each profile's Reposts tab one at a time.
AI agents and automated pipelines
Because the Actor runs as a standard Apify Actor with a JSON input and a JSON dataset output, an agent framework can call it as a tool step in a pipeline — resolve a creator's amplification graph, hand amplified_creator_profiles to an enrichment or scoring step, and feed the result into a downstream outreach or reporting agent without any custom scraping code.
🔼 Input sample
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
startUrls | Yes | array | TikTok profile URLs (https://www.tiktok.com/@username) or plain handles (mrbeast), one per line. | ["https://www.tiktok.com/@therock"] |
maxVideos | No | integer | How many of the creator's own videos to read; captions are scanned for @-mentions. 0 = no cap. TikTok's own feed returns 15 videos per request regardless of this value. Default 10, minimum 0. | 10 |
includeReposts | No | boolean | Fetch the videos this creator reposted. On a repost row the author, stats, video, music and URL fields describe the original video; the original creator is copied into the original_creator_* fields. Default true. | true |
maxReposts | No | integer | Cap on reposted videos read per creator. 0 = read the whole Reposts tab (the tab returns 20 per request). Default 20, minimum 0. | 20 |
onlyAmplificationRows | No | boolean | Drop rows that neither repost anyone nor @-mention anyone, leaving a clean partner shortlist. Default false. | false |
enrichAmplifiedCreators | No | boolean | Look up each reposted or mentioned creator once: follower, likes and video counts, bio text, bio link and business-account flag. Default true. | true |
maxEnrichedCreators | No | integer | Stop enriching after this many distinct handles in one run. 0 = no cap. Rows past the budget still carry the handles, just no profile card. Default 25, minimum 0. | 25 |
sortOrder | No | string (enum: newest, oldest) | newest — as TikTok's feed serves it. oldest re-sorts only the videos this run already fetched, oldest first; it does not reach further back into the creator's history. Default newest. | "newest" |
proxyConfiguration | No | object | No proxy by default. If TikTok's WAF blocks the run, the Actor escalates datacenter → residential automatically. Residential is the most reliable tier for the Reposts tab. Default {"useApifyProxy": false}. | {"useApifyProxy": false} |
{"startUrls": ["https://www.tiktok.com/@therock","khaby.lame"],"maxVideos": 10,"includeReposts": true,"maxReposts": 20,"onlyAmplificationRows": false,"enrichAmplifiedCreators": true,"maxEnrichedCreators": 25,"sortOrder": "newest","proxyConfiguration": { "useApifyProxy": false }}
Common pitfall: setting sortOrder to "oldest" expecting to page further back into a creator's history. It doesn't — TikTok's own reverse-chronological flag returns the identical newest-first page regardless of its value, so this Actor works around that by locally re-sorting whichever videos maxVideos already pulled. If you need older history, raise maxVideos (or set it to 0) rather than relying on sortOrder alone.
🔽 Output sample
Output is typed, normalized JSON — one row per video, whether it was posted by the creator or reposted from someone else — available as JSON, CSV, Excel or XML from the Apify dataset. Every row placed in the dataset is billed as one row_result event; rows dropped by onlyAmplificationRows are filtered out before they are pushed, so they are never written to the dataset and never charged.
{"row_type": "repost","is_repost": true,"reposted_by_username": "therock","repost_position": 1,"original_creator_username": "sevenbucksprod","original_creator_nickname": "Seven Bucks Productions","original_creator_id": "6746883817129738245","original_creator_sec_uid": "MS4wLjABAAAA...","original_creator_verified": true,"original_creator_follower_count": 412300,"original_video_url": "https://www.tiktok.com/@sevenbucksprod/video/7495100000000000001","mentioned_usernames": [],"mentioned_user_ids": [],"mentioned_sec_uids": [],"mention_count": 0,"amplified_usernames": ["sevenbucksprod"],"amplified_usernames_text": "sevenbucksprod","amplified_creator_count": 1,"amplified_creator_profiles": [{"username": "sevenbucksprod","profile_url": "https://www.tiktok.com/@sevenbucksprod","nickname": "Seven Bucks Productions","user_id": "6746883817129738245","sec_uid": "MS4wLjABAAAA...","verified": true,"private_account": false,"region": "US","signature": "Story-first production company.","bio_link": "https://sevenbucksprod.com","is_commerce_account": true,"commerce_category": "Media","follower_count": 412300,"following_count": 12,"heart_count": 5820000,"video_count": 431}],"top_partner_username": "sevenbucksprod","top_partner_follower_count": 412300,"top_partner_heart_count": 5820000,"top_partner_video_count": 431,"top_partner_signature": "Story-first production company.","top_partner_bio_link": "https://sevenbucksprod.com","top_partner_is_commerce_account": true,"top_partner_profile_url": "https://www.tiktok.com/@sevenbucksprod","id": "7495100000000000001","aweme_id": "7495100000000000001","url": "https://www.tiktok.com/@sevenbucksprod/video/7495100000000000001","desc": "Behind the scenes on set today.","description": "Behind the scenes on set today.","created_at_iso": "2026-07-14T16:02:11Z","author_username": "sevenbucksprod","author_nickname": "Seven Bucks Productions","author_follower_count": 412300,"play_count": 1840000,"digg_count": 210400,"comment_count": 1820,"share_count": 4410,"collect_count": 9900,"is_photo_post": false,"image_count": null,"hashtags": ["behindthescenes"],"video": {"duration": 24,"width": 1080,"height": 1920,"playAddr": { "uri": "", "url_list": ["https://v.tiktokcdn.com/..."], "data_size": 4821302, "width": 1080, "height": 1920, "file_hash": "", "file_cs": "" }},"music": {"id": "7495100000000000010","title": "original sound - sevenbucksprod","author": "sevenbucksprod","is_original": true,"duration": 24},"profile_username": "therock","profile_url": "https://www.tiktok.com/@therock"}
How do you filter and target specific videos and creators?
This Actor's targeting is amplification-first, not category-first — there is no location, price or category filter to reason about, because the whole point is narrowing a creator's own feed down to the rows that name someone else. Start with scope precision: maxVideos and maxReposts set how deep into each feed the run goes (0 on either means "keep paging until TikTok stops returning rows"), while includeReposts toggles whether the Reposts tab is read at all — turn it off if you only want the caption-mention graph from owned videos. Next, apply the quality/relevance threshold: onlyAmplificationRows is the single most useful filter here, dropping every row where amplified_usernames is empty so the dataset only contains videos that actually promote someone. Finally, control enrichment volume with maxEnrichedCreators — the budget is per distinct handle across the whole run, not per row, so scanning ten creators who share five common partners still only enriches those five once.
{ "startUrls": ["therock"], "maxVideos": 0, "includeReposts": false, "enrichAmplifiedCreators": false }
A caption-mention-only scan: read the creator's entire own-video history, skip the Reposts tab and skip enrichment for the fastest possible run.
{ "startUrls": ["therock", "khaby.lame"], "onlyAmplificationRows": true, "maxEnrichedCreators": 0 }
A pure partnership shortlist across two creators: every row names somebody, and every amplified handle gets enriched with no cap.
{ "startUrls": ["therock"], "maxReposts": 50, "includeReposts": true, "sortOrder": "oldest" }
A deep read of one creator's Reposts tab, with the fetched rows re-sorted oldest-first within that batch.
▶️ Want to try other TikTok scrapers?
| Scraper | What it extracts |
|---|---|
| TikTok Discover Scraper By Account Name & Bio | Discovers TikTok accounts by name or bio keyword instead of a known handle |
| TikTok Hashtag Scraper: Hashtag Reach & Co-Tag Stats | Hashtag reach and co-occurring hashtag statistics |
| TikTok Creative Center Top Ads Insights | TikTok Creative Center ad and trend insights |
| Instagram Post Scraper With Creator Profiles | Instagram posts paired with the posting creator's profile data |
| Instagram Profile Reels Scraper With Creator Profiles | Instagram Reels plus the creator profile behind each one |
| Instagram Followers Scraper | A profile's follower list, for the same kind of network-mapping this Actor does on TikTok |
How to extract TikTok data programmatically
This Actor runs like any other Apify Actor: start it from the Console, via a schedule, or with one call through the apify-client SDK — one method call in, structured JSON dataset rows out. No signed headers or platform API key to manage yourself.
Python example
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("USERNAME/tiktok-profile-videos-api-scraper-reposted-videos").call(run_input={"startUrls": ["https://www.tiktok.com/@therock", "khaby.lame"],"maxVideos": 15,"onlyAmplificationRows": True,"maxEnrichedCreators": 50,})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["profile_username"], row["amplified_usernames_text"], row["top_partner_follower_count"])
Export to spreadsheets or CRM
From the Apify Console's dataset view, export directly to CSV or Excel. Map amplified_usernames_text and top_partner_bio_link into your CRM's contact and link columns, top_partner_follower_count into a reach column, and original_creator_username / profile_username into your source-and-partner columns for a ready outreach sheet.
Is it legal to scrape TikTok?
Yes — this Actor reads only public TikTok pages: the same profile, video and caption data any logged-out visitor can see, with no login, cookie or private content involved. TikTok profiles and bios are personal data about identifiable individuals, so GDPR (in the EU/UK) and the CCPA (in California) govern how you may store, process and reuse it — you need a lawful basis for holding personal data, and you should honor deletion or access requests from the individuals it describes. Scraping the data itself is not blanket-illegal, but TikTok's Terms of Service impose their own restrictions on automated access that you accept when you use the platform. Consult legal counsel for commercial applications involving bulk storage of personal data.
❓ FAQ
What happens if a creator's profile is private, deleted, or fails to load?
The run logs the failure and moves on to the next profile in startUrls; no rows are emitted for that handle, and the failed lookup does not stop the rest of the run. TikTok's public web pages never serve video data for a profile the Actor cannot resolve, so there is nothing to return for it.
Can I get the original creator and mentioned-creator data along with each video?
Yes — that's the core of this Actor. original_creator_* fields identify who a reposted video belongs to, mentioned_usernames lists every caption @mention, and both roll up into amplified_usernames on the same row as the video itself. No second run or lookup is required.
How accurate is the follower count and bio data for amplified creators?
It reflects each partner's public profile exactly as TikTok served it at the moment this Actor enriched that handle during the run — the same numbers a logged-out visitor would see on their profile page. Because follower counts and bios change over time, re-run the Actor if you need a current figure rather than relying on a cached export.
How many videos and reposts can I pull per run?
There is no fixed dataset cap — maxVideos and maxReposts control it per creator, and setting either to 0 keeps paging until TikTok stops returning items. Under the hood, TikTok serves the own-video feed 15 items per request and the Reposts tab 20 items per request regardless of these settings; the inputs control how many pages the Actor reads, not the page size.
Does sortOrder: "oldest" really reach further back into a creator's history?
No. TikTok's own reverse-chronological flag on this endpoint returns the same newest-first page no matter what you send it, so oldest only re-sorts the videos this run already fetched with maxVideos — it cannot page deeper into history than that setting allows.
How do I get a clean shortlist of only the creators a profile promotes?
Set onlyAmplificationRows to true. Every row that neither reposts nor mentions anyone is dropped before it reaches the dataset, so what's left is a pure partnership list keyed on amplified_usernames.
Do I need a TikTok login, cookie, or API key to run this?
No. The Actor reads TikTok's public web pages logged out; it accepts no credentials in its input schema and needs none to return data from public profiles.
Does this scraper work with Claude, ChatGPT, and other AI agent frameworks?
Yes, as a callable Apify Actor rather than through a dedicated MCP server: any agent framework that can make an HTTP call or use the apify-client SDK can invoke it as a tool step and consume the returned JSON dataset directly.
How does this compare to other TikTok scrapers?
As observed on the Apify Store on 2026-07-30: novi's TikTok Profile Videos API documents plain video/user endpoints and a legacy single-username input shape, but its published README does not document a Reposts-tab or caption-mention feature. khadinakbar's TikTok Profile Scraper focuses on profile-level metrics and a computed Influencer Score, with per-profile pay-per-event pricing published on its listing, but its README does not document repost or mention extraction either. openclawai's multi-platform scraper covers TikTok, Douyin and Bilibili with a broader mode set (comments, likes, live rooms), but its documented modes (video_detail, user_posts, user_profile, user_likes) do not include a reposts or caption-mention mode. This Actor's distinguishing feature — resolving reposted and mentioned creators into an enriched amplification graph on every row — is not documented in any of the three at the time checked.
Conclusion
TikTok Profile Videos API Scraper & Reposted Videos turns a list of creator handles into a structured amplification map: their own videos, the videos they reposted, and every creator they name in a caption, each amplified handle enriched with follower count and bio link. It's built for partnership research, agency vetting and competitive-amplification tracking, and its schema stays consistent whether a row is an owned video or a repost. Start a run from the Apify Console, via the API, or on a schedule, and export the resulting dataset straight to JSON, CSV, Excel or XML.