TikTok Scraper - Videos, Profiles & Hashtags $0.25/1k
Pricing
$0.25 / 1,000 result returneds
TikTok Scraper - Videos, Profiles & Hashtags $0.25/1k
A flat $0.25 per 1,000 results on every plan, with no add-on events - everything below is part of the same result row. Covers profiles, videos, hashtags, sounds and keyword search: play, like, comment and share counts, music, author and video URLs. No login.
Pricing
$0.25 / 1,000 result returneds
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
11 hours ago
Last modified
Categories
Share
⚡ TikTok Scraper — Profiles, Videos, Hashtags & Search (No Login, No API Key)
Scrape TikTok without a login or API key. Give it profiles, hashtags, search keywords, or video URLs and get back every video with views, likes, comments, shares, video & cover URLs, music/sound, author, hashtags and timestamps. Export to JSON, CSV or Excel, call it from the API, or have results delivered straight to Notion. Just $0.25 per 1,000 results — the cheapest TikTok scraper on the market, built for influencer discovery, trend tracking, lead gen and market research.
No account. No signing keys. No msToken to paste. Paste a username and run.
Why this scraper wins
- 💸 Cheapest on the market — a flat $0.25 / 1,000 results. Billed per result actually returned, with no volume tiers and no plan gates. Everything you see in a row (stats, music, author, video URLs) is part of that one result — there are no add-on events billed on top.
- 🔓 Keyless, sign-free, proxy-free — no login, no API key, no signing keys, and no proxy needed. It just works from a default run.
- 🛡️ Real numbers, not deflated ones — TikTok serves flagged addresses a decoy version of a profile with wrong follower and view counts. This scraper is built so that never happens, so the stats you get are the stats TikTok shows a normal visitor.
- 🧹 Clean, flat records — one tidy object per video, ready for sheets, dashboards or LLM pipelines. No nested junk to unwrap.
- 📬 Built-in Notion delivery — push every run into Notion via Apify connectors, zero extra code.
- 🚦 Honest errors — a clear
errorCoderow when something goes wrong, instead of silent emptiness. Diagnostic rows are never charged. - ⏱️ Built-in cost guard — a run-time budget stops pathological queries from grinding on, so a bad keyword can't quietly run up a bill.
What you can scrape
| Mode | Input | Returns |
|---|---|---|
| Profile | profiles or a profile URL | One profile row (followers, likes, bio, verified) + its recent videos |
| Hashtag | hashtags or a /tag/ URL | Videos published under the hashtag |
| Search | searchQueries | Videos matching the keyword, in TikTok's search order |
| Single video | a /video/ URL in startUrls | That one video with full stats, music and author |
You can mix all four in a single run — a list of profiles, a couple of hashtags and a search keyword all go in the same input and land in the same dataset.
Input
| Field | Type | What it does |
|---|---|---|
profiles | string[] | Usernames, with or without @ (e.g. nasa, @nba). |
hashtags | string[] | Hashtags, with or without #. |
searchQueries | string[] | Keywords to search TikTok for. |
startUrls | string[] | Paste TikTok URLs directly — profile, /video/ or /tag/. They are routed to the right mode automatically. |
resultsPerPage | integer | Max results per input (default 50, max 2000). You pay per result, so this is your cost cap. |
maxRunSeconds | integer | Run-time budget in seconds (default 90, max 180). If a slow query keeps paginating with almost no results, the run stops and returns what it has. |
proxyConfiguration | object | Optional and off by default — this scraper needs no proxy. Only add one if you want to spread requests across addresses at high volume. |
notionConnector | string | Optional Apify Notion connector ID for automatic delivery. |
notionParentId | string | Optional Notion database / data-source ID to create the pages in. |
A real input
{"profiles": ["nasa", "nba"],"hashtags": ["spacex"],"searchQueries": ["rocket launch"],"startUrls": ["https://www.tiktok.com/@nasa/video/7300000000000000000"],"resultsPerPage": 50,"maxRunSeconds": 90}
Input field names follow the conventions used across similar Actors, so switching over is usually a drop-in change — the same profiles / hashtags / searchQueries / startUrls shape you already have will run here without edits.
Output
One record per video:
{"ok": true,"type": "video","id": "7300000000000000000","webVideoUrl": "https://www.tiktok.com/@nasa/video/7300000000000000000","text": "Liftoff! 🚀 #space","createTime": "2024-06-12T14:00:00.000Z","hashtags": ["space"],"region": "US","playCount": 2400000,"diggCount": 318000,"commentCount": 4200,"shareCount": 9100,"collectCount": 15300,"downloadCount": 2100,"isAd": false,"video": {"duration": 23,"cover": "https://...jpg","dynamicCover": "https://...webp","playAddr": "https://...mp4","downloadAddr": "https://...mp4"},"music": {"id": "6800000000000000000","title": "original sound","authorName": "NASA","playUrl": "https://...mp3","original": true,"duration": 23},"author": {"id": "6600000000000000000","uniqueId": "nasa","nickname": "NASA","avatar": "https://...jpeg"}}
And one record per profile, whenever you scrape by profile:
{"ok": true,"type": "profile","id": "6600000000000000000","uniqueId": "nasa","secUid": "MS4wLjABAAAA...","nickname": "NASA","signature": "Explore the universe with us.","verified": true,"avatar": "https://...jpeg","followerCount": 9800000,"followingCount": 12,"heartCount": 210000000,"videoCount": 640,"diggCount": 31,"url": "https://www.tiktok.com/@nasa"}
playAddr is the no-watermark MP4; downloadAddr is the watermarked one. Both are TikTok CDN links that expire after a while — download or rehost them if you need them long-term.
Filter the dataset by type (video or profile) if you want the two shapes in separate sheets, or use the CSV export, which flattens video.*, music.* and author.* into columns automatically.
Pricing
$0.25 per 1,000 results ($0.00025 each), with no run-start fee. Flat rate — no volume tiers, no plan gates — and you are charged only for results actually returned. The same $0.25 applies on every Apify plan, including the free one.
What is free:
- Diagnostic rows (
ok: falsewith anerrorCode) — you are never charged for a result you did not get. - Runs that return nothing at all.
- Every field inside a result. Video stats, music/sound, author and profile fields are all part of the one result row; there is nothing billed as an extra event.
Price change on 19 August 2026: the per-result price stays at $0.00025, and a $0.001 run-start fee is added to each run from that date. A 1,000-result run costs $0.25 today and $0.251 from that date — the extra $0.001 is charged once per run, however many results come back.
Because billing is per result, resultsPerPage is a hard cost ceiling: set it to 20 and a profile can never cost you more than $0.005.
Typical uses
- Influencer discovery — scrape a hashtag or keyword, sort by
playCountor engagement rate (diggCount / playCount), then pull theauthor.uniqueIdlist back through theprofilesinput to get follower counts. - Trend tracking — run the same hashtags on a schedule and diff
playCountover time. - Sound/audio research — group results by
music.idto see which sounds are carrying a trend, and whether they areoriginal. - Competitor content audits — scrape a set of profiles weekly and chart posting cadence from
createTime. - Ad/creative sourcing —
isAdflags promoted content, andvideo.covergives you thumbnails for a contact sheet.
Limitations — read these before you buy
Honest list. These are real, and knowing them up front saves you a wasted run.
- Public data only. Private accounts, follower/following lists, DMs and analytics behind a login are not available. There is no way to pass an account, by design.
- Profile videos are the recent feed. You get the profile's recent uploads in TikTok's own order, not a complete lifetime archive of a large account.
resultsPerPagecaps how deep it pages. - No comment scraping in this Actor. Rows are videos and profiles only.
- Search and hashtag feeds can stall. TikTok sometimes keeps signalling "more pages" while returning near-empty ones. The Actor detects that, stops, and returns what it has — so a broad keyword can return fewer results than
resultsPerPageeven though results exist somewhere deeper. - Throughput is paced. Requests are deliberately spaced to stay well inside upstream limits. Expect roughly one page of ~30 videos per second or two, and size
maxRunSecondsaccordingly for big jobs — split very large scrapes into several runs rather than one long one. - Media URLs expire.
playAddr,downloadAddr,coverandavatarare CDN links with a limited lifetime. - Some fields can be null.
region,music,secUidand the rarer counters (collectCount,downloadCount) depend on what TikTok exposes for that item; the Actor emitsnullrather than inventing a value. - Counts are point-in-time.
playCountand friends are whatever TikTok reported at the moment of the scrape.
Errors and diagnostics
If something fails, the Actor still exits successfully and writes a diagnostic row instead of dying silently:
{ "ok": false, "errorCode": "NO_RESULTS", "error": "The request succeeded but returned no results for this input.", "mode": "search", "query": "..." }
errorCode | Meaning |
|---|---|
NO_RESULTS | The request worked but this input has nothing to return. |
NOT_FOUND | The profile, video or hashtag does not exist, or is private/suspended. |
RATE_LIMITED | Upstream throttling. The Actor backed off and retried; lower the volume or split the run. |
BLOCKED | The request was refused. Usually transient — retry. |
SERVER_ERROR | A 5xx upstream. Transient. |
NETWORK | A network-level failure reaching the source. |
Diagnostic rows carry ok: false — filter on that to separate them from real results in your pipeline. They are not charged.
Calling it from the API
curl -X POST "https://api.apify.com/v2/acts/Dami_Studio~tiktok-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"profiles":["nasa"],"resultsPerPage":20}'
That returns the dataset rows directly as JSON. For bigger jobs, start the run asynchronously and read the dataset when it finishes. The Actor also runs fine from Apify Schedules for recurring trend snapshots, and results can be pushed straight into Notion by supplying notionConnector.
FAQ
Do I need a TikTok account? No. Public profiles, videos, hashtags and search all work keyless.
Do I need a proxy? No. This scraper needs no proxy at all — that's a key advantage. Leave proxyConfiguration empty and it works.
Why do I sometimes see wrong follower counts on other tools? TikTok serves flagged addresses a decoy version of a profile with deflated stats. This Actor is built so that doesn't happen, so you get the same numbers a normal visitor sees.
It returned an errorCode row — why? That's the Actor telling you exactly what happened instead of failing silently. See the table above. You are not charged for it.
Can I get the video files? You get direct MP4 URLs (video.playAddr, no watermark). Downloading the files themselves is up to you — this Actor returns metadata and links, not binaries.
What does a 1,000-result run cost? $0.25 today. From 19 August 2026, $0.251 — the extra $0.001 is the run-start fee, charged once per run.