TikTok Video & Comments Scraper avatar

TikTok Video & Comments Scraper

Under maintenance

Pricing

from $0.50 / 1,000 videos

Go to Apify Store
TikTok Video & Comments Scraper

TikTok Video & Comments Scraper

Under maintenance

Extract public TikTok video metadata, comments and replies. Optional downloads, speech transcription and experimental AI captions. Bounded profile samples; source limitations are reported.

Pricing

from $0.50 / 1,000 videos

Rating

0.0

(0)

Developer

tingyou333 zhuang

tingyou333 zhuang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

19 days ago

Last modified

Categories

Share

Extract public TikTok video metadata, comments and replies without an account login. Optional source media downloads, CPU speech transcription and experimental AI captions are available. Source failures and incomplete coverage are reported in SUMMARY.

Quick start

{
"postURLs": ["https://www.tiktok.com/@apifylife/video/7200360993149553925"],
"hashtags": [],
"profiles": [],
"searchQueries": [],
"resultsPerPage": 1,
"commentsPerPost": 5,
"maxRepliesPerComment": 0,
"maxRunSeconds": 100
}

The input form starts with one public video and up to five top-level comments. Discovery inputs are empty and media/AI are off. This is a small real-source sample; source availability can still change. The runtime comment default remains zero when the API input omits commentsPerPost.

Run with 256 MB for metadata/comments. Export the Dataset as JSON, CSV or Excel, or access it through the Apify API. The main Dataset contains video rows by default: video ID/link, author, text, timestamps, engagement counts, source media links and requested comments. Missing optional source fields remain null. For media, links point to files stored in the run's Key-value store and follow Apify retention rules.

Canonical TikTok video/photo URLs and decimal video IDs are supported. Public short links are accepted only if they resolve to a real post; their availability is not guaranteed. Duplicate video IDs are collected once. Up to 100 direct post inputs per run; resultsPerPage caps discovery results, not supplied post URLs.

Comments and replies

  • commentsPerPost=0 (default) collects videos without comments.
  • A positive commentsPerPost caps all returned comments including replies for each video.
  • topLevelCommentsPerPost optionally adds a cap on root comments. maxRepliesPerComment=0 disables reply traversal.
  • commentsOnly=true returns flat comment/reply rows in the main Dataset and incurs comment fees only. Media and AI options must be off.
  • commentsOutputMode="nested" (default) embeds comment rows in the video row. Both the video and each comment/reply are charged.
  • commentsOutputMode="separate" stores comments in a per-video Dataset linked by commentsDatasetUrl. Both the video and each comment/reply are charged once.

Comments include source text, time, likes and author; replies retain immediate parent and root-thread IDs. A satisfied capped request does not mean every comment was collected. Availability, pagination and completeness are recorded in commentCoverage and SUMMARY. Full comment enumeration and detailed optional mention semantics are not guaranteed.

Pricing

No subscription rental or Actor start fee. Error/informational rows carry no result fee. Platform computation, storage and transfer used by this Actor are included in the event rates; separate account-level Apify plan services and storage retention policies still apply. Fees are charged after results are saved and accessible. Unavailable add-ons are not charged.

The following USD prices are per 1,000 events. Transcription uses started minutes per video; AI uses started seconds of decoded video per enabled feature. Two enabled AI features each incur their own second rate. Speech used internally by AI is not charged as a separate transcription unless the explicit transcription output is requested and delivered. Covers, avatars, native subtitle and slideshow image downloads have no separate add-on fee.

Delivered eventFreeStarter/BronzeScale/SilverBusiness/GoldPlatinumDiamond
Video$1.5$1$0.75$0.5$0.5$0.5
Comment or reply$0.625$0.5$0.375$0.25$0.25$0.25
Add-on: video download$0.65$0.5$0.4$0.3$0.3$0.3
Add-on: transcript started minute$24$20.5$17$13.5$13.5$13.5
Experimental AI description second$0.65$0.5$0.4$0.3$0.3$0.3
Experimental extractive AI summary second$0.65$0.5$0.4$0.3$0.3$0.3

For Free, Starter/Bronze, Scale/Silver and Business/Gold, these event rates are 50% of matched Clockworks rates checked on October 2, 2026, at the same plan tier: video/download/transcription, comments, and AI add-ons. Apify normalized the submitted Platinum and Diamond prices to our Business/Gold rates; those two tiers are not a 50% discount versus the competitor. The table shows actual effective rates. This compares event prices, not completeness or AI quality. Rounding duration to started seconds can differ from another Actor's duration measurement. See the Pricing tab for effective rates.

Example on the Free plan: one video plus 10 comments costs $0.0015 + 10 × $0.000625 = $0.00775, without downloads/transcription/AI. Comments-only output of 10 comments costs $0.00625.

Set a maximum charge per run in Apify. The Actor checks combined video, comment and add-on cost before saving a batch; if the remaining budget cannot cover it, that batch is not emitted and collection stops with diagnostics. Keep initial runs small. Partial real rows can be chargeable when allowPartialResults=true; their coverage flags show incompleteness.

Bounded profile sample

{
"postURLs": [],
"profiles": ["apifylife"],
"profileDiscoveryMode": "public-recent-sample",
"profileSorting": "latest",
"resultsPerPage": 1,
"commentsPerPost": 1,
"maxRunSeconds": 180
}

This mode reads TikTok's public creator embed and chooses up to ten posts within the observed selection. It does not enumerate full profile history: fullProfileEnumerated=false and paginationComplete=false. It cannot establish globally newest posts or use full-history date, likes or pin filters. Set postURLs=[] for discovery-only runs, because Apify can insert the default direct post otherwise.

Full-profile enumeration, search, hashtags and related discovery are not currently reliable live sources; their inputs may fail with explicit diagnostics. Stories, reposts, followers/following and related-search words are unsupported. Do not choose this Actor if those features or exhaustive history are required.

Scraping exit country

Set proxyCountryCode="US" for a US network exit, "GB" for the UK, or another two-letter country in the input selector. Omit proxyConfiguration to automatically use Apify RESIDENTIAL when a country is selected. proxyCountryCode="None" with no explicit proxy configuration preserves the existing direct path. A country in the selector is a requested location, not a claim that an authorized live exit exists there.

{
"postURLs": ["https://www.tiktok.com/@pinkster_dancer/video/7687675803689094413"],
"proxyCountryCode": "US",
"commentsOnly": true,
"commentsPerPost": 40,
"topLevelCommentsPerPost": 40,
"commentPageSize": 20,
"maxRepliesPerComment": 0,
"maxConcurrency": 1,
"maxRetries": 0,
"maxRequests": 4,
"maxRunSeconds": 180
}

For an authorized ordinary datacenter group, explicitly pass proxyConfiguration={"useApifyProxy":true,"apifyProxyGroups":["YOUR_AUTHORIZED_GROUP"],"apifyProxyCountry":"US"} with the same proxyCountryCode. For UK research, change both country settings to GB, or omit the advanced configuration and set only proxyCountryCode="GB". Custom proxy URLs, SERP, Unblocker, conflicting country settings, and an explicitly disabled proxy with a requested country are rejected.

One randomly generated session is reused throughout each run: video discovery, share-link resolution, video/profile details, root comments, replies and all requested TikTok media, including media fetched for transcription/AI. It is not printed or stored in diagnostics. There is no direct, other-country or new-session fallback. Public model weights and Apify storage/API calls are infrastructure operations and do not use this TikTok-source proxy.

The Actor probes the fixed Apify browser-info endpoint through that same proxy session before collection and before every source/media request. SUMMARY.network.exitChecks records observed exit IP/country and verification results, and each proxied source request references its check. Missing or mismatched geolocation stops collection. These checks observe the session immediately before each request; residential sessions can lose their IP, and the source site may use a different geolocation database. They are not proof of the destination site's internal geolocation decision.

Exit country is not a content-country filter. It cannot force all videos to originate in that country, prove an author's nationality, or locate a commenter. Content ranking may vary by source route. No account cookies, signature generation or challenge solving are added. Country selection does not remove access restrictions. Missing permissions, unavailable country exits or failed verification return explicit PROXY_* diagnostics; access-denied/challenge routes stop as before. Country mode requires SDK/cloud execution, not the credential-free --input local runner.

Proxy traffic is not free: Apify residential proxies are metered by traffic, including large media transfers, and exit probes add a small amount of traffic. Under this Actor's current PPE configuration, consumers pay the published result/add-on events, with no new country/proxy event and no separate platform-usage charge for this run. Authors bear the actual paid-plan platform/proxy costs under Apify PPE cost rules; this can reduce or exceed the event revenue. Owner validation is an expense, not customer revenue. Independent account services remain subject to their own billing. A consumer's maximum event charge is not an author's proxy-traffic budget. Use small maxRequests, maxMediaBytes, run deadlines and disabled media/AI for initial regional research; failed source requests can consume traffic despite producing no paid results.

Optional downloads and transcription

Enable shouldDownloadVideos, shouldDownloadCovers, shouldDownloadAvatars, shouldDownloadMusicCovers or shouldDownloadSlideshowImages as needed. Actual accessible source files are saved and linked; expired or denied CDN links are reported. downloadSubtitlesOptions="DOWNLOAD_SUBTITLES" downloads source-provided VTT/SRT where available.

For CPU speech-to-text, use downloadSubtitlesOptions="TRANSCRIBE_ALL_VIDEOS" or "DOWNLOAD_AND_TRANSCRIBE_VIDEOS_WITHOUT_SUBTITLES". Set cloud memory to 1024 MB and allow model download time (maxRunSeconds=300 is a starting point). Tiny/base speech models run locally inside the Actor; no paid inference account/key is needed. Accuracy depends on language, music, noise and source media.

Experimental AI analysis

{
"postURLs": ["7200360993149553925"],
"aiVideoDescription": true,
"aiVideoSummary": true,
"maxRunSeconds": 450
}

Set cloud memory to 2048 MB and run timeout to at least 480 seconds. First use downloads public model weights. Default frame sampling scans the video and samples every second plus detected cuts, first and last frame; ceilings fail explicitly rather than silently dropping frames. visualFrameCount>0 opts into a fixed smaller frame sample.

Descriptions are timestamped visual captions under videoMeta.aiVideoDescription. The summary under videoMeta.aiVideoSummary extracts representative captions and recognized speech; it is not a freely generated narrative. aiAnalysisEvidence retains sampling/model details and fullSceneCoverage=false, accuracyBenchmarked=false. Captions may misidentify objects/actions and summaries may omit salient content. Environmental sounds and slideshow AI analysis are unsupported. Treat all AI output as experimental, not verified source facts.

A bounded 22-second test completed at 2 GB; longer videos, scale and cross-region reliability have not been qualified. Video, model and CDN access can change. Strict mode fails incomplete requests; allowPartialResults=true can retain real rows with explicit incomplete coverage.

Failures and limits

emitErrorRows=true emits recordType="error" records without result fees. Details and source/page coverage remain in SUMMARY; failure-only runs are marked FAILED. HTTP 200 with no usable data is a failure, not a successful empty result. No account cookies, request signing or challenge/CAPTCHA solving are used.

Default safety limits are 50 source requests, 100 seconds and 10 MB per media file; AI/transcription need longer explicit time budgets. Source access varies with time and region. This initial public release has bounded video/comment/media evidence, not complete competitor parity or a reliability guarantee. Apify automatic Store checks have not yet been observed.