YouTube Community Posts Scraper avatar

YouTube Community Posts Scraper

Pricing

from $5.00 / 1,000 community posts

Go to Apify Store
YouTube Community Posts Scraper

YouTube Community Posts Scraper

Scrape public YouTube Community posts from channel handles, channel URLs, channel IDs or post URLs, with text, media, likes, timestamps, linked videos and channel metadata. No cookies needed.

Pricing

from $5.00 / 1,000 community posts

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Share

What is YouTube Community Posts Scraper?

YouTube Community Posts Scraper turns public YouTube Community feeds into a clean dataset with one row per post. Give it channel URLs, @handles, UC... channel IDs or individual post URLs, and it returns each post's text, images, like count, publish time, channel identity and, when the post links a video, that video's title, views, length and thumbnail. Creator-partnership teams, brand monitors, media analysts and AI agents use it to track announcements, product teasers and polls as data, with no cookies, Google login or personal API key.

Why teams choose this Community posts scraper

  • Community posts as their own entity. Announcements, images and teasers that never appear in upload feeds become searchable rows.
  • Linked-video context. Posts that promote a video carry videoId, videoTitle, videoUrl, videoViewCount and videoLengthSeconds.
  • Flexible inputs. Mix channel URLs, @handles, UC... IDs and /post/... URLs in one run.
  • Clean deduplication. Every row carries a stable postId, and the same post is saved once even when several inputs reach it.
  • Spend you control. maxPosts caps billable posts across the whole run; maxPagesPerChannel bounds paging per channel.
  • Clear outcomes. Each run writes OUTPUT and RUN_SUMMARY with COMPLETE, PARTIAL, VALID_EMPTY or INVALID_INPUT so pipelines can branch.

Best fit for this Actor

  • Best fit for known channels or posts where you want Community content as structured data.
  • Designed for creator campaign tracking, competitor announcement monitoring and content research.
  • When you start from a topic instead of a channel list, start with YouTube Search Scraper, then pass its channelUrl or channelId values into channelUrls here.
  • When a post links a video and you want the audience reaction, then pass the videoUrl to YouTube Comments Scraper.

Example workflow: from a creator list to a campaign signal

A creator-partnership team follows thirty channels and knows that launches often start as Community posts. Each Monday the analyst starts a job with the thirty channel URLs, maxPosts at 100 and maxPagesPerChannel at 2. The dataset returns each post's content, imageUrls, publishedAt, likeCount and any linked videoUrl. The analyst filters content for the product name, stores postId as the deduplication key, compares likeCount across creators, then feeds the linked videos into the comments step to read audience reaction. A weekly schedule keeps the evidence log current.

Input

{
"channelUrls": [
"https://www.youtube.com/@MrBeast",
"@mkbhd",
"UC_x5XG1OV2P6uZZ5FSM9Ttw"
],
"postUrls": [],
"maxPosts": 50,
"maxPagesPerChannel": 2
}
FieldTypeWhat it controls
channelUrlsarray of stringsChannel URLs, @handles or exact UC... channel IDs.
postUrlsarray of stringsPublic Community post URLs in the https://www.youtube.com/post/... form.
maxPostsintegerTotal posts saved across the whole run. Default 20.
maxPagesPerChannelintegerFeed pages read per channel. Default 5.

Individual postUrls are processed before channel feeds, and numeric fields take numbers such as 10 rather than strings.

Output

FieldWhat it contains
postId, postUrlCommunity post identity and link
contentPost text
imageUrl, imageUrlsFirst image and every image on the post
likeCount, likeCountTextPublic like count as a number and as displayed
publishedAt, publishedTimeTextMachine-readable publish time and display text
channelId, channelName, channelHandle, channelUrlChannel identity
videoId, videoTitle, videoUrl, videoThumbnailUrlLinked video, when the post promotes one
videoViewCount, videoViewCountText, videoPublishedTimeText, videoLengthText, videoLengthSecondsLinked-video metrics
source, sourceEndpoint, scrapedAtData route used and collection time
{
"postId": "UgkxWw9Nf4Kb453wM6hA2d9pySxjBixo0fXT",
"postUrl": "https://www.youtube.com/post/UgkxWw9Nf4Kb453wM6hA2d9pySxjBixo0fXT",
"content": "How we made the Galaxy S23 Ultra Intro at @TheStudio!",
"imageUrl": null,
"imageUrls": [],
"likeCount": 2500,
"likeCountText": "2.5K",
"publishedAt": "2023-10-01T12:30:34.311Z",
"publishedTimeText": "3 years ago",
"channelId": "UCBJycsmduvYEL83R_U4JriQ",
"channelName": "Marques Brownlee",
"channelHandle": "mkbhd",
"channelUrl": "https://www.youtube.com/@mkbhd",
"videoId": "as_kxJn4Xwc",
"videoTitle": "Can an iPad Control Our Camera Robot?",
"videoUrl": "https://www.youtube.com/watch?v=as_kxJn4Xwc",
"videoThumbnailUrl": "https://i.ytimg.com/vi/as_kxJn4Xwc/hq720.jpg",
"videoViewCount": 188492,
"videoViewCountText": "188,492 views",
"videoPublishedTimeText": "3y ago",
"videoLengthText": "18:36",
"videoLengthSeconds": 1116,
"scrapedAt": "2026-10-01T12:30:34.735Z"
}

Each run also writes OUTPUT (outcome, counts and charged events) and RUN_SUMMARY (input counts, deduplication, paging state and stop reason) to the default key-value store.

Pricing

This Actor uses Pay per event plus Apify platform usage. The events are Actor Start (once per run, per allocated GB) and Community post (one per validated post saved to the dataset). For example, a run with maxPosts at 10 that fills its cap at the default memory is one start event plus 10 post events, plus the platform usage of the job; a valid request with no public posts is the start event only. The live Pricing tab on this page shows the current price of each event, and maxPosts is the strongest cost control.

API example

curl -X POST "https://api.apify.com/v2/acts/khadinakbar~youtube-community-posts-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"channelUrls": ["@TED"], "postUrls": [], "maxPosts": 10, "maxPagesPerChannel": 1}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("khadinakbar/youtube-community-posts-scraper").call(run_input={
"channelUrls": ["@TED"],
"postUrls": [],
"maxPosts": 10,
"maxPagesPerChannel": 1,
})
posts = list(client.dataset(run["defaultDatasetId"]).iterate_items(clean=True))
output = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("OUTPUT")
print(output["value"]["outcome"], len(posts))

Use with AI agents (MCP)

The Actor is available through Apify MCP as khadinakbar--youtube-community-posts-scraper for Claude, ChatGPT, Cursor and other MCP clients. Example prompt:

Collect up to 10 public Community posts from @TED with one page per channel. Return postId, postUrl, content, publishedAt, likeCount, imageUrls and videoUrl, and tell me the outcome.

The agent starts the Actor with small numeric limits, reads OUTPUT.outcome, then reads rows with get-dataset-items. Treat empty fields as unknown rather than zero, use postId for deduplication and scrapedAt for provenance. For cost and scope, keep maxPosts small on the first call and raise it once the rows look right.

Best results

Starting situationHelpful actionExpected outcome
First look at a channelmaxPosts 10 with maxPagesPerChannel 1A quick sample of the latest posts
Several channels in one jobRaise maxPosts, since the cap is sharedPosts from every channel in the list
A specific postUse its canonical /post/... URL in postUrlsOne enriched row for that post
Date-bounded reportingFilter on publishedAt after collectionClean reporting windows
Weekly monitoringSchedule and deduplicate on postIdOnly new posts added to your log

Works with public Community posts; members-only and login-only posts sit outside its public-data scope. Like counts and linked-video views are snapshots at scrapedAt.

Builder's note

I built this because creator launches increasingly start as Community posts, and those never show up in upload or search datasets. I designed maxPosts as a single cap across the whole job so spend is predictable no matter how many channels you add, and I kept linked-video fields on the same row so a post and the video it promotes travel together.

FAQ

Do I need cookies or a YouTube API key?

No. The Actor reads public Community data with no login or personal key.

Can I filter by date?

Collect a bounded recent feed, then filter on publishedAt. It is a reliable machine-readable timestamp for each post.

Why does a row have no images or no linked video?

Text-only posts have no images and many posts link no video, so those fields stay empty for that post.

Responsible use

This Actor collects public YouTube Community posts. Follow YouTube's terms and applicable privacy laws such as the GDPR and CCPA when you store or reuse creator content. YouTube is a trademark of Google LLC; this independent Actor is not affiliated with or endorsed by YouTube or Google.