TikTok Profile Posts - Bulk Video Scraper [NO LOGIN] ✅
Pricing
$5.00 / 1,000 results
TikTok Profile Posts - Bulk Video Scraper [NO LOGIN] ✅
Scrape every public TikTok video from any profile - captions, views, likes, no-watermark MP4 URLs, ad flags, TikTok Shop links, cross-platform creator IDs. Optional per-video transcripts (AI fallback). Also scrape public TikTok collections/playlists by URL. Clean, flat, analysis-ready output.
Pricing
$5.00 / 1,000 results
Rating
5.0
(4)
Developer
Unseen User
Maintained by CommunityActor stats
4
Bookmarked
74
Total users
36
Monthly active users
12 hours ago
Last modified
Categories
Share
TikTok Posts Scraper - Profile Videos & Influencer Database with No-Watermark URLs (No Login)
This is the QUALITY-tier TikTok profile scraper. If you need structured, analysis-ready data with reliable no-watermark URLs, you're in the right place.
Pull every public video from a TikTok profile with full engagement stats and reliable no-watermark video URLs. The foundation for a TikTok influencer database, content audit, or full creator archive. No login, no cookies, no token rotation, no proxy management on your side.
Quick Reference
| Property | Value |
|---|---|
| Public Name (Apify Title) | TikTok Posts Scraper - Profile Videos with No-Watermark URLs (No Login) |
| Apify Slug | unseenuser/TikTok-posts |
| Short Description | Pull every public video from a TikTok profile with full engagement stats and no-watermark video URLs. |
| Login required | No |
| Atomic Actor | Yes - single-job actor for TikTok profile videos |
| Output format | Flat, normalized dataset rows (one per video) |
| Bulk input | Mixed URLs, handles, and user_ids in one field |
| Effective Date | May 5, 2026 |
| Master ToS Version | 4.0 |
| Keywords | tiktok posts, tiktok profile videos, creator content, ugc research, no watermark, content extraction |
What's new
Recent substantive additions. Full history in the Changelog at the bottom of this file.
- Aug 2026 - TikTok playlist / collection scraping. The
profilesinput now auto-detects public TikTok collection (playlist) URLs alongside handles, user_ids, and profile URLs. Mix any combination in one run. - Aug 2026 - Per-video transcript feature. Opt-in
include_transcriptflag adds WEBVTT transcripts to each video row. Uses TikTok's native captions when available (free), falls back to AI generation when they aren't (billed as a paid event at $10 per 1,000 AI transcripts). - Aug 2026 - 33 new output fields. Cross-platform creator IDs (Instagram, YouTube, Twitter), TikTok Shop product URLs per video, AI-generated content flag, paid partnership flag, tagged mentions with resolved user IDs, video permission flags, playlist metadata, four extra engagement counters, and creator bio + region + avatar. All extracted from the existing upstream response - zero extra API calls per row.
- Aug 2026 - Stricter
is_addetection. Now requires multiple corroborating signals to reduce false positives on business/commerce accounts. See "How flag detection works" and the FAQ for details. - Aug 2026 - Real-time row streaming. Each row hits your dataset the moment it's ready instead of batching per API page.
What you get, in one line
A flat, normalized dataset row per public video on the profile, with engagement counters, a guaranteed-shape clean_url field for no-watermark MP4 access (and a clean_url_source that tells you exactly which upstream field it came from), correctly mapped pinned/ad/shop flags, carousel slideshow images, music attribution, author info, and a _metadata block with provenance.
What's included
- One bulk Profiles field that accepts URLs, handles, and user_ids in any combination
- Auto-detection per row - paste 200 mixed entries, the Actor figures each one out
- Pagination handled internally up to your per-profile cap (default
0= every video, no upper limit) - No-watermark URL precedence: dedicated no-watermark address first, play address fallback when watermark is absent, explicit
nullwhen neither is safe - Carousel (photo slideshow) support with extracted
slideshow_images[] - Pinned post detection via
is_pinned - Ad detection via
is_ad(correctly wired - many scrapers miswire this asis_adsand silently return nothing) - TikTok Shop promo detection via
is_shop_promo - Music attribution (title, author, ID) on every video
- Author metadata (handle, display name, follower count, verified) on every video
- Per-profile error isolation - one bad handle in a bulk run does not kill the rest
- Retries with exponential backoff on transient upstream errors
- Dataset views preconfigured in the Apify UI: Overview, Engagement, Downloads, Errors
Free plan limit
Free Apify users get up to 50 results per run. Paying users are not affected and receive results normally.
This limit was set by the Actor developer, not by Apify. To remove it and receive unlimited results, upgrade to any paid Apify plan: https://apify.com/pricing
When a free plan run hits the cap, the Actor finishes successfully (status SUCCEEDED) and the run's status message explains what happened. No error is raised, so the first 50 results are fully usable as normal.
Hero use case
A content analyst auditing 50 competitor TikTok creators: pull every video for each with normalized fields (views, likes, no-watermark URL, ad flag, shop-promo flag, slideshow images). Clean dataset, ready for analysis. No JSON debugging.
Sample output (this Actor vs. commodity scrapers)
What this Actor returns (flat, normalized, analysis-ready)
{"source": "tiktok_post","id": "7312345678901234567","url": "https://www.tiktok.com/@stoolpresidente/video/7312345678901234567","aweme_id": "7312345678901234567","type": "video","caption": "this aged well","created_at": "2026-02-14T18:22:31.000Z","stats": {"views": 4820113,"likes": 612400,"comments": 8921,"shares": 45120,"saves": 19880,"downloads": 342,"reposts": 0,"forwards": 0,"whatsapp_shares": 1876},"video": {"url_no_watermark": "https://v16-webapp.tiktok.com/.../video.mp4?...","url_alt": "https://v16-webapp.tiktok.com/.../alt.mp4?...","duration_ms": 18230,"width": 1080,"height": 1920},"thumbnail_url": "https://p16-sign.tiktokcdn-us.com/.../cover.jpg","slideshow_images": [],"is_pinned": true,"is_ad": false,"is_shop_promo": false,"clean_url": "https://v16-webapp.tiktok.com/.../video.mp4?...","clean_url_source": "download_no_watermark_addr","music": {"title": "original sound","author": "stoolpresidente","id": "7012...","album": "","play_url": "https://sf16-ies-music-va.tiktokcdn.com/.../7012.mp3","duration_s": 18},"author": {"handle": "stoolpresidente","name": "Dave Portnoy","follower_count": 4612000,"verified": true,"avatar": "https://p16-amd-va.tiktokcdn.com/.../avatar.webp","signature": "El Presidente/Barstool Sports Founder.","region": "US","language": "en","aweme_count": 2038,"total_favorited": 197202536,"following_count": 74,"instagram_id": "stoolpresidente","youtube_channel_id": "UCJRz6HSllkQKmFxaPk8IViw","youtube_channel_title": "BFFs: Dave Portnoy, Josh Richards & Bri Chickenfry","twitter_id": "","twitter_name": "","with_shop_entry": false,"with_commerce_entry": false,"live_commerce": false,"commerce_user_level": 0},"is_paid_partnership": false,"shop_product_url": null,"aigc": {"is_ai_generated": false,"label_type": 0},"text_extra": [],"desc_language": "en","video_control": {"allow_duet": true,"allow_stitch": true,"allow_download": true,"allow_react": true,"allow_music": true},"video_region": "US","playlist": null,"subtitle_tracks": [{"language": "en","url": "https://v16-cla.tiktokcdn.com/.../captions.webvtt?...","is_auto_generated": true,"is_original": true,"format": "webvtt"}],"transcript": null,"transcript_source": "skipped","transcript_language": null,"_metadata": {"source_endpoint": "/v3/tiktok/profile/videos","page": 1,"fetched_at": "2026-06-05T15:30:01.482Z","input_identifier": "stoolpresidente"}}
What commodity scrapers return (raw aweme JSON, ~150 undocumented fields)
{"aweme_id": "7312345678901234567","desc": "this aged well","create_time": 1739557351,"video": { "play_addr": { "url_list": ["..."] }, "download_addr": { "url_list": ["..."] }, "download_no_watermark_addr": { "url_list": ["..."] }, "has_watermark": false, "duration": 18230, "width": 1080, "height": 1920, "cover": { "url_list": ["..."] }, "origin_cover": { "url_list": ["..."] }, "dynamic_cover": { "url_list": ["..."] }, "bit_rate": [] },"statistics": { "play_count": 4820113, "digg_count": 612400, "comment_count": 8921, "share_count": 45120, "collect_count": "19880", "download_count": 0, "repost_count": 0 },"is_top": 1,"is_ad": false,"is_eligible_for_commission": false,"music": { "id": 7012, "title": "original sound", "author": "stoolpresidente" },"author": { "uid": "...", "unique_id": "stoolpresidente", "nickname": "Dave Portnoy", "follower_count": 4612000, "custom_verify": "verified account" },"image_post_info": null}
Every field above is normalized, named, and typed. Drop the dataset into your warehouse, not into a six-week mapping sprint.
Differentiation table
| This Actor | scrapeforge | novi | |
|---|---|---|---|
| Output format | Flat, normalized, typed | Raw aweme JSON | Raw aweme JSON |
| No-watermark reliability | Explicit precedence (clean_url + clean_url_source) | URL list, no fallback logic | URL list, no fallback logic |
| Ad flag handling | Correctly mapped (is_ad) | Often miswired as is_ads | Raw passthrough |
| Slideshow handling | slideshow_images[] extracted | Nested image_post_info you parse | Nested image_post_info you parse |
| Pinned post detection | is_pinned: true | Raw is_top: 1 | Raw is_top: 1 |
| Shop promo flag | is_shop_promo: true | Raw is_eligible_for_commission | Raw |
| Provenance metadata | _metadata block per row | None | None |
| Bulk mixed-format input | URLs + handles + user_ids in one field | Handle only | Handle only |
| Error isolation in bulk runs | Per-profile error rows | Crashes the run | Crashes the run |
| Price | Premium tier | Cheapest in category | Low |
Our cost is 5-8x competitors because we charge above our supplier break-even, where they sell at a loss. We're sustainable; they're not. Buy this Actor if your downstream pipeline is more expensive than the scrape.
Use cases
- Content competitive analysis - audit 50+ competitor creators in one run, see who posts what cadence and what works
- AI/RAG pipelines requiring clean structured data - skip the schema-mapping step entirely
- Brand audit reports - normalized fields drop straight into client deliverables
- Influencer vetting and evaluation - pair video output with
is_adandis_shop_promoto see real sponsored cadence vs. claimed organic content - Content swipe files - reliable
clean_urlmeans your reference library does not break on watermark removal failures - UGC aggregation for sanctioned brand campaigns
- Compliance archiving for regulated industries (finance, healthcare, public sector communications)
- Academic research on content patterns, engagement trends, ad-load measurement, slideshow vs video format prevalence
- Trend tracking - sort by popular, watch breakout videos surface
- Music/sound attribution mapping - every row carries the music block so you can map sound usage across creators
- TikTok influencer database build - paste a shortlist of handles, get a flat table of recent videos with engagement and follower counts per creator
- TikTok account archive - back up the full public posting history of a creator with no-watermark MP4 URLs, captions, stats, and metadata
- TikTok competitor analysis - track a list of competitor brands or creators, see who is posting what when with ad and Shop flags
- TikTok shop detection - surface sponsored posts and Shop-affiliate videos via the
is_adandis_shop_promoflags on every row
Wire these into a recurring workflow
The strongest signal in Apify's Store recommender is recurring usage, and three of the use cases above run on a natural cadence:
- Competitor analysis - schedule daily, pipe to Google Sheets or Slack for a no-touch competitor digest.
- Sponsored and Shop detection - schedule weekly, pipe to Slack or Notion to catch new affiliate posts before invoice time.
- Archive a high-risk creator - schedule monthly, pipe to S3 or Google Drive so you have a fresh backup if the account gets banned or deleted.
See the Demo video section for two short Apify walkthroughs on scheduling and integrations.
Example tasks
Ready-made input configurations for the most common workflows. Each one sets the input fields for you, so you can click Run without editing anything.
- Track Competitor TikTok Creators in Bulk - paste competitor handles, pull recent videos with engagement, ad flags, and TikTok Shop signals
- Archive Every TikTok Video From a Creator's Profile - back up the full public posting history with no-watermark MP4 URLs, captions, stats, and metadata
- Find Top-Performing TikTok Videos From a Creator - sort by popular to surface a creator's most-viewed videos with engagement stats
- Build a TikTok Influencer Database From a Handle List - pull recent videos with engagement stats and follower counts across a shortlist of handles
- Spot Sponsored and TikTok Shop Posts in a Creator's Feed - surface
is_adandis_shop_promoflags per post for vetting and FTC disclosure audits - Extract TikTok Photo Carousels and Slideshow Images - pull every photo carousel and slideshow post with all slide image URLs
- Scrape a Public TikTok Playlist / Collection - paste a public collection URL and pull every video in the playlist
Each link goes live after you publish the matching task from its Publication tab.
Quick start
- Click Try for free on the Actor's page
- Paste one or more TikTok profiles into the Profiles field (URLs, handles, or user_ids - mix freely)
- Optionally set
sort_by,max_items_per_profile,region,trim - Run the Actor
- Download results as JSON, CSV, or XLSX, or pull via Apify API
Inputs
One unified profiles field accepts every common form of TikTok profile identifier. Mix and match in the same run.
| Input | Type | Required | Description |
|---|---|---|---|
profiles | array of strings | Yes | Bulk list of profiles. Each entry can be a profile URL, a handle (with or without @), or a numeric user_id. Auto-detected per entry. |
sort_by | enum | No | latest or popular. Default latest |
max_items_per_profile | integer | No | Hard cap per profile. Default 0 (every video, no upper limit). Set a positive number if you want a smaller cap. |
region | string | No | 2-letter ISO country code. Default US |
trim | boolean | No | Slim response shape. Default false |
include_transcript | boolean | No | Add a WEBVTT transcript to each video row. Default false (existing automations unchanged) |
transcript_language | string | No | 2-letter ISO language code (en, es, fr, de, it, ja, ko, zh). Blank = TikTok default. Only used when include_transcript is on |
transcript_use_ai_fallback | boolean | No | If captions in your selected transcript_language aren't available on the video (or no captions exist at all), generate the transcript from the audio with AI. Only works on videos under 2 minutes. Billed as a $0.01 pay-per-event ($10 per 1,000 AI transcripts) on top of the base per-result pricing. Only fires when BOTH include_transcript and this toggle are on AND the video has no captions in the selected language. Default false |
Accepted profiles entries
stoolpresidente@stoolpresidentehttps://www.tiktok.com/@stoolpresidentehttps://www.tiktok.com/@stoolpresidente/video/7312345678901234567www.tiktok.com/@stoolpresidente6659752019493208069
- Numeric strings of 6+ digits are treated as
user_id(faster path). - Anything containing
tiktok.comor starting withhttp(s)://is parsed as a URL; the@handlesegment is extracted. - Everything else handle-safe is treated as a bare handle.
- Invalid entries are skipped with a warning, not a crash. Duplicates within the same run are deduplicated.
Output schema
Each video becomes one flat dataset row. Top-level fields:
| Field | Type | Description |
|---|---|---|
source | string | Always "tiktok_post" for identifying this Actor's rows in mixed datasets |
id | string | TikTok aweme ID (same as aweme_id) |
url | string | Canonical TikTok URL https://www.tiktok.com/@{handle}/video/{id} |
aweme_id | string | TikTok internal ID |
type | string | "video", "photo", "carousel", or "unknown" |
caption | string or null | The video's text caption (desc field upstream) |
created_at | ISO string or null | Post creation timestamp |
stats | object | Engagement counters - see below |
video | object | Video URLs and dimensions - see below |
thumbnail_url | string or null | Best available cover image URL |
slideshow_images | array of strings | Image URLs for photo carousels (empty for video posts) |
is_pinned | boolean | True if the post is pinned to the profile (mapped from is_top) |
is_ad | boolean | True if TikTok marks this as an ad |
is_shop_promo | boolean | True if the post is eligible for TikTok Shop commission |
clean_url | string or null | Top-level convenience field: the best available no-watermark MP4 URL |
clean_url_source | string | "download_no_watermark_addr", "play_addr", or "none" |
music | object | { title, author, id } |
author | object | { handle, name, follower_count, verified } |
transcript | string or null | WEBVTT transcript text when include_transcript is on and available; otherwise null |
transcript_source | string | "captions", "ai", "none", "too_long" (over 2 min), "not_video" (photo/carousel), or "skipped" (feature off) |
transcript_language | string or null | The language actually used for the transcript |
_metadata | object | Provenance - see below |
stats object
| Field | Type | Description |
|---|---|---|
views | number or null | Play count |
likes | number or null | Like / digg count |
comments | number or null | Comment count |
shares | number or null | Share count |
saves | number or null | Save / collect count |
video object
| Field | Type | Description |
|---|---|---|
url_no_watermark | string or null | No-watermark MP4 (same as clean_url when available from the dedicated no-watermark address) |
url_alt | string or null | Alternate download URL (watermarked or unsigned variant) |
duration_ms | number or null | Duration in milliseconds |
width | number or null | Video width in pixels |
height | number or null | Video height in pixels |
_metadata object
| Field | Type | Description |
|---|---|---|
source_endpoint | string | The internal endpoint that produced this row |
page | number | Pagination page number (1-indexed) within the profile |
fetched_at | ISO string | When the row was emitted |
input_identifier | string | The handle or user_id that was passed in |
Error rows
If a single profile fails (private, banned, network error, bad input), the run continues and emits an error row instead of crashing. Error rows have the shape:
{"error": { "message": "...", "status": 404 },"_metadata": {"source_endpoint": "/v3/tiktok/profile/videos","page": 0,"fetched_at": "2026-06-05T15:30:01.482Z","input_identifier": "deleted_account_handle"}}
Enrichment fields (Aug 2026 additions)
These fields extend NormalizedRow with data that was already in the upstream response but not previously extracted. All are populated at no extra API cost per row. Fields the upstream endpoint does not return for a specific video are set to null, empty arrays, or false per type.
Extended engagement counters (inside stats):
| Field | Type | Description |
|---|---|---|
stats.downloads | number or null | Number of times the video was downloaded via the TikTok app |
stats.reposts | number or null | Users who reshared this video to their own feed |
stats.forwards | number or null | Forwards to other TikTok users via DM |
stats.whatsapp_shares | number or null | WhatsApp shares specifically |
Creator profile fields (inside author):
| Field | Type | Description |
|---|---|---|
author.avatar | string or null | URL to the creator's avatar image (medium size, ~720px) |
author.signature | string or null | Creator's bio text |
author.region | string or null | Creator's country (may be null if TikTok doesn't expose it) |
author.language | string or null | Creator's account language code (en, he, etc.) |
author.aweme_count | number or null | Total lifetime videos posted by the creator |
author.total_favorited | number or null | Total lifetime likes across all the creator's videos |
author.following_count | number or null | Number of accounts the creator follows |
Cross-platform creator IDs (inside author):
| Field | Type | Description |
|---|---|---|
author.instagram_id | string or null | Creator's Instagram handle if declared |
author.youtube_channel_id | string or null | Creator's YouTube channel ID if linked |
author.youtube_channel_title | string or null | Creator's YouTube channel name if linked |
author.twitter_id | string or null | Creator's Twitter user ID if declared |
author.twitter_name | string or null | Creator's Twitter handle if declared |
Commerce flags (inside author):
| Field | Type | Description |
|---|---|---|
author.with_shop_entry | boolean | Creator has a TikTok Shop entry active |
author.with_commerce_entry | boolean | Creator has a commerce entry configured |
author.live_commerce | boolean | Creator does live shopping |
author.commerce_user_level | number or null | Creator's commerce tier level |
Music additions (inside music):
| Field | Type | Description |
|---|---|---|
music.album | string or null | Album name if the sound is from a released track |
music.play_url | string or null | Direct MP3 URL for the sound |
music.duration_s | number or null | Audio duration in seconds |
Content classification and provenance (top-level):
| Field | Type | Description |
|---|---|---|
is_paid_partnership | boolean | TikTok's official paid-partnership disclosure flag. Distinct from is_ad and is_shop_promo. |
shop_product_url | string or null | Direct URL to the TikTok Shop product the video promotes, when attached |
aigc.is_ai_generated | boolean | TikTok's AI-generated content flag |
aigc.label_type | number or null | Numeric type of AI label applied by TikTok |
desc_language | string or null | Auto-detected language of the video description |
video_region | string or null | Region the video was posted from (distinct from proxy region) |
Tagged mentions (top-level):
| Field | Type | Description |
|---|---|---|
text_extra | array | Tagged users and hashtags in the caption. Each entry: { user_id, sec_uid, tag_id, type, start, end }. start/end are character positions in the caption. |
Video permissions (top-level):
| Field | Type | Description |
|---|---|---|
video_control.allow_duet | boolean or null | Whether other users can duet this video |
video_control.allow_stitch | boolean or null | Whether other users can stitch this video |
video_control.allow_download | boolean or null | Whether the creator allows downloads |
video_control.allow_react | boolean or null | Whether reactions are enabled |
video_control.allow_music | boolean or null | Whether other users can reuse the sound |
Playlist metadata (top-level; playlist object is null when the video isn't in a playlist):
| Field | Type | Description |
|---|---|---|
playlist.id | string or null | Playlist / mix ID |
playlist.name | string or null | Playlist name |
playlist.index | number or null | Video's position in the playlist |
playlist.item_total | number or null | Total videos in the playlist |
Native captions (top-level):
| Field | Type | Description |
|---|---|---|
subtitle_tracks | array | Every native caption track TikTok has for the video. Each entry: { language, url, is_auto_generated, is_original, format }. Empty array when no captions exist. The url is a signed TikTok CDN URL to the WEBVTT file. Distinct from the transcript field, which is only populated when include_transcript is on. |
Dataset views (Apify UI)
The dataset is pre-configured with four views you can switch between in the Apify Console:
- Overview - the most useful fields per video (id, url, type, caption, stats, clean_url, thumbnail, flags, author). Best for browsing.
- Engagement metrics - flattened stats (
stats.views,stats.likes, ...) plus author handle and follower count. Best for spreadsheets and BI tools. - Download links -
clean_url,clean_url_source, alternates, dimensions, thumbnail, slideshow images. Best for asset workflows. - Errors - filtered to error rows only. Best for triaging bulk runs.
- Transcripts -
transcript_source,transcript_language, and the WEBVTTtranscripttext per video. Only populated wheninclude_transcriptis on.
How the clean_url field is chosen
if download_no_watermark_addr.url_list[0] exists:clean_url = thatclean_url_source = "download_no_watermark_addr"else if play_addr.url_list[0] exists AND has_watermark is false:clean_url = play_addr.url_list[0]clean_url_source = "play_addr"else:clean_url = nullclean_url_source = "none"
You always know what you got and why. Three states - never a silent string in the wrong field.
URL lifecycle and validity
The no-watermark URLs are signed CDN URLs with limited validity:
- Typically valid for 24-72 hours from extraction (TikTok varies this)
- URLs include cryptographic signatures - modifying them breaks them
- Cannot be saved indefinitely - they expire on TikTok's schedule
- Fetch the asset promptly if you intend to keep it
Don't build features that assume URLs are permanent.
How flag detection works
| Flag | Mapped from | Notes |
|---|---|---|
is_pinned | Upstream is_top === 1 | Pinned posts surface first in latest sort |
is_ad | Upstream is_ad === true AND at least one corroborating signal (is_ads, is_paid_partnership, or commerce_info.branded_content_type > 0) | TikTok's raw is_ad fires false-positive on many organic commercial posts from business/commerce accounts, so we require confirmation from a second signal before flagging a video as an ad. Reduces false positives dramatically at the cost of a small number of true positives where TikTok only sets one flag. |
is_shop_promo | Upstream is_eligible_for_commission | True when the post is eligible for TikTok Shop commission |
How the transcript feature works
Turn on include_transcript and each video row gets a WEBVTT-formatted transcript field plus a transcript_source flag showing where it came from. The Actor tries sources in cost order:
if video is not a video (photo/carousel): transcript_source = "not_video"elif video duration > 2 minutes: transcript_source = "too_long"elif include_transcript is off: transcript_source = "skipped"else:if subtitle_tracks[] has a match for the requested language:fetch the WEBVTT file directly from TikTok's CDNtranscript_source = "captions" (0 credits)elif ScrapeCreators transcript API returns captions:transcript_source = "captions" (1 credit)elif transcript_use_ai_fallback is on and AI succeeds:transcript_source = "ai" (10 credits + $0.01 PPE event)else:transcript_source = "none"
Language preference. Leave transcript_language blank to let TikTok pick the default for each video. Set it explicitly (en, es, fr, de, it, ja, ko, zh) to require a specific language. Native-caption tracks in a non-matching language are not used as a fallback - the Actor falls through to the API path so ScrapeCreators can translate if it supports the source language.
Cost accounting per video with include_transcript on:
| Video state | Extra ScrapeCreators credits | AI event billed to buyer |
|---|---|---|
| Native captions match the requested language | 0 | 0 |
| Native captions exist but wrong language, API returns captions | 1 | 0 |
| No captions available, AI fallback OFF | 1 (empty result) | 0 |
| No captions available, AI fallback ON, AI succeeds | 11 | $0.01 |
| Non-video post or > 2 minutes | 0 | 0 |
The ai-transcript-generated event is a Pay Per Event billing item priced at $0.01 per successful AI transcript ($10 per 1,000). Runs that don't turn on AI fallback never trigger it.
How to scrape a TikTok playlist or collection
The profiles input auto-detects public TikTok collection URLs (TikTok calls them "collections", users often call them "playlists") alongside handles, user_ids, and profile URLs. Mix any combination in the same run.
Example - pull every video from a public collection:
{"profiles": ["https://www.tiktok.com/@kibblemaster808/collection/Want-to-go-7665668414573546258"],"max_items_per_profile": 0}
Example - mix a profile handle with a collection URL in one run:
{"profiles": ["stoolpresidente","https://www.tiktok.com/@kibblemaster808/collection/Want-to-go-7665668414573546258"]}
The Actor routes each entry to the right upstream endpoint automatically. Profile entries hit /v3/tiktok/profile/videos; collection entries hit /v1/tiktok/collection/videos.
Limitations of collection scrapes. The collection endpoint returns a thinner payload than the profile endpoint. Collection-scraped rows have:
- Populated:
id,url,type,caption,created_at,thumbnail_url,author.handle,author.name, fullstatsblock (all 9 counters),video.duration_ms,video.width,video.height - Null / empty:
clean_url(collection endpoint doesn't return download URLs),music.*, most PR2 enrichment fields (is_paid_partnership,shop_product_url,aigc,text_extra,video_control,subtitle_tracks[])
If you need those fields for a video you found via a collection scrape, feed the video's parent profile handle back into profiles on a follow-up run.
sort_by and region only affect profile entries; collection scrapes ignore them.
How photo carousels are handled
Carousel posts have type: "carousel" and a populated slideshow_images[] array of image URLs. Single-photo posts have type: "photo". Video posts have type: "video". Carousels still carry music, caption, stats, and flags like any other post.
Bulk mode behavior
- All entries in
profilesare deduplicated by(kind, value)before any requests are made - Profiles are processed sequentially with independent error scopes - one failure does not stop the rest
- Each profile honors
max_items_per_profileindependently - Free plan total cap (50 items) applies across the whole run, not per profile
Pagination behavior
The Actor walks the upstream cursor (max_cursor / has_more) until one of:
- The upstream returns
has_more: false max_items_per_profileis reached- The free plan global cap (50) is reached
- The cursor stops advancing (defensive guard against loops)
Pages are 1-indexed in _metadata.page so you can trace which page any row came from.
Error handling
| Class | Behavior |
|---|---|
| Transient upstream (429, 502, 503, 504) | Retry 3x with 1s / 2s / 4s exponential backoff |
| Network error | Same retry policy, then surface as an error row for that profile |
| 4xx on a single profile (404, etc.) | Surface as an error row, continue with remaining profiles |
| Invalid input row (bad URL, garbage string) | Skipped with a log warning, not surfaced as error row |
| Missing API key env var | Run exits cleanly with a status message; no crash |
| Cap reached | Run finishes SUCCEEDED with a clear status message |
Performance and reliability
- Concurrency: pagination within a single profile is sequential; profiles in bulk mode are processed sequentially with independent error scopes
- Retries: 3 attempts with 1s / 2s / 4s exponential backoff on transient codes
- Timeout per request: 60 seconds
- No login or cookies required - public-data only, no account state on your side
- User-Agent:
OpusScale-Apify/1.0
Demo video
New to Apify, or wiring this Actor into something bigger? Two short Apify videos cover the path from "run once" to "production pipeline":
How to schedule your Apify Actors - run this TikTok Posts Scraper on a daily or weekly cadence without touching the Console.
Connect Apify Actors to your stack - pipe TikTok output into Google Sheets, Slack, n8n, Make, Zapier, or your own webhook.
Together they turn a one-off scrape into a recurring TikTok data pipeline you do not have to babysit. Scheduled runs are also the strongest signal in Apify's Store recommender, so wiring this up benefits visibility too.
Related scrapers
Complete the TikTok creator intelligence pipeline:
- TikTok Search Scraper - find creators by topic, hashtag, or trend - the cluster's macro discovery Actor; pipe its handle results into this scraper to bulk-pull every video
- TikTok No-Watermark Video Downloader API - extract clean MP4 URLs for individual videos when you don't need the full profile feed
- TikTok Shop Scraper - find product listings and seller data - pair with this Actor's
is_shop_promoflag to map which creators promote which products - TikTok Transcript Extractor - get the spoken text of every video - layer captions onto the videos this Actor returns for content analysis
- TikTok Comments & Replies Scraper - audience engagement deep-dive - go from "what they posted" to "what their audience said back"
See all scrapers by unseenuser ->
FAQ
Q: Why is this more expensive than scrapeforge or novi? A: Because we charge above break-even on our supplier costs, where they sell at a loss. We're built to keep running; they're priced to win first-month signups. If you're shipping a real pipeline, the difference is rounding-error vs. data-quality work.
Q: What's the output difference?
A: Commodity scrapers return raw aweme JSON (~150 undocumented fields). This Actor returns a flat, normalized schema with named, typed fields, an explicit clean_url field, a clean_url_source showing where that URL came from, and slideshow handling built in. Compare the two payloads in the Sample output section above.
Q: How reliable is the no-watermark URL?
A: We implement explicit precedence: first try the dedicated no-watermark address, then fall back to the play address when watermark is absent, otherwise emit clean_url: null and tell you clean_url_source is none. You always know what you got and why. See How the clean_url field is chosen above.
Q: How long are the no-watermark URLs valid? A: Typically 24-72 hours. They're signed CDN URLs and expire on TikTok's schedule. Fetch the asset promptly if you intend to archive it. Don't build features that assume the URL is permanent.
Q: How many videos can I pull per profile?
A: Default is 0, which means every video the profile has published - there is no upper limit on the per-profile amount. If you want a smaller cap for a specific run, set an explicit positive number. Free Apify users are additionally capped at 50 total items per run overall (see Free plan limit above).
Q: What about pinned posts?
A: The is_pinned field is true for pinned videos. Mapped from the raw is_top flag for you.
Q: How accurate is ad detection?
A: Ads are surfaced via is_ad. TikTok's raw is_ad flag has a known quirk: it fires true on many organic commercial posts from business or commerce accounts, not just paid ad campaigns. To reduce those false positives, this Actor sets is_ad: true only when the raw flag is set AND at least one corroborating signal agrees (is_ads, is_paid_partnership, or a positive commerce_info.branded_content_type). If you want the raw TikTok flag without the combined check, the new field is_paid_partnership (from PR2) is a strict paid-partnership disclosure indicator. Shop promotions are surfaced separately via is_shop_promo.
Q: What about photo carousels?
A: Carousels appear with type: "carousel" and a populated slideshow_images[] array. Single-photo posts get type: "photo". Both still carry music, caption, stats, and flags.
Q: Should I use a handle or a user_id in profiles?
A: user_id is faster. If you have it cached, prefer it. Otherwise a handle or URL is fine.
Q: Can I mix URLs, handles, and user_ids in the same run?
A: Yes - that's the point of the single profiles field. The Actor auto-detects each row.
Q: What if one of my bulk handles is private or deleted? A: That profile gets an error row in the dataset and the run keeps going. Other profiles are unaffected.
Q: Do I need to log in to TikTok? A: No. This Actor accesses publicly visible video data only. No credentials required from you.
Q: How are private accounts handled? A: Private accounts surface as error rows with status info. You'll see them in the Errors dataset view.
Q: What if TikTok rate-limits the request? A: The Actor retries up to 3 times with exponential backoff (1s, 2s, 4s). Persistent rate limits surface as an error row for that profile.
Q: Is this legal? A: This Actor returns publicly visible data. Your downstream use is your responsibility - in particular, the full Terms of Service and the Actor-Specific Addendum below cover redistribution, AI training, and minor-protection restrictions you must respect.
Q: Can I use this data to train AI? A: No. TikTok's Terms explicitly prohibit AI training on TikTok data, and creators retain copyright in their videos. See the Addendum, section J.
Q: What about minors? A: TikTok has many under-18 users. This Actor's Terms strictly prohibit using data of users you know or suspect are minors. See Addendum, section K.
Q: Does this Actor work with TikTok Shop content?
A: Yes - eligible posts surface as is_shop_promo: true. The Actor does not currently scrape Shop product detail pages.
Q: Can I download the videos?
A: The Actor returns the URL in clean_url. Downloading the asset is your responsibility - and your downstream use must comply with TikTok's Terms and creator copyright. See Addendum, section F.
Q: Can I use this to build a TikTok influencer database?
A: Yes - it is the flagship use case. Paste a list of creator handles into the profiles field; each output row carries author.handle, author.follower_count, author.verified, and per-video stats.views / stats.likes / stats.comments / stats.shares / stats.saves. Pipe to a spreadsheet or BI tool and you have a flat, shortlist-ready database. See the tt-posts-influencer-database task in Example tasks above.
Q: Can I archive a TikTok account or back up a creator's full posting history?
A: Yes. Set profiles to a single handle and leave max_items_per_profile at its default 0 (= every video) to capture the full public posting history in one run. Output includes the no-watermark MP4 URL in clean_url, captions, stats, and timestamps for each video. Useful for compliance archives, creator-side personal backups, and cease-and-desist preparation. See the tt-posts-archive-creator-account task in Example tasks above.
Q: Is there an official TikTok data API I could use instead of this Actor? A: TikTok's official Research API is gated to academic institutions with approved projects and excludes commercial use. The Display API only covers logged-in user content. For public profile videos this Actor is the practical alternative - flat, normalized schema with named fields, consumable as a programmatic data source via the Apify API or a direct dataset download.
Q: Can I use this as a TikTok MCP server? A: Indirectly, yes. Apify exposes Actors through its MCP integration, so an MCP-capable agent (Claude, Cursor, and similar) can invoke this Actor and receive the normalized dataset rows directly. See Apify's MCP documentation for the setup wiring.
Q: How much does this Actor cost to run?
A: $5 per 1,000 results (the base result event), Apify platform usage included (no separate compute fee). If you turn on both include_transcript and transcript_use_ai_fallback and a video has no native captions in your selected language, each AI-generated transcript is billed as a separate paid event at $0.01 each ($10 per 1,000 AI transcripts). Runs that don't enable either transcript toggle pay only the base $5/1,000 rate. Free Apify users are additionally capped at 50 results per run - see Free plan limit above.
Q: Can I run TikTok competitor analysis with this Actor?
A: Yes. Paste a list of competitor handles in profiles, set sort_by to latest, and you get a flat table of every recent video per competitor with engagement, the is_ad flag, and the is_shop_promo flag. Useful for brand monitoring and share-of-voice tracking. See the tt-posts-bulk-competitor-tracker task in Example tasks above.
Q: Is there a free TikTok data API? A: Free Apify users get up to 50 results per run with this Actor at no cost - enough to evaluate the schema and try a few profiles. Beyond that the price is $5 per 1,000 results, Apify platform usage included. TikTok's own official APIs (Research, Display, Business) are also free for approved use cases but each is heavily gated and excludes general public-creator video data. There is no truly free, no-rate-limit way to pull arbitrary public TikTok creator content at scale.
Q: How does this Actor compare to TikTok influencer databases like Modash, HypeAuditor, or EnsembleData? A: Modash and HypeAuditor are full-stack influencer-discovery SaaS - they package outreach, audience demographics, fake-follower scoring, payments, and reporting on top of a pre-built creator database. EnsembleData is a competing scraping API focused on raw endpoint coverage. This Actor sits in between: $5 per 1,000 rows of public profile videos with a normalized, BI-ready schema, used to build or enrich your own database on your own terms. If you want a turn-key creator marketplace use Modash. If you want flat structured rows for an internal pipeline, BI tool, or custom platform, use this.
Q: Can I archive a creator's TikTok videos before they get banned or delete their account?
A: Yes - that is a primary archival use case. While the account is publicly online, set profiles to the handle and leave max_items_per_profile at its default 0 (= every video) to pull every visible video with clean_url no-watermark MP4 references. The clean_url is a signed CDN URL with a 24-72 hour validity window, so fetch the actual MP4 promptly if you intend to preserve the assets. Once an account is banned, deleted, or shadow-banned, neither this Actor nor TikTok's official APIs can recover the content - it has to be pulled while still public.
Q: Is there a way to see old, banned, or deleted TikTok accounts with this Actor? A: No. This Actor only returns content that is currently publicly accessible on TikTok. Deleted videos, suspended accounts, and shadow-banned profiles return either empty results or an error row. For content that has already disappeared, third-party archive sites (the Wayback Machine, Archive-It TikTok collections, r/DataHoarder mirrors) are the only options and their coverage is partial - most have been shut down. The reliable practice is to archive while the content is still live - see the previous question.
Q: Can I scrape a public TikTok playlist or collection?
A: Yes. Paste the collection URL (e.g. https://www.tiktok.com/@user/collection/name-<id>) into the same profiles field the Actor auto-detects it as a collection entry and pulls every video in the playlist. Mix collection URLs and profile handles in the same run if you want; the Actor routes each entry to the right upstream endpoint. Collection scrapes return video metadata, engagement stats, captions availability, and the author handle for each video - but they do NOT return the clean_url no-watermark download URL, music info, or most of the enrichment fields (is_paid_partnership, shop_product_url, aigc, text_extra, etc.) because TikTok's collection endpoint doesn't include them. If you need those fields for a collection video, re-scrape the parent profile.
Q: Can I get a transcript for each TikTok video?
A: Yes - turn on include_transcript. Each video row gets a WEBVTT-formatted transcript field and a transcript_source flag (captions, ai, none, too_long, not_video, or skipped). Videos over 2 minutes and non-video posts (photos, carousels) are skipped by design. If the video does not have captions in your selected transcript_language (or has no captions at all), turn on transcript_use_ai_fallback to have AI generate one from the audio - each successful AI transcript is billed as a separate paid event at $0.01 ($10 per 1,000 AI transcripts) on top of the base per-result cost. The AI charge only fires when BOTH include_transcript and transcript_use_ai_fallback are on AND the video has no native captions in the selected language - runs that leave either toggle off see zero behavior change and zero extra cost. See How the transcript feature works above for the full flow.
Q: What new fields did the August 2026 update add?
A: 33 new fields extending the row shape: cross-platform creator IDs (Instagram, YouTube, Twitter), TikTok Shop product URLs per video, an AI-generated content flag, paid partnership disclosure, tagged mentions with resolved user IDs, per-video permission flags (allow_duet/stitch/download/react/music), playlist metadata, four extra engagement counters (downloads, reposts, forwards, WhatsApp shares), creator bio and region and avatar, and a subtitle_tracks[] list of every native caption track TikTok has for each video. All extracted from the existing upstream response at zero extra API cost per row. See the "Enrichment fields (Aug 2026 additions)" subsection in Output schema above for the full field-by-field breakdown.
Q: Why did is_ad become stricter?
A: TikTok's raw is_ad field has a documented quirk of firing true on many organic commercial posts from business or commerce accounts, not just paid ad campaigns. To reduce those false positives, this Actor now sets is_ad: true only when the raw flag is set AND at least one corroborating signal agrees: is_ads (older TikTok flag), is_paid_partnership (official paid-partnership disclosure), or commerce_info.branded_content_type > 0. Real paid ads and paid partnerships still get flagged; organic commercial posts no longer do. If you specifically want the pure paid-partnership disclosure signal, use the new is_paid_partnership field directly.
Technical details
- Output: streamed to the Apify dataset, one row per video
- Formats: JSON, CSV, XLSX, or via the Apify API
- Retries with exponential backoff on transient upstream errors
- Pagination handled internally; you control the cap via
max_items_per_profile - Bulk mode with per-profile error isolation
- All text uses regular hyphens; no special character cleanup needed downstream
Privacy and data handling
- The Actor does not store, log, or retain any output data on UnseenUser infrastructure
- Output is streamed straight to your Apify dataset
- The Actor never logs the API key
- You are the data controller for any personal data you obtain - see Master ToS section 6
- If you process EU/UK/California/Israeli residents' data, you carry the privacy-law obligations
Live view API
While a run is active, a small HTTP server is available at the Actor's container URL for monitoring:
| Endpoint | Returns |
|---|---|
GET / | Live view landing page (HTML) |
GET /health | { "status": "ok" } while the process is up |
GET /progress | { pushed_count, current_identifier, current_page, cap_reached, is_paying_user } |
A full OpenAPI v3 schema is committed at .actor/web_server_openapi.json.
Apify Actor - Terms of Service
Version: 4.0 Effective Date: May 5, 2026
0. ACCEPTANCE BY USE - IMPORTANT
Read this section first.
These Terms of Service ("Terms") form a binding legal agreement between you ("User," "you," "your") and UnseenUser, the Publisher of this Apify actor ("UnseenUser," "the Publisher," "we," "us," "our").
0.1 How You Accept These Terms
You accept these Terms by any of the following actions, each of which constitutes a clear, affirmative act of acceptance:
- (a) Running the Actor - Initiating any execution of the Actor on the Apify platform
- (b) Using any output returned by the Actor for any purpose
- (c) Continuing to access the Actor's listing or documentation after these Terms are visible
0.2 Continuing Acceptance
Each time you run the Actor or use its outputs, you reaffirm your acceptance of the then-current Terms. If you do not agree to these Terms or any subsequent update, you must stop using the Actor immediately.
0.3 No Anonymous Acceptance
You cannot disclaim acceptance by:
- Failing to read these Terms before running the Actor
- Running the Actor through automated systems
- Sharing your Apify account with others who may not have read these Terms
By the act of running the Actor on Apify, you bind yourself, your organization (if applicable), and any individuals or systems acting on your behalf or under your authority.
0.4 If You Do Not Accept
If you do not agree to these Terms, you must not run the Actor. No use is authorized without acceptance.
PREAMBLE - UNDERSTANDING THE ARCHITECTURE
Before using the Actor, please understand the technical architecture of the service:
The Data Flow
You (User) -> Apify Platform -> Actor (software) -> Backend data service -> Source Platform|You (User) <- Apify Platform <- Actor (software) <- Backend data service
What Each Party Does
- You (the User): Run the Actor on the Apify platform with input parameters you choose.
- Apify: Operates the cloud infrastructure that hosts and executes Actors. Apify is a Czech-incorporated company (Apify Technologies s.r.o.) governed by its own Terms of Service.
- The Publisher (us): Publishes software code (the Actor) on Apify's platform. The Actor is a thin wrapper that translates your input into requests to a backend data service and returns its responses to you. The Publisher does not operate scraping infrastructure. The Publisher does not store or retain data returned by the Actor. The Publisher does not see, log, or process the personal data of any individuals returned in the Actor's outputs beyond what is incidental to passing the data through.
- Backend data service provider: An independent third-party company that operates the data infrastructure used by the Actor.
- Source Platform: TikTok, in this Actor's case. The platform whose publicly visible data is accessed by the backend data service provider.
Why This Matters
Your relationship with the Publisher is that of a software user to a software vendor. The Publisher has the responsibilities of a software vendor (functional code, accurate documentation) and the limits of one (the Publisher is not responsible for how you use the data you obtain).
These Terms operate alongside but do not replace:
- Apify's Terms of Service and Acceptable Use Policy (governing your relationship with Apify)
- The backend data service provider's Terms of Service (governing the underlying data infrastructure)
- Source Platform terms (TikTok, etc.) governing the public data accessed
- Applicable law in your jurisdiction and the jurisdictions of data subjects
These Terms incorporate the actor-specific addendum published in each Actor's individual listing ("Addendum"). In the event of a conflict, the more restrictive provision applies.
1. NATURE OF THE SERVICE
1.1 What the Actor Is
The Actor is a software program published on the Apify platform. The Actor:
- (a) Accepts structured input from you on the Apify platform
- (b) Translates that input into requests to a backend data service operated by an independent third-party company
- (c) Receives responses from that backend data service
- (d) Returns the response data to you in a structured format on the Apify platform
The Actor's source code is hosted on Apify's infrastructure. The Actor runs in Apify's cloud, not on the Publisher's servers. The Publisher operates no servers running the Actor.
1.2 What the Actor Is Not
The Actor is not:
- (a) A scraping tool - the Publisher does not operate scraping infrastructure, proxies, headless browsers, or fake accounts
- (b) A direct connection to any source platform - connections to source platforms are made by the backend data service provider
- (c) A data storage or data retention service - the Publisher does not maintain a database of any data the Actor returns
- (d) A licensed access channel to TikTok or any other source platform
- (e) Affiliated with, endorsed by, sponsored by, or authorized by any source platform
1.3 The Publisher's Limited Role
The Publisher's role is limited to:
- (a) Designing and writing the Actor's source code
- (b) Publishing the Actor on the Apify Store
- (c) Maintaining the Actor (updating it when backend providers change schemas)
- (d) Providing documentation and customer support via Apify's contact mechanism
The Publisher is a software vendor, similar to a developer who publishes an app on the Apple App Store or Google Play Store. The Publisher is not a data provider, data broker, data processor, or data controller for purposes of GDPR, CCPA, Israel's Privacy Protection Law, or equivalent.
1.4 The Backend Data Service Provider's Role
The backend data service provider is an independent third-party company. They:
- (a) Operate the actual data infrastructure
- (b) Maintain relationships with source platforms (or accept the operational risk of accessing public data without such relationships)
- (c) Provide their own Terms of Service governing their operations
- (d) Are responsible for compliance obligations relating to the data collection itself
The Publisher is a customer of the backend data service provider. The Publisher is not their agent, partner, or representative.
2. WHO MAY USE THE ACTOR
2.1 Eligibility
You may use the Actor only if:
- (a) You are at least 18 years old or the age of majority in your jurisdiction
- (b) You have legal capacity to enter into binding contracts
- (c) You are not located in or resident of a country subject to comprehensive sanctions by the United States, European Union, United Kingdom, or Israel
- (d) You are not on any prohibited persons list
2.2 User Representations
By using the Actor, you represent and warrant that:
- (a) Truthful identity: Information you provide about your identity and intended use is accurate
- (b) Lawful intent: Your intended use complies with applicable law in your jurisdiction
- (c) Source platform compliance: You will independently comply with the Terms of Service of any source platform whose data you obtain through the Actor
- (d) Data subject rights: Where Actor outputs include personal data, you will respect data subject rights under applicable law
- (e) No prohibited use: You will not use the Actor for any of the purposes prohibited in Section 4
These representations are continuous - they must remain true throughout your use.
3. PERMITTED USES
The Actor may be used for any lawful purpose, including:
- Market research and competitive analysis
- Academic research
- Journalism and investigative reporting
- Internal business intelligence
- Brand monitoring
- Building products that further process publicly available information lawfully
Specific permitted uses for this Actor are described in the Actor-Specific Addendum below.
4. PROHIBITED USES
You may not use the Actor for any of the following:
4.1 Illegal Activity
Activity illegal under the law of your jurisdiction, the User's jurisdiction, or the jurisdiction of any data subjects.
4.2 Harassment, Stalking, and Personal Targeting
- Compiling profiles for harassment, stalking, or doxxing
- Tracking individuals' movements or activities without their knowledge
- Building profiles of journalists, activists, dissidents, or vulnerable populations for retaliatory purposes
4.3 Discrimination
- Using outputs for discriminatory employment, lending, housing, or insurance decisions based on protected characteristics
- Building lists for discriminatory purposes
4.4 Spam and Unsolicited Commercial Communication
- Sending unsolicited marketing in violation of CAN-SPAM, CASL, GDPR, PECR, Israeli Anti-Spam Law, or equivalent laws
- Building "lead lists" from scraped contacts without proper consent infrastructure
- Reselling contact data for spam purposes
4.5 Fraud and Deception
- Identity theft or impersonation
- Generation of fake reviews, testimonials, or coordinated inauthentic behavior
- Election interference or political disinformation
- Securities fraud
4.6 Source Platform Abuse
- Using outputs to circumvent technical protection measures of source platforms
- Creating fake accounts on source platforms based on Actor outputs
- Vote manipulation, engagement manipulation, or platform algorithm gaming
- Building services that competitively substitute for source platforms
4.7 Reselling the Actor's Service
- Reselling raw Actor outputs as your own data product or scraping-as-a-service
- Sharing your Apify credentials to provide third parties indirect access
- Building competing API services using Actor outputs
4.8 AI Training Without Authorization
- Using Actor outputs as training data for commercial AI/ML models without separate licensing authority from the source platform
4.9 Sensitive Targeting
- Specifically targeting or profiling based on health conditions, sexual orientation, religious beliefs, political opinions, or other sensitive characteristics
- Targeting children under 16 (or local age of consent for data processing)
4.10 Privacy Law Violations
- Processing personal data of EU/UK/California/Israeli residents without complying with applicable privacy law
- Failing to honor data subject access, deletion, or objection requests
- Processing data for purposes incompatible with its publication context
5. SOURCE PLATFORM TERMS - YOUR RESPONSIBILITY
5.1 Acknowledgment
The Actor accesses publicly visible data on TikTok ("the Source Platform") through the backend data service provider.
5.2 Your Sole Responsibility
You acknowledge:
- (a) You are solely responsible for ensuring your downstream use of data obtained through the Actor complies with the Source Platform's Terms of Service
- (b) The Publisher makes no representation that any specific use is permitted under any Source Platform's terms
- (c) The backend data service provider, not the Publisher, bears responsibility for the lawfulness of the data collection itself
- (d) You should review the Source Platform's terms before commercial use: https://www.tiktok.com/legal/page/global/terms-of-service/en
5.3 Cease-and-Desist Compliance
If you receive a cease-and-desist letter or other legal demand from a Source Platform regarding your use of Actor outputs, you must:
- (a) Cease the contested use immediately
- (b) Notify UnseenUser within 48 hours via UnseenUser's Apify profile contact form (https://apify.com/UnseenUser)
- (c) Cooperate with the Publisher as needed to mitigate
- (d) Not assert against the Publisher any claim arising from your inability to use the Actor for that Source Platform
6. DATA PROTECTION - REFLECTING ACTUAL ARCHITECTURE
6.1 Roles Under Privacy Law
For purposes of GDPR, UK GDPR, CCPA, Israel's Privacy Protection Law (PPL) including Amendment 13, and equivalents:
- You (the User) are the Data Controller of any personal data you obtain through the Actor and subsequently process for your own purposes
- The backend data service provider is the entity that collects data from source platforms - they bear the responsibilities of a data processor or controller (depending on context) for the collection itself
- The Publisher acts solely as a software vendor, not as a data controller or processor, because the Publisher does not store, retain, or substantively process personal data - the Actor merely passes responses through
6.2 No Data Retention by the Publisher
The Publisher confirms:
- (a) The Publisher does not maintain a database of personal data obtained through the Actor
- (b) The Actor passes data from the backend data service directly to you on the Apify platform - data does not flow through the Publisher's infrastructure
- (c) Apify's standard execution and operational logging may include limited information about Actor runs (input parameters, run duration, data volume) - this is governed by Apify's own privacy practices
- (d) The Publisher does not access, view, or analyze your Actor outputs except as needed for technical support if you specifically share them with the Publisher
6.3 Your Obligations as Data Controller
Where your use of the Actor involves processing personal data, you are responsible for:
- (a) Establishing a lawful basis for your processing (consent, legitimate interest with documented balancing test, contract, etc.)
- (b) Providing transparent notice to data subjects as required by applicable law
- (c) Honoring data subject access, rectification, erasure, restriction, and portability requests
- (d) Implementing appropriate security measures
- (e) Conducting Data Protection Impact Assessments where required
- (f) Appointing a Data Protection Officer if your operations require one
- (g) Registering databases with applicable supervisory authorities
- (h) Honoring opt-out requests for direct marketing
- (i) Cross-border transfer safeguards where data crosses borders
6.4 Israel's Amendment 13 - User Compliance
If your use of the Actor involves Israeli residents' personal data, you must comply with the Privacy Protection Law as amended (Amendment 13, effective August 14, 2025). These obligations are yours as the data controller, not the Publisher's as the software vendor.
6.5 Sensitive Data Targeting Restrictions
You will not use the Actor to specifically target, profile, or build datasets focused on:
- Health or medical conditions
- Religious beliefs
- Political opinions
- Sexual orientation or gender identity
- Genetic or biometric data
- Criminal history
- Children under 16
7. INTELLECTUAL PROPERTY
7.1 Actor Code
The Actor's source code, schemas, documentation, and branding are owned by the Publisher. You receive a limited, non-exclusive, non-transferable, revocable license to use the Actor for permitted purposes during your active subscription/run with Apify.
7.2 Output Data
The Publisher claims no ownership over the public data the Actor returns. Source Platforms may have copyright, database rights, or other rights in their data; data subjects may have copyright in user-generated content. Your use of output data must respect these rights independently.
7.3 Restrictions
You may not reverse engineer, decompile, or reuse the Actor's code in a competing actor.
7.4 Feedback
Feedback you provide may be used by the Publisher to improve products without compensation to you.
8. PRICING AND PAYMENT
8.1 Apify Platform Billing
Pricing is administered through Apify's pricing models. Apify processes all payments. Apify's payment terms govern refunds and disputes.
8.2 Pricing Changes
The Publisher may change Actor pricing with at least 14 days' notice via the Actor's Apify listing.
8.3 No Refunds for Misuse
If your access is suspended or terminated for breach of these Terms, you forfeit any unused balance and are not entitled to refunds.
9. SERVICE AVAILABILITY AND CHANGES
9.1 No Uptime Guarantee
The Actor depends on:
- (a) The Apify platform
- (b) The underlying backend data service provider
- (c) The Source Platform's continued public accessibility
Any of these may change behavior, restrict access, or become unavailable without notice. The Publisher makes no uptime guarantees.
9.2 Service Discontinuation
The Publisher may discontinue the Actor at any time. Reasonable notice will be provided when feasible.
10. DISCLAIMERS
10.1 "AS IS" Service
THE ACTOR IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTIES OF ANY KIND, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR PURPOSE, NON-INFRINGEMENT, OR ACCURACY OF DATA.
10.2 No Representation of Lawfulness
The Publisher makes no representation that your specific use of the Actor or the data it returns is lawful in your jurisdiction or under any Source Platform's terms. The burden of determining lawfulness for your use case is yours.
10.3 No Endorsement of Source Content
Content returned by the Actor was created by third parties. The Publisher does not endorse, verify, or take responsibility for it.
11. LIMITATION OF LIABILITY
11.1 Aggregate Liability Cap
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL THE AGGREGATE LIABILITY OF THE PUBLISHER FOR ALL CLAIMS RELATING TO THE ACTOR EXCEED THE GREATER OF:
- (a) ONE HUNDRED U.S. DOLLARS (US $100), OR
- (b) THE AMOUNTS YOU PAID THROUGH APIFY FOR USE OF THE ACTOR IN THE THREE (3) MONTHS IMMEDIATELY PRECEDING THE EVENT
11.2 Excluded Damages
THE PUBLISHER IS NOT LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES, OR FOR LOSS OF PROFITS, REVENUE, OR DATA, EVEN IF ADVISED OF THE POSSIBILITY.
11.3 Time Limit
Any claim must be brought within one (1) year of the event.
12. INDEMNIFICATION
12.1 Your Indemnification of the Publisher
You agree to defend, indemnify, and hold harmless the Publisher from any:
- Claims arising from your use of the Actor
- Claims arising from your violation of these Terms
- Claims arising from your violation of any law (including privacy law)
- Claims arising from your violation of any Source Platform's Terms of Service
- Claims arising from your processing of personal data obtained through the Actor
- Reasonable attorneys' fees and costs of defending such claims
12.2 Defense
The Publisher may assume defense at your expense. You will cooperate with the Publisher's defense.
12.3 Scope
The indemnification covers reasonable, foreseeable third-party claims arising from your use. It does not extend to:
- Claims arising from the Publisher's gross negligence or willful misconduct
- Claims regarding the Actor's source code itself (those are the Publisher's responsibility)
- Claims regarding the backend data service provider's data collection (those are their responsibility)
13. SUSPENSION AND TERMINATION
13.1 Termination by the Publisher
The Publisher may terminate your access for material breach, illegal use, breach of warranty, or upon credible legal demand.
13.2 Effects of Termination
Your license ends, you must cease use, and applicable provisions survive.
13.3 Termination by You
You may stop using the Actor at any time on Apify.
14. DISPUTE RESOLUTION
14.1 Informal Resolution First
Send a detailed written description of the dispute via UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) and wait 60 days for resolution attempt before any formal claim.
14.2 Governing Law
These Terms are governed by the substantive laws of the State of Israel, without regard to conflict of law principles.
14.3 Exclusive Jurisdiction
Any dispute shall be brought exclusively in the competent civil courts of Tel Aviv-Jaffa, Israel.
14.4 No Class Actions
You agree to bring claims only in your individual capacity.
14.5 Attorneys' Fees
The prevailing party recovers reasonable attorneys' fees.
15. MISCELLANEOUS
15.1 Entire Agreement
These Terms (with Addendum and incorporated documents) are the entire agreement.
15.2 Severability
Unenforceable provisions are reformed to the minimum extent or severed.
15.3 Assignment
You may not assign without the Publisher's consent. The Publisher may assign to affiliates, successors, or acquirers.
15.4 Force Majeure
Neither party is liable for failure due to events beyond reasonable control, including changes by Source Platforms or the backend data service provider, or actions by Apify.
15.5 Third-Party Beneficiaries
Apify and the backend data service provider are intended third-party beneficiaries of Sections 4 (Prohibited Uses), 5 (Source Platform Compliance), and 12 (Indemnification).
15.6 Survival
Sections 0 (Acceptance), 4, 5, 6, 7, 10, 11, 12, 14, and 15 survive termination.
15.7 Language
English controls. Translations are for convenience only.
15.8 Publisher Identification for Legal Process
The Publisher operates on the Apify platform under the username UnseenUser (apify.com/UnseenUser). The Publisher is a registered legal entity. Upon receipt of valid legal process (subpoena, court order, or equivalent) directed through Apify's official channels, the Publisher's full legal identity may be disclosed as required by law. This Section ensures that you have a valid path to legal recourse if needed.
16. ACKNOWLEDGMENT
By using the Actor, you acknowledge that:
- (a) You have read these Terms
- (b) You understand the architecture: you are using software (the Actor) on Apify's platform that calls a backend data service
- (c) You accept responsibility for your use, including for compliance with Source Platform terms
- (d) Your indemnification obligations cover third-party claims arising from your use
- (e) Disputes are resolved in Israeli courts
- (f) The Publisher's identity, while not publicly disclosed in this listing, can be obtained through valid legal process via Apify
For questions, use UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) before running the Actor.
Actor-Specific Terms of Service Addendum
This addendum supplements the Master Terms of Service V4.0. By running this Actor you accept both.
A. Architectural disclosure
This Actor is a software wrapper. It accepts your input parameters, calls a backend data service, and returns the response data to you on the Apify platform. UnseenUser does not store, log, or substantively process the data returned. The data flows through Apify's runtime directly to you.
B. Nature of data returned
This Actor returns full TikTok video metadata for every public post on a profile: aweme_id, caption, creation timestamp, engagement stats (views, likes, comments, shares, saves), video URLs (no-watermark, alternate, watermarked), thumbnail, dimensions, duration, music info (title, author), author metadata (handle, nickname, follower count, verification), pinned/ad/shop-promo flags, and for photo carousels the image URLs.
Where the Actor's output includes individual people's names, photos, or content authored by them, that data constitutes personal data subject to GDPR, CCPA, Israeli Privacy Protection Law (including Amendment 13), and equivalent privacy laws in your downstream processing - but only in your hands as the data controller, not in UnseenUser's hands as the software vendor.
C. Permitted use cases
- Content repurposing for licensed cross-posting workflows
- Influencer marketing audits before partnership
- UGC aggregation for sanctioned brand campaigns
- Brand monitoring of competitor TikTok content output
- Influencer vetting (real posts vs bio claims)
- Academic research on content patterns and trends
- Compliance archiving for regulated industries
- Content marketing benchmarking
D. Specifically prohibited uses
In addition to Master ToS section 4 prohibitions, you may not:
- Republish creator videos as your own on TikTok, Reels, Shorts, or any platform
- Download videos at scale to host on competing platforms or facilitate piracy
- Strip creator attribution from downloaded videos before redistribution
- Train commercial AI/LLM models on TikTok videos without proper licensing - TikTok Terms restrict this AND creators retain copyright
- Mass-extract videos from minor creators
- Build TikTok downloader websites that violate TikTok's anti-circumvention provisions
- Use no-watermark URLs to facilitate copyright infringement, deep-fake creation, or non-consensual distribution
- Aggregate posts across thousands of creators to build a TikTok content database for resale
E. Platform Terms of Service considerations
TikTok's Terms of Service prohibit automated extraction. ByteDance has actively litigated against scrapers. This Actor accesses publicly visible TikTok video data via a backend infrastructure service - that service bears responsibility for the lawfulness of the data collection. Your downstream use must independently comply with TikTok's Terms of Service. Watermark removal plus redistribution is the exact pattern TikTok pursues legally - be careful with downstream use. If TikTok issues a cease-and-desist regarding data obtained via this Actor, notify UnseenUser within 48 hours via the Apify profile contact form (apify.com/UnseenUser) and cease your use immediately.
F. No-watermark URL does not equal authorization to use
The Actor returns clean MP4 URLs without the watermark overlay. Possession of these URLs does NOT grant rebroadcast rights.
You may use the URLs for:
- Real-time viewing in your own monitoring dashboards
- Analysis of video properties (duration, dimensions)
- Personal use (saving your own content)
You may NOT:
- Rebroadcast videos to your own users in a way that competes with TikTok
- Strip TikTok branding/attribution when displaying video content
- Aggregate multiple videos into a TikTok content aggregator product
- Save and republish as your own content
Stripping watermarks AND attribution simultaneously is the pattern TikTok pursues legally.
G. No-watermark URL selection logic
if download_no_watermark_addr.url_list[0] exists: use it (cleanest)else if has_watermark is false: use play_addr.url_list[0]else: TikTok did not return a clean URL - Actor emits clean_url: null
The Actor emits a top-level clean_url field for convenience, plus clean_url_source indicating which field it came from.
H. URL lifecycle and validity
The no-watermark URLs are signed CDN URLs with limited validity:
- Typically valid for 24-72 hours from extraction (TikTok varies this)
- URLs include cryptographic signatures - modifying them breaks them
- Cannot be saved indefinitely - they expire on TikTok's schedule
- Fetch the asset promptly if you intend to keep it
Don't build features that assume URLs are permanent.
I. Content copyright - three layers
Every TikTok video has three separate copyright layers:
- The creator's video (creator's copyright) - footage, performance, editing choices
- The music (music rights holder's copyright) - separate from the video
- The caption text (creator's copyright)
Even if you have permission from the creator for layer 1, layer 2 (music) is independently protected. TikTok has temporary licensing deals with music labels - when you extract the video, you carry NO such license.
J. AI training - special notice
TikTok's Terms of Service explicitly prohibit using TikTok data to train AI/ML models without TikTok's authorization. UnseenUser does NOT authorize, and has no ability to authorize, AI training use.
Recent litigation (NYT v. OpenAI, Andersen v. Stability AI, Reddit v. Perplexity, multiple class actions) demonstrates AI training on platform data is contested. Music rights holders (UMG, Sony, Warner) are particularly aggressive about AI training on copyrighted media.
Your AI training use is your own legal exposure.
K. Minor protection - CRITICAL
TikTok has significant under-18 creator populations. When extracting videos:
- DO NOT extract videos featuring or created by users you know or suspect are minors
- DO NOT process video content depicting minors for ANY commercial purpose
- DELETE any extracted content you discover features minors unless you have valid parental consent
- Be especially alert to school-themed content, child performance videos, and videos with parental-control disclaimers
This restriction is non-negotiable - minor data and likeness protection violations carry the highest regulatory penalties under COPPA, GDPR Article 8, Illinois BIPA, and Israeli Privacy Law.
L. Deep-fake and non-consensual distribution
No-watermark URLs are particularly risky because they remove the attribution that would normally accompany the video. DO NOT use this Actor to:
- Extract videos of identifiable individuals for deep-fake creation
- Extract videos to remove watermarks before non-consensual redistribution
- Extract videos for facial recognition training datasets
- Build face dataset pipelines targeting TikTok creators
Multiple jurisdictions now have specific deep-fake laws (UK Online Safety Act 2023, California, Texas, New York, Illinois). Your use of this Actor's output is your liability.
M. Cease-and-desist protocol
If TikTok contacts UnseenUser regarding your use:
- UnseenUser will notify Apify per Master ToS section 8
- UnseenUser may suspend access to this Actor pending investigation
- You agree to provide documentation of your lawful basis and processing activities on reasonable request
If a creator contacts you directly demanding deletion of their content data:
- Honor the request promptly (typically within 30 days under GDPR)
- Do NOT route them to UnseenUser - UnseenUser is the software vendor, not the data controller
- You may suggest they contact TikTok directly AND comply with your own deletion obligations
- Document the request and your response
Support and contact
Use UnseenUser's Apify profile contact form: apify.com/UnseenUser. This is the official legal and support channel.
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.0.0 | 2026-06-05 | Initial release. Unified profiles bulk input (URLs + handles + user_ids), clean_url precedence logic, carousel handling, pinned/ad/shop flags, four dataset views, OpenAPI live-view schema, key-value-store schema, free-plan 50-item cap. |
2026-08-10
- Added
is_admulti-signal detection to reduce false positives on organic commercial posts from business accounts - Added 7 new keywords to
actor.jsonfor Store search matching (tiktok playlist scraper,tiktok collection scraper,tiktok shop product link,tiktok cross-platform ids,ai-generated content flag,tiktok transcript,tiktok influencer database)
2026-08-09
- Added TikTok collection / playlist support via the existing
profilesinput (new T7 saved task,tt-posts-scrape-tiktok-playlist) - Added
subtitle_tracks[]field and native-caption fetch optimization to save transcript API credits when TikTok already has captions - Added 22 wedge-differentiator fields to
NormalizedRow:is_paid_partnership,shop_product_url,aigc,text_extra,desc_language,video_control,video_region,playlist, expandedstats(downloads, reposts, forwards, whatsapp_shares), plus cross-platform creator IDs (Instagram, YouTube, Twitter) and creator commerce flags - Added 10 table-stakes fields inside
authorandmusicnested objects (avatar, signature, region, language, aweme_count, total_favorited, following_count, album, play_url, duration_s) - Guarded
Actor.charge()behind PPE-mode detection to silence pre-launch log spam
2026-08-08
- Added
include_transcriptopt-in feature withsubtitle_tracks[]discovery, WEBVTT native fetching, ScrapeCreators API captions, and AI fallback (paid event at $0.01 per AI transcript) - Converted actor to Pay Per Event pricing model (activates 2026-08-22)
- Grouped input fields into
TranscriptsandMore optionscollapsible sections - Converted
regionandtranscript_languageinputs from text fields to dropdowns - Changed
max_items_per_profiledefault from 100 to0(every video, no upper limit) - Streamed dataset rows per-video instead of batching per API page
- Added additive Run API output schema pointer (
actor_output_schema.json)
Keywords: tiktok profile videos, tiktok user posts scraper, scrape tiktok profile, tiktok bulk videos, no-watermark tiktok, tiktok content analysis, tiktok ad detection, structured tiktok data