TikTok Profile Posts Scraper
Pricing
from $1.00 / 1,000 profile posts
TikTok Profile Posts Scraper
Scrape the videos of public TikTok profiles - captions, authors, stats, music, hashtags, and video URLs.
Pricing
from $1.00 / 1,000 profile posts
Rating
0.0
(0)
Developer
Harpoon
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
2
Monthly active users
14 days ago
Last modified
Categories
Security
Limited permissionsShare
Scrape the videos of any public TikTok profile - captions, authors, stats, music, hashtags, media renditions, captions, and moderation/ad flags - in one clean dataset. Paste a profile URL or @handle, press Start, and get structured JSON/CSV/Excel.
What can this Actor do?
- Videos of any public profile - latest videos first, paginated until it reaches your
max_videoscap. - Full feed item, not just the highlights - every field TikTok returns for a post: ad/pinned/reviewing/AIGC flags, V2 stats, mentions, content segments, place, story, allowed actions, penalties, anchors, stickers, and effect stickers.
- Profile plus content in one row - each row carries the author's followers, total likes, and video count alongside the video stats.
- Full engagement metrics - plays, likes, comments, shares, collects, and reposts per video, merged into one clean
statsobject. - Media detail - cover, origin/dynamic covers, zoom covers, play/download URLs, plus every rendition (bitrate, codec, gear, size, file hashes, MVMAF quality map, packet-offset map, codec parameter sets) and audio track.
- Captions & subtitles - auto-caption language, translation state, and each caption/subtitle track with its URL.
- Photo posts - image carousels are flagged (
is_image_post) and their slides/cover URLs returned. - Hashtags - extracted as a clean array, plus the raw challenges and mention/text-extra ranges.
- Deduplicated - a video never appears twice, even across pages.
Why use this Actor?
- No code required - the input form is prefilled with a working example; press Start and it runs as-is.
- Reliable at scale - rotating proxy pool, request hedging, and automatic retries handle TikTok's variability.
- Clean schema - a single flat row per video, ready for your warehouse, sheet, or dashboard.
- Pay per result - you only pay for the videos that actually land in the dataset.
How to use it
- Open the Input tab.
- Paste one or more profile URLs or
@handlesinto Profiles. - Set Max videos per profile (default
100). - Press Start and download your data from the Output tab.
{"profiles": ["https://www.tiktok.com/@mahmoudridaabbas"],"max_videos": 100}
Accepted profile references: https://www.tiktok.com/@user, @user, or user.
Output
One dataset row per video (trimmed for readability - the dataset also carries every field listed in the table below):
{"id": "7510595766524710149","profile_username": "mahmoudridaabbas","description": "🥹🥀#gaza #palestine #freepalestine #support #fypシ゚","created_at": 1748696852,"url": "https://www.tiktok.com/@mahmoudridaabbas/video/7510595766524710149","author": {"username": "mahmoudridaabbas","nickname": "Mahmoud Abbas /Palestine","id": "7206569119830672410","sec_uid": "MS4wLjABAAAA_BrZcjaxkyDTWXD4CWdpKw7noYN_na2xFI2ttMV4THAXq0O6xRRUR2LyEOYdRw6N","verified": true,"private": false,"signature": "الحساب الرسمي لفلسطين ...","avatar_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-alisg-avt-0068/e5ee49b75246bfae0df69669c...","follower_count": 173400,"following_count": 28,"video_count": 157,"heart_count": 356800},"stats": {"play_count": 70400,"like_count": 5531,"comment_count": 412,"share_count": 276,"collect_count": 307,"repost_count": 0},"music": {"id": "7327265877370784514","title": "suara asli - Hijrah ja","author_name": "JojoMBUD","duration": 23,"original": true,"play_url": "https://v45.tiktokcdn-eu.com/bd730a9dd7d835efe6228082b8baf3c1/6aae955c/video/tos/alis..."},"hashtags": ["gaza", "palestine", "freepalestine", "support", "fypシ゚"],"video": {"duration": 0,"ratio": "","width": 0,"height": 0,"definition": "","cover_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-i-photomode-us/1292ab79a3a54756aa...","dynamic_cover_url": "","play_url": "","download_url": ""},"scraped_at": "2026-09-18T13:59:29Z"}
| Field | Description |
|---|---|
id | Numeric video id |
profile_username | The profile you requested |
description | Video caption |
created_at | Unix creation timestamp |
url | Canonical video URL |
author | Author profile: username, nickname, id, sec_uid, verified, bio, avatar (thumb/medium/large), follower/following/video/heart counts, comment/download/duet/stitch settings, room id, short-drama creator |
author_stats | Author counters: digg, follower, following, friend, heart, heart_count, video |
stats | play_count, like_count, comment_count, share_count, collect_count, repost_count |
music | Sound id, title, artist, album, duration, shoot duration, original/private/copyrighted/commerce/unlimited flags, covers, play URL, streaming-service mappings (incl. platform token) |
video | id, duration, ratio, dimensions, size, definition, format, codec, encoded type, CDN video id, quality, VQ score, bitrate, cover/origin cover/dynamic cover/zoom covers, play/download URLs, volume, play-address, renditions (with file hashes, MVMAF, packet-offset map, codec parameter sets), audio tracks, subtitles, captions |
hashtags | Array of hashtag titles |
challenges | Raw challenge objects (id, title, desc) |
is_ad, is_pinned, is_prohibited, is_reviewing, is_hd, show_aigc | Item status flags |
aigc_description, aigc_label_type, moderation_aigc_label_type, ad_label_version | AIGC / ad-labelling metadata |
category_type, brand_organic_type, diversification_id, playlist_id, mask_type, backend_source_event_tracking, ba_info | Classification / tracking fields |
collected, digged, for_friend, duet_enabled, duet_display, stitch_enabled, stitch_display, share_enabled, official_item, original_item, private_item, secret, item_mute | Item booleans / display flags |
item_comment_status, text_language, text_translatable, title_language, title_translatable | Comment + language metadata |
is_image_post, image_post | Photo-post flag and its title, cover, share cover, and slides (image URLs + dimensions) |
poi | Location tag: id, name, address, category, city/country codes, TT type names, parent place |
story | Story overlay state (expired_at, is_official, viewed) |
item_control | Allowed viewer actions (can_comment, can_repost, can_share, ...) |
creator_ai_comment | Creator AI-comment eligibility |
penalty_context | Moderation/penalty state (safety status, verdicts, video status) |
content_context | Opaque traffic/status tag |
text_extra | Parsed mentions & hashtags with positions and user ids |
contents | Caption segments, each with its own text-extra ranges |
anchors | Attached link cards (CapCut, etc.): id, type, keyword, link |
stickers_on_item, effect_stickers | Interactive stickers and visual effects used |
scraped_at | When the row was collected (ISO 8601) |
Pricing
This Actor is billed per 1,000 results (one result = one video). See the Pricing tab for the current rate. A run that returns no new videos is not charged.
FAQ
Do I need cookies or a login? No. Public profiles only - no TikTok account required. The Actor uses a managed signature service and rotating residential proxies under the hood.
Can I scrape private profiles? No. Private accounts and videos are not returned.
How recent are the videos? Newest first, as TikTok orders the profile grid. Long profiles are paginated until max_videos is reached or the profile is exhausted.
Can I run several profiles at once? Yes. Add one profile per line; they are fetched in parallel.
Limitations
- Only public profiles.
max_videoscaps the returned rows; very large profiles take longer.- Video
play_url/download_urlare signed CDN links and can expire; re-run to refresh them. - Result order and availability follow TikTok's own profile feed.
Integrate with your stack
Export the dataset as JSON, CSV, Excel, or XML, or pull it from the Apify API. You can also run this Actor from the Apify MCP server so AI agents can call it directly.