Download TikTok videos without watermark. Extract direct download links from TikTok URLs with full metadata including views, likes, shares, and comments.
- 🎬 Extract Video URLs - Get direct playable video links from TikTok
- 📊 Full Metadata - Views, likes, shares, comments, duration, quality
- 💾 Optional Download - Store videos in Apify Key-Value Store with persistent links
- 🔄 Resumable Runs - State persistence for interrupted runs
- 🎯 FPS Selection - Choose between 30 or 60 FPS quality
- 🔁 Auto Retry - Automatic retry with exponential backoff for failed requests
- 🌐 Proxy Support - Built-in proxy configuration for better success rates
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
videoUrls |
array | ✅ | - | TikTok video URLs to process |
preferredFps |
string | ❌ | "60" |
Video quality: "30" or "60" FPS |
downloadVideo |
boolean | ❌ | false |
Store videos on Apify servers |
proxyConfig |
object | ❌ | - | Proxy configuration |
{
"videoUrls": [
{ "url": "https://www.tiktok.com/@username/video/1234567890" },
{ "url": "https://vm.tiktok.com/ABC123" }
],
"preferredFps": "60",
"downloadVideo": true
}Each video produces a dataset item with the following structure:
{
"videoUrl": "https://www.tiktok.com/@user/video/123",
"videoId": "1234567890",
"directUrl": "https://v16-webapp.tiktok.com/...",
"title": "Video description text",
"author": "Creator Name",
"authorId": "123456789",
"Cover": "https://p16-sign.tiktok.com/...",
"duration": 15,
"viewCount": 100000,
"likeCount": 5000,
"shareCount": 200,
"commentCount": 150,
"width": 576,
"height": 1024,
"quality": "540p",
"fileSize": "1234567",
"extractedAt": "2024-01-15T10:30:00.000Z",
"download": {
"available": true,
"url": "https://api.apify.com/v2/key-value-stores/.../records/...",
"format": "mp4",
"status": "completed",
"fileSizeHuman": "1.5 MB"
},
"processingTime": 2500,
"success": true
}The Actor provides four pre-configured dataset views:
- Overview - Quick summary with video ID, title, author, and status
- Statistics - Engagement metrics (views, likes, shares, comments)
- Downloads - Download links and file information
- Errors - Failed extractions with error details
This Actor supports resumable runs. If a run is interrupted (migration, timeout, abort), it will automatically resume from where it left off on the next run with the same input.
State is automatically saved:
- Every 3 processed videos
- On Actor migration events
- On Actor abort events
- Before Actor exit
To disable state persistence, set enableStatePersistence: false in input.
For better success rates, especially with high-volume extractions:
{
"proxyConfig": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}The Actor implements intelligent retry logic:
| Error Type | Retryable | Behavior |
|---|---|---|
| Network timeout | ✅ | Exponential backoff |
| Rate limiting (429) | ✅ | Extended backoff |
| Server errors (5xx) | ✅ | Standard backoff |
| Video not found (404) | ❌ | Immediate fail |
| Private/restricted video | ❌ | Immediate fail |
| Invalid URL | ❌ | Immediate fail |
After completion, a summary is saved to the Key-Value Store under the key RUN_SUMMARY:
{
"total": 10,
"processed": 10,
"successful": 9,
"failed": 1,
"skipped": 0,
"retried": 2,
"downloads": {
"enabled": true,
"successful": 9,
"failed": 0
},
"resumed": false,
"completedAt": "2024-01-15T10:35:00.000Z"
}- TikTok direct URLs may expire (use
downloadVideo: truefor persistent links) - Some region-restricted videos may not be accessible
- Private videos cannot be extracted
- 🌐 Website: flowextractapi.com
- 📧 Email: flowextractapi@outlook.com
- 🙋 Apify Profile: dz_omar
- 💬 GitHub Issues: FlowExtractAPI
- 💼 LinkedIn: flowextract-api
- 🐦 Twitter: @FlowExtractAPI
- 📱 Facebook: flowextractapi
- Universal File Downloader: Powers the intelligent download system
- TikTok Profile Scraper: Extract user profiles and video lists
- Social Media Analytics: Comprehensive social media data extraction
