TikTok Video Scraper - Stats, Transcript & Download by URL
Pricing
from $1.40 / 1,000 video scrapeds
TikTok Video Scraper - Stats, Transcript & Download by URL
Scrape TikTok videos and photo posts from a list of URLs, short links or ids: plays, likes, comments, shares, saves, engagement rate, publish date, author stats, sound, every video quality, download links, subtitles and transcript. Monitor mode re-checks the same posts, returns only changed counts.
Pricing
from $1.40 / 1,000 video scrapeds
Rating
0.0
(0)
Developer
Top Api
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
What does TikTok Video Scraper do?
TikTok Video Scraper extracts TikTok videos from tiktok.com and turns a list of post links into structured rows: one video or photo post per row with its plays, likes, comments, shares, saves, publish date, author stats, sound, every video quality TikTok encodes, subtitle files and an optional transcript. Built for social-media analysts, influencer-marketing teams, brand and campaign monitors and research pipelines that already know which TikTok videos they care about and need the numbers behind them, refreshed on a schedule, without opening the app.
TikTok Video Scraper - TikTok Video Details API - TikTok URL Scraper - TikTok Video Stats Scraper - TikTok Video Downloader
- Any link shape you copied: canonical
tiktok.com/@user/video/<id>and/photo/<id>URLs,vm.tiktok.com/vt.tiktok.com/tiktok.com/t/short links,m.tiktok.com/v/<id>.htmlmobile links,embed/v2/<id>embeds, share links and bare numeric ids, mixed in one list. Duplicates are fetched once. - Every number the post shows: plays, likes, comments, shares, saves and reposts, a computed
engagementRate, exactcreateTimeISO, duration, resolution, the country the post was made in and TikTok's own content labels. - The author on every row: username, nickname, verified badge, bio, followers, following, total likes, video count and account creation date.
- Files, not just links: every encoding TikTok lists (
videoQualityLadderwith bitrate, codec, size and URLs), all cover images, the subtitle files per language, and thedownloadCookiethat makes TikTok's signed media URL fetchable from anywhere. The download add-on stores the MP4 or the photo-post images in a key-value store for you. - Transcript add-on: the spoken text from TikTok's own caption files (creator captions or TikTok's speech recognition), no AI cost. On the 25-post test run, 18 posts had a caption file and all 18 came back with a transcript.
- Monitor mode for schedules: re-run the same list hourly or daily and get only posts that are new or whose counts moved; each delivered row carries
previousStats,statsDeltaandisNew. - Filters: date window, minimum plays, videos-only or photo-posts-only, subtitles-only, exclude ads and paid partnerships.
- No login, cookies or TikTok API key: paste links and nothing else. Export as JSON, CSV, Excel, XML or RSS; schedules, webhooks, Make, Zapier, n8n, Google Sheets, Slack; Apify API and MCP server, with a
compactmode for AI agents.
What data can you get from a TikTok video?
| ๐ Post id, canonical URL and the URL your link resolved to (`id`, `webVideoUrl`, `resolvedUrl`) | ๐ Caption and its language (`text`, `textLanguage`) | ๐ Publish time (`createTime`, `createTimeISO`) and country (`locationCreated`) |
| โถ๏ธ Plays (`playCount`) | โค๏ธ Likes (`diggCount`) | ๐ฌ Comments (`commentCount`) |
| ๐ Shares and reposts (`shareCount`, `repostCount`) | ๐ Saves (`collectCount`) | ๐ Engagement rate (`engagementRate`, percent of plays) |
| ๐ค Author: username, nickname, verified, bio, avatar, account created (`authorMeta`) | ๐ฅ Author stats: followers, following, total likes, videos (`authorMeta.fans`, `.heart`, `.video`) | ๐ต Sound: name, artist, original flag, sound id, duration, play URL (`musicMeta`) |
| ๐ฌ Video: duration, width, height, definition, format, bitrate, codec, file size, play and download URLs (`videoMeta`) | ๐ช Every encoding TikTok lists: gear, bitrate, codec, resolution, bytes, URLs (`videoQualityLadder`) | ๐ผ๏ธ All cover and thumbnail URLs (`coverUrls`), photo-post images (`slideshowImageLinks`) |
| ๐ค Subtitle files per language (`videoMeta.subtitleLinks`) and the transcript text (`transcript`, add-on) | #๏ธโฃ Hashtags with ids (`hashtags`), mentions (`mentions`, `detailedMentions`), TikTok's search keywords for the post (`suggestedWords`) | ๐ Tagged place (`poi`, `locationMeta`) |
| ๐ข Ad and paid-partnership flags (`isAd`, `isSponsored`) | ๐ท๏ธ Content category labels (`diversificationLabels`, `categoryType`), AI-generated label (`isAIGC`) | โ๏ธ Duet, stitch, share and comment settings; on-screen text stickers (`textStickers`) |
| โฌ๏ธ Stored file from the download add-on (`mediaFile`: URL, bytes, image count) | ๐ Monitor mode: `previousStats`, `statsDelta`, `isNew`, `previousScrapedAt` | ๐ฆ `status` on every row: ok, not_found, private, removed, restricted, unavailable |
On a 25-post run on the Apify platform (23 videos and 2 photo posts from 17 creators) every row had the id, caption, publish time, country, all six counts, the engagement rate, the author's name and stats, the sound and the cover image; 23 of 25 (the videos) carried the file links, quality ladder and resolution; 18 of 25 carried a subtitle file and all 18 a transcript; 11 had hashtags, 13 mentions, 10 TikTok search keywords, 6 were ads or paid partnerships and 4 had a tagged place.
How to scrape TikTok videos with TikTok Video Scraper
- Create a free Apify account - $5 of monthly credit, no card needed.
- Open TikTok Video Scraper and click Try for free.
- Paste your links into Video URLs or ids, one per line, and tick Include transcript or Download the video files if you want them.
- Click Start. Rows stream into the dataset as each page is read; 25 posts take about 20 seconds without downloads.
- Open the Storage tab and Export as JSON, CSV or Excel - or save the input as a task, switch on Deliver only new posts and changed counts, and let a schedule run it for you.
โฌ๏ธ Input
| Parameter | Type | Description |
|---|---|---|
| ๐ What to scrape | ||
postURLs | List | Post links or ids, one per line: https://www.tiktok.com/@zachking/video/7095025543627705643, https://vt.tiktok.com/ZSjSKrdXn/, 7172183875538488582, https://www.tiktok.com/@tiktok/photo/7666214645006421278, https://m.tiktok.com/v/<id>.html, https://www.tiktok.com/embed/v2/<id>. Profiles, hashtags and search URLs are reported as invalid (they belong to TopApi/tiktok-scraper) |
| โ๏ธ Refine results | ||
postedAfter | String | Only posts published after: 2026-09-01, 7 days, 3 weeks, or a day count (1 = today) |
postedBefore | String | Only posts published before: 2026-06-30, 30 days |
minPlays | Integer | Minimum plays, e.g. 100000. Default 0 |
postType | Select | all, video (skip photo slideshows) or photo (slideshows only). Default all |
onlyWithSubtitles | Boolean | Keep only posts that have a TikTok caption file. Default false |
excludeAds | Boolean | Skip ads and paid partnerships (isAd, isSponsored). Default false |
| โ Extra data | ||
includeTranscript | Boolean | Adds transcript, transcriptLanguage, transcriptSource from TikTok's caption file - charged as the transcript event only for posts that receive one. Default false |
downloadVideos | Boolean | Stores the MP4 (or a photo post's images) in a key-value store and puts the file URL in mediaFile and videoMeta.downloadAddr - charged as the video-downloaded event only for posts whose file was stored. Default false |
mediaStoreName | String | Named key-value store for the files, e.g. tiktok-videos (keeps them past the run's data retention). Empty = the run's own store |
includeUnavailable | Boolean | Write a row (status, errorCode, error, input) for private, removed, restricted and not-found posts so a bulk list comes back complete. Default false |
| ๐ Monitoring | ||
monitorMode | Boolean | Deliver only posts that are new to the store or whose counts changed; rows carry previousStats, statsDelta, isNew. Pair with a schedule. Default false |
monitorStoreName | String | Key-value store that keeps the per-post memory. Default tiktok-video-monitor |
| ๐ฆ Output | ||
maxItems | Integer | Stop after this many delivered posts. 0 = every link in the list. Default 0 |
compact | Boolean | Core fields only (id, status, text, date, URL, author, counts, engagement rate, duration, hashtags, sound, cover, transcript and statsDelta when requested), sized for AI agents and MCP. Default false |
| โ๏ธ Advanced | ||
proxyConfiguration | Proxy | The fallback egress. Pages are first fetched from Apify's own IPs (measured 3x faster); the first wall switches the run to this proxy. Default: Apify Proxy, datacenter group |
maxConcurrency | Integer | Posts fetched in parallel, 1-10. Default 5 |
Input JSON
{"postURLs": ["https://www.tiktok.com/@zachking/video/7095025543627705643","https://vt.tiktok.com/ZSjSKrdXn/","7172183875538488582"],"includeTranscript": true,"excludeAds": true,"monitorMode": true,"monitorStoreName": "campaign-q4"}
Paste TikTok video links, not profile links
This actor reads one post per line. Do: https://www.tiktok.com/@zachking/video/7095025543627705643 or 7095025543627705643 ยท Don't: https://www.tiktok.com/@zachking (a profile - the run lists it as invalid and points you to TopApi/tiktok-scraper, which walks a creator's videos). A /photo/ link works exactly like a /video/ link.
TikTok video short links are followed, dead ones are reported
vm.tiktok.com, vt.tiktok.com and tiktok.com/t/ codes are resolved by following TikTok's redirects. A code that leads to the TikTok home page instead of a post (expired or removed) comes back as not_found with errorCode: SHORT_LINK_DEAD - only when includeUnavailable is on.
Monitor TikTok video stats with a named store per campaign
With monitorMode on, the first run delivers every post with isNew: true and remembers its six counts under monitorStoreName. Every later run re-reads the same links and delivers only the posts whose counts moved, with statsDelta showing the change and previousScrapedAt the last check. Give each client or campaign its own monitorStoreName, otherwise one list hides changes from another.
โฌ๏ธ Output
Every TikTok post becomes one dataset item. Here is the table view of a platform run (23 video and 2 photo links, transcript and download add-ons on):
And one row as JSON (long URL fields shortened):
{"id": "7650573331304860958","status": "ok","text": "itโs not every day your favorite #MusicTok and #FilmTok corners collide. watch @Lykke Li unpack her David Lynch collab...","textLanguage": "en","createTimeISO": "2026-06-12T18:12:17.000Z","locationCreated": "US","isAd": true, "isSponsored": true, "isSlideshow": false,"authorMeta": { "name": "tiktok", "nickName": "TikTok", "verified": true, "fans": 96000000, "heart": 464900000, "video": 1509, "createTimeISO": "2015-02-28T17:22:29.000Z", "profileUrl": "https://www.tiktok.com/@tiktok" },"musicMeta": { "musicName": "original sound", "musicAuthor": "TikTok", "musicOriginal": true, "musicId": "7650573341283126047", "duration": 71 },"webVideoUrl": "https://www.tiktok.com/@tiktok/video/7650573331304860958","videoMeta": { "height": 1280, "width": 720, "duration": 71, "definition": "720p", "format": "mp4", "bitrate": 628434, "codecType": "h264", "size": 5579713, "coverUrl": "https://p16-common-sign.tiktokcdn-us.com/...", "downloadAddr": "https://api.apify.com/v2/key-value-stores/.../records/7650573331304860958.mp4", "originalDownloadAddr": "https://v16-webapp-prime.us.tiktok.com/...", "downloadCookie": "ttwid=...; tt_csrf_token=...; tt_chain_token=...", "subtitleLinks": [{ "language": "eng-US", "source": "ASR", "downloadLink": "https://v16-webapp.tiktokcdn-eu.com/..." }] },"videoQualityLadder": [{ "gear": "normal_720_0", "bitrate": 628434, "codec": "h264", "width": 720, "height": 1280, "sizeBytes": 5579713, "urls": ["..."] }],"playCount": 27500000, "diggCount": 133600, "commentCount": 2663, "shareCount": 567, "collectCount": 9679, "repostCount": 0,"engagementRate": 0.53,"hashtags": [{ "id": "1598392089630725", "name": "musictok", "title": "Music on TikTok." }, { "id": "1639367069624326", "name": "filmtok", "title": "Celebrate the world of cinema with TikTok." }],"mentions": ["@lykkeli", "@tmobile"],"diversificationLabels": ["Celebrity Clips & Variety Show", "Entertainment Culture", "Entertainment"],"transcript": "You've collaborated with an amazing list of artists.\nWhich one of those calls was the most surprising to get?\nDavid Lynch...","transcriptLanguage": "eng-US", "transcriptSource": "automatic speech recognition","mediaFile": { "url": "https://api.apify.com/v2/key-value-stores/.../records/7650573331304860958.mp4", "bytes": 4847592, "contentType": "video/mp4" },"submittedVideoUrl": "https://www.tiktok.com/@tiktok/video/7650573331304860958"}
Fields
| Field | Type | What it is | Fill on the 25-post platform run |
|---|---|---|---|
id, webVideoUrl, resolvedUrl, submittedVideoUrl, input | string | Post id, canonical URL (/photo/ for slideshows), the URL the input resolved to, the input line | 100% |
status | string | ok on delivered rows; not_found, private, removed, restricted, unavailable, invalid on the status rows | 100% |
text, textLanguage, createTime, createTimeISO, locationCreated | string, integer | Caption, its language, publish time (Unix and ISO 8601), country code the post was created in | 100% |
playCount, diggCount, commentCount, shareCount, collectCount, repostCount | integer | Plays, likes, comments, shares, saves, reposts | 100% |
engagementRate | number | (likes + comments + shares + saves) / plays, in percent | 100% |
authorMeta | object | id, name, nickName, profileUrl, verified, signature, avatar, secUid, privateAccount, createTime, createTimeISO, downloadSetting, following, friends, fans, heart, video, digg (bioLink, region, ttSeller, commerceUserInfo when TikTok prints them on the video page) | 100% (verified 56%) |
musicMeta | object | musicName, musicAuthor, musicOriginal, musicAlbum, musicId, duration, playUrl, coverMediumUrl, isCopyrighted, isCommerceMusic | 100% (artist and cover 92%) |
videoMeta | object | height, width, duration, ratio, coverUrl, originalCoverUrl, dynamicCoverUrl, definition, format, bitrate, codecType, size, videoQuality, vqScore, loudness, peak, playAddr, downloadAddr, originalDownloadAddr, downloadCookie, subtitleLinks[], captionInfo | 100% (file links and resolution 92% = every video; photo posts have no video file) |
durationSec | integer | Video length in seconds, 0 for photo posts | 100% |
videoQualityLadder | array | Every encoding TikTok lists: gear, qualityType, bitrate, codec, width, height, sizeBytes, urls[], largest first (2-5 per video) | 92% |
coverUrls | array | Every static, animated and zoom-size cover URL (6-7 per video) | 100% |
mediaUrls | array | TikTok's signed download and play URLs (fetch them with videoMeta.downloadCookie as the Cookie header) | 92% |
hashtags, mentions, detailedMentions, suggestedWords | array | Hashtags with ids and descriptions; mentioned accounts with id and profile URL; the search keywords TikTok attaches to the post | 44% / 52% / 52% / 40% |
isSlideshow, slideshowImageLinks | boolean, array | Photo posts and their images with width and height | 2 of 25 |
isAd, isSponsored | boolean | TikTok's ad flag and paid-partnership flag | 6 of 25 flagged |
poi, locationMeta | object | The tagged place (id, name, address, city, country, category), also in the locationMeta shape other TikTok scrapers use | 16% |
subtitleLanguages, transcript, transcriptLanguage, transcriptSource | array, string | Caption languages; the transcript text (add-on) with its language and source (creator caption, speech recognition, machine translation) | 72% |
mediaFile | object | Download add-on: kvStoreId, key, url, bytes, contentType, imageCount (and urls[] for photo posts) | 100% with the add-on on |
diversificationLabels, categoryType, isAIGC, aigcLabel | array, integer, boolean, string | TikTok's content category labels and the AI-generated-content label | 88% / 100% / 0 of 25 labelled |
duetEnabled, stitchEnabled, shareEnabled, commentsDisabled, playlistId | boolean, string | Interaction settings and the playlist the post sits in | 88% / 88% / 100% / 100% / 12% |
textStickers, effectStickers | array | On-screen text stickers; effects used | 20% / 0 of 25 |
previousStats, previousScrapedAt, statsDelta, isNew | object, string, boolean | Monitor mode only: the counts stored by the previous run, when, the difference, and whether the post is new to the store | monitor runs |
errorCode, error, url | string | Status rows only: POST_NOT_FOUND, POST_PRIVATE, POST_REMOVED, POST_RESTRICTED, POST_UNAVAILABLE, SHORT_LINK_DEAD, FETCH_BLOCKED, INVALID_URL and TikTok's message | status rows |
Not on this surface, so not shipped: isPinned, attached links (anchors) and the TikTok Shop flag are properties of a creator's feed, and TikTok's video page carried none of them on the 34 posts captured for this build; TopApi/tiktok-scraper delivers them from profile and hashtag feeds. Related videos and comments are separate products.
How can I use TikTok video data?
- ๐ Campaign and sponsorship reporting - paste the 40 creator posts of a campaign, run daily with
monitorMode, and chartstatsDelta.playCountper post in Google Sheets. - ๐ฏ Influencer vetting - check a creator's last five posts you were sent:
engagementRate,authorMeta.fans,isSponsoredand whethertranscriptmatches the brief. - ๐ Social listening - feed
text,hashtags,suggestedWordsandtranscriptof the posts your team collects into a classifier or an LLM;compactkeeps a thousand posts inside a context window. - ๐๏ธ Archiving and evidence - switch on
downloadVideoswith a namedmediaStoreNameto keep the MP4 and the counts as they were on a given day. - ๐ฌ Media and trend research - compare duration,
videoQualityLadder,diversificationLabelsandmusicMetaacross the posts of a trend. - ๐ค AI agents - an agent that is handed a TikTok link calls the actor through MCP and answers with the caption, counts and transcript.
How much does it cost to scrape TikTok videos?
TikTok Video Scraper is pay-per-result: $1.40 per 1,000 videos, no start fee (the Pricing tab always shows the live rate). The transcript add-on is $1.00 per 1,000 posts that receive one, the download add-on $1.20 per 1,000 posts whose file was stored.
| Videos | Cost | With transcripts | With transcripts and files |
|---|---|---|---|
| 10 | $0.014 | $0.024 | $0.036 |
| 100 | $0.14 | $0.24 | $0.36 |
| 1,000 | $1.40 | $2.40 | $3.60 |
| 10,000 | $14.00 | $24.00 | $36.00 |
There is nothing else to pay: Apify platform usage (compute, storage, transfer) is included in these prices. Measured on the platform on 2026-10-03 with the default 256 MB: 2 posts in 5.7 seconds; 25 posts with 18 transcripts and 25 stored files (255 MB of video) in 315 seconds (most of it storing the files); without downloads a page takes 0.5-1.5 seconds and 5 are read in parallel.
Integrations, API, scheduling & MCP
- Schedules: run TikTok Video Scraper hourly, daily or weekly from the Schedules tab; combine with
monitorModeso each run returns only the posts whose counts moved. - Webhooks: fire a URL when a run finishes - push rows to your CRM, Slack or a sheet.
- No-code: Make, Zapier, n8n, Google Sheets, Airtable, Slack via Apify integrations.
- API: call it from Node.js or Python with
apify-client- code on the API tab and the Apify API reference. - MCP / AI agents: connect Claude, Cursor or any MCP client through the MCP tab and ask for the details of a TikTok video in plain language; switch on
compactto keep the answer small.
More TikTok video and social scrapers from TopApi
| ๐ต TikTok Scraper - a creator's videos, a hashtag feed or a search, when you do not have the links yet | ๐ฌ TikTok Video Scraper - this actor: full detail of the posts you already have links for | ๐ธ Instagram Scraper - posts, reels and profiles |
| ๐ Facebook Search Posts Scraper - public posts by keyword | โญ Google Maps Reviews Scraper - every review of a place with owner replies | ๐ผ Indeed Jobs Scraper - job postings by keyword and location |
| ๐งญ All TopApi social-media and lead-gen actors | ||
TikTok video limits & empty runs
- One page per post, no per-run ceiling: every link is its own fetch, so a list of 5,000 links is 5,000 pages; at the default 5 parallel fetches that is roughly 20-30 minutes without downloads. Raise
maxConcurrencyto 10 for big lists. - Anti-bot interstitials: about 1 request in 10 is answered with TikTok's "Please wait" page; the actor retries on a fresh proxy session up to three times per post. A post that is still blocked after that is reported as
blockedin the run summary (and as a status row withincludeUnavailable). - Downloads are slow by nature: a 10 MB video takes about 12 seconds to fetch and store on 256 MB; two files are stored at a time. Files larger than about 30% of the run's memory (76 MB at 256 MB, 153 MB at 512 MB) are skipped - give long videos more memory.
- Media URLs expire after a few hours and
downloadCookiewith them;mediaFile.urlfrom the download add-on is permanent for as long as the key-value store exists. - Empty dataset: means every link was private, removed or invalid, your filters removed everything, or monitor mode found no changes - the status message names which.
- Not available: comments and related videos (separate products), the pinned flag and attached links (feed properties), an author's email or phone (TikTok publishes none), view history over time (each run is a snapshot; monitor mode keeps the last one).
FAQ
How many TikTok videos can TikTok Video Scraper collect in one run?
As many links as you paste: there is no TikTok-side ceiling, because every post is its own page. On the platform 25 posts with transcripts and downloads took 315 seconds and 2 posts without add-ons 5.7 seconds; a list of a few thousand links fits one run with the default one-hour timeout.
Can I run TikTok Video Scraper on a schedule to track TikTok video stats automatically?
Yes. Save your input as a task, open Schedules, pick the cadence, and switch on monitorMode. Each run re-reads the same links and delivers only the posts whose plays, likes, comments, shares, saves or reposts moved, with statsDelta on the row. A run that finds no change delivers nothing.
Can I integrate TikTok Video Scraper with other apps?
Yes - Make, Zapier, n8n, Google Sheets, Slack and more via Apify integrations, or use webhooks to trigger an action when a run finishes.
Can I use TikTok Video Scraper with the Apify API?
Yes. The API lets you start runs, fetch datasets and manage schedules. Use apify-client for Node.js or Python; the API tab has ready-to-paste code.
Can I use TikTok Video Scraper through an MCP server?
Yes. Open the MCP tab, connect your MCP client (Claude Desktop, Cursor, LibreChat...), hand it a TikTok link and ask for the counts or the transcript in plain language. Set compact: true so a batch of posts fits the model's context.
Do I need a TikTok account, cookies or an API key?
No. TikTok Video Scraper reads only what TikTok shows a signed-out visitor on the video page; you pass links or ids and nothing else. The downloadCookie on each row is a visitor cookie TikTok handed the run, included so the signed media URL works from your own machine.
Why did my run return no TikTok videos?
In order of frequency on test runs: (1) the links were profiles, hashtags or search pages rather than posts - they are listed as invalid in the log and the run summary; (2) the posts are private, removed or restricted - switch on includeUnavailable to get a status row for each; (3) your filters removed everything - the run summary lists how many posts were read and why they were dropped; (4) monitorMode found no count changes since the last run; (5) TikTok answered every fetch with its interstitial after three fresh sessions - retry in a few minutes.
Does TikTok Video Scraper download the video files?
Yes, with downloadVideos: true: the MP4 (or every image of a photo post) is stored in the run's key-value store or in the named mediaStoreName, and the row carries mediaFile with the stored URL and size. Without the add-on you still get TikTok's own signed URLs plus the downloadCookie that makes them fetchable from anywhere for a few hours.
Can TikTok Video Scraper give me the transcript of a TikTok video?
Yes, with includeTranscript: true: it fetches TikTok's own caption file (the creator's captions or TikTok's automatic speech recognition) and delivers the plain text in transcript, with the language and source. Videos without a caption file return null; on the test run 18 of 25 posts had one.
Does TikTok Video Scraper work with short links and photo posts?
Yes. vm.tiktok.com, vt.tiktok.com and tiktok.com/t/ links are resolved first (the resolved URL is on the row), and /photo/ posts come back as the same row shape with isSlideshow: true, their images in slideshowImageLinks and a duration of 0.
How is TikTok Video Scraper different from other TikTok video scrapers?
It delivers the same post fields as the lane's leading TikTok Video Scraper plus engagementRate, the full videoQualityLadder, every cover URL, the author's account age, TikTok's search keywords and content labels, the transcript text from TikTok's own captions, and a downloadCookie that makes the media URLs usable off-platform; it filters by date, plays, type, subtitles and ads, adds no start fee, resolves short links, and ships a monitor mode that returns only changed counts. On the 25-post test run every delivered row carried all six counts and the author's stats.
Is it legal to scrape TikTok video data?
TikTok Video Scraper extracts only publicly available TikTok posts; it does not log in or collect private data. Results may still contain personal data (creator names, captions), which is regulated by laws such as GDPR. Make sure you have a legitimate purpose before you use it.
Your feedback
We keep improving TikTok Video Scraper. Found a bug or missing a field? Open an issue on the Issues tab - we answer within two working days.

