Tiktok Video Scraper
Pricing
from $1.80 / 1,000 video scrapeds
Tiktok Video Scraper
Extract TikTok video metadata including caption, hashtags, mentions, views, likes, comments, shares, saves, author info, music data, and video details. Includes analytics like engagement rate and viral score. Ideal for marketing research, influencer analysis, and AI datasets.
Pricing
from $1.80 / 1,000 video scrapeds
Rating
5.0
(1)
Developer
Delowar Munna
Maintained by CommunityActor stats
0
Bookmarked
40
Total users
10
Monthly active users
13 days ago
Last modified
Categories
Share
Extract comprehensive TikTok video metadata — 70+ structured fields including engagement metrics, rich author profiles (incl. commerce fields), music data, video technical specs, and computed engagement rates + viral scoring you won't find elsewhere. Optionally download videos, covers, avatars, music art, and slideshow images to permanent storage and generate text transcripts. Supports video URLs, IDs, creator profiles, hashtags, and search keywords. Export analytics-ready datasets in JSON, CSV, or Excel.

Key Features
- 70+ Structured Fields: Video metadata, rich author profile (incl. commerce/creator-marketplace fields), music info, technical specs, engagement rates, and viral scoring
- Computed Analytics (unique): Engagement rate, like rate, comment rate, share rate, save rate, and a weighted viral score — pre-calculated per video, so you don't have to
- Multiple Input Sources: Scrape by video URL, video ID, creator, hashtag, or search keyword — one auto-detecting box
- Fast & Browserless: Discovery and downloads run over a hosted API (no Chromium) — a typical search or profile run completes in seconds
- Media Downloads: Optionally download the MP4 (choose low or high quality), cover, avatar, music art, and slideshow images — re-hosted permanently on Apify (raw TikTok CDN URLs expire within days)
- Transcripts & Subtitles: Extract native caption tracks and generate a plain-text transcript
- Filtering & Sorting: By posted-within date, like count, and creator-follower count; sort by latest/popular/oldest; include reposts; same-creator video discovery
- 6 Dataset Views: Overview, Engagement, Authors, Music, Video Details, Downloads & Media
- Transparent Errors: Failed targets produce dataset items with codes (
PROFILE_PRIVATE,POST_NOT_FOUND_OR_PRIVATE,BLOCKED,NO_DATA) instead of vanishing - Pay-Per-Event: Pay for the core result, and only for the extras (downloads, transcripts, filtering) you actually turn on
Best for: Marketing agencies, social analytics platforms, AI dataset builders, ecommerce brands, and content strategists
At a Glance
| Feature | Value |
|---|---|
| Output Fields | 70+ structured fields per video |
| Dataset Views | 6 tabs (Overview, Engagement, Authors, Music, Video Details, Downloads & Media) |
| Input Sources | Video URLs/IDs, plus creators, hashtags & keywords (one auto-detecting box) |
| Extras | Video/media download (low or high), transcripts, filtering & sorting, related videos |
| Speed | Browserless (no Chromium) — discovery/downloads over a hosted API, runs finish in seconds |
| Proxy | Automatic — runs on Apify Residential internally (no setup, not user-configurable) |
| Computed Metrics | Engagement rate, like rate, comment rate, share rate, save rate, viral score |
Downloads, Transcripts, Filtering
All of these are off by default — enable only what you need.
| Capability | Input(s) | Where it lands |
|---|---|---|
| Download video (MP4) | shouldDownloadVideos + videoDownloadQuality (low | high) | downloadAddr / mediaUrls (permanent Apify URLs) |
| Download covers / avatars / music art / slideshow | shouldDownloadCovers, shouldDownloadAvatars, shouldDownloadMusicCovers, shouldDownloadSlideshowImages | the matching field is replaced with a permanent URL (original kept under *Original) |
| Transcript / subtitles | downloadSubtitlesOptions = subtitles | transcript | subtitleLinks, transcriptionLink (plain-text) |
| Filtering & sorting | videoSearchDateFilter (posted-within), mostDiggs, leastDiggs, minCreatorFollowers, maxCreatorFollowers, includeReposts, profileSorting | applied before results are saved |
| Related videos | scrapeRelatedVideos, maxRelatedVideos | the source creator's other recent videos are scraped (up to N per input video) |
videoDownloadQuality:lowpicks the smallest-bitrate MP4 (much cheaper to download and store);highkeeps the full-resolution / no-watermark file. Only applies whenshouldDownloadVideosis on.
Note on "related videos": this returns more recent videos from the same creator as each input video's author — not TikTok's personalized algorithmic "For You" recommendations, which aren't reliably available without a logged-in session.
Why permanent media? Raw TikTok CDN URLs are signed with an
x-expirestoken and stop working within days. When a download toggle is on, this actor fetches the asset and re-hosts it on Apify storage so your dataset never rots.
How It Works
- Provide Sources — Enter video URLs/IDs, or find videos by creator, hashtag, or keyword
- Fetch Data (browserless) — Discovery (profile/hashtag/search) and per-video detail come from a hosted TikTok API over plain HTTP — no browser to boot, results in seconds; a resilient browser path is kept as a fallback
- Parse & Normalize — Extract 70+ fields from the API/SSR payloads
- Compute Analytics — Calculate engagement rates and viral scoring
- Enrich (optional) — Download & re-host media, generate transcripts, apply filters/sorting
- Export Dataset — Download as JSON, CSV, or Excel via the Apify platform
Output
Table View

Overview JSON View
{"videoId": "7618559483647773960","videoUrl": "https://www.tiktok.com/@aigonew1ld/video/7618559483647773960","caption": "Stick The Landing 🐶✨ #Chihuahua #Gymnastics #Olympics #AIvideo","textLanguage": "en","hashtagNames": ["chihuahua", "gymnastics", "olympics", "aivideo"],"createTimeISO": "2026-03-19T11:00:00.000Z","duration": 10,"views": 1769743,"likes": 127301,"comments": 1300,"shares": 124162,"collectCount": 8795,"authorUsername": "aigonew1ld","authorVerified": false,"region": "CA","engagementRate": 0.147794,"viralScore": 29.34,"inputSource": "hashtag","inputQuery": "aivideo"}
Engagement JSON View
{"videoId": "7618559483647773960","caption": "Stick The Landing 🐶✨ #Chihuahua #Gymnastics #Olympics #AIvideo","authorUsername": "aigonew1ld","views": 1769743,"likes": 127301,"comments": 1300,"shares": 124162,"collectCount": 8795,"repostCount": 0,"engagementRate": 0.147794,"likeRate": 0.071932,"commentRate": 0.000735,"shareRate": 0.070158,"saveRate": 0.00497,"viralScore": 29.34,"captionLength": 62,"hashtagCount": 4,"mentionCount": 0,"isAd": false,"isSponsored": false,"isSensitive": false}
Authors JSON View
{"videoId": "7618559483647773960","authorId": "7518237527196550152","authorUsername": "aigonew1ld","authorNickname": "AIGoneWILD","authorProfileUrl": "https://www.tiktok.com/@aigonew1ld","authorVerified": false,"authorBio": "Mind-melting, glitch-ridden, WTF-worthy AI videos.","authorAvatar": "https://p19-common-sign.tiktokcdn-us.com/...","authorFollowers": 512300,"authorFollowing": 41,"authorTotalLikes": 18400000,"authorVideoCount": 214,"authorPrivateAccount": false,"authorBioLink": "https://linktr.ee/aigonewild","authorTtSeller": false,"authorIsCommerceUser": false,"authorRoomId": ""}
Music JSON View
{"videoId": "7618559483647773960","authorUsername": "aigonew1ld","musicId": "7618559528111558000","musicTitle": "original sound - aigonew1ld","musicAuthor": "AIGoneWILD","musicOriginal": true,"musicPlayUrl": "https://v19.tiktokcdn-us.com/...","musicCoverUrl": "https://p16-common-sign.tiktokcdn-us.com/..."}
Video Details JSON View
{"videoId": "7618559483647773960","videoUrl": "https://www.tiktok.com/@aigonew1ld/video/7618559483647773960","createTime": 1773918000,"createTimeISO": "2026-03-19T11:00:00.000Z","duration": 10,"videoHeight": 1920,"videoWidth": 1080,"videoFormat": "mp4","videoDefinition": "1080p","videoCoverUrl": "https://p19-common-sign.tiktokcdn-us.com/...","videoOriginalCoverUrl": "https://p19-common-sign.tiktokcdn-us.com/...","videoDynamicCoverUrl": "https://p19-common-sign.tiktokcdn-us.com/...","isAd": false,"isSponsored": false,"isPinned": false,"isSlideshow": false,"isSensitive": false,"region": "CA","effectStickers": [],"retrievedAt": "2026-07-06T02:52:48.314Z"}
All Fields JSON View
{"videoId": "7618559483647773960","videoUrl": "https://www.tiktok.com/@aigonew1ld/video/7618559483647773960","caption": "Stick The Landing 🐶✨ #Chihuahua #Gymnastics #Olympics #AIvideo","textLanguage": "en","hashtags": [{ "id": "18179", "name": "chihuahua", "title": "chihuahua", "cover": "" },{ "id": "1636822982236165", "name": "aivideo", "title": "aivideo", "cover": "" }],"hashtagNames": ["chihuahua", "gymnastics", "olympics", "aivideo"],"mentions": [],"detailedMentions": [],"subtitleLinks": [{ "language": "eng-US", "source": "ASR", "format": "webvtt", "url": "https://v16-cla.tiktokcdn-us.com/..." }],"createTime": 1773918000,"createTimeISO": "2026-03-19T11:00:00.000Z","duration": 10,"views": 1769743,"likes": 127301,"comments": 1300,"shares": 124162,"collectCount": 8795,"repostCount": 0,"authorId": "7518237527196550152","authorUsername": "aigonew1ld","authorNickname": "AIGoneWILD","authorProfileUrl": "https://www.tiktok.com/@aigonew1ld","authorVerified": false,"authorBio": "Mind-melting, glitch-ridden, WTF-worthy AI videos.","authorAvatar": "https://p19-common-sign.tiktokcdn-us.com/...","authorAvatarOriginal": null,"authorFollowers": 512300,"authorFollowing": 41,"authorTotalLikes": 18400000,"authorVideoCount": 214,"authorPrivateAccount": false,"authorFriends": null,"authorBioLink": "https://linktr.ee/aigonewild","authorTtSeller": false,"authorIsCommerceUser": false,"authorRoomId": "","musicId": "7618559528111558000","musicTitle": "original sound - aigonew1ld","musicAuthor": "AIGoneWILD","musicOriginal": true,"musicPlayUrl": "https://v19.tiktokcdn-us.com/...","musicCoverUrl": "https://p16-common-sign.tiktokcdn-us.com/...","musicCoverUrlOriginal": null,"videoHeight": 1920,"videoWidth": 1080,"videoFormat": "mp4","videoDefinition": "1080p","videoCoverUrl": "https://p19-common-sign.tiktokcdn-us.com/...","videoCoverUrlOriginal": null,"videoOriginalCoverUrl": "https://p19-common-sign.tiktokcdn-us.com/...","videoDynamicCoverUrl": "https://p19-common-sign.tiktokcdn-us.com/...","isAd": false,"isSponsored": false,"isPinned": false,"isSlideshow": false,"isSensitive": false,"region": "CA","slideshowImages": [],"slideshowImagesOriginal": null,"downloadAddr": "https://api.apify.com/v2/key-value-stores/<store>/records/video-aigonew1ld-7618559483647773960.mp4","mediaUrls": ["https://api.apify.com/v2/key-value-stores/<store>/records/video-aigonew1ld-7618559483647773960.mp4"],"transcriptionLink": "https://api.apify.com/v2/key-value-stores/<store>/records/transcript-aigonew1ld-7618559483647773960.txt","effectStickers": [],"captionLength": 62,"hashtagCount": 4,"mentionCount": 0,"engagementRate": 0.147794,"likeRate": 0.071932,"commentRate": 0.000735,"shareRate": 0.070158,"saveRate": 0.00497,"viralScore": 29.34,"retrievedAt": "2026-07-06T02:52:48.314Z","inputSource": "hashtag","inputQuery": "aivideo"}
downloadAddr,mediaUrls,transcriptionLink,slideshowImages, and the*Originalfields are populated only when the matching download/transcript toggle is on; otherwise they arenull/[].
Output Schema (70+ Fields)
Video (12 fields)
| Field | Type | Description |
|---|---|---|
| videoId | String | TikTok video ID |
| videoUrl | String | Full video URL |
| caption | String | Video caption/description |
| textLanguage | String | Detected language of the caption |
| hashtags | Array | Hashtags as objects { id, name, title, cover } |
| hashtagNames | Array | Flat list of hashtag names (spreadsheet-friendly) |
| mentions | Array | @mentioned user IDs/usernames |
| detailedMentions | Array | Mentions as objects { id, name } |
| subtitleLinks | Array | Native caption tracks { language, source, format, url } |
| createTime | Integer | Unix timestamp (seconds) |
| createTimeISO | String | ISO 8601 creation timestamp |
| duration | Integer | Video duration in seconds |
Engagement (6 fields)
| Field | Type | Description |
|---|---|---|
| views | Integer | View/play count |
| likes | Integer | Like/digg count |
| comments | Integer | Comment count |
| shares | Integer | Share count |
| collectCount | Integer | Bookmark/save count |
| repostCount | Integer | Repost count |
Author (17 fields)
| Field | Type | Description |
|---|---|---|
| authorId | String | Creator user ID |
| authorUsername | String | Creator @username |
| authorNickname | String | Creator display name |
| authorProfileUrl | String | Profile page URL |
| authorVerified | Boolean | Verified account badge |
| authorBio | String | Profile bio/signature |
| authorAvatar | String | Avatar image URL |
| authorFollowers | Integer | Follower count |
| authorFollowing | Integer | Following count |
| authorTotalLikes | Integer | Total likes received |
| authorVideoCount | Integer | Number of videos posted |
| authorPrivateAccount | Boolean | Whether the account is private |
| authorFriends | Integer | Mutual-friend count |
| authorBioLink | String | External link in bio |
| authorTtSeller | Boolean | TikTok Shop seller flag |
| authorIsCommerceUser | Boolean | Creator-marketplace / commerce flag |
| authorRoomId | String | Live room ID (if currently/last live) |
Note: the deepest author stats (
authorFollowers,authorTotalLikes,authorVideoCount,authorFriends,authorBioLink) are richest on single video URL and creator profile scrapes. In large hashtag/search feeds, some of these may come back as0/nullbecause TikTok's feed payloads omit them.
Music (6 fields)
| Field | Type | Description |
|---|---|---|
| musicId | String | Sound/music ID |
| musicTitle | String | Sound/music title |
| musicAuthor | String | Sound/music author |
| musicOriginal | Boolean | Whether it's an original sound |
| musicPlayUrl | String | Music audio URL (time-limited) |
| musicCoverUrl | String | Music cover image URL |
Video Technical (7 fields)
| Field | Type | Description |
|---|---|---|
| videoHeight | Integer | Video height in pixels |
| videoWidth | Integer | Video width in pixels |
| videoFormat | String | Video format (e.g., mp4) |
| videoDefinition | String | Video quality (e.g., 720p) |
| videoCoverUrl | String | Video thumbnail URL |
| videoOriginalCoverUrl | String | Original cover image URL |
| videoDynamicCoverUrl | String | Animated/dynamic cover URL |
Flags & Metadata (6 fields)
| Field | Type | Description |
|---|---|---|
| isAd | Boolean | Whether the video is an ad |
| isSponsored | Boolean | Whether the video is sponsored |
| isPinned | Boolean | Whether pinned to the profile |
| isSlideshow | Boolean | Whether it's a photo slideshow |
| isSensitive | Boolean | Whether flagged as sensitive/age-restricted |
| region | String | Video region/country code |
Media & Downloads (4 fields)
| Field | Type | Description |
|---|---|---|
| slideshowImages | Array | Slideshow/photo-post image URLs (re-hosted if downloaded) |
| downloadAddr | String | Permanent Apify URL of the downloaded MP4 (when enabled) |
| mediaUrls | Array | Array of downloaded media URLs |
| transcriptionLink | String | Permanent Apify URL of the plain-text transcript (when enabled) |
When a download re-hosts an asset, the original TikTok URL is preserved under a
*Originalcompanion field (authorAvatarOriginal,videoCoverUrlOriginal,musicCoverUrlOriginal,slideshowImagesOriginal).
Derived (4 fields)
| Field | Type | Description |
|---|---|---|
| effectStickers | Array | Effect/sticker names used |
| captionLength | Integer | Character count of caption |
| hashtagCount | Integer | Number of hashtags |
| mentionCount | Integer | Number of @mentions |
Engagement Rates (6 fields)
| Field | Type | Description |
|---|---|---|
| engagementRate | Float | (likes + comments + shares + saves) / views |
| likeRate | Float | likes / views |
| commentRate | Float | comments / views |
| shareRate | Float | shares / views |
| saveRate | Float | saves / views |
| viralScore | Float | Weighted viral metric (0-100+) |
Meta (3 fields)
| Field | Type | Description |
|---|---|---|
| retrievedAt | String | ISO 8601 scrape timestamp |
| inputSource | String | Input type: video, profile, hashtag, search |
| inputQuery | String | The input value that triggered this extraction |
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| videos | Array | [] | TikTok videos to scrape — full URLs or bare numeric IDs (mix freely) |
| findVideosBy | Array | [] | Discover videos by @creator, #hashtag, or search keyword — mix freely; each entry's type is auto-detected. Falls back to trending only if this and videos are both empty |
| maxVideos | Integer | 50 | Max videos per source (1-500) |
| shouldDownloadVideos | Boolean | false | Download & permanently re-host the MP4 |
| videoDownloadQuality | String | low | MP4 quality when downloading — low (cheapest) or high (full-res / no-watermark) |
| shouldDownloadCovers / Avatars / MusicCovers / SlideshowImages | Boolean | false | Download & permanently re-host the matching images |
| videoKvStoreIdOrName | String | — | Optional named key-value store for downloaded media |
| downloadSubtitlesOptions | String | off | subtitles (links) or transcript (plain text) — native captions |
| videoSearchDateFilter | String | all | "Posted within" window — 24h, 7d, 30d, 90d, 180d |
| mostDiggs / leastDiggs | Integer | — | Keep videos with at most / at least this many likes |
| minCreatorFollowers / maxCreatorFollowers | Integer | — | Keep videos whose creator has ≥ / ≤ this many followers |
| includeReposts | Boolean | false | Also include the creator's reposted videos |
| profileSorting | String | latest | Sort profile videos: latest, popular, or oldest |
| scrapeRelatedVideos | Boolean | false | Also scrape the source creator's other recent videos (for video sources) |
| maxRelatedVideos | Integer | 10 | How many extra videos from the source creator to scrape per input video (1-50) |
Proxy note: there is no proxy input — the actor always scrapes through Apify Residential automatically (see Proxy policy).
Author & music data are always included in the output — no toggle needed.
Legacy note: the older
videoUrls/videoIdsfields are still read if present, but the singlevideosfield replaces both — paste URLs or IDs interchangeably. Likewise, the olderusernames,hashtags, andsearchKeywordsfields are still accepted, butfindVideosByreplaces all three — creators, hashtags, and keywords go in one box.
Quick Start
1. Search by keyword
{"findVideosBy": ["trending"],"maxVideos": 50}
2. Mix creators, hashtags & keywords (one box)
{"findVideosBy": ["@travelguru", "#aivideo", "summer recipes"],"maxVideos": 100}
3. Specific videos by URL or ID
{"videos": ["https://www.tiktok.com/@aigonew1ld/video/7618559483647773960","7593733846680505620"]}
4. Download the MP4 + transcript (low quality = cheapest)
{"findVideosBy": ["#aivideo"],"maxVideos": 25,"shouldDownloadVideos": true,"videoDownloadQuality": "low","downloadSubtitlesOptions": "transcript"}
5. Creator profile — top posts, high-quality download
{"findVideosBy": ["@aigonew1ld"],"maxVideos": 200,"profileSorting": "popular","shouldDownloadVideos": true,"videoDownloadQuality": "high"}
6. Filter by recency, popularity & creator size
{"findVideosBy": ["#aivideo"],"maxVideos": 100,"videoSearchDateFilter": "30d","leastDiggs": 10000,"minCreatorFollowers": 50000}
7. Photo/slideshow post + slideshow image download
{"videos": ["https://www.tiktok.com/@appmillers/photo/7642915002831326471"],"shouldDownloadSlideshowImages": true}
🚦 Proxy policy
TikTok blocks datacenter IPs aggressively and throttles any single IP after a burst, so the actor always scrapes through Apify Residential automatically. There is no proxy input — it's handled internally, including rotating to a fresh IP when TikTok throttles the current one. You don't configure or pay for proxy separately; the residential cost is built into the per-feature pricing. Because discovery is now browserless (a hosted API, not a rendered page), the per-run cost is low — the residential/bandwidth cost is dominated by the optional video downloads (the MP4 files themselves).
Engagement Rates & Viral Score
All engagement rates are calculated as ratios (0 to 1). Returns null if views is 0 or the metric is unavailable.
Viral Score uses a weighted formula:
viralScore = (shares * 3 + saves * 2 + comments * 1.5 + likes) / views * 100
| Score Range | Interpretation |
|---|---|
| 0 - 5 | Low engagement |
| 5 - 10 | Average engagement |
| 10 - 25 | Good viral potential |
| 25 - 50 | Strong viral potential |
| 50+ | Exceptional / highly viral |
Dataset Views
The output is organized into 6 focused tabs on the Apify platform:
| Tab | What You See |
|---|---|
| Overview | Quick summary — video, caption, key metrics, author, viral score |
| Engagement | All counts + computed rates + viral score + content flags |
| Authors | Full creator profiles — bio, avatar, followers, verified, commerce |
| Music | Sound info — title, artist, original-sound flag, cover |
| Video Details | Technical specs, covers, timestamps, flags, effects, sensitivity |
| Downloads & Media | Downloaded MP4/covers, subtitle links, transcript, slideshow images |
Pricing
Pay-per-event — you pay for the core result plus only the extras you enable. Prices are shown on the Actor's Apify page. There is no separate proxy charge (Apify Residential is handled internally and built into these events).
| Event | Charged per | Fires when |
|---|---|---|
video-scraped | output record | every video saved to the dataset — the baseline every run pays |
filtering-applied | run (once) | the first saved record of a run where any Filtering & sorting option is non-default |
video-downloaded-high | output record | an MP4 is downloaded & re-hosted with videoDownloadQuality: high |
video-downloaded-low | output record | an MP4 is downloaded & re-hosted with videoDownloadQuality: low (default) |
transcript-generated | output record | a text transcript is produced (downloadSubtitlesOptions: transcript) |
slideshow-image-downloaded | image | each image re-hosted from a photo/slideshow post (shouldDownloadSlideshowImages) |
How to keep cost low
- Metadata-only runs (no downloads, no transcript, no filter) pay just
video-scrapedper result — the cheapest mode, and it still includes all 70+ fields, engagement rates, and viral score. - Downloads: prefer
videoDownloadQuality: low— it bills the cheapervideo-downloaded-lowevent and pulls far less data thanhigh. Usehighonly when you need full-resolution / no-watermark files. - Filtering:
filtering-appliedis charged once per run, not per video — so a single filtered run over 500 videos pays that surcharge exactly once. It reflects the cost of scanning many videos to return a filtered subset. - Slideshows:
slideshow-image-downloadedbills per image, so a 20-image post costs 20×. TurnshouldDownloadSlideshowImageson only when you need the images. - Not charged: cover, avatar, and music-cover image downloads are free.
Use Cases
Influencer Marketing
Analyze TikTok creator performance and content engagement. Compare viral scores across creators to identify top performers.
Competitor Monitoring
Track competitor campaigns, viral content, and hashtag performance. Monitor shares, saves, and repost counts over time.
Trend Analysis
Identify trending hashtags, sounds, and content styles at scale. Use music data and effect stickers to spot emerging trends.
AI Dataset Generation
Generate structured datasets (with captions, transcripts, and downloaded media) for training recommendation, sentiment, or content-classification models.
Social Listening
Understand audience engagement through video metrics across topics. Filter by engagement rate, viral score, recency, and creator size.
Performance
| Metric | Value |
|---|---|
| Discovery/detail | Browserless (hosted API) — runs finish in seconds |
| Concurrency | Up to 10 parallel requests (browserless) |
| Retry | Up to 4 retries per request |
| Pagination | Discovery pages automatically to maxVideos (up to 500) |
Data Export
Supported formats (via Apify platform):
- JSON
- CSV
- Excel
- HTML
Notes
- Music play URLs are time-limited signed URLs that may expire — enable
shouldDownloadMusicCovers/ media downloads for permanent copies - textLanguage returns a language code (e.g.,
"en","es") or"un"(undetermined) if TikTok does not provide language metadata - region is extracted from multiple sources (video metadata, author profile, diversification labels)
- Deep author stats (followers/likes/videos) are richest on video-URL and profile scrapes; hashtag/search feeds may return some as
0/null(TikTok's feed payloads omit them) - Failed targets are reported as structured error items (
PROFILE_PRIVATE,POST_NOT_FOUND_OR_PRIVATE,BLOCKED,NO_DATA) rather than being silently dropped
Compliance
- Collects only publicly available TikTok video data
- Does not bypass CAPTCHAs or access gated content
- Does not collect private account data
- Intended for legitimate research, analytics, and business intelligence
- Users are responsible for compliance with applicable laws in their jurisdiction
Support
- Issues: Report via GitHub or Apify support
- Feature requests: Open an issue with your use case
Built by Coregent Digital Studio — Production-ready TikTok video metadata extraction
