YouTube Community Posts Scraper
Pricing
from $2.00 / 1,000 posts
YouTube Community Posts Scraper
Scrape YouTube community (posts) tab data by channel URL, @handle, or ID: post text, type, likes, comments, polls, images, and embedded videos. Optional comments, image download, and language detection.
Pricing
from $2.00 / 1,000 posts
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
YouTube Community Posts Scraper
Scrape the community posts tab of any YouTube channel by URL, @handle, or channel ID β post text, type, likes, comments, poll results, images, and embedded videos β with no YouTube API key and no quota limits.
| Feed up to 100 channels, get every community post (text, poll, image, video, or shared) with like and comment counts, filter by type, keyword, and date, and optionally pull post comments, download full-resolution images, and detect each post's language β ready for JSON, CSV, or Excel. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
Use the Apify actor "parsebird/youtube-community-posts-scraper" via the ApifyClient. Example (Python): from apify_client import ApifyClient; client = ApifyClient("<APIFY_TOKEN>"); run = client.actor("parsebird/youtube-community-posts-scraper").call(run_input={"urls": ["@mkbhd"], "maxPostsPerChannel": 50, "postTypes": "all", "includeComments": False, "downloadImages": False, "detectLanguage": False, "concurrency": 3}); items = list(client.dataset(run["defaultDatasetId"]).iterate_items()). Key inputs: urls (array of channel URLs, @handles, or UC... channel IDs, up to 100), maxPostsPerChannel (integer 1-200, default 50), postTypes ("all" | "text" | "poll" | "image" | "video"), keyword (case-insensitive text filter), dateFrom / dateTo ("YYYY-MM-DD", approximate), includeComments (bool) + maxCommentsPerPost (0-100, default 10), downloadImages (bool), detectLanguage (bool), concurrency (1-5, default 3), proxyConfig. Output fields per post: status, postId, postUrl, postType, channelName, channelId, channelUrl, text, publishedTimeText, likeCount, commentCount, pollChoices, pollTotalVotes, images, videoId, videoTitle, and (optional) comments, detectedLanguage. Full API spec: https://apify.com/parsebird/youtube-community-posts-scraper/api. Get an API token at https://console.apify.com/settings/integrations.
What is YouTube Community Posts Scraper?
YouTube Community Posts Scraper extracts every post from a channel's community tab (youtube.com/@channel/posts) β the text updates, polls, image drops, and video shout-outs creators publish between uploads. It reads the same public data the YouTube web player renders, so it works as a YouTube community posts API alternative: no Google Cloud project, no OAuth, no daily quota.
Add channels as full URLs, @handles (like @mkbhd), or bare channel IDs (UCBcRF18a7Qf58cCRy5xuWwQ). YouTube serves up to roughly 200 posts per channel.
What can YouTube Community Posts Scraper do?
- π Every post type β plain text, polls and quizzes (with choice labels and total votes), single and multi-image posts, posts linking a video or playlist, and shared posts.
- π Engagement metrics β exact like count and comment count for each post.
- π Filters β restrict to one post type, require a keyword in the post text, or limit to an approximate publish-date range.
- π¬ Post comments (optional paid add-on) β scrape up to 100 comments per post, embedded in the post's output row, with author, like count, reply count, and timestamp.
- πΌοΈ Image download (optional paid add-on) β save full-resolution images from image posts to the Apify Key-Value Store and get a direct download URL for each.
- π Language detection (optional paid add-on) β add a
detectedLanguagefield (e.g.eng,spa,kor) to every post. - β‘ Parallel channels β process up to 5 channels at once.
- βοΈ Runs on Apify β schedule recurring runs, call it from the API, connect it to integrations (Make, Zapier, n8n, Google Sheets, Slack), and export as JSON, CSV, Excel, or XML.
What data can you extract from YouTube community posts?
| Field | Description |
|---|---|
status | "Success", or an error message explaining what went wrong for that channel |
postId | Unique post identifier |
postUrl | Direct link to the post |
postType | text, poll, image, video, or shared |
channelName / channelId / channelUrl | Channel display name, ID, and URL |
text | Full post text, with shortened links expanded to their real destination |
publishedTimeText | Relative publish time as YouTube shows it (e.g. 2 days ago) |
likeCount | Number of likes on the post |
commentCount | Number of comments on the post |
pollChoices / pollTotalVotes | Poll or quiz options (and isCorrect for quizzes) and the total vote count |
images | Image URLs with width and height (image posts); adds storedKey and storedUrl when image download is on |
videoId / videoTitle | Embedded video (or playlist) ID and title |
comments | Array of comments on the post (when comment scraping is enabled) |
detectedLanguage | ISO 639-3 language code of the post text (when language detection is enabled) |
See the Output example below for the full record shape. Download results in JSON, CSV, Excel, or XML.
How to scrape YouTube community posts
- Click Try for free / Start to open the YouTube Community Posts Scraper.
- Add one or more channels to YouTube Channel URLs, @handles, or Channel IDs β for example
@mkbhdorhttps://www.youtube.com/@veritasium. - Set Max Posts Per Channel and, optionally, a Post Types, Keyword, or date filter.
- To also collect comments, turn on Include Post Comments and set Max Comments Per Post. To save images, turn on Download Images. To tag languages, turn on Detect Post Language.
- Keep the default Proxy Configuration (Apify Proxy).
- Press Start. Results stream into the dataset as they are collected.
- Open the Storage tab and export as JSON, CSV, Excel, or XML, or pull them from the API.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
urls | array | Yes | ["@mkbhd"] | Channel URLs, @handles, or UC... channel IDs. Up to 100. |
maxPostsPerChannel | integer | No | 50 | Max community posts per channel (1β200). |
postTypes | string | No | all | all, text, poll, image, or video. |
keyword | string | No | β | Only include posts whose text contains this (case-insensitive). |
dateFrom / dateTo | string | No | β | Approximate publish-date range, YYYY-MM-DD. |
includeComments | boolean | No | false | Scrape comments on each post (paid add-on). |
maxCommentsPerPost | integer | No | 10 | Max comments per post (0β100). |
downloadImages | boolean | No | false | Save full-resolution images to the Key-Value Store (paid add-on). |
detectLanguage | boolean | No | false | Add a detectedLanguage field (paid add-on). |
concurrency | integer | No | 3 | Channels processed in parallel (1β5). |
proxyConfig | object | No | Apify Proxy | Proxy settings for reaching YouTube. |
Input example
{"urls": ["@mkbhd"],"maxPostsPerChannel": 50,"postTypes": "all","includeComments": false,"maxCommentsPerPost": 10,"downloadImages": false,"detectLanguage": false,"concurrency": 3}
Output example
{"status": "Success","postId": "Ugkxa3BN5SFLT-KGgPZYyJlmsaR_vGGhu9ok","postUrl": "https://www.youtube.com/post/Ugkxa3BN5SFLT-KGgPZYyJlmsaR_vGGhu9ok","postType": "image","channelName": "Marques Brownlee","channelId": "UCBJycsmduvYEL83R_U4JriQ","channelUrl": "https://www.youtube.com/@mkbhd","text": "Introducing a new colorway and updated design: 251.1. Now in matte black.","publishedTimeText": "2 years ago","likeCount": 31614,"commentCount": 1300,"images": [{ "url": "https://yt3.ggpht.com/DRQFUxLpjmjn-SYaIqWGtXLcx-pD78rqnmhk-yhQEaOSMbQO=s0", "width": 5464, "height": 5464 }]}
A poll post:
{"status": "Success","postId": "Ugkxj6Q6RVlWHXsdOKX0nmi0LeLGZFSzoCxk","postType": "poll","channelName": "Veritasium","text": "What is the most used operating system in the world?","publishedTimeText": "1 year ago","likeCount": 5121,"commentCount": 1100,"pollChoices": [{ "text": "Windows", "isCorrect": false },{ "text": "MacOS", "isCorrect": false },{ "text": "Linux", "isCorrect": true }],"pollTotalVotes": "312K votes"}
Use cases
- π Creator and competitor monitoring β track how often channels post, which post types get the most engagement, and how sentiment shifts in the comments.
- π³οΈ Poll and quiz analysis β collect every poll a channel has run, with options and total votes.
- πΌοΈ Media archiving β download image drops and store them alongside their captions and metadata.
- π§ Audience research β pull post comments at scale for topic modelling, sentiment analysis, or feedback mining.
- π Multi-language tracking β tag each post's language to segment an international channel's output.
- π€ AI and RAG pipelines β feed structured community-post data to agents and LLM workflows via the Apify API or MCP.
How it works
- For each channel, the actor loads the public community posts page and reads the embedded post data.
- It pages through YouTube's own "load more" endpoint until
maxPostsPerChannelis reached or the channel runs out of posts. - Each post is normalized into a flat record; post-type filters, the keyword filter, and the approximate date range are applied as posts are read.
- When enabled, comments are fetched per post, images are downloaded to the Key-Value Store, and the post language is detected.
- Records stream into the dataset as they are collected, so partial results are always available.
How much does it cost to scrape YouTube community posts?
This actor uses pay-per-result pricing. Only the base post-scraped event fires on a standard run; the other three events fire only when you turn on the matching add-on.
| Event | What it covers | Price per 1,000 (Free) | Gold |
|---|---|---|---|
post-scraped | Each community post saved | $2.70 | $2.00 |
comment-scraped | Each comment (add-on) | $2.00 | $1.00 |
image-stored | Each image saved to storage (add-on) | $2.00 | $1.50 |
language-detected | Each post language identified (add-on) | $0.30 | $0.20 |
Example: 500 posts with no add-ons costs about $1.00β$1.35. The same 500 posts with 10 comments each adds roughly $10 for comments on the Free tier ($5 on paid tiers).
FAQ
Do I need a YouTube API key or a Google account? No. The actor reads YouTube's public community-post data. There is nothing to authenticate and no quota.
What channel formats are accepted?
@handles (@mkbhd), full channel URLs (https://www.youtube.com/@mkbhd, https://www.youtube.com/channel/UC...), and bare channel IDs starting with UC. Up to 100 per run.
How many posts can I get per channel?
YouTube serves roughly 200 community posts per channel. Set maxPostsPerChannel up to 200.
Why is date filtering "approximate"?
YouTube only exposes relative timestamps like "2 days ago" or "1 year ago", so dateFrom / dateTo are matched against an estimate derived from that text.
A channel returned a status message instead of posts.
That channel has no community tab (the feature is not enabled, or the channel is too small), the handle was wrong, or YouTube temporarily blocked the request. Other channels in the same run are unaffected.
Are poll vote percentages included?
YouTube only shows per-option percentages to signed-in voters. The actor returns each option's label, isCorrect for quizzes, and the total vote count (pollTotalVotes).
How does billing work for the add-ons? You are charged only when an enrichment succeeds β per comment scraped, per image actually stored, and per post whose language is detected (not when detection fails).
Can I schedule recurring runs? Yes. Use Apify Schedules to run the scraper daily or weekly and send results to integrations like Google Sheets, Make, Zapier, or a webhook.
How do I call it from code?
Python:
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("parsebird/youtube-community-posts-scraper").call(run_input={"urls": ["@mkbhd", "@veritasium"],"maxPostsPerChannel": 50,"postTypes": "all",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get("postType"), item.get("likeCount"), item.get("text", "")[:80])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<APIFY_TOKEN>' });const run = await client.actor('parsebird/youtube-community-posts-scraper').call({urls: ['@mkbhd', '@veritasium'],maxPostsPerChannel: 50,postTypes: 'all',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Something looks wrong or missing. Open an issue on the Issues tab with the input you used. Feedback is welcome and helps keep the YouTube Community Posts Scraper reliable.
Is it legal to scrape YouTube community posts?
Web scraping of publicly available data is legal in most jurisdictions, including the US and EU, when you do not collect private personal data or bypass authentication. This actor only reads public YouTube posts and public comments β no login. You are responsible for how you use the collected data, including compliance with YouTube's Terms of Service, applicable laws (GDPR, CCPA), and copyright. See Apify's guide to the legality of web scraping for background.
Related Apify actors
- YouTube Search Scraper β videos, channels, and playlists from YouTube search
- YouTube Channel Search Scraper β find and profile YouTube channels
- YouTube Live Chat Scraper β live and replay chat messages from streams
- YouTube Thumbnail Downloader β full-resolution thumbnails for any video
Browse the full ParseBird actor collection for more social and video scrapers.