TikTok Scraper avatar

TikTok Scraper

Pricing

from $1.00 / 1,000 result scrapeds

Go to Apify Store
TikTok Scraper

TikTok Scraper

TikTok posts without an API key: views, likes, comments, shares, saves, caption, hashtags, sound and author. Optional MP4, cover, avatar and subtitle downloads, since TikTok's own links expire. Works from post URLs, hashtags and related videos. Example: hashtag 'cooking', 20 videos.

Pricing

from $1.00 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Badr Bouargan

Badr Bouargan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

TikTok Scraper – Posts, Hashtags, Profiles & Stats

TikTok Scraper

Extract TikTok posts with no API key and no account: views, likes, comments, shares, saves, the caption and its hashtags, the sound behind the video, the author and their follower count, plus the video file itself if you want it. Read any post you already have a link to, follow a hashtag, or pull the figures of a profile.

What you can do with it

  • Measure a hashtag: the posts published under it, their views and engagement, and how often the whole hashtag has been watched.
  • Track creators: followers, total likes, number of videos and bio for a list of accounts, run on a schedule to build a history.
  • Study posts you already know: paste a list of links and get every figure TikTok shows, plus a few it does not display.
  • Build a sound report: which track a post uses, whether it is original, and who published it.
  • Archive content: download the MP4, the cover image, the author's avatar and the subtitles, because TikTok's own media links expire within days.
  • Widen a sample: from one post, collect the fifteen or so videos TikTok recommends next to it.

What this Actor can and cannot read — please read this first

TikTok is the strictest site of its kind, and the honest picture matters more than a long feature list. Everything below was measured against the live site, not assumed.

What you wantDoes it work?How
Every figure of a post you have the link toYes, alwaysOne plain request to the post's page
The figures of a hashtag (views, ID)YesTikTok's own hashtag endpoint
The posts published under a hashtagYesA real browser loads the hashtag page
The figures of a profile (followers, likes, bio, videos)Yes, alwaysOne plain request to the profile page
Videos recommended next to a postYesA real browser loads the post and starts it playing
The list of a profile's own videosResidential addresses onlyTikTok answers this one request with an empty body from every datacenter address tested
Keyword searchNo, deliberatelyTikTok's robots.txt disallows /search to every crawler. Hashtags cover the same ground and are allowed
Comments, followers and following listsNoTikTok serves these to signed-in sessions only

The one limit worth planning around is the profile feed. It was tested from four different datacenter addresses, several times each, loading the page directly and by clicking through from a post like a visitor would: TikTok replies HTTP 200 with a body of zero bytes every single time. The account's own figures — followers, likes, bio, number of videos — are in the page itself and always come back.

So when a profile feed comes back empty, the Actor saves a row with the code PROFILE_FEED_UNAVAILABLE, and it does not retry: retrying costs you money and changes nothing. It says so in the run log too. Nothing is ever silently dropped.

Why this Actor

  • No API key, no account, no cookies to paste. It reads what TikTok serves to any visitor.
  • No forged signatures. TikTok signs the calls behind its video lists. Instead of faking those signatures — which breaks every few weeks — a real browser loads the page and the Actor reads the answers TikTok's own code receives. That is why it keeps working.
  • It retries from another address. TikTok accepts some addresses and quietly refuses others. A page that comes back empty is tried again from somewhere else, up to three times, before it is reported as a failure.
  • Failures become rows. Every input that could not be read is saved with an error code, so a spreadsheet tells you what is missing instead of hiding it.
  • The cheap path stays cheap. Post URLs, hashtag figures and profile figures never start a browser.

Example output

Real output

How it works

  1. Post URLs are read one by one from their own page, which carries every field inside it.
  2. Hashtags and profiles get their counters the same cheap way.
  3. If you asked for video lists, Chromium opens the hashtag, profile or post page, scrolls it, and the Actor keeps the posts TikTok loads into it. On a post page it also starts the video playing, because TikTok only asks for its recommendations once the post is running.
  4. Posts are de-duplicated on their ID, filtered on date and popularity, and saved.
  5. If you asked for files, each post is re-read over the session that will download them — TikTok signs its media links for one session only.

Step-by-step tutorial

  1. Paste a few links in Post URLs, or type a hashtag in Hashtags, or an account in Profiles. Any combination works.
  2. Set Videos per hashtag or profile — 20 is a sensible first run.
  3. Optional: Published after (2026-01-01, or a phrase such as 7 days), Minimum views, Minimum likes.
  4. Optional: switch on the files you want under Files to download.
  5. Leave the proxy on Apify Proxy. If you want a profile's video list or related videos, open the proxy settings and pick the RESIDENTIAL group.
  6. Press Start, then export as JSON, CSV, Excel or HTML.

Input example

{
"postURLs": [
"https://www.tiktok.com/@khaby.lame/video/7425321081298341152"
],
"hashtags": ["cooking", "parisfrance"],
"profiles": ["nasa"],
"resultsPerPage": 20,
"scrapeRelatedVideos": false,
"oldestPostDate": "90 days",
"minPlayCount": 10000,
"shouldDownloadCovers": true
}

Output example

One post, shortened:

{
"id": "7425321081298341152",
"text": "Bring it on #learnfromkhaby #comedy",
"textLanguage": "en",
"createTimeISO": "2024-10-13T17:58:13.000Z",
"playCount": 21100000,
"diggCount": 859900,
"commentCount": 7304,
"shareCount": 21700,
"collectCount": 43045,
"repostCount": 0,
"isAd": false,
"isSlideshow": false,
"locationCreated": "US",
"hashtags": [
{ "id": "1697657584273413", "name": "learnfromkhaby" },
{ "id": "1606334392378370", "name": "comedy" }
],
"authorMeta": {
"id": "127905465618821121",
"name": "khaby.lame",
"nickName": "Khabane lame",
"verified": true,
"fans": 163000000,
"heart": 2700000000,
"video": 1353,
"profileUrl": "https://www.tiktok.com/@khaby.lame"
},
"musicMeta": {
"musicId": "7425321107177491233",
"musicName": "original sound",
"musicAuthor": "Khabane lame",
"musicOriginal": true,
"duration": 21
},
"videoMeta": {
"height": 1024,
"width": 576,
"duration": 21,
"definition": "540p",
"format": "mp4",
"coverUrl": "https://p16-common-sign.tiktokcdn-us.com/…",
"subtitleLinks": []
},
"webVideoUrl": "https://www.tiktok.com/@khaby.lame/video/7425321081298341152",
"input": "https://www.tiktok.com/@khaby.lame/video/7425321081298341152"
}

Output fields

A post

FieldWhat it holds
id, webVideoUrlThe post's ID and its address
text, textLanguageThe caption and the language TikTok detected
createTime, createTimeISOPublication date, as a timestamp and as a readable date
playCount, diggCount, commentCount, shareCount, collectCount, repostCountViews, likes, comments, shares, saves, reposts
hashtags, mentionsHashtags with their IDs, and the accounts mentioned
authorMetaThe author: handle, display name, verification, bio, followers, total likes, number of videos, avatar, profile URL
musicMetaThe sound: title, author, whether it is original, duration, cover, play URL
videoMetaDimensions, duration, quality, codec, cover images, download address, subtitle tracks
isAd, isSponsored, isSlideshow, isPinned, isAigcWhat kind of post it is
duetEnabled, stitchEnabled, commentsTurnedOffWhat the author allows
labels, effectStickers, locationCreatedTopic labels, effects used, and the country TikTok attaches to the post
slideshowImagesThe images of a photo post
videoUrl, coverUrl, avatarUrl, musicCoverUrl, subtitleUrlsWhere the files were saved, when downloading is switched on
input, searchHashtag, searchProfile, relatedToWhich of your inputs produced this row

locationCreated is only present on posts read from their own URL; TikTok leaves it out of the lists it serves to a hashtag page.

A hashtag

id, name, viewCount, hashtagUrl. TikTok stopped publishing a video count on this endpoint, so the field is left empty rather than filled with a zero.

A profile

id, name, nickName, verified, privateAccount, signature, avatar, fans, following, heart, video, friends, profileUrl.

Error codes

CodeWhat happened
INVALID_INPUTThe line is not a TikTok post URL or ID
POST_NOT_FOUND_OR_PRIVATEThe post is gone, private, or blocked in the region the request came from
POST_SENSITIVETikTok marks the post as age-restricted
NOT_FOUNDNo account or hashtag by that name, after several attempts from different addresses
PROFILE_FEED_UNAVAILABLETikTok returned an empty video list for the profile. Switch to the RESIDENTIAL proxy group
RELATED_UNAVAILABLETikTok recommended nothing next to the post, from any address tried
FEED_UNAVAILABLEA video list came back empty from every address tried
BLOCKEDTikTok refused the page from every address tried
RATE_LIMITEDTikTok served an empty shell instead of the page
MEDIA_UNAVAILABLEA file could not be downloaded — usually an expired link
BROWSER_UNAVAILABLEChromium could not start in the container

Proxy

Keep Apify Proxy on. The datacenter group is enough for everything except one thing: post URLs, hashtag figures, hashtag videos, related videos and profile figures all work on it.

Only a profile's own video list needs the RESIDENTIAL group. The Actor notices which group you picked: without a residential one it tries each profile feed once and reports the result, instead of billing you for retries that cannot succeed.

Speed and cost

Measured on real runs, at the default 2 GB of memory:

RunRowsTimePlatform cost
2 hashtags + 1 profile, 20 videos each191 min 53 s$0.014
2 post URLs + their related videos172 min 20 s$0.017
3 post URLs + 2 profiles, no browser, 1 GB51 min 25 s$0.005

That is $0.70 to $1.30 of platform usage per 1,000 rows, and it gets cheaper as runs grow: opening the browser is a fixed cost paid once, so twenty hashtags cost barely more than two. Downloading video files is the expensive option — TikTok serves MP4s slowly, roughly five minutes for a single one.

Frequently asked questions

Do I need a TikTok account or an API key? No. Nothing to create, nothing to paste.

Why is there no keyword search? TikTok's robots.txt tells every crawler not to visit /search, /search/video and /search/user. This Actor respects that. Hashtags are explicitly allowed and reach the same content.

Why did a profile return its followers but no videos? TikTok answers the profile's video-list request with an empty body unless the request comes from a residential address — tested from four datacenter addresses, always zero bytes. Pick the RESIDENTIAL proxy group and run it again. The row with the code PROFILE_FEED_UNAVAILABLE tells you exactly that, and the Actor does not waste your credit retrying.

Is there a way to follow a creator without a residential proxy? Yes, indirectly. Post URLs always work, so a list of links gives you every figure. And the videos recommended next to one of that creator's posts often include more of their work — switch on Collect videos related to each post URL.

Can I get the comments? No. TikTok serves comments to signed-in sessions only, and this Actor does not ask you for an account.

Why are the downloaded files stored instead of just linked? TikTok signs its media links for one session and expires them within days. A link saved in a spreadsheet stops working; a downloaded file does not.

Can I run it on a schedule? Yes. Followers, views and likes change every day, so a daily run on the same hashtags or accounts builds a history you can chart.

This Actor reads only what TikTok publishes to anyone, and it follows TikTok's robots.txt. It collects no private data and never signs in. Figures about people — follower counts, captions, handles — are personal data in some jurisdictions: have a lawful basis before you store them, and check TikTok's terms for your own use case.