Dataspryva

YouTube Community Tab Post & Poll Scraper

Read a YouTube channel's Community tab and get structured records for every text post, image, poll, and shared video, with vote counts and optional comment threads.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringoptionalChoose channel posts, one post per URL/ID, or comments from post URLs/IDs.
urlsarrayoptionalChannel URLs, @handles or channel IDs when mode=channelPosts. Post URLs or post IDs when mode=postDetails/postComments.
maxPostsintegeroptionalMaximum posts per channel, or per run in the post modes. The run also accepts at most this many channel/post inputs. YouTube exposes at most 200 posts per channel.
Show all input fields
FieldTypeRequiredDescription
modestringoptionalChoose channel posts, one post per URL/ID, or comments from post URLs/IDs.
urlsarrayoptionalChannel URLs, @handles or channel IDs when mode=channelPosts. Post URLs or post IDs when mode=postDetails/postComments.
maxPostsintegeroptionalMaximum posts per channel, or per run in the post modes. The run also accepts at most this many channel/post inputs. YouTube exposes at most 200 posts per channel.
postTypesarrayoptionalIn channelPosts mode, only return these post types. Leave empty to include every type. The post modes return the post URLs/IDs you give them.
keywordstringoptionalIn channelPosts mode, only keep posts whose text contains this phrase. Case-insensitive. Leave empty for all posts.
publishedAfterstringoptionalIn channelPosts mode, keep posts published on or after this date. Uses YouTube's exact publish date, so details are fetched when set.
publishedBeforestringoptionalIn channelPosts mode, keep posts published on or before this date. Uses YouTube's exact publish date, so details are fetched when set.
includeDetailsbooleanoptionalIn channelPosts mode, fill the exact publish date, exact like count, comment count and a 3-comment preview. Adds one detail and one comment request per post. postDetails always returns details.
includeCommentsbooleanoptionalReturn comment threads on each post (up to Maximum comments) in channelPosts and postDetails modes. postComments always returns comments.
maxCommentsintegeroptionalMaximum top-level comments to keep per post when comments are included. Replies are counted separately.
includeRepliesbooleanoptionalAlso fetch replies under each comment when comments are included.
maxRepliesPerCommentintegeroptionalMaximum replies to keep per comment when replies are included.
commentSortstringoptionalShow YouTube's featured comments first, or the newest comments first, when comments are returned.
marketstringoptionalCountry used to render YouTube's localized labels and relative times.
languagestringoptionalLanguage used for YouTube's relative times and display labels. Post text is never translated.

Download the published input schema

View complete JSON
{
  "properties": {
    "commentSort": {
      "default": "top",
      "description": "Show YouTube's featured comments first, or the newest comments first, when comments are returned.",
      "editor": "select",
      "enum": [
        "top",
        "newest"
      ],
      "enumTitles": [
        "Top comments",
        "Newest comments"
      ],
      "prefill": "top",
      "title": "Comment order",
      "type": "string"
    },
    "includeComments": {
      "default": false,
      "description": "Return comment threads on each post (up to Maximum comments) in channelPosts and postDetails modes. postComments always returns comments.",
      "prefill": false,
      "title": "Include comments",
      "type": "boolean"
    },
    "includeDetails": {
      "default": true,
      "description": "In channelPosts mode, fill the exact publish date, exact like count, comment count and a 3-comment preview. Adds one detail and one comment request per post. postDetails always returns details.",
      "prefill": false,
      "title": "Fetch per-post details",
      "type": "boolean"
    },
    "includeReplies": {
      "default": false,
      "description": "Also fetch replies under each comment when comments are included.",
      "prefill": false,
      "title": "Include comment replies",
      "type": "boolean"
    },
    "keyword": {
      "description": "In channelPosts mode, only keep posts whose text contains this phrase. Case-insensitive. Leave empty for all posts.",
      "editor": "textfield",
      "title": "Keyword filter",
      "type": "string"
    },
    "language": {
      "default": "en",
      "description": "Language used for YouTube's relative times and display labels. Post text is never translated.",
      "editor": "select",
      "enum": [
        "en",
        "es",
        "pt",
        "de",
        "fr",
        "it",
        "nl",
        "pl",
        "ru",
        "tr",
        "ar",
        "hi",
        "id",
        "th",
        "vi",
        "ja",
        "ko",
        "zh",
        "sv",
        "da"
      ],
      "enumTitles": [
        "English",
        "Spanish",
        "Portuguese",
        "German",
        "French",
        "Italian",
        "Dutch",
        "Polish",
        "Russian",
        "Turkish",
        "Arabic",
        "Hindi",
        "Indonesian",
        "Thai",
        "Vietnamese",
        "Japanese",
        "Korean",
        "Chinese",
        "Swedish",
        "Danish"
      ],
      "prefill": "en",
      "title": "Interface language",
      "type": "string"
    },
    "market": {
      "default": "US",
      "description": "Country used to render YouTube's localized labels and relative times.",
      "editor": "select",
      "enum": [
        "US",
        "GB",
        "CA",
        "AU",
        "DE",
        "FR",
        "JP",
        "KR",
        "BR",
        "IN",
        "MX",
        "IT",
        "ES",
        "NL",
        "PL",
        "RU",
        "SE",
        "NO",
        "DK",
        "FI",
        "ZA",
        "SG",
        "HK",
        "TW",
        "ID",
        "MY",
        "TH",
        "PH",
        "AR",
        "CO",
        "CL"
      ],
      "enumTitles": [
        "United States",
        "United Kingdom",
        "Canada",
        "Australia",
        "Germany",
        "France",
        "Japan",
        "South Korea",
        "Brazil",
        "India",
        "Mexico",
        "Italy",
        "Spain",
        "Netherlands",
        "Poland",
        "Russia",
        "Sweden",
        "Norway",
        "Denmark",
        "Finland",
        "South Africa",
        "Singapore",
        "Hong Kong",
        "Taiwan",
        "Indonesia",
        "Malaysia",
        "Thailand",
        "Philippines",
        "Argentina",
        "Colombia",
        "Chile"
      ],
      "prefill": "US",
      "title": "Market",
      "type": "string"
    },
    "maxComments": {
      "default": 100,
      "description": "Maximum top-level comments to keep per post when comments are included. Replies are counted separately.",
      "maximum": 1000,
      "minimum": 1,
      "title": "Maximum comments per post",
      "type": "integer"
    },
    "maxPosts": {
      "default": 100,
      "description": "Maximum posts per channel, or per run in the post modes. The run also accepts at most this many channel/post inputs. YouTube exposes at most 200 posts per channel.",
      "maximum": 200,
      "minimum": 1,
      "prefill": 3,
      "title": "Maximum posts",
      "type": "integer"
    },
    "maxRepliesPerComment": {
      "default": 10,
      "description": "Maximum replies to keep per comment when replies are included.",
      "maximum": 100,
      "minimum": 1,
      "title": "Maximum replies per comment",
      "type": "integer"
    },
    "mode": {
      "default": "channelPosts",
      "description": "Choose channel posts, one post per URL/ID, or comments from post URLs/IDs.",
      "editor": "select",
      "enum": [
        "channelPosts",
        "postDetails",
        "postComments"
      ],
      "enumTitles": [
        "Posts from channel URLs",
        "One post per URL or ID",
        "Comments from post URLs or IDs"
      ],
      "prefill": "channelPosts",
      "title": "What to scrape",
      "type": "string"
    },
    "postTypes": {
      "default": [],
      "description": "In channelPosts mode, only return these post types. Leave empty to include every type. The post modes return the post URLs/IDs you give them.",
      "editor": "select",
      "items": {
        "enum": [
          "text",
          "image",
          "video",
          "poll",
          "quiz",
          "playlist",
          "shared"
        ],
        "enumTitles": [
          "Text",
          "Image or carousel",
          "Shared video",
          "Poll",
          "Quiz",
          "Shared playlist",
          "Repost"
        ],
        "type": "string"
      },
      "prefill": [],
      "title": "Post types",
      "type": "array",
      "uniqueItems": true
    },
    "publishedAfter": {
      "description": "In channelPosts mode, keep posts published on or after this date. Uses YouTube's exact publish date, so details are fetched when set.",
      "editor": "datepicker",
      "title": "Published on or after",
      "type": "string"
    },
    "publishedBefore": {
      "description": "In channelPosts mode, keep posts published on or before this date. Uses YouTube's exact publish date, so details are fetched when set.",
      "editor": "datepicker",
      "title": "Published on or before",
      "type": "string"
    },
    "urls": {
      "description": "Channel URLs, @handles or channel IDs when mode=channelPosts. Post URLs or post IDs when mode=postDetails/postComments.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [
        "https://www.youtube.com/@MrBeast"
      ],
      "title": "Channel or post URLs / IDs",
      "type": "array"
    }
  },
  "schemaVersion": 1,
  "title": "YouTube Community Posts & Polls Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
postsstringoptionalDataset containing community post rows, comment rows from postComments mode, and explanatory status rows.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Community posts with exact dates, engagement, images, polls, quizzes, playlists, reposts and comment threads, plus one-row-per-comment output in postComments mode.",
  "properties": {
    "posts": {
      "description": "Dataset containing community post rows, comment rows from postComments mode, and explanatory status rows.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "YouTube Community rows",
      "type": "string"
    }
  },
  "title": "YouTube Community Posts, Polls & Comments Scraper Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "channelName": {
            "format": "text",
            "label": "Channel"
          },
          "commentCount": {
            "format": "number",
            "label": "Comments"
          },
          "contentText": {
            "format": "text",
            "label": "Text"
          },
          "likeCount": {
            "format": "number",
            "label": "Likes"
          },
          "postId": {
            "format": "text",
            "label": "Post ID"
          },
          "postType": {
            "format": "text",
            "label": "Type"
          },
          "publishedAt": {
            "format": "text",
            "label": "Published"
          }
        }
      },
      "title": "Community posts & comments",
      "transformation": {
        "fields": [
          "postId",
          "postType",
          "channelName",
          "contentText",
          "publishedAt",
          "likeCount",
          "commentCount"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

YouTube Community Posts, Polls & Comments Scraper

Read a YouTube channel's Posts (Community) tab — or a single post URL — and get clean records for text posts, image carousels, shared videos, polls, quizzes, playlists and reposts. Exact publish dates and like counts, comment counts and comment threads are available without logging in.

What this actor does

  • Three modes: channelPosts reads a channel feed, postDetails enriches one post per URL or ID, and postComments returns one row per comment.
  • Every public post type: text, single image, image carousel, shared video, text poll, image poll, quiz, shared playlist and repost with the original post's content and attachments.
  • Exact engagement: exact ISO publish date, exact like count and exact comment count when details are enabled; the text YouTube displays is kept too.
  • Comments that work: up to 1,000 top-level comments per post, Top or Newest order, and optional replies.
  • Filters (in channelPosts mode): post type, keyword and exact publish-date range.
  • Clean output: one best-resolution URL per image, resolved external links, hashtags and normalized UTC dates. Empty fields are omitted.

Output per post

  • recordType — community_post for a post, comment in postComments mode, or status for an explanatory row
  • postId, postUrl — YouTube's post ID and canonical link
  • postType — text, image, video, poll, quiz, playlist or shared
  • channelId, channelName, channelHandle, channelUrl — the channel whose tab was read
  • channelSubscriberCountText — subscriber label shown on the channel page
  • authorName — the post or repost author
  • contentText — post text as YouTube displays it; a long URL may be shortened here, with the full target in links[]
  • links[] — full external URLs found in the post text
  • hashtags[] — hashtags found in the post text
  • publishedTimeText, isEdited — relative label and edited marker
  • publishedAt — exact ISO 8601 UTC publish date (details on)
  • voteCountText, likeCount — displayed likes and exact likes
  • commentCountText, commentCount — displayed and exact comment counts
  • commentsDisabled — present when the creator turned comments off
  • images[], imageDetails[] — one best-resolution URL per image, with dimensions
  • videoAttachments[] — shared video ID, title, URL, thumbnail, description, views, length, owner and badges
  • poll — pollChoices, optional pollOptions with images, total votes text and parsed approximate total
  • quiz — choices with isCorrect and explanation, plus total answers
  • playlist — playlist ID, title, video count, URL and thumbnail
  • sharedPost — a repost's original post: author, text, date label, likes label and attachments
  • isMembership — present only when YouTube exposes a members-only badge
  • commentPreview[] — first three comments when details are on but full comments are not requested
  • comments[] — comment rows with author, text, time, likes, reply count and optional replies[]
  • scrapedAt — ISO 8601 scrape timestamp

Output per comment (postComments mode)

One row per top-level comment and, when enabled, one row per reply:

  • recordType — comment
  • postId, postUrl, channelId, channelName, channelHandle, channelUrl
  • commentId, parentCommentId, replyLevel
  • authorName, authorChannelId, authorChannelUrl, authorHandle
  • text, publishedTimeText, likeCountText, replyCount
  • isCreator, isVerified, isPinned, isHearted
  • scrapedAt

Status rows use recordType: "status" with a status value such as channel_not_found, no_community_tab, post_not_found or comments_disabled.

Input

Field Type Default Description
mode string channelPosts channelPosts, postDetails or postComments
urls array – Channel URLs/handles/IDs, or post URLs/IDs for the post modes
maxPosts integer 100 Maximum posts per channel in channelPosts mode, or per run in the post modes (1–200).
postTypes array [] channelPosts only: keep text/image/video/poll/quiz/playlist/shared posts
keyword string – channelPosts only: keep posts whose text contains this phrase
publishedAfter string – channelPosts only: keep posts published on or after this date
publishedBefore string – channelPosts only: keep posts published on or before this date
includeDetails boolean true channelPosts only: fetch exact date, likes, comment count and a 3-comment preview. postDetails always returns details.
includeComments boolean false Include comment threads in channelPosts and postDetails; postComments always returns comments
maxComments integer 100 Maximum top-level comments per post (1–1,000)
includeReplies boolean false Include replies under comments
maxRepliesPerComment integer 10 Maximum replies per comment (1–100)
commentSort string top top or newest when comments are requested
market string US Country used for YouTube's localized labels
language string en Interface language for relative times and labels

Example: recent posts from two channels

{
  "mode": "channelPosts",
  "urls": ["https://www.youtube.com/@MrBeast", "@GoodMythicalMorning"],
  "maxPosts": 20
}

Example: polls and quizzes only

{
  "mode": "channelPosts",
  "urls": ["@veritasium", "@watchmojo"],
  "postTypes": ["poll", "quiz"],
  "maxPosts": 50
}

Example: exact date range with comments

{
  "mode": "channelPosts",
  "urls": ["@MrBeast"],
  "publishedAfter": "2026-08-01",
  "publishedBefore": "2026-10-01",
  "includeComments": true,
  "maxComments": 100,
  "commentSort": "newest"
}

Example: one post by URL, with replies

{
  "mode": "postDetails",
  "urls": ["https://www.youtube.com/post/UgkxZusu9I1Z-VuU5PGZNA2gclHi8V9CJVZk"],
  "includeComments": true,
  "maxComments": 200,
  "includeReplies": true,
  "maxRepliesPerComment": 20
}

Example: comments as one row per comment

{
  "mode": "postComments",
  "urls": ["UgkxZusu9I1Z-VuU5PGZNA2gclHi8V9CJVZk"],
  "maxComments": 500,
  "commentSort": "newest"
}

Use cases

  • Creator agencies — track announcements, product drops and audience polls across a roster of channels
  • Social listening — export poll choices, post text and comment sentiment for brand monitoring
  • Competitive research — compare engagement and posting cadence across creators
  • Content archiving — save time-limited Community posts with images, links and comments
  • AI datasets — collect clean creator text, quizzes and threaded comments
  • Community management — monitor new comments on a post without opening YouTube

FAQ

What is a Community post? Any text update, image, image carousel, shared video, poll, quiz, playlist or repost a channel publishes to its Posts tab — the feed that sits beside Videos and Shorts.

Do I need to log in or provide cookies? No. The actor reads the same public pages a logged-out visitor sees. Posts that a creator restricted to channel members are not visible without a membership, so they are not returned.

Why does a channel stop at 200 posts? YouTube's Posts tab only serves the newest 200 posts. There is no public way to page further back. If you already have an older post URL or ID, the postDetails and postComments modes can still read it.

Why are poll percentages missing? YouTube only reveals per-choice votes and percentages to signed-in viewers who voted in that poll. Logged out, the page carries the choices and a rounded total vote count, which the actor returns.

Are like and comment counts exact? Yes when includeDetails is on: the actor reads YouTube's exact counters. Counts are a point-in-time snapshot and can change after the scrape. When details are off, only the display text such as 147K is available. Reposts do not have their own like or comment counters.

Can I get every comment on a post? Up to maxComments top-level comments. YouTube's featured-comment feed is finite; for deeper requests the actor continues with the newest-comment feed and removes duplicates. includeReplies adds reply threads.

Why does a post have no comment count? The creator turned comments off. The record then carries commentsDisabled: true instead of inventing zero.

Does the market or language field translate post text? No. It changes YouTube's own labels and relative times, never the creator's text.

Can I filter by date, type or keyword? Yes, in channelPosts mode. publishedAfter and publishedBefore use the exact publish date, postTypes filters attachments, and keyword matches the post text case-insensitively. The post modes process the URLs/IDs you give them directly.

Is this affiliated with YouTube? No. This is an independent third-party actor that reads public YouTube pages and is not operated by or affiliated with YouTube or Google.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build YmiJOaB3acz5T3dIO. Documentation is regenerated from the default published build; private drafts are not included.