SocialCrawl

Comment schema

The unified SocialCrawl comment schema. Every field, its type, per-platform availability, and a machine-readable JSON Schema, generated from the canonical Zod source.

Every SocialCrawl endpoint that returns a comment gives you this exact shape, whatever the source platform. Write your parser once and the same code reads comment data from every platform below. That is the unified schema: one contract instead of a dozen raw upstream formats.

Field reference

FieldTypeNullableDescription
idstringNoPlatform-specific comment ID (always a string)
urlstringYesDirect URL to the comment on the source platform
parent_idstringYesParent comment ID for nested replies, or null for top-level comments
post_idstringYesID of the post this comment belongs to
textstringYesComment body. Tombstone sentinels ([deleted] / [removed]) are collapsed to null upstream: customers never see them.
author.usernamestringYesComment author username (null when tombstoned)
author.display_namestringYesComment author display name
author.avatar_urlstringYesURL to comment author profile picture
author.verifiedbooleanYesWhether the comment author is verified
engagement.likesintegerYesLike / upvote count
engagement.repliesintegerYesReply / child-comment count. 0 when the upstream structurally reports the count and the comment has no replies; null only when the upstream does not surface a reply count at all.
flags.pinnedbooleanYesPinned flag (null when platform does not surface)
flags.deletedbooleanNoWhether the comment is tombstoned (always present, even when false)
published_atstring or integerYesComment creation timestamp as an ISO 8601 UTC string. When the upstream sent a Unix epoch it is converted here and the raw epoch is preserved under comment.ext.published_at_epoch for one deprecation cycle.
repliesobject[]YesNested reply tree: array of child comments, each itself a full Comment object with its own replies. Populated on threaded platforms (Reddit); absent on flat-comment platforms, which thread only via parent_id.

Extension fields (ext)

Platform-specific passthrough. Each field is present only on the platforms that expose it and is absent everywhere else, so treat every ext.* field as optional. These carry the richer, per-platform signals the unified leaves cannot hold, and the join keys that chain endpoints together.

FieldTypeNullableDescription
ext.replies_tokenstringYesYouTube reply continuation token: pass to /v1/youtube/video/comment/replies?continuationToken=
ext.replies_cursorstringYesReddit reply-branch continuation cursor. Present when this comment's reply tree is truncated upstream: pass it back as ?cursor= on /v1/reddit/post/comments to load the rest of the branch.
ext.depthintegerYesReddit comment nesting depth as the source reports it: 0 on a top-level comment, 1 on a direct reply, and so on. Present when the thread arrived flat and was re-nested into replies[], so you can verify that nesting independently.
ext.published_at_epochintegerYesRaw Unix epoch for published_at (present only when the upstream sent a numeric epoch that was normalised to the ISO 8601 string).
ext.feedback_idstringYesFacebook comment feedback id: feeds /v1/facebook/post/comment/replies
ext.expansion_tokenstringYesFacebook comment expansion/paginator token: feeds /v1/facebook/post/comment/replies
ext.author_idstringYesThe commenter's platform-native numeric user id, where the upstream exposes one.
ext.ip_locationstringYes
ext.urnstringYes
ext.reaction_countsstring[]Yes
ext.is_editedbooleanYes
ext.previous_replies_tokenstringYes
ext.author_headlinestringYes
ext.updated_atstringYes
ext.author_channel_idstringYes
ext.author_urlstringYes
ext.viewer_ratingstringYes
ext.text_originalstringYes
ext.preview_repliesstring[]Yes
ext.lookupstringYes
ext.post_titlestringYes
ext.post_urlstringYes
ext.subredditstringYes
ext.subreddit_subscribersintegerYes
ext.post_scoreintegerYes
ext.post_comment_countintegerYes
ext.post_authorstringYes
ext.post_published_atstringYes
ext.post_flairstringYes
ext.is_submitterbooleanYes
ext.edited_atstringYes
ext.controversialityintegerYes
ext.content_languagestringYesISO 639-1 language tag for this comment, when the source reports one. X writes zxx / und for no linguistic content; those collapse to null.
ext.author_followersintegerYesThe commenter's follower count as embedded in this row. Snapshot as of whenever the replies source saw the account, not a live figure. On X this is present on every tweet/replies row.
ext.author_followingintegerYesThe commenter's following count as embedded in this row. Same snapshot caveat as author_followers.
ext.author_posts_countintegerYesThe commenter's post count as embedded in this row. Same snapshot caveat as author_followers.
ext.quote_countintegerYesHow many quote-posts this comment has, when the source reports it. On X a reply is a tweet, so this is the same figure post.ext.quote_count carries on tweet lanes.
ext.viewsintegerYesView count for this comment, when the source reports it. On X a reply is a tweet and the count is public on posts from ~2022 onward.
ext.savesintegerYesBookmark / save count for this comment, when the source reports it. On X this is legacy.bookmark_count.

Platform availability

15 platforms return the Comment shape. id, flags.deleted are never null on any platform. The fields below vary: yes means the platform populates it (the value may still be null); a blank means the platform never provides it, so it is always null.

Platformparent_idauthor.verifiedflags.pinnedurlpost_idauthor.avatar_urlauthor.display_nameengagement.repliesauthor.usernameengagement.likes
Douyinyesyesyesyesyesyesyesyes
Facebookyesyesyesyesyes
GitHubyesyesyesyesyes
Googleyesyesyesyesyesyesyes
Hacker Newsyesyesyesyes
Instagramyesyesyesyesyesyesyesyesyesyes
LinkedInyesyesyes
Reddityesyesyesyesyesyesyesyesyes
Rumbleyesyesyesyesyes
Snapchatyesyesyesyes
Threadsyesyesyesyesyesyesyes
TikTokyesyesyesyesyesyesyesyesyesyes
Twitter/Xyesyesyesyesyesyesyesyes
Xiaohongshuyesyesyesyesyesyesyesyes
YouTubeyesyesyesyesyes

Machine-readable schema

Validate responses programmatically against the JSON Schema (2020-12):

/schemas/comment.json

Point a validator (Ajv, jsonschema, or your framework's) at that URL, or hand it to an agent so it can check the shape without a live call.

Returned by

Endpoints with the Comment / CommentList archetype return this shape:

Douyin · Facebook · GitHub · Google · Hacker News · Instagram · LinkedIn · Reddit · Rumble · Snapchat · Threads · TikTok · Twitter/X · Xiaohongshu · YouTube

See how the same fields map to each platform's raw upstream names in the cross-platform field equivalence table.

On this page