SocialGrid — Post Comments Scraper avatar

SocialGrid — Post Comments Scraper

Pricing

Pay per usage

Go to Apify Store
SocialGrid — Post Comments Scraper

SocialGrid — Post Comments Scraper

Scrape YouTube and TikTok post comments into flat JSON — handle, text, likes, reply count, date. YouTube mode is live-verified and guaranteed-working; TikTok is best-effort via residential proxy, with an honest structured error if gated — never fake data.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Giovanni

Giovanni

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Categories

Share

Unofficial community Actor. Not affiliated with, endorsed by, or sponsored by YouTube, Google, or TikTok.

Unified-schema post comments for YouTube and TikTok, returned as flat, agent-ready JSON — one dataset item per comment, never a nested platform-specific blob. Comments are the highest-signal source of engaged fans, potential collab partners, and micro-creators; each author_handle this actor returns is a ready-made input to a profile/creator-resolver lookup.

What it does

PlatformStatusNotes
youtubeGuaranteed-working core. Live-verified, paginated, no proxy needed.Reuses @socialgrid/scraper-youtube's already-live-verified getComments (including its two-endpoint onResponseReceivedEndpoints pagination fix).
tiktokBest-effort — live-verified working as of this writing, via Apify's RESIDENTIAL proxy. Can degrade to an explicit gated-error item if TikTok tightens signature enforcement.Resolves the video via TikTok's public api/comment/list/ endpoint. No X-Bogus/msToken signing is implemented — this works today because that endpoint currently accepts an anonymous request carrying just a valid session cookie through a residential IP. This is inherently more fragile than the YouTube path; if TikTok starts requiring signed requests, every call will fail the same documented way (see "Honest gating" below), never silently return nothing.

Each run pushes one dataset item per comment. If a request is fully gated (platform rejects the request, video/URL can't be resolved, etc.), the run instead pushes exactly one explicit error item — comments are never fabricated and an unreachable post never silently looks like "zero comments."

Input

{
"platform": "youtube",
"postUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"maxComments": 100,
"includeReplies": false
}
  • platform (required): "youtube" or "tiktok"
  • postUrl (required): full URL of the video/post
    • YouTube: any youtube.com/watch?v=... or youtu.be/... URL
    • TikTok: full video URL that includes the author's handle in the path (tiktok.com/@handle/video/123...)
  • maxComments (default 100, max 2000): paginates internally to reach this count
  • includeReplies (default false): currently has no effect on YouTube (see Known limitations) — TikTok returns reply_count per top-level comment but does not expand reply threads in this version
  • proxyGroup (default "RESIDENTIAL", TikTok only): Apify proxy group; TikTok mandatory-login-walls datacenter IPs, so this must stay RESIDENTIAL for platform=tiktok to work at all. Unused for platform=youtube.

Output — one item per comment

{
"platform": "youtube",
"post_id": "jNQXAC9IVRw",
"comment_id": "UgzuC3zzpRZkjc5Qzsd4AaABAg",
"text": "We're so honored that the first ever YouTube video was filmed here!",
"author_handle": "@SanDiegoZoo",
"author_name": "@SanDiegoZoo",
"likes": 4600000,
"reply_count": null,
"published_at": "2020-07-19T18:22:35.014Z"
}

Real TikTok example (live-verified — note author_handle and author_name are genuinely distinct on this platform, and reply_count is a real number):

{
"platform": "tiktok",
"post_id": "7635602188613487894",
"comment_id": "7636247254504866580",
"text": "whatever you say handsome 😜",
"author_handle": "aaronjhon28",
"author_name": "Aaron_jhon",
"likes": 8407,
"reply_count": 2,
"published_at": "2026-05-05T03:39:39.000Z"
}

null means the platform genuinely doesn't expose that field for that comment (or, for YouTube's reply_count, that this actor version doesn't parse it out yet — see below) — never fabricated as 0 or "".

Gated / failed request

{ "error": "tiktok-comments-gated", "detail": "TikTok comment/list rejected the request (status_code=10202: verify required)" }
{ "error": "comments-harvester-failed", "detail": "No comments panel found for \"...\" (comments may be disabled)" }

Known limitations (honest, not silently hidden)

  • YouTube reply_count is always null. getComments (the reused, live-verified core scraper) currently only parses top-level comment threads — YouTube's reply threads live behind a separate per-comment continuation token that isn't fetched yet. includeReplies: true is accepted as input but has no effect on YouTube in this version.
  • YouTube author_name duplicates author_handle. YouTube's comment renderer exposes a single author label field, not a separate display-name/@handle pair, so there's nothing further to honestly split out.
  • TikTok comments are inherently more fragile than YouTube's. This actor makes a genuine anonymous request to TikTok's public api/comment/list/ endpoint (real session cookie, real residential-proxy IP, real aweme id resolved via the already-live-verified getPost) — it does not implement TikTok's X-Bogus/msToken request signing. This was confirmed working live as of this writing; if TikTok tightens enforcement on that endpoint, every TikTok call will fail with the same explicit tiktok-comments-gated error rather than degrading to fake or empty data.
  • Instagram is intentionally out of scope (login-walled).

Usage

Apify CLI

apify actors call fulinlabs/socialgrid-comments-harvester \
--input '{"platform": "youtube", "postUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw", "maxComments": 50}'

REST API

curl "https://api.apify.com/v2/acts/fulinlabs~socialgrid-comments-harvester/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"platform": "tiktok", "postUrl": "https://www.tiktok.com/@handle/video/1234567890", "maxComments": 50}'

Deploy

$./deploy.sh # pnpm run bundle && apify push

Fair use / ToS note

This actor reads only publicly viewable comment data (no login, no private/friends-only content). Scraping social platforms is contrary to most platforms' Terms of Service; use conservatively, respect rate limits, and don't use this to harvest personal data for spam or harassment. YouTube is accessed via its public InnerTube endpoints with no proxy; TikTok is accessed through Apify's residential proxy pool specifically because its comment/video endpoints wall off datacenter IPs.