# YouTube Community Posts Scraper - Polls, Images & Text Posts (`seemuapps/youtube-community-posts-scraper`) Actor

Scrape YouTube community posts from any channel's Posts tab - text, images, polls with vote counts, attached videos, links, likes and comment counts - export to JSON or CSV.

- **URL**: https://apify.com/seemuapps/youtube-community-posts-scraper.md
- **Developed by:** [Andrew](https://apify.com/seemuapps) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 community posts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## YouTube Community Posts Scraper - Polls, Images & Text Posts

Scrape the **Posts** (Community) tab of any YouTube channel - text updates, single and multi-image posts, polls with vote totals, attached videos and quizzes - with like counts, comment counts, links and hashtags for every post. No login, no cookies, no YouTube API needed (the official API does not expose community posts at all).

Enter channel handles or URLs and get one clean row per post, newest first, ready for JSON, CSV, Excel or Google Sheets.

### What you get

For every community post:

- **postId**, **postUrl**, **publishedText** ("11 days ago"), **position**
- **text** - the full post body, plus **links** (unwrapped from YouTube redirects) and **hashtags**
- **attachmentType** - `none`, `image`, `images`, `video`, `poll` or `quiz`
- **imageUrls** - full-resolution image links for image posts
- **video** - videoId, url, title, channel, views, duration and thumbnail for shared videos
- **poll** - every choice, choice images, poll type and **totalVotes**
- **quiz** - question and choices
- **likeCount**, **commentCount**, **isSharedPost**
- **channelId**, **channelName**, **channelHandle**, **channelUrl**

### Use cases

- **Brand and creator monitoring** - track announcements, giveaways and polls from channels you follow
- **Audience research** - poll results reveal what a creator's community actually wants
- **Competitor analysis** - see how often rivals post, what formats they use and what gets engagement
- **Sponsorship and campaign tracking** - catch promo links and codes posted outside of videos
- **Content ideation** - mine high-engagement posts and poll questions for your own community
- **Archiving** - keep a searchable record of a channel's community history

### How to use

1. Enter one or more **Channels** - `@handle`, a channel URL (including `/posts` or `/community` links) or a `UC...` channel ID.
2. Set **Max posts per channel** (default 50, `0` for every post).
3. Run the actor - posts stream into the **Dataset** tab, newest first.

### Output format

```json
{
  "postId": "UgkxZusu9I1Z-VuU5PGZNA2gclHi8V9CJVZk",
  "postUrl": "https://www.youtube.com/post/UgkxZusu9I1Z-VuU5PGZNA2gclHi8V9CJVZk",
  "channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
  "channelName": "MrBeast",
  "channelHandle": "@MrBeast",
  "channelUrl": "https://www.youtube.com/@MrBeast",
  "publishedText": "1 month ago",
  "text": "Would you rather stop aging for 100 years or receive 1 billion dollars right now?",
  "links": [],
  "hashtags": [],
  "attachmentType": "poll",
  "imageUrls": [],
  "video": null,
  "poll": {
    "type": "POLL_TYPE_TEXT",
    "totalVotes": 1700000,
    "totalVotesText": "1.7M votes",
    "choices": [
      { "text": "100 Years Of No Aging", "imageUrl": null },
      { "text": "1 Billion Dollars", "imageUrl": null }
    ]
  },
  "quiz": null,
  "likeCount": 101023,
  "commentCount": 10000,
  "isSharedPost": false,
  "position": 5
}
```

### Pricing

You pay a small fixed amount per post returned. Channels without a Posts tab cost nothing.

### Tips

- Like counts are exact; comment counts and poll totals above 1,000 are the rounded figures YouTube displays.
- Per-choice poll percentages are only shown to logged-in voters, so the output includes the choices and the overall vote total.
- Run on a schedule with a small **Max posts per channel** to catch new posts as they appear.
- If YouTube begins blocking requests from the default network, enable **Proxy configuration** with Apify Proxy.

### FAQ

**A channel returns no posts - why?**
Channels need to have posted at least once for YouTube to show a Posts tab. Very new or small channels may not have one.

**Can I get the comments under a post?**
Not in this actor - it captures the comment count. Post comment scraping may be added later.

**Does it include the channel's videos?**
Only videos that were shared as part of a community post. Use the YouTube Channel Videos Scraper for the full upload list.

# Actor input Schema

## `channels` (type: `array`):

YouTube channels to scrape, one per line. Accepts @handles, channel URLs (including /posts or /community links) or UC channel IDs. Up to 200 per run.

## `maxPostsPerChannel` (type: `integer`):

Newest posts to return from each channel. 0 = every post, up to 5,000 per channel.

## `country` (type: `string`):

Two-letter country code passed to YouTube, e.g. US, GB, AU.

## `language` (type: `string`):

Language code for YouTube's interface, e.g. en, de, pt-BR. Affects relative date text such as '2 weeks ago'.

## `proxyConfiguration` (type: `object`):

Optional. Leave off by default. Enable Apify Proxy only if YouTube starts blocking requests from the default network.

## Actor input object example

```json
{
  "channels": [
    "@MrBeast"
  ],
  "maxPostsPerChannel": 50,
  "country": "US",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One record per post: postId, postUrl, channelId, channelName, channelHandle, channelUrl, publishedText, text, links, hashtags, attachmentType (none/image/images/video/poll/quiz), imageUrls, video, poll (choices + totalVotes), quiz, likeCount, commentCount, isSharedPost, position.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "channels": [
        "@MrBeast"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/youtube-community-posts-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "channels": ["@MrBeast"] }

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/youtube-community-posts-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "channels": [
    "@MrBeast"
  ]
}' |
apify call seemuapps/youtube-community-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seemuapps/youtube-community-posts-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lH6xitBBUfKDwLc8d/builds/7WxCdaRBZ2GFTcNbn/openapi.json
