TikTok Scraper — Videos, Profiles & Hashtags, 3x Cheaper
Pricing
Pay per usage
TikTok Scraper — Videos, Profiles & Hashtags, 3x Cheaper
Scrape TikTok videos, profiles, and hashtags. Get likes, views, comments, shares, music, descriptions. Works with Apify residential proxies. $0.001/video — 3x cheaper than alternatives.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Ken Digital
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
🎵 TikTok Scraper — Videos, Profiles & Hashtags
Scrape TikTok video data from profiles, hashtags, and search queries. Get all the metadata you need: likes, views, comments, shares, music info, descriptions, and more.
No TikTok API key needed. No login required.
💰 Pricing — 3x Cheaper Than Alternatives
| Actor | Price per video | 1,000 videos | 10,000 videos |
|---|---|---|---|
| This actor | $0.001 | $1.00 | $10.00 |
| Competitor A | $0.003 | $3.00 | $30.00 |
| Competitor B | $0.005 | $5.00 | $50.00 |
⚡ Features
- 🔍 Search scraping — find videos by any keyword
- 👤 Profile scraping — get all videos from any user
- #️⃣ Hashtag scraping — scrape videos by hashtag
- 🚀 Concurrent — processes multiple sources in parallel
- 🔄 Auto-retry — handles rate limits with exponential backoff
- 🌐 Proxy support — uses Apify residential proxies to avoid blocks
- 🧹 Deduplication — no duplicate videos in your dataset
📥 Input
{"profiles": ["charlidamelio", "khaby.lame"],"searchQueries": ["cooking recipes", "dance tutorial"],"hashtags": ["fyp", "viral"],"maxVideos": 30}
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
profiles | array | No* | [] | TikTok usernames or profile URLs |
searchQueries | array | No* | [] | Search terms to find videos |
hashtags | array | No* | [] | Hashtag names (without #) |
maxVideos | integer | No | 30 | Max videos per source (1–500) |
* At least one of profiles, searchQueries, or hashtags must be provided.
Profile input formats — all of these work:
charlidamelio@charlidameliohttps://www.tiktok.com/@charlidamelio
📤 Output
Each video in the dataset contains:
{"id": "7345678901234567890","url": "https://www.tiktok.com/@charlidamelio/video/7345678901234567890","description": "New dance 💃 #fyp #dance #viral","createTime": 1709251200,"authorUsername": "charlidamelio","authorNickname": "Charli D'Amelio","authorFollowers": 155000000,"likes": 2500000,"comments": 45000,"shares": 12000,"plays": 35000000,"musicTitle": "original sound","musicAuthor": "charlidamelio","hashtags": ["fyp", "dance", "viral"],"coverUrl": "https://p16-sign.tiktokcdn.com/...","duration": 15,"isAd": false,"source": "profile","sourceValue": "charlidamelio"}
| Field | Type | Description |
|---|---|---|
id | string | TikTok video ID |
url | string | Direct link to the video |
description | string | Video caption/description |
createTime | integer | Unix timestamp of creation |
authorUsername | string | Author's unique username |
authorNickname | string | Author's display name |
authorFollowers | integer | Author's follower count |
likes | integer | Number of likes (diggs) |
comments | integer | Number of comments |
shares | integer | Number of shares |
plays | integer | Number of plays/views |
musicTitle | string | Title of the music/sound used |
musicAuthor | string | Author of the music/sound |
hashtags | array | Hashtags extracted from description |
coverUrl | string | Video thumbnail URL |
duration | integer | Video duration in seconds |
isAd | boolean | Whether the video is an ad |
source | string | Input source type: profile, search, or hashtag |
sourceValue | string | The specific profile/query/hashtag |
🔧 How It Works
- Fetches the TikTok page (profile, search, or hashtag URL)
- Extracts the embedded
__UNIVERSAL_DATA_FOR_REHYDRATION__JSON - Parses video metadata from the hydration data
- Deduplicates and pushes clean results to the dataset
No headless browser needed — pure HTTP requests for speed and cost efficiency.
🛡️ Anti-Blocking
- Uses residential proxies (Apify proxy with
RESIDENTIALgroup) - Realistic browser headers (Chrome 131 on Windows)
- Concurrency limiter (max 3 simultaneous requests)
- Exponential backoff on 429 rate limits
- Automatic retries (up to 3 attempts per request)
💡 Use Cases
- Market research — Track trending content in your niche
- Competitor analysis — Monitor competitor TikTok activity
- Influencer discovery — Find creators by hashtag or search
- Content inspiration — See what's working in your industry
- Trend tracking — Monitor hashtag performance over time
- Academic research — Collect datasets for social media studies
⚠️ Limitations
- TikTok's initial page load typically returns 15–30 videos per profile
- Search results are limited to what TikTok returns on the first page
- Very new or very small accounts may return fewer results
- TikTok may change their page structure without notice
🚀 Quick Start
Run on Apify
- Create an account at apify.com
- Create a new actor from this source (or import the directory)
- Enable Proxy in the actor settings (use residential proxies for best results)
- Run the actor with your input
Run Locally
# Install dependenciespip install -r requirements.txt# Create input.json:cat > input.json << 'EOF'{"profiles": ["khaby.lame"],"maxVideos": 10}EOF# Run (requires Apify CLI)apify run# Or directly (won't charge events):python3 -m src.main < input.json > output.json
Expected Output
The actor pushes each video as a separate item to the default dataset. You can then export the dataset as JSON, CSV, or Excel.
⚠️ Notes
- Residential proxies are highly recommended. Without them, TikTok may return limited or no video data to datacenter IPs.
- If the hydration JSON does not contain video lists (common without proxies), the actor will log a warning and produce no output.
- The
maxVideoslimit is applied per source (profile, search query, or hashtag). Total output may be less depending on available data.
📄 License
This actor is published on the Apify Store. See Apify Terms of Service for usage terms.
🔗 Integration Examples
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("joyouscam35875/tiktok-scraper").call(run_input={"profiles": ["@khaby.lame"], "maxVideos": 10})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('joyouscam35875/tiktok-scraper').call({"profiles": ["@khaby.lame"], "maxVideos": 10});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Make / Zapier / n8n
Use the Apify integration — search for this actor by name in the Apify app connector. No code needed.
🔗 More Scrapers by Ken Digital
| Scraper | What it does | Price |
|---|---|---|
| YouTube Channel Scraper | Videos, stats, metadata via official API | $0.001/video |
| France Job Scraper | WTTJ + France Travail + Hellowork | $0.005/job |
| France Real Estate Scraper | 5 sources + DVF price analysis | $0.008/listing |
| Website Content Crawler | HTML to Markdown for AI/RAG | $0.001/page |
| Google Trends Scraper | Keywords, regions, related queries | $0.002/keyword |
| GitHub Repo Scraper | Stars, forks, languages, topics | $0.002/repo |
| RSS News Aggregator | Multi-source feed parsing | $0.0005/article |
| Instagram Profile Scraper | Followers, bio, posts | $0.0015/profile |
| Google Maps Scraper | Businesses, reviews, contacts | $0.002/result |
| TikTok Scraper | Videos, likes, shares | $0.001/video |
| Google SERP Scraper | Search results, PAA, snippets | $0.003/search |
| Trustpilot Scraper | Reviews, ratings, sentiment | $0.001/review |