# YouTube Community Post Scraper – Text & Attachments (`scrapingmonkey/youtube-post-details-scraper`) Actor

Extract public YouTube community posts by URL. Get text, authors, engagement, links, images, and available poll, quiz, video, or shared-post details in one row.

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

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

Collect the text, author, engagement, and attachments behind known YouTube community post links. **YouTube Community Post Scraper** keeps the post together in one row, including available image collections, polls, quizzes, video cards, or shared-post context.

Use it to review channel announcements, compare community content, or maintain a source-linked record of posts selected for research.

| At a glance | Details |
|---|---|
| 📥 Input | Full YouTube community post URLs |
| 📤 Output | Post text, author, counts, links, images, and available attachments |
| 🔐 Login required | No YouTube credentials or cookies |
| ⚡ Processing | Up to 5 requests concurrently with automatic retries |
| 💾 Delivery | One community post row per processed input |

### What the YouTube community post scraper extracts 🔎

The Actor retrieves the requested community post and its available public context. Each result can include:

- Post ID, URL, text, displayed publication time, and edit indicator
- Author identity, channel URL, handle, avatar variants, and verification
- Likes, comment count, available source labels, and membership indicators
- Text links, mentions, hashtags, and description links
- Image collections with thumbnail variants and any embedded video card
- Available poll choices and vote percentages, quiz choices, or a shared-post summary

### How to scrape YouTube community post details 🚀

1. Copy a full public YouTube community post URL.
2. Add it to `inputList` and include other post URLs if needed.
3. Start the Actor and review status, text, and attachment fields.
4. Export the results or collect comments using the same post links.

```json
{
  "inputList": [
    "https://www.youtube.com/post/UgkxOoOJQb2h2PnigPD6OnmPvt8Tpbd0wRhP"
  ]
}
```

### YouTube community post details data fields and output 📦

| Field group | Included data |
|---|---|
| Post | ID, URL, text, publication label, edit state, and engagement |
| Author | Channel identity, handle, URL, avatar variants, and verification |
| References | Links, mentions, hashtags, and description URLs |
| Attachments | Images, video-card details, poll or quiz fields, and shared-post context |

Complete illustrative success item. The content and values below are fictional examples, not a live result:

```json
{
  "input": "https://www.youtube.com/post/UgExampleTrailNotes",
  "status": "success",
  "id": "UgExampleTrailNotes",
  "url": "https://www.youtube.com/post/UgExampleTrailNotes",
  "type": "post",
  "text": "Two views from our weekend route. Route notes #Hiking",
  "links.text": [
    "Route notes"
  ],
  "links.url": [
    "https://example.com/trail"
  ],
  "mentions.channel_id": [],
  "mentions.name": [],
  "mentions.url": [],
  "published_text": "2 days ago",
  "is_edited": false,
  "likes": 42,
  "likes_text": "42",
  "comments_count": 18,
  "comments_text": "18 comments",
  "is_liked": null,
  "is_members_only": false,
  "attachment_type": "images",
  "image_url": "https://example.com/forest-path.jpg",
  "images.url": [
    "https://example.com/forest-path.jpg",
    "https://example.com/forest-viewpoint.jpg"
  ],
  "images.thumbnails.url": [
    [
      "https://example.com/forest-path-small.jpg",
      "https://example.com/forest-path.jpg"
    ],
    [
      "https://example.com/forest-viewpoint-small.jpg",
      "https://example.com/forest-viewpoint.jpg"
    ]
  ],
  "images.thumbnails.width": [
    [
      640,
      1280
    ],
    [
      640,
      1280
    ]
  ],
  "images.thumbnails.height": [
    [
      360,
      720
    ],
    [
      360,
      720
    ]
  ],
  "video.id": null,
  "video.url": null,
  "video.type": null,
  "video.title": null,
  "video.description": null,
  "video.thumbnail_url": null,
  "video.thumbnails.url": null,
  "video.thumbnails.width": null,
  "video.thumbnails.height": null,
  "video.duration_seconds": null,
  "video.duration_text": null,
  "video.views": null,
  "video.views_text": null,
  "video.published_text": null,
  "video.badges": null,
  "video.is_live": null,
  "video.is_upcoming": null,
  "video.is_premiere": null,
  "video.is_members_only": null,
  "video.stream_status": null,
  "video.scheduled_start_time": null,
  "video.accessibility_text": null,
  "video.author.id": null,
  "video.author.name": null,
  "video.author.handle": null,
  "video.author.url": null,
  "video.author.avatar_url": null,
  "video.author.avatar_thumbnails.url": null,
  "video.author.avatar_thumbnails.width": null,
  "video.author.avatar_thumbnails.height": null,
  "video.author.is_verified": null,
  "poll.choices.text": null,
  "poll.choices.votes_percent": null,
  "poll.choices.image_url": null,
  "poll.choices.thumbnails.url": null,
  "poll.choices.thumbnails.width": null,
  "poll.choices.thumbnails.height": null,
  "poll.choices.is_selected": null,
  "poll.total_votes": null,
  "poll.total_votes_text": null,
  "quiz.question": null,
  "quiz.choices.text": null,
  "quiz.choices.is_selected": null,
  "shared_post.id": null,
  "shared_post.url": null,
  "shared_post.type": null,
  "shared_post.text": null,
  "shared_post.links.text": null,
  "shared_post.links.url": null,
  "shared_post.mentions.channel_id": null,
  "shared_post.mentions.name": null,
  "shared_post.mentions.url": null,
  "shared_post.published_text": null,
  "shared_post.is_edited": null,
  "shared_post.likes": null,
  "shared_post.likes_text": null,
  "shared_post.comments_count": null,
  "shared_post.comments_text": null,
  "shared_post.is_liked": null,
  "shared_post.is_members_only": null,
  "shared_post.attachment_type": null,
  "shared_post.image_url": null,
  "shared_post.images.url": null,
  "shared_post.images.thumbnails.url": null,
  "shared_post.images.thumbnails.width": null,
  "shared_post.images.thumbnails.height": null,
  "shared_post.video.id": null,
  "shared_post.video.url": null,
  "shared_post.video.type": null,
  "shared_post.video.title": null,
  "shared_post.video.description": null,
  "shared_post.video.thumbnail_url": null,
  "shared_post.video.thumbnails.url": null,
  "shared_post.video.thumbnails.width": null,
  "shared_post.video.thumbnails.height": null,
  "shared_post.video.duration_seconds": null,
  "shared_post.video.duration_text": null,
  "shared_post.video.views": null,
  "shared_post.video.views_text": null,
  "shared_post.video.published_text": null,
  "shared_post.video.badges": null,
  "shared_post.video.is_live": null,
  "shared_post.video.is_upcoming": null,
  "shared_post.video.is_premiere": null,
  "shared_post.video.is_members_only": null,
  "shared_post.video.stream_status": null,
  "shared_post.video.scheduled_start_time": null,
  "shared_post.video.accessibility_text": null,
  "shared_post.video.author.id": null,
  "shared_post.video.author.name": null,
  "shared_post.video.author.handle": null,
  "shared_post.video.author.url": null,
  "shared_post.video.author.avatar_url": null,
  "shared_post.video.author.avatar_thumbnails.url": null,
  "shared_post.video.author.avatar_thumbnails.width": null,
  "shared_post.video.author.avatar_thumbnails.height": null,
  "shared_post.video.author.is_verified": null,
  "shared_post.poll.choices.text": null,
  "shared_post.poll.choices.votes_percent": null,
  "shared_post.poll.choices.image_url": null,
  "shared_post.poll.choices.thumbnails.url": null,
  "shared_post.poll.choices.thumbnails.width": null,
  "shared_post.poll.choices.thumbnails.height": null,
  "shared_post.poll.choices.is_selected": null,
  "shared_post.poll.total_votes": null,
  "shared_post.poll.total_votes_text": null,
  "shared_post.quiz.question": null,
  "shared_post.quiz.choices.text": null,
  "shared_post.quiz.choices.is_selected": null,
  "shared_post.author.id": null,
  "shared_post.author.name": null,
  "shared_post.author.handle": null,
  "shared_post.author.url": null,
  "shared_post.author.avatar_url": null,
  "shared_post.author.avatar_thumbnails.url": null,
  "shared_post.author.avatar_thumbnails.width": null,
  "shared_post.author.avatar_thumbnails.height": null,
  "shared_post.author.is_verified": null,
  "shared_post.description_links": null,
  "shared_post.hashtags": null,
  "author.id": "UCaaaaaaaaaaaaaaaaaaaaaa",
  "author.name": "Trail Journal",
  "author.handle": "@trailjournal",
  "author.url": "https://www.youtube.com/@trailjournal",
  "author.avatar_url": "https://example.com/trail-avatar.jpg",
  "author.avatar_thumbnails.url": [
    "https://example.com/trail-avatar-small.jpg",
    "https://example.com/trail-avatar.jpg"
  ],
  "author.avatar_thumbnails.width": [
    80,
    160
  ],
  "author.avatar_thumbnails.height": [
    80,
    160
  ],
  "author.is_verified": false,
  "description_links": [],
  "hashtags": [
    "#Hiking"
  ],
  "shared_post.shared_post": null
}
```

The table and JSON share literal dotted keys, keeping one result per post. The example shows an image post; poll, quiz, video, and shared-post fields are null because those attachments are absent. Image columns align by position, with nested lists for each image's thumbnail variants. Shared-post data is limited to the embedded summary.

Missing optional fields can be `null`, empty strings, or empty lists. Some flags default to `false` when no signal is present. A failed row retains `input`, sets `status` to `failed`, and leaves the result-data fields null.

### Input requirements and coverage ⚙️

| Parameter | Type | Default | Rules |
|---|---|---|---|
| `inputList` | array of strings | Required | At least one full /post/ URL or supported legacy channel /community URL containing lb. |

Use a full `youtube.com/post/…` URL or a supported channel /community link containing the `lb` post parameter. Both forms resolve to a canonical /post/ URL. Bare post IDs, video links, and channel pages without a specific post are not accepted.

This Actor looks up known posts without paginating a channel feed or collecting comment text. It may make an additional request to obtain an otherwise missing comment count; that does not create a separate dataset row.

Repeated input entries are processed separately, even when they refer to the same target. Remove duplicate entries before the run if you want to avoid repeated results.

### YouTube community post use cases 🎯

#### Channel announcement research

Keep announcements with author context, public counts, and the original source URL for a research timeline.

#### Community creative review

Compare text, image sequences, and available attachment types across selected posts.

#### Poll and quiz reference records

Preserve the choices and displayed results exposed in accessible posts without treating them as individual voter data.

#### Content catalogues

Index selected posts and media references in a common dataset while retaining their links and channel attribution.

### Pricing and billable post rows 💰

Check the Actor's **Pricing** tab for the current charging model and rate.

Under dataset-item pricing, each saved success or failed row can be billable. Automatic retries do not independently create extra rows. Repeated input entries can produce repeated billable results.

Images, poll or quiz choices, embedded video cards, and shared-post summaries stay inside the post row. Requests used to obtain a comment total do not independently add result rows.

### YouTube Post Details Scraper API and integrations 🔌

Use the Actor ID from the **API** tab as `$ACTOR_ID` and your Apify token as `$APIFY_TOKEN`.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["https://www.youtube.com/post/UgkxOoOJQb2h2PnigPD6OnmPvt8Tpbd0wRhP"]}'
```

This request starts a run. Retrieve the default dataset after completion, or use schedules and webhooks to connect it to a recurring workflow. Export JSON, CSV, or Excel, or send selected fields to Google Sheets, Make, Zapier, or your own application.

### Reliability and limits ⚠️

Temporary request failures are retried. Invalid or unavailable targets produce failed rows while other inputs can continue. If a required collection step cannot be completed, the target can fail even when some public information is visible in a browser.

A response must contain the requested post ID. Removed, restricted, or inaccessible posts can fail. A required request for a missing comment count can also fail the target.

Publication times are returned as displayed text, which may be relative. Counts may be derived from rounded labels. Optional attachments can be missing, and image URLs may expire. Shared content is limited to the summary embedded in the requested post; it is not recursively collected.

### Frequently asked questions ❓

#### Can I submit an old channel community link?

Yes, when it contains the `lb` parameter identifying a specific post.

#### Does it return the comments?

It returns an available comment count, not comment text. Use YouTube Post Comments Scraper for the discussion.

#### Will each attached image become a row?

No. Images and their thumbnail variants remain aligned lists in the post row.

#### Does it identify who voted in a poll?

No. It returns available choice text, displayed percentages, and vote totals, not voter identities.

#### Are shared posts fetched recursively?

No. The Actor includes the available embedded shared-post summary and does not follow a chain of shared posts.

#### Why are many attachment fields null?

A post usually contains only one attachment format, and YouTube may omit optional details. Null fields keep the same schema across different posts.

### Support, responsible use, and related actors 🛟

For a reproducible issue, share the run ID, a safe public input, and the field or behavior you expected through the Actor's support channel. Keep tokens and other credentials out of support messages.

Use public content in accordance with applicable privacy, copyright, contractual, and platform requirements.

# Actor input Schema

## `inputList` (type: `array`):

Add full YouTube community post URLs in /post/ format or legacy channel /community links containing lb. Raw post IDs are not accepted.

## Actor input object example

```json
{
  "inputList": [
    "https://www.youtube.com/post/UgkxOoOJQb2h2PnigPD6OnmPvt8Tpbd0wRhP"
  ]
}
```

# Actor output Schema

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

Success and failed rows. Check the status column.

# 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 = {
    "inputList": [
        "https://www.youtube.com/post/UgkxOoOJQb2h2PnigPD6OnmPvt8Tpbd0wRhP"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/youtube-post-details-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 = { "inputList": ["https://www.youtube.com/post/UgkxOoOJQb2h2PnigPD6OnmPvt8Tpbd0wRhP"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/youtube-post-details-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 '{
  "inputList": [
    "https://www.youtube.com/post/UgkxOoOJQb2h2PnigPD6OnmPvt8Tpbd0wRhP"
  ]
}' |
apify call scrapingmonkey/youtube-post-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/youtube-post-details-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/UfdLzCAzoH3vLgkWH/builds/Eziwmt9QUChbVAKGa/openapi.json
