YouTube Community Posts & Polls Scraper avatar

YouTube Community Posts & Polls Scraper

Pricing

from $2.50 / 1,000 community post rows

Go to Apify Store
YouTube Community Posts & Polls Scraper

YouTube Community Posts & Polls Scraper

Scrape every YouTube community post — polls, image carousels, shared videos, and text — plus full comment threads. Three operations, one actor, no API key needed. Built for creator agencies, social-listening teams, and AI-training pipelines that need structured community-tab data.

Pricing

from $2.50 / 1,000 community post rows

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Share

YouTube Community Posts & Polls Scraper — Posts, Polls, Comments 📝🚀

Store-SIÁN Agency Store-YouTube AI Comments Store-YouTube Comments Scraper Store-YouTube Query Suggestions

🎉 The ONLY actor that returns YouTube community posts + post detail + comments in one tool — including fully-parsed polls

Built for creator-management agencies, brand-sentiment teams, AI training pipelines, and social-listening platforms


📋 Overview

Three operations. One actor. Every YouTube community post you'll ever need. Scrape the community-tab feed of any channel, enrich any post into a rich single-row record, and pull every comment on any post — all without touching the Google API or maintaining your own session.

Why thousands of professionals choose us:

  • All-in-one toolkit: Channel feed listing + post detail enrichment + full comment threads in a single actor (every competitor ships only the listing).
  • Polls fully structured: pollChoices[] array + parsed pollTotalVotes integer — no other actor surfaces poll data this cleanly.
  • 🎯 Multi-image carousels unwrapped: Get a flat imageUrls[] array of best-resolution URLs, not nested arrays.
  • 💸 Pay only for what you keep: Pay-per-event pricing — billed per row returned, error rows free. Starts at $0.005/post.
  • 💎 Handle resolver baked in: Paste @MKBHD, get the canonical UC… channel ID free.
  • NEW: Bonus commentsContinuationToken exposed in every post-detail row — chain straight into the comments operation without re-fetching the post.

✨ Features

  • 📝 Channel Community Posts Listing — Paginated feed of every recent community post on a channel: text, image, multi-image carousel, shared video, and polls.
  • 🔍 Post Detail Enrichment — Single-row enrichment with full image resolutions, complete poll metadata, attached video info, and the embedded commentsContinuationToken.
  • 💬 Post Comments Thread — Paginated comments on any community post, ~20 comments per page, with continuation across pages.
  • 🗳 Structured Poll DatapollChoices as a JS array, pollTotalVotes parsed to integer, pollTotalVotesText preserved for display.
  • 🖼 Smart Image HandlingimageUrls[] returns one URL per image at the best resolution available, whether the post has 1 image or a 10-image carousel.
  • 🔗 Auto Handle Resolution — Paste a @handle, a custom URL, or a full /channel/UC… URL — the actor resolves to the canonical ID for free.
  • 🧩 Bulk Operation Support — Process 1 or 200 channels per run (listing op), or 1 or 500 post IDs per run (detail / comments ops).
  • 🏷 44 Typed Output Fields — Curated camelCase columns with consistent types, plus an extra blob for any upstream fields not yet mapped.
  • 🌍 Localization Ready — Optional geo (US/GB/IN/BR/DE/JP/KR/MX) and lang (en/es/pt/hi/ja/ko) parameters for region-aware results.
  • 📊 HTML Run Report — Every run produces a clean HTML summary with row counts, post-type breakdown, and channel metadata — saved even on fatal errors.

🎬 Quick Start

Pick an operation, pass an ID, hit Run. That's it.

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~youtube-community-posts-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"channelCommunityPosts","channelIds":"@MKBHD","maxPages":3}'

🚀 Getting Started (3 Simple Steps)

Step 1: Pick your operation

  • 📝 Channel Community Posts — discover every recent post on a channel. Start here.
  • 🔍 Post Detail — enrich a known post ID with full metadata.
  • 💬 Post Comments — pull every comment on a post.

Step 2: Paste your IDs

  • For channelCommunityPosts: paste channel IDs (UC…), handles (@MKBHD), or full channel URLs — one per line.
  • For postDetail / postComments: paste post IDs (Ugkx…) or full post URLs — one per line.

Step 3: Run and collect

  • Hit Start — results stream to the Apify dataset as they arrive.
  • Export as JSON / CSV / Excel from the dataset view, or pull via API.
  • HTML run report is in the key-value store under report.html.

That's it! In under 60 seconds, you'll have:

  • Every community post on a channel, paginated and structured
  • Or a full comment thread on any post
  • Or a rich enriched record of any individual post

📥 Input Configuration

FieldTypeRequiredDescription
operationenumOne of channelCommunityPosts, postDetail, postComments
channelIdsstring (textarea)for listing opChannel IDs, handles, or URLs — one per line
postIdsstring (textarea)for detail/commentsPost IDs (Ugkx…) or post URLs — one per line
maxPagesintegeroptionalPages per channel / per post (1–25, default 3). Ignored for postDetail.
geostringoptionalTwo-letter country code (default US)
langstringoptionalTwo-letter language code (default en)

Example — Channel Community Posts:

{
"operation": "channelCommunityPosts",
"channelIds": "UCBJycsmduvYEL83R_U4JriQ\n@MrBeast\nhttps://www.youtube.com/@LofiGirl",
"maxPages": 3
}

Example — Post Detail (single-row enrichment):

{
"operation": "postDetail",
"postIds": "UgkxX6gkDxQ0KRucvyG7NLui0LhjHp0CLlfZ\nUgkxoALLVbJBCAlPjcXE3bcrv8PCAuBYQbc9"
}

Example — Post Comments:

{
"operation": "postComments",
"postIds": "UgkxX6gkDxQ0KRucvyG7NLui0LhjHp0CLlfZ",
"maxPages": 5
}

📤 Output

Results stream to the Apify dataset with 44 typed fields including (most valuable shown):

FieldTypeDescription
postIdstringCanonical community-post ID (Ugkx…)
postPageUrlstringCanonical URL https://www.youtube.com/post/{postId}
postTypestringtext, image, multi_image, shared_video, poll, or unknown
contentTextstringBody text of the post
voteCountintegerParsed integer vote/like count
replyCountintegerParsed integer reply count on the post
pollChoicesarrayPoll choice texts (poll posts only)
pollTotalVotesintegerParsed total vote count (poll posts)
imageUrlsarrayBest-resolution image URLs (image / multi_image posts)
sharedVideoIdstringShared video ID (shared_video posts)
sharedVideoTitlestringTitle of the shared video
commentsContinuationTokenstring(postDetail) Continuation token to fetch comments without re-querying
authorChannelHandlestringAuthor handle (e.g. @MKBHD)
publishedAtstringISO 8601 publish timestamp
channelTitlestringDisplay name of the channel
channelSubscriberCountTextstringSubscriber count from upstream meta
commentIdstring(postComments) Canonical comment ID
textDisplaystring(postComments) Comment text body
likesCountinteger(postComments) Parsed like count on the comment
authorIsChannelOwnerboolean(postComments) True iff comment author owns the host channel

Example — Poll post row:

{
"postId": "UgkxzXI5yqUI81XAwGFCCpcmqyk8Tmya93v4",
"postPageUrl": "https://www.youtube.com/post/UgkxzXI5yqUI81XAwGFCCpcmqyk8Tmya93v4",
"postType": "poll",
"contentText": "Current study status? 🧐",
"authorChannelId": "UCSJ4gkVC6NrvII8umztf0Ow",
"authorText": "Lofi Girl",
"authorChannelHandle": "@LofiGirl",
"voteCount": 1600,
"voteCountText": "1.6K",
"replyCount": 424,
"pollChoices": ["📖 High School", "🎓 University /College", "🎉 Already Graduated"],
"pollTotalVotesText": "42K votes",
"pollTotalVotes": 42000,
"channelTitle": "Lofi Girl",
"channelSubscriberCountText": "15.7M",
"publishedAt": "2026-05-15T00:00:00Z",
"publishedTimeText": "6 days ago",
"status": "success",
"_operation": "channelCommunityPosts"
}

💼 Use Cases & Examples

1. Creator-Management Agency — Talent Engagement Tracking

Track every community post across a 30-channel talent roster, once a week.

Input: A list of 30+ channel IDs in a single channelCommunityPosts run. Output: Every recent community post per channel — text, polls, image carousels, shared videos — with structured vote/reply counts. Use: Benchmark talent-level engagement and identify channels where community posts outperform regular uploads.

2. Brand-Sentiment Researcher — Pre-Sponsorship Poll Aggregation

Pull a creator's community-tab poll history before signing a sponsorship deal.

Input: Channel ID of the creator under consideration. Output: Every poll that creator has posted, with choices + total votes. Use: Data-back your sponsorship decision with real audience-preference signals instead of vanity metrics.

3. AI Training Data Engineer — Long-Form Creator Text + Structured Polls

Bulk-collect community posts across hundreds of channels for model training pipelines.

Input: A list of channel IDs filtered by your training-set definition. Output: Long-form text content + poll-choice arrays as a structured corpus. Use: Train models on creator-audience interaction patterns or fine-tune sentiment classifiers on engagement-rich text.

Aggregate poll choices across competing creators to detect emerging audience preferences.

Input: Vertical-defined channel list run as channelCommunityPosts, then postDetail on the polls. Output: Normalized poll-result data feeding into your existing trend-detection pipeline. Use: Spot rising preferences before they hit mainstream metrics dashboards.

5. Academic Researcher — Creator-Audience Interaction Dynamics

Study how creators interact with their audience through posts → comment threads.

Input: Channel IDs in channelCommunityPosts, then postComments per discovered postId. Output: Full post → comment graph including reply counts, like counts, and channel-owner reply flags. Use: Sociolinguistic studies, engagement-pattern research, parasocial-bond analysis.


🔗 Integration Examples

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/youtube-community-posts-scraper').call({
operation: 'channelCommunityPosts',
channelIds: 'UCBJycsmduvYEL83R_U4JriQ\n@MrBeast',
maxPages: 3,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const polls = items.filter(r => r.postType === 'poll');
console.log(`Pulled ${items.length} posts, ${polls.length} polls`);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/youtube-community-posts-scraper').call(
run_input={
'operation': 'channelCommunityPosts',
'channelIds': 'UCBJycsmduvYEL83R_U4JriQ',
'maxPages': 3,
}
)
for row in client.dataset(run['defaultDatasetId']).iterate_items():
if row.get('postType') == 'poll':
print(row['contentText'], row['pollChoices'], row['pollTotalVotes'])

cURL

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~youtube-community-posts-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"postComments","postIds":"UgkxX6gkDxQ0KRucvyG7NLui0LhjHp0CLlfZ","maxPages":5}'

Automation Workflows (n8n / Zapier / Make)

  1. Trigger: Schedule (e.g. daily at 09:00) or webhook
  2. HTTP Request: POST to https://api.apify.com/v2/acts/sian.agency~youtube-community-posts-scraper/runs?token=YOUR_TOKEN
  3. Wait for run: Poll /v2/actor-runs/{runId} until status = SUCCEEDED
  4. Process: Fetch dataset items via /v2/datasets/{datasetId}/items
  5. Action: Filter by postType, push to Slack / CRM / data warehouse

📊 Performance & Pricing

Pay-per-event (PPE) pricing — billed per row delivered, never per failed attempt.

Live event prices

EventFREEBRONZESILVERGOLD / PLATINUM / DIAMOND
apify-actor-start (one-time, after input validates)$0.020$0.002$0.002$0.002
community-post-row ⭐ headline$0.015$0.005$0.00375$0.0025
post-detail-result (premium single-row)$0.024$0.008$0.006$0.004
post-comment-row$0.015$0.005$0.00375$0.0025

Cost estimator examples

ScenarioRowsCost (BRONZE)
1 channel × 30 community posts30$0.150
30 channels × 30 community posts (agency weekly)900$4.502
1 post × full comment thread (avg 200 comments)200$1.002
100 post details enriched100$0.802

💸 Best price-per-quality on the market — comprehensive multi-op tooling at single-op pricing.

🔗 View current pricing


❓ Frequently Asked Questions

Q: How is this different from other YouTube community-post scrapers? A: We ship all three operations in one actor — channel feed listing, post detail enrichment, and comment threads. Every competitor ships only the listing op; you'd need to chain 3 separate scrapers to get the same coverage. Plus we parse polls into structured fields, unwrap multi-image carousels, and resolve handle URLs automatically.

Q: Are polls fully structured? A: Yes — pollChoices is a JavaScript array of choice strings, pollTotalVotes is a parsed integer, pollTotalVotesText preserves the raw display string (e.g. "42K votes"). No other community-posts actor surfaces this level of structure.

Q: What if a channel has no community tab? A: The run completes successfully with zero post rows plus an HTML summary noting the empty result. You're not charged per-row for empty channels — only apify-actor-start fires.

Q: Can I paste a YouTube handle like @MKBHD instead of a UC… ID? A: Yes. Handles, custom URLs, and /channel/UC… URLs are all accepted. The actor calls the YouTube resolver one extra time per channel — at no extra charge.

Q: How do I chain post-detail into comments without paying twice? A: Every postDetail row carries a commentsContinuationToken field. Pass that token into your downstream comments workflow and skip the initial fetch — one fewer upstream call per post.

Q: How accurate are the parsed counts (votes, replies, likes)? A: We parse upstream text strings like "11K", "1.7M", "244" into integers using a deterministic rule (multiplier × base × K|M|B|none). Both the raw text (e.g. voteCountText) and the parsed integer (e.g. voteCount) are returned so you can verify the parse.

Q: What output formats are available? A: JSON, CSV, Excel — all available from the Apify dataset view. The HTML run summary is saved separately in the key-value store under report.html.

Q: Does this work with restricted or deleted posts? A: Restricted / deleted posts return an error row with a human-readable errorMessage field. Error rows are saved to the dataset for traceability but are not charged.

Q: Is this legal? A: We only extract publicly accessible community-tab data. See the "Is it legal to scrape data?" section below for a full GDPR primer.

Q: How fast is it? A: ~1–5 seconds per page (10 posts) for the listing op. ~3 seconds per postDetail enrichment. ~5 seconds per page (20 comments) for the comments op.

YouTube® is a trademark of Google LLC. This actor is an independent scraping tool. It is not affiliated with, endorsed by, or sponsored by Google LLC or YouTube.


🐛 Troubleshooting

"Could not resolve {input} to a canonical YouTube channel ID"

  • Make sure you're pasting a real UC… channel ID, a channel URL, or a handle URL (e.g. https://www.youtube.com/@MKBHD).
  • Bare strings like MKBHD (without @) won't resolve — use the handle URL or the canonical ID instead.

Channel returns 0 posts

  • Verify the channel actually has a community tab. Some brands (e.g. Apple) don't.
  • If the channel uses the community tab but returns 0, try opening the channel manually at youtube.com/channel/{UC…}/community — if the tab is empty there, our result is correct.

Post returns "Post not found"

  • The post ID may have been deleted or the channel may have removed the post.
  • Check the post still exists at https://www.youtube.com/post/{postId} — if it 404s, it's gone.

Pagination stops earlier than expected

  • YouTube only paginates as far as it has data — older posts roll off the index over time.
  • For channels with rich history, increase maxPages (cap is 25). For very-active channels, lower maxPages to cap cost.

Comment thread returns fewer comments than expected

  • YouTube hides spam and low-quality replies — the upstream excludes those.
  • replyCount on the parent post is the upstream's total; what you receive is post-filtered.

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.


🤝 Support

Telegram Support

Join our active support community


Built by SIÁN Agency | More Tools