Request a tool
All toolsGuidesMCP serverRequest a toolPlatformsCategories
TikTok Scraper - Profiles, Videos, Hashtags & Search icon

TikTok Scraper - Profiles, Videos, Hashtags & Search

Keyless TikTok scraper for profiles, videos, hashtags & search. Get views, likes, comments & video URLs as JSON/CSV. Cheaper, no API key, failed runs free.

93 runs on Apify $0.00025 per result ($0.25 / 1,000)
Run this in the cloudRun on Apify →

Social Media Scrapers

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust profiles, hashtags, searchQueries (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00025 per result = $0.25 per 1,000

You are charged forWhenPrice
Result returnedCharged once per profile or video returned in the dataset. Failed or empty runs are not charged.$0.00025

Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-06-23, and they are what you are actually charged.

Inputs

FieldWhat it doesType
profilesTikTok usernames (with or without @) to scrape. Each one returns a profile row (followers, likes, bio, verified) plus that creator's ~10 newest videos — that is all TikTok publishes for a creator without a login.array
hashtagsHashtags (with or without #) to scrape videos from.array
searchQueriesKeywords to search TikTok for.array
startUrlsPaste TikTok URLs directly — a profile URL, a /video/ URL (single video), or a /tag/ URL (hashtag).array
resultsPerPageMaximum number of videos/results to collect per profile, hashtag or search. You are charged per result returned. Note: a single profile yields about 11 rows maximum (1 profile + ~10 videos) no matter how high this is set; hashtag and search page much deeper.integer
maxRunSecondsSafety cap on total scrape time. If a slow query (e.g. a search/feed that keeps paginating with few results) hits this, the run stops and returns what it has so far. Prevents runaway cost on pathological queries.integer
sessionCookiesOptional. Runs work out of the box using a built-in session, which is shared, so under heavy concurrent load it can be rate-limited. Paste your own TikTok account cookie here to get a private rate limit that no other user shares. In Chrome: F12 → Application → Cookies → tiktok.com, and copy at least `sessionid` (e.g. `sessionid=abc123; sid_tt=abc123`). Only used for TikTok's own pages — it is never sent anywhere else.array
notionConnectorOptional. Deliver the results to your connected Notion via Apify MCP connectors.string
notionParentIdOptional Notion database/data-source id to create the pages in.string

What you get

A structured dataset — each result includes fields like:

typeidwebVideoUrltextcreateTimehashtagsplayCountdiggCountcommentCountshareCountvideomusicauthor

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

5 ready-to-run use cases

Scrape @MrBeast's TikTok Videos

Pull MrBeast's latest TikTok videos with views, likes, comments & shares. No login or API key. Export to JSON, CSV or Excel.

Scrape #fyp Trending TikTok Videos by Hashtag

Collect trending videos from the #fyp hashtag with engagement stats, music & author data. Keyless TikTok scraper, export JSON/CSV.

Search TikTok for Recipe Videos

Scrape TikTok search results for 'easy recipes' with views, likes, comments & video URLs. No login needed. Export to CSV or Excel.

Track Gymshark's TikTok for Competitor Research

Monitor Gymshark's TikTok videos and engagement for competitor research. Views, likes, comments & hashtags. Keyless, export JSON/CSV.

Scrape Charli D'Amelio TikTok by URL

Scrape Charli D'Amelio's TikTok profile by URL — views, likes, shares, music & cover images. No login or API key. Export JSON/CSV/Excel.

Related tools in Social Media Scrapers

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Instagram Scraper - Profiles, Posts & Reels (No Login) iconSocial Media Scrapers

Instagram Scraper - Profiles, Posts & Reels (No Login)

Keyless Instagram scraper: profiles, posts and reels in one run. Likes, comments, views, media, hashtags. No login or API key. From $0.45/1k results.

5 use cases

Tweet Scraper - X / Twitter, No Login, Cheapest iconSocial Media Scrapers

Tweet Scraper - X / Twitter, No Login, Cheapest

No-login X/Twitter scraper: tweets, profiles, search, likes, retweets, views and media to JSON/CSV. No minimums, no caps, failed runs free. ~$0.14/1k.

5 use cases

Twitter (X) User Scraper - Profiles & Followers, No Login iconSocial Media Scrapers

Twitter (X) User Scraper - Profiles & Followers, No Login

Keyless X (Twitter) profile scraper: followers, bio, verified status & more by username. No login or API key, pay per profile, failed lookups free.

5 use cases

TikTok User Scraper - Profiles, Followers & Stats (No Login) iconSocial Media Scrapers

TikTok User Scraper - Profiles, Followers & Stats (No Login)

Scrape TikTok profiles without login or API key. Get followers, likes, bio, verified status & stats. Export CSV/JSON. Only $0.35 per 1,000 profiles.

5 use cases

Reddit Scraper iconSocial Media Scrapers

Reddit Scraper

Scrape Reddit posts and comments from any subreddit or user profile. Sort by top/hot/new, filter by score, get clean text. No key or login needed.

20 use cases

Reddit Posts Search Scraper iconSocial Media Scrapers

Reddit Posts Search Scraper

Search Reddit by keyword across the site or one subreddit and export matching posts as JSON. Sort by relevance, top, new or hot. No code needed.

22 use cases

See all Social Media Scrapers →

⚡ 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. Profile counters (followerCount, heartCount, videoCount) come back exact, not rounded.
  • 🧹 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 errorCode row 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

ModeInputReturns
Profileprofiles or a profile URLOne profile row (followers, likes, bio, verified) + that creator's ~10 newest videos
Hashtaghashtags or a /tag/ URLVideos published under the hashtag
SearchsearchQueriesVideos matching the keyword, in TikTok's search order
Single videoa /video/ URL in startUrlsThat 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

FieldTypeWhat it does
profilesstring[]Usernames, with or without @ (e.g. nasa, @nba).
hashtagsstring[]Hashtags, with or without #.
searchQueriesstring[]Keywords to search TikTok for.
startUrlsstring[]Paste TikTok URLs directly — profile, /video/ or /tag/. They are routed to the right mode automatically.
resultsPerPageintegerMax results per input (default 50, max 2000). You pay per result, so this is your cost cap.
maxRunSecondsintegerRun-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.
proxyConfigurationobjectOptional and off by default — this scraper needs no proxy. Only add one if you want to spread requests across addresses at high volume.
sessionCookiesstring[]Optional and empty by default. Your own TikTok account cookie, if you want a rate limit nobody else shares. See *Rate limits and your own cookie* below.
notionConnectorstringOptional Apify Notion connector ID for automatic delivery.
notionParentIdstringOptional 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: false with an errorCode) — 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 playCount or engagement rate (diggCount / playCount), then pull the author.uniqueId list back through the profiles input to get follower counts.
  • Trend tracking — run the same hashtags on a schedule and diff playCount over time.
  • Sound/audio research — group results by music.id to see which sounds are carrying a trend, and whether they are original.
  • Competitor content audits — scrape a set of profiles weekly and chart posting cadence from createTime.
  • Ad/creative sourcingisAd flags promoted content, and video.cover gives you thumbnails for a contact sheet.

Rate limits and your own cookie

You do not need an account. Profiles, videos, hashtags and search are read from pages TikTok serves to any visitor, and that is the path every run takes first — it is the fastest one and it costs you nothing extra.

A handful of items are the exception: age-restricted videos, and pages TikTok occasionally decides to gate. For those the run falls back to a built-in session, which is shared across everyone using the Actor, so during a busy hour it can be rate-limited or temporarily unavailable. When that happens the run does not fail — it returns everything it did collect plus an uncharged diagnostic row for what it could not.

If you would rather not share that limit, paste your own TikTok cookie into sessionCookies:

1. Sign in to TikTok in Chrome. 2. F12ApplicationCookieshttps://www.tiktok.com. 3. Copy the sessionid value and pass it as "sessionid=<value>". Adding sid_tt and ttwid the same way ("sessionid=…; sid_tt=…; ttwid=…") makes it a little more durable.

Your cookie is used on its own — it is never mixed with the built-in session, so the limit you get is genuinely yours. It is sent only to TikTok's own pages, never to any other host, and its value is never written to the log. You can pass several cookies and the run will rotate between them. The run's status line reports sessionState, so you can see at a glance whether a run used the keyless path (keyless), a healthy session (ok), or ran out (exhausted).

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 returned by this Actor, whether or not you supply a cookie.
  • Profile mode returns roughly the 10 newest videos per creator, plus the profile row. That is the whole of what TikTok publishes for a creator without a signed, logged-in request, so resultsPerPage above ~11 will not produce more rows for a single profile — put several handles in profiles instead. Hashtag and search modes page much deeper.
  • 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 resultsPerPage even though results exist somewhere deeper.
  • Throughput is paced. Requests are deliberately spaced to stay well inside upstream limits. Budget roughly 3-8 seconds per profile and one page of ~30 videos per second or two for hashtags, and size maxRunSeconds accordingly — split very large scrapes into several runs rather than one long one.
  • Media URLs expire. playAddr, downloadAddr, cover and avatar are CDN links with a limited lifetime.
  • Some fields can be null. region, music, secUid and the rarer counters (collectCount, downloadCount) depend on what TikTok exposes for that item; the Actor emits null rather than inventing a value.
  • Counts are point-in-time. playCount and friends are whatever TikTok reported at the moment of the scrape.
  • Video counters are at TikTok's display precision. For videos reached through profile mode or a /video/ URL, large numbers arrive rounded the way TikTok itself renders them (14,000,000 rather than 13,978,752) — that is the precision TikTok publishes on the page. Counters below about 100,000 are exact, and profile-level counters are exact at any size.

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": "..." }
errorCodeMeaning
NO_RESULTSThe request worked but this input has nothing to return.
NOT_FOUNDThe profile, video or hashtag does not exist, or is private/suspended.
RATE_LIMITEDUpstream throttling. The Actor backed off and retried; lower the volume or split the run.
BLOCKEDThe request was refused. Usually transient — retry.
SERVER_ERRORA 5xx upstream. Transient.
NETWORKA 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, and that is what a default run uses. You can optionally paste your own cookie into sessionCookies to get a rate limit nobody else shares — see *Rate limits and your own cookie*.

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.