TikTok Profile Posts Scraper avatar

TikTok Profile Posts Scraper

Pricing

from $1.00 / 1,000 profile posts

Go to Apify Store
TikTok Profile Posts Scraper

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

Harpoon

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

14 days ago

Last modified

Categories

Security

Limited permissions

Share

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_videos cap.
  • 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 stats object.
  • 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

  1. Open the Input tab.
  2. Paste one or more profile URLs or @handles into Profiles.
  3. Set Max videos per profile (default 100).
  4. 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"
}
FieldDescription
idNumeric video id
profile_usernameThe profile you requested
descriptionVideo caption
created_atUnix creation timestamp
urlCanonical video URL
authorAuthor 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_statsAuthor counters: digg, follower, following, friend, heart, heart_count, video
statsplay_count, like_count, comment_count, share_count, collect_count, repost_count
musicSound id, title, artist, album, duration, shoot duration, original/private/copyrighted/commerce/unlimited flags, covers, play URL, streaming-service mappings (incl. platform token)
videoid, 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
hashtagsArray of hashtag titles
challengesRaw challenge objects (id, title, desc)
is_ad, is_pinned, is_prohibited, is_reviewing, is_hd, show_aigcItem status flags
aigc_description, aigc_label_type, moderation_aigc_label_type, ad_label_versionAIGC / ad-labelling metadata
category_type, brand_organic_type, diversification_id, playlist_id, mask_type, backend_source_event_tracking, ba_infoClassification / tracking fields
collected, digged, for_friend, duet_enabled, duet_display, stitch_enabled, stitch_display, share_enabled, official_item, original_item, private_item, secret, item_muteItem booleans / display flags
item_comment_status, text_language, text_translatable, title_language, title_translatableComment + language metadata
is_image_post, image_postPhoto-post flag and its title, cover, share cover, and slides (image URLs + dimensions)
poiLocation tag: id, name, address, category, city/country codes, TT type names, parent place
storyStory overlay state (expired_at, is_official, viewed)
item_controlAllowed viewer actions (can_comment, can_repost, can_share, ...)
creator_ai_commentCreator AI-comment eligibility
penalty_contextModeration/penalty state (safety status, verdicts, video status)
content_contextOpaque traffic/status tag
text_extraParsed mentions & hashtags with positions and user ids
contentsCaption segments, each with its own text-extra ranges
anchorsAttached link cards (CapCut, etc.): id, type, keyword, link
stickers_on_item, effect_stickersInteractive stickers and visual effects used
scraped_atWhen 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_videos caps the returned rows; very large profiles take longer.
  • Video play_url/download_url are 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.