TikTok Scraper - Videos, Profiles, Hashtags & Trends
Pricing
from $4.00 / 1,000 results
TikTok Scraper - Videos, Profiles, Hashtags & Trends
Extract TikTok videos, profiles, hashtags, and search results without login. Filter by date range, likes, and engagement. Get captions, stats, music info, and optional AI transcription. Export structured JSON/CSV. Fast, reliable, no authentication required.
Pricing
from $4.00 / 1,000 results
Rating
0.0
(0)
Developer
Randeep Dhillon
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
TikTok Scraper
Scrape publicly available TikTok data (videos, user profiles, hashtags, and search results) at scale without requiring TikTok login credentials or API keys.
Designed using Crawlee + Playwright to intercept XHR/Fetch network responses directly from TikTok's internal APIs, bypassing DOM obfuscation and bot mitigation.
Features
- 🎥 Video & Post Scraping: Extract captions, upload timestamps, author metadata, audio track metadata, video engagement stats (likes, shares, comments, plays), hashtags, video/cover URLs, and optional AI subtitles.
- 👤 Profile Scraping: Extract user bio, follower count, following count, total video count, total heart/like count, verification status, and avatar image URLs.
- #️⃣ Hashtag Scraping: Extract hashtag name, total video count, and total view count.
- 🔍 Search Query Scraping: Search TikTok by keywords targeting Videos (
/video) or Users (/user). - ⚡ Priority Processing Logic: Automatically prioritizes direct
postURLsfirst when provided, before processingprofiles,hashtags, orsearchQueries. - 🎯 Date & Engagement Filtering: Filter posts early by relative age (e.g.
'7 days','2 weeks','1 month'), ISO dates, minimum likes (leastDiggs), or maximum likes (mostDiggs) to save compute & storage. - 💾 Binary Media Downloads: Download full-resolution video binaries, covers, avatars, and audio covers directly into Apify Key-Value Store.
- 🤖 Optional AI Transcription: Decoupled AI subtitle transcription mode (
downloadSubtitlesOptions: "TRANSCRIBE_ALL_VIDEOS"). - 🚨 Machine-Readable Error Emission: Never fails silently — emits explicit error records (
PROFILE_PRIVATE,NOT_FOUND,POST_SENSITIVE,RATE_LIMITED) with full context.
How to Use
Step 1 — Define your target inputs
Specify any combination of:
postURLs: Array of direct video links (highest priority execution).profiles: Array of TikTok usernames (e.g.["khaby.lame", "tiktok"]).hashtags: Array of hashtag names (without#).searchQueries: Array of raw search terms (with mandatorysearchSectionset to"/video"or"/user").
Step 2 — Configure filters & media options
- Filter by date (
oldestPostDateUnified,newestPostDate). - Filter by engagement (
leastDiggs,mostDiggs). - Enable binary downloads (
shouldDownloadVideos,shouldDownloadCovers,shouldDownloadAvatars). - Enable AI transcription (
downloadSubtitlesOptions).
Step 3 — Run & Export
Click Start and export your structured dataset in JSON, CSV, Excel, or JSONL.
Input Reference
{"postURLs": ["https://www.tiktok.com/@tiktok/video/7123456789012345678"],"profiles": ["khaby.lame"],"hashtags": ["fitness"],"searchQueries": ["gym workout"],"searchSection": "/video","resultsPerPage": 30,"oldestPostDateUnified": "7 days","newestPostDate": "2026-12-31","mostDiggs": 500000,"leastDiggs": 1000,"shouldDownloadVideos": false,"shouldDownloadCovers": false,"shouldDownloadAvatars": false,"shouldDownloadMusicCovers": false,"downloadSubtitlesOptions": "NONE","proxyConfiguration": {"useApifyProxy": true}}
Sample Outputs
1. Video / Post Output
{"id": "7123456789012345678","url": "https://www.tiktok.com/@tiktok/video/7123456789012345678","text": "Try out this new trend! #fitness #fyp","createTime": "2025-01-15T12:00:00.000Z","authorMeta": {"username": "tiktok","nickname": "TikTok","verified": true,"followerCount": 80000000,"followingCount": 500,"videoCount": 1200},"musicMeta": {"musicName": "Original Sound - TikTok","musicAuthor": "TikTok","playUrl": "https://v16-webapp-prime.tiktok.com/music.mp3"},"stats": {"diggCount": 150000,"shareCount": 2000,"commentCount": 3500,"playCount": 2500000},"hashtags": ["fitness","fyp"],"videoUrl": "https://v16-webapp-prime.tiktok.com/video.mp4","coverUrl": "https://p16-sign-va.tiktokcdn.com/cover.jpeg","subtitles": null,"isAd": false}
2. Profile Output
{"username": "khaby.lame","nickname": "Khabane Lame","bio": "If u wanna laugh u are in the right place bro","verified": true,"followerCount": 162000000,"followingCount": 78,"videoCount": 1150,"heartCount": 2500000000,"avatarUrl": "https://p16-sign-va.tiktokcdn.com/avatar.jpeg"}
3. Hashtag Output
{"name": "fitness","videoCount": 4500000,"viewCount": 98000000000}
4. Error Object Example
{"targetUrl": "https://www.tiktok.com/@privateaccount","errorCode": "PROFILE_PRIVATE","message": "Profile @privateaccount is private or restricts access"}
Data Field Specification
| Field | Type | Description |
|---|---|---|
id | String | null | Unique TikTok Video ID |
url | String | null | Canonical TikTok Video URL |
text | String | null | Caption / description text |
createTime | String | null | ISO 8601 creation date |
authorMeta | Object | Author profile metadata (username, nickname, verified, counts) |
musicMeta | Object | Audio track metadata (musicName, musicAuthor, playUrl) |
stats | Object | Engagement counts (diggCount, shareCount, commentCount, playCount) |
hashtags | Array | List of extracted hashtag strings |
videoUrl | String | null | Direct video URL or Key-Value Store asset URL |
coverUrl | String | null | Direct cover URL or Key-Value Store asset URL |
subtitles | String | null | AI transcribed text or WebVTT transcript |
isAd | Boolean | Whether the video is a sponsored advertisement |
FAQ & Support
-
Does this scraper require a TikTok account?
No, it operates entirely on public endpoints without credentials or session cookies. -
How do relative date filters work?
You can setoldestPostDateUnifiedto'7 days','2 weeks','1 month', or an ISO date'YYYY-MM-DD'. The scraper automatically filters out older content before pushing records to the dataset. -
For custom features or issues:
Open an issue in the Issues tab on Apify Console.