Tiktok Video Scraper With Subtitles & Transcript avatar

Tiktok Video Scraper With Subtitles & Transcript

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Tiktok Video Scraper With Subtitles & Transcript

Tiktok Video Scraper With Subtitles & Transcript

TikTok Video Scraper extracts TikTok videos with subtitles and transcripts, including captions, video details, creators, engagement metrics, hashtags, music, and URLs. Ideal for content research, SEO, competitor analysis, trend tracking, and audience insights.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

0

Monthly active users

3 days ago

Last modified

Share

TikTok Video Scraper β€” Extract Videos, Transcripts and Creator Data

TikTok Video Scraper With Subtitles & Transcript pulls full metadata for any public TikTok video β€” creator profile, engagement counts, music, hashtags β€” and reads the video's own on-platform caption track into a clean, flat transcript field. Unlike scraping frameworks that return raw HTML, it returns typed JSON ready for your model, your database, or your pipeline without any parsing. Captions come straight from TikTok's own subtitle system (creator-authored, machine-translated, or TikTok's auto speech-recognition track) β€” the Actor never runs its own audio transcription. This guide covers every input, every output field, and how teams deploy it at scale.

What Does TikTok Video Scraper With Subtitles & Transcript Do?

TikTok Video Scraper With Subtitles & Transcript takes one or more TikTok video URLs and returns each video's full public metadata plus a transcript built from TikTok's own caption track β€” no TikTok account, login, or cookies required. It reads the video page's embedded page data directly (the same JSON TikTok ships to render the page), so every field TikTok exposes there β€” creator profile, engagement counts, music, hashtags β€” comes back in one structured row alongside the caption-derived transcript. Related videos can optionally be pulled into the same run.

Key capabilities:

  • Scrapes any public TikTok video from its URL β€” no login or session cookies needed
  • Reads the video's native WEBVTT caption track and flattens it into a plain-text transcript field
  • Distinguishes caption source per video: creator/human-authored, machine-translated (MT), or TikTok's auto speech-recognition (ASR)
  • Returns full creator profile data under authorMeta: username, nickname, verified status, bio, avatar, follower/following/friend/heart counts
  • Returns engagement metrics: diggCount, playCount, commentCount, shareCount, collectCount, repostCount
  • Optionally returns timed caption segments (transcriptSegments) with per-cue start/end times in seconds
  • Optionally discovers and scrapes each input video's related videos, captioning those too

Features & Capabilities

Capabilities split into three groups: what gets scraped from every video, how captions become a transcript, and how this Actor stacks up against other TikTok and cross-platform transcript tools.

Core features

  • Full video metadata in one row: id, text (caption), createTimeISO, videoMeta (height, width, duration, cover, format), hashtags, musicMeta
  • Creator (authorMeta) profile fields: id, name, nickName, verified, signature, bioLink, avatar, privateAccount, following, friends, fans, heart, video, digg
  • Transcript pipeline fields: transcriptAvailable, transcriptLanguage, transcriptSource, availableSubtitleLanguages, transcript, transcriptSegments
  • Related-video discovery controlled by scrapeRelatedVideos and resultsPerPage
  • Standard Apify dataset output β€” export to JSON, CSV, Excel, or XML directly from the run's Dataset tab

How TikTok Video Scraper compares to other TikTok scrapers

Rows below are checkable: entity coverage, caption-source transparency, and field depth. Competitor details are as observed on their own Apify Store listings on 2026-07-26.

FeatureThis Actorinvideoiq/video-transcript-scrapermemo23/tiktok-transcript-extractor-cheerio
Caption source label (ASR / MT / human)Yes β€” transcriptSourceNot documented for TikTokYes β€” source field per transcript
Timed caption segmentsOptional β€” transcriptSegments (start/end in seconds)Yes β€” timestamped transcript arrayYes β€” raw WebVTT with time codes, per language
Multiple caption languages surfaced per rowYes β€” availableSubtitleLanguages lists every track; one preferred language is transcribed per runSingle language per run via language paramYes β€” maxTranscriptLanguagesPerVideo returns several full transcripts in one row
Related-video discoveryYes β€” scrapeRelatedVideos + resultsPerPageNot documented for TikTokNot documented
Cross-platform coverageTikTok onlyYouTube, X, TikTok, Facebook, Dailymotion, Vimeo, Loom, RumbleTikTok, YouTube, Loom
Video file download (MP4)NoNot documentedYes β€” downloadVideo to Key-Value Store
TikTok login or cookies requiredNoNot documentedNot documented

All three tools already return structured JSON instead of raw HTML, so the parsing problem is solved everywhere β€” the real decision points are whether the caption source is labeled honestly, whether related videos are discoverable in the same run, and how many platforms one Actor needs to cover.

When another tool might suit you better

If you need transcripts across many platforms in a single run β€” YouTube, X, Facebook, Vimeo, Loom β€” invideoiq/video-transcript-scraper covers more ground than a TikTok-only Actor, trading away TikTok-specific depth like related-video discovery and ASR/MT source labeling. If you need the actual MP4 file downloaded alongside the transcript, memo23/tiktok-transcript-extractor-cheerio adds a downloadVideo option this Actor does not have. And if a video genuinely carries no TikTok captions at all, no tool that reads existing subtitle tracks β€” including this one β€” can produce a transcript; only a dedicated speech-to-text Actor can fill that gap.

TikTok Video Scraper within the Scrapio data stack

TikTok Video Scraper With Subtitles & Transcript covers TikTok videos and their transcripts. For creator profile analytics (hashtag and sound breakdown), use TikTok Profile Scraper With Hashtag & Sound Analytics. For comment threads, use TikTok Comments Scraper: Top Comments By Language. For trending sound and hashtag discovery, use TikTok Trending Hashtags Scraper or Tiktok Trending Hashtags Analytics Scraper & Top Videos. For the same transcript workflow on other platforms, see the Related Scrapers section below.

Why do developers and data teams scrape TikTok video data?

Marketing and content teams β€” pull a competitor's or influencer's video list, read transcript and text to see exactly what was said and captioned, and pair that with diggCount, playCount, commentCount, and authorMeta.fans to judge which messaging actually landed before writing a brief or a paid-ad script.

AI training data and RAG indexing β€” transcript and text are the high-information fields: transcript is spoken content, text is the creator's caption, and both return as plain strings needing no HTML cleanup. Two uses: (1) RAG enrichment β€” index transcript alongside webVideoUrl and authorMeta.name so an agent can cite the source video by URL and creator; (2) training data β€” transcriptSegments gives consistently shaped {start, end, text} cues across every video that has timestamps enabled, useful for building aligned audio-text datasets without touching TikTok's raw player API.

Competitive and market intelligence β€” track a rival brand's or creator's account by re-running the same postURLs on a schedule and watching playCount, diggCount, and commentCount move between runs; a sudden jump in any of the three flags a video that started trending.

Research and academic use β€” build a corpus of public TikTok video text and transcript data for social-media or linguistics research. The Actor returns only what TikTok already serves publicly on the video page; no private account data, DMs, or authentication-gated fields are accessible.

Product and SaaS development β€” build a transcript-search tool, a creator-monitoring dashboard, or a caption-compliance checker on top of the dataset this Actor produces, without maintaining your own TikTok page parser or caption-track resolver.

🍚 Input Parameters

All seven parameters below come directly from the Actor's input schema β€” same names, types, and defaults.

ParameterRequiredTypeConstraintsDescription
postURLsYesarrayeditor: stringListTikTok video links to scrape and caption, one per line (or upload/link a text file). Every video returns full metadata; captions are read when the video has them.
extractTranscriptNobooleandefault trueWhen on, reads the video's WEBVTT caption track (loginless, no file downloaded) and flattens it into transcript. Off returns metadata only.
subtitleLanguageNostringdefault "en"Language code to prefer when a video has captions in several languages (e.g. en, es, fr, de, ja). The closest available track is picked; availableSubtitleLanguages lists everything the video offers.
includeASRNobooleandefault trueWhen on, TikTok's auto speech-recognition captions are eligible (and used as a fallback). Off accepts only creator/human or machine-translated tracks β€” videos that only carry ASR captions then return no transcript.
includeTimestampsNobooleandefault falseWhen on, transcriptSegments is filled with {start, end, text} cues (seconds) parsed from the caption track, alongside the flat transcript text.
scrapeRelatedVideosNobooleandefault falseAdditionally scrapes TikTok's related videos for each URL (each is captioned too). Count set by resultsPerPage. TikTok typically limits related videos to 12–16 per video.
resultsPerPageNointegerdefault 10, min 1, max 1000000How many related videos to scrape per input URL. Only applies when related videos are enabled. TikTok typically caps this at 12–16 per video regardless of the value set here.

If resultsPerPage is omitted entirely from the input β€” for example a hand-built API payload that skips the field rather than relying on the Console default β€” the Actor's own internal fallback is 1, not the schema default of 10. The Apify Console always sends the schema default, so this only affects direct API calls that construct the input object themselves.

None of these parameters are credentials β€” the Actor needs no API key, token, or session cookie, so there is nothing in this schema marked isSecret.

Input example:

{
"postURLs": [
"https://www.tiktok.com/@apifyoffice/video/7200360993149553925"
],
"extractTranscript": true,
"subtitleLanguage": "en",
"includeASR": true,
"includeTimestamps": true,
"scrapeRelatedVideos": false,
"resultsPerPage": 10
}

Supported URL types and input formats

postURLs accepts standard public TikTok video URLs in the https://www.tiktok.com/@<username>/video/<id> form, entered one per line in the list editor or supplied via an uploaded/linked text file. A few examples:

  • Single video: https://www.tiktok.com/@apifyoffice/video/7200360993149553925
  • Multiple videos from different creators, to build a comparison batch across accounts
  • The same creator's videos listed together, to build a per-creator transcript archive in one run

Only URLs the input schema editor accepts (stringList) are supported β€” the Actor does not accept TikTok hashtag pages, search queries, or profile URLs as input; each entry must resolve to an individual video.

Input validation is minimal: the Actor only checks that each entry is a string starting with http before attempting a fetch β€” it does not verify the domain is tiktok.com. A malformed link, a non-TikTok URL, or a link to a private or removed video all reach the fetch step the same way and then silently yield no dataset row rather than a validation error (see the FAQ entry on invalid or removed URLs below).

πŸ“¦ Output Format

Every run pushes one dataset row per scraped video (the original URL plus, when enabled, its related videos) as typed JSON. The default dataset view surfaces 16 columns β€” id, text, createTimeISO, authorMeta.name, authorMeta.verified, authorMeta.fans, diggCount, playCount, commentCount, videoMeta.duration, transcriptAvailable, transcriptLanguage, transcriptSource, availableSubtitleLanguages, transcript, webVideoUrl β€” but the underlying row carries considerably more; every key below is written by the Actor regardless of which columns the view displays.

Output for the video

{
"id": "7200360993149553925",
"text": "Behind the scenes at the office today #worklife",
"textLanguage": "en",
"createTime": 1673456789,
"createTimeISO": "2023-01-11T15:26:29.000Z",
"locationCreated": "US",
"isAd": false,
"authorMeta": {
"id": "6829267639130259462",
"name": "apifyoffice",
"profileUrl": "https://www.tiktok.com/@apifyoffice",
"nickName": "Apify",
"verified": false,
"signature": "Web scraping and automation platform",
"bioLink": "apify.com",
"originalAvatarUrl": "https://p16-sign-va.tiktokcdn.com/avatar-large.jpeg",
"avatar": "https://p16-sign-va.tiktokcdn.com/avatar-medium.jpeg",
"privateAccount": false,
"roomId": "",
"ttSeller": false,
"followDatasetUrl": null,
"following": 12,
"friends": 3,
"fans": 4820,
"heart": 38200,
"video": 96,
"digg": 210
},
"musicMeta": {
"musicName": "original sound",
"musicAuthor": "apifyoffice",
"musicOriginal": true,
"playUrl": "https://sf16-ies-music.tiktokcdn.com/track.mp3",
"coverMediumUrl": "https://p16-sign-va.tiktokcdn.com/music-cover.jpeg",
"originalCoverMediumUrl": "https://p16-sign-va.tiktokcdn.com/music-cover.jpeg",
"musicId": "7200360900000000000"
},
"webVideoUrl": "https://www.tiktok.com/@apifyoffice/video/7200360993149553925",
"mediaUrls": [],
"commentsDatasetUrl": null,
"videoMeta": {
"height": 1024,
"width": 576,
"duration": 34,
"coverUrl": "https://p16-sign-va.tiktokcdn.com/cover.jpeg",
"originalCoverUrl": "https://p16-sign-va.tiktokcdn.com/cover.jpeg",
"definition": "540p",
"format": "mp4",
"subtitleLinks": [
{ "Url": "https://v16-webapp.tiktok.com/subtitle-en.vtt", "LanguageCodeName": "eng-US", "Source": "ASR" }
]
},
"diggCount": 210,
"shareCount": 14,
"playCount": 15300,
"collectCount": 22,
"commentCount": 9,
"repostCount": 3,
"mentions": [],
"detailedMentions": [],
"hashtags": [
{ "id": "12345", "name": "worklife", "title": "", "cover": "" }
],
"effectStickers": [],
"isSlideshow": false,
"isPinned": false,
"isSponsored": false,
"submittedVideoUrl": "https://www.tiktok.com/@apifyoffice/video/7200360993149553925",
"transcript": "Hey everyone welcome back to the office today we're showing you what a normal day looks like.",
"transcriptLanguage": "eng-US",
"transcriptSource": "ASR",
"transcriptAvailable": true,
"availableSubtitleLanguages": ["eng-US"],
"transcriptSegments": [
{ "start": 0.0, "end": 2.4, "text": "Hey everyone welcome back to the office" },
{ "start": 2.4, "end": 5.1, "text": "today we're showing you what a normal day looks like." }
]
}

Where the transcript actually comes from

TikTok itself is the only source of the transcript β€” this Actor never runs its own speech-to-text model or sends audio to a third-party transcription API. When a video's page loads, TikTok's own embedded page data (the same JSON block the browser uses to render the page) can carry caption tracks under two different schemas, and the Actor reads both:

  • video.subtitleInfos β€” the older, authoritative schema, where each track already carries a clean Source label (ASR, MT, or a creator/human label) alongside its language code and a WEBVTT URL.
  • video.claInfo.captionInfos β€” a newer schema with a numeric subtitleType instead of a text label (1 means TikTok's own auto-caption). The Actor only adds a track from this schema for a language not already covered by subtitleInfos, so a language covered by both schemas is never double-counted or mislabeled by the less reliable one.

Once every available track is collected, availableSubtitleLanguages is populated from all of them, regardless of the includeASR setting β€” that field always shows the full picture of what TikTok offers. Track selection for the actual transcript text is where includeASR and subtitleLanguage take effect: if includeASR is off, ASR-labeled tracks are removed from consideration first; whatever remains is scored against subtitleLanguage (checked as an exact match, then a prefix match, so en also matches a track TikTok labels eng-US) and the highest-scoring track wins. The chosen track's WEBVTT file is then downloaded over the same HTTP session used for the page fetch β€” no login, no separate media download β€” and flattened into plain text for transcript, or additionally parsed into timed {start, end, text} cues for transcriptSegments when includeTimestamps is on.

If a video has no entries in either schema, collect_subtitle_tracks returns an empty list and the Actor stops there: transcriptAvailable stays false, transcript stays null, and availableSubtitleLanguages stays empty. That is a genuine coverage gap in what TikTok generated for the video, not a bug or a blocked request, and no fallback transcription step runs to fill it.

Output for the transcript

The transcript fields are always present on every row (defaulted to empty/null/false when captions are absent or extractTranscript is off) rather than omitted, so downstream code can rely on the keys existing:

{
"transcriptAvailable": true,
"transcriptLanguage": "eng-US",
"transcriptSource": "ASR",
"availableSubtitleLanguages": ["eng-US", "spa-ES"],
"transcript": "Hey everyone welcome back to the office today we're showing you what a normal day looks like.",
"transcriptSegments": [
{ "start": 0.0, "end": 2.4, "text": "Hey everyone welcome back to the office" },
{ "start": 2.4, "end": 5.1, "text": "today we're showing you what a normal day looks like." }
]
}

transcriptSource is one of ASR (TikTok's auto speech-recognition), MT (machine-translated), or the raw source label TikTok's page data supplies for a human/creator-authored track. transcriptSegments stays an empty array unless includeTimestamps is true.

Field names stay stable across runs because they are defined by this Actor's own normalization step rather than passed through verbatim from TikTok's page data β€” if TikTok changes its internal page structure, the Actor's parsing logic needs an update, but the output keys documented here do not change shape for existing integrations. Delivery is the standard Apify dataset: view and download results as JSON, CSV, Excel, or XML/RSS from the run's Dataset tab, or pull them programmatically via the Apify API or apify-client.

πŸ’‘ TikTok Video Scraper Strategy Guide

Real-time enrichment pipeline. Trigger a run whenever a new TikTok URL lands in your system β€” a lead form, a CRM record, a content-ops queue. Run the Actor with postURLs set to that single URL, wait for the dataset row, and append transcript, transcriptLanguage, authorMeta.name, authorMeta.fans, and diggCount back onto the source record. The row arrives as typed JSON, so no parsing step sits between the Actor and your database write.

Scheduled monitoring and alerting. Point the same postURLs list (a competitor's or influencer's videos) at a recurring Apify Schedule. On each run, diff the new dataset against the previous run's rows on playCount, diggCount, and commentCount for the same id; alert when the delta on any of the three crosses a threshold you define, since that is the signal a video started trending.

Bulk dataset build. Feed a large postURLs list β€” or seed discovery with scrapeRelatedVideos and resultsPerPage off a handful of seed videos β€” and let the run process every URL in parallel inside the Actor. Aggregate the resulting dataset to CSV or push it into a database for a research or model-training corpus built from transcript, text, and the engagement fields. No concurrency limit for this workflow is documented for this Actor beyond the resultsPerPage cap on related videos per URL.

Strategy comparison at a glance

StrategyBest forRun patternOutput format
Real-time enrichmentSingle new URL as it appearsOne run per URL, triggered on eventJSON row appended to your record
Scheduled monitoringTracking a fixed set of videos over timeRecurring Apify Schedule, same postURLsDataset diffed run-over-run
Bulk dataset buildResearch or training corpusOne run, large postURLs listDataset exported to CSV/database
ScraperWhat it extracts
TikTok Profile Scraper With Hashtag & Sound AnalyticsCreator profile data with hashtag and sound usage breakdown
TikTok Comments Scraper: Top Comments By LanguageComment threads on TikTok videos, ranked by language
TikTok Trending Hashtags ScraperCurrently trending TikTok hashtags
Tiktok Trending Hashtags Analytics Scraper & Top VideosTrending hashtag analytics with top-performing videos
YouTube Shorts Scraper With Transcripts & CaptionsYouTube Shorts metadata plus transcripts and captions
Youtube Playlist Scraper (Transcript & Subtitles)YouTube playlist videos with transcript and subtitle extraction
Instagram Reel Transcript ScraperInstagram Reel metadata plus transcript extraction
Facebook Page Video Transcript ScraperFacebook Page video metadata plus transcript extraction

How to integrate TikTok Video Scraper with your stack

TikTok Video Scraper With Subtitles & Transcript works with any language or tool that can call the Apify API β€” this Actor has no separate API surface beyond the standard Apify run/dataset endpoints and the official apify-client SDKs.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"postURLs": [
"https://www.tiktok.com/@apifyoffice/video/7200360993149553925",
],
"extractTranscript": True,
"includeASR": True,
"includeTimestamps": True,
}
run = client.actor("<YOUR_USERNAME>/tiktok-video-scraper-with-subtitles-transcript").call(
run_input=run_input
)
rows = []
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
rows.append({
"url": item.get("webVideoUrl"),
"author": item.get("authorMeta", {}).get("name"),
"plays": item.get("playCount"),
"transcript_available": item.get("transcriptAvailable"),
"transcript": item.get("transcript"),
})
import csv
with open("tiktok_transcripts.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('<YOUR_USERNAME>/tiktok-video-scraper-with-subtitles-transcript').call({
postURLs: ['https://www.tiktok.com/@apifyoffice/video/7200360993149553925'],
extractTranscript: true,
includeASR: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
console.log(item.webVideoUrl, item.transcriptAvailable, item.transcript);
}

For large or recurring jobs, use an Apify Schedule to fire this Actor on a cron interval rather than holding a script open β€” each scheduled run writes to its own dataset, which you poll or fetch via the API once the run's status reaches SUCCEEDED.

🎯 Who Needs TikTok Video Scraper? (Use Cases & Industries)

Marketing and social media teams β€” pull a client's or a competitor's recent videos, read transcript alongside text to audit messaging, and rank by playCount and diggCount to find which hooks and scripts are actually working before the next content sprint.

AI and RAG engineering teams β€” index transcript and webVideoUrl into a vector store so an agent can answer "what did this creator say about X" and cite the exact source video; transcriptSegments supports building timestamp-aligned training pairs when includeTimestamps is enabled.

Brand and competitive intelligence teams β€” track a fixed list of competitor or influencer accounts over time, watching diggCount, playCount, and commentCount per video to catch which posts are outperforming the account's baseline.

Researchers β€” assemble a public dataset of TikTok video text and transcripts for social-media, linguistics, or misinformation-spread research, scoped strictly to what TikTok already serves on the public video page.

Accessibility and localization teams β€” generate text transcripts of published videos for caption review or translation workflows, using subtitleLanguage to target a specific language track already present on the video.

Scraping publicly accessible web data is generally lawful in the United States β€” courts have held that accessing data a website makes available without a login does not violate the Computer Fraud and Abuse Act (hiQ Labs v. LinkedIn Corp., 9th Cir., 2019). That precedent concerns public-data access broadly, not TikTok specifically, and does not override TikTok's own Terms of Service, which restrict automated access; violating a platform's ToS is a civil contract matter between the scraper and the platform, not a criminal one. Because authorMeta includes a creator's username, nickname, bio, and follower counts β€” personal data about a public individual β€” anyone storing or processing that data should have a lawful basis under GDPR, CCPA, or the applicable regime in their jurisdiction. TikTok Video Scraper With Subtitles & Transcript returns only publicly accessible data. What you do with that data is your responsibility β€” consult legal counsel for commercial applications involving personal data.

❓ Frequently asked questions

Does TikTok Video Scraper With Subtitles & Transcript work without a TikTok account? Yes. It reads the public video page directly over HTTP with browser-style headers β€” no TikTok login, session cookie, or API key is required, and the input schema has no credential field to configure.

How does it handle TikTok's anti-scraping measures? Each page fetch and caption download retries up to three times with a short backoff before failing. The Actor does not use Apify Proxy or any other IP rotation for the direct HTTP fetches or for the caption download; the related-videos path uses a headless Playwright browser with a masked navigator.webdriver flag. There is no additional bot-detection bypass beyond retries and the browser-like request headers.

Can I run it at scale without getting blocked? All input URLs in a run are processed concurrently via asyncio.gather, and one failing URL does not stop the rest of the batch β€” a genuine fetch failure returns a charged {"error": ..., "url": ...} row instead. No uptime or block-rate figure is published for this Actor, so plan batch sizes empirically rather than assuming a fixed success rate.

How fresh is the data it returns? Live. Every run fetches the current TikTok video page at request time; nothing is cached between runs, so re-running the same URL reflects TikTok's current engagement counts and caption tracks.

What happens when a video has no captions at all? transcriptAvailable returns false and transcript stays null β€” the Actor logs this as a coverage gap, not an error, because TikTok itself generated no caption track for that video. There is no fallback that transcribes the video's audio independently; this Actor only reads caption tracks TikTok already published. If includeASR is off and a video's only track is TikTok's auto-generated (ASR) caption, the same empty result applies, since the eligible-track filter excludes it.

Which fields work best for AI training and RAG indexing? transcript (spoken content, human/ASR/MT-sourced) and text (the creator's own caption) are the highest-information text fields; transcriptSegments gives consistently shaped {start, end, text} cues for videos run with includeTimestamps enabled. All fields return as typed strings, numbers, or booleans requiring no HTML parsing before use.

Does scraping TikTok videos and creator data raise data-protection concerns? Only to the extent authorMeta carries a creator's username, nickname, bio, and public follower counts β€” personal data the creator has already made public on TikTok. The Actor returns publicly available data; lawful basis for storing and using it sits with whoever runs the Actor, not with the Actor itself.

Does it work with Claude, ChatGPT, and other AI agent tools? This Actor is not documented as reachable through an MCP server. It is callable as a standard Apify Actor run by any agent framework that can call the Apify API β€” every dataset row returns as typed JSON, ready to drop into an LLM context window without a parsing step.

Are failed URLs charged the same as successful ones? It depends on why the URL failed. A genuine fetch failure β€” a timeout or a non-2xx response that survives three retries β€” still produces a row ({"error": ..., "url": ...}) and that row is pushed with the same item_result charged event as a successful scrape, so it is billed identically. A URL that loads but contains no recognizable TikTok video data (see the next question) is silently dropped instead: no row, no charge, and no error logged for that specific URL.

What happens if a TikTok URL is invalid, removed, or private? If the page responds but no video data can be parsed from it β€” a removed video, a private account, or a link that isn't actually a TikTok video page β€” the URL is silently skipped: no dataset row is pushed, nothing is charged, and no error is logged for that specific URL. Input validation only checks that each entry is a string starting with http, so a non-TikTok link reaches the fetch step and is handled the same silent way once TikTok's response contains no item data.

How does it compare to other TikTok transcript scrapers? invideoiq/video-transcript-scraper covers more platforms in one Actor (YouTube, X, Facebook, Dailymotion, Vimeo, Loom, Rumble, and TikTok) but, as observed on its Store listing on 2026-07-26, does not document caption-source labeling or related-video discovery for TikTok the way this Actor does. memo23/tiktok-transcript-extractor-cheerio, also as observed on 2026-07-26, exposes an ASR/MT source label and can additionally download the raw MP4, but does not document related-video discovery. Choose the multi-platform tool if TikTok is only one of several platforms you need; choose this Actor for TikTok-specific depth β€” related videos, ASR/MT/human source labeling, and timed segments in one call.

Disclaimer

TikTok Video Scraper With Subtitles & Transcript extracts only publicly available data from TikTok. This tool is intended for lawful use cases only. Users are responsible for complying with TikTok's Terms of Service and applicable data protection laws in their jurisdiction.