Subreddit Posts Scraper avatar

Subreddit Posts Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Subreddit Posts Scraper

Subreddit Posts Scraper

Subreddit posts scraper for one community with new, top, hot, rising, or controversial sorting: 43 top-level fields per post covering engagement signals, flags, media, duplicate links, and optional nested comments. Inputs accept 1-1,000 posts and 0-2,000 comments per post. From $3 per 1,000 posts.

Pricing

from $3.00 / 1,000 results

Rating

5.0

(1)

Developer

AgentX

AgentX

Maintained by Community

Actor stats

3

Bookmarked

20

Total users

1

Monthly active users

5 days ago

Last modified

Share

Subreddit Posts Scraper is a subreddit posts scraper that exports one community's new, top, hot, rising, or controversial listing as 53-field post records with optional nested comments.

Apify Users Apify Runs price capability API + MCP ready

  • Five listing modes support current community monitoring and bounded comparative snapshots.
  • 53 top-level fields cover stable IDs, text, engagement, flags, media, polls, galleries, crossposts, duplicates, and provenance.
  • Optional nested comments preserve thread context without forcing comment work on every listing run.
  • Source-faithful media uses KVS URLs after successful saves and keeps public source URLs when saves fail.

The smallest FREE-tier run is one start plus one returned post with comments disabled: $0.01400.

Why Choose Subreddit Posts Scraper

One community, explicit listing semantics. Choose new, top, hot, rising, or controversial instead of mixing unrelated discovery modes.

Stable joins and rare post types. Community IDs, author IDs, crosspost lineage, polls, galleries, videos, and duplicate links are represented in the same row contract.

Comments remain deliberate. Leave max_comments at zero for fast post-only snapshots, then raise it only for posts whose discussion matters.

No Reddit client credentials. The Actor reads Reddit's public signed-out surface; users do not provide an API key or app registration.

Quick Start Guide

Use the minimum post-only workload for recurring liveness checks.

{
"community": "programming",
"sort_by": "new",
"max_posts": 1,
"max_comments": 0
}
  1. Enter one subreddit as a name, r/name path, or standard community URL.
  2. Choose the listing mode that matches the question.
  3. Keep comments at zero for the first run.
  4. Read the default Dataset and follow original URLs when context matters.

This prefill returns one post in a few seconds. Source contents and duration can change.

Input Parameters

All four fields are required, and the requested numeric values are preserved without artificial schema ceilings.

FieldTypeLimitsPrefillMeaning
communitystringValid Reddit community name/path/URLprogrammingCommunity whose listing is read.
sort_byenumnew, top, hot, rising, controversialnewReddit listing mode.
max_postsintegerMinimum 1; no schema maximum1Maximum posts requested.
max_commentsintegerMinimum 0; no schema maximum0Maximum visible comments requested per post; zero skips comments.

Reddit commonly stops one community listing near a thousand entries regardless of a larger request. This is source coverage, not an input validation cap or a promise. Query strings, fragments, user URLs, post URLs, malformed hosts, unsupported sort names, booleans, and values below the lower bounds are rejected.

Output Data Schema

Each Dataset row is one source post with 53 documented top-level fields. Optional values can be absent when Reddit does not expose them for that post type.

GroupFields
Communitysubreddit, subreddit_id, subreddit_type, subreddit_subscribers
Post and authorid, author, author_id, author_flair, created, edited, url, flair_text, title, body
Engagement and lineagescore, score_hidden, upvote_ratio, comment_count, crossposts, crosspost_id, crosspost_url, gilded, categories
Mediamedia_type, domain, thumbnail, images, gallery, media_url, video_url, video_duration, poll, is_self, is_video, is_gallery
State and distributionarchived, locked, stickied, pinned, over_18, spoiler, original, advertising, indexable, crosspostable, removed_by, distinguished, no_follow, ad_whitelist
Related recordsduplicates, comments
Provenanceprocessor, processed_at
{
"subreddit": "programming",
"id": "example-post",
"author": "example_author",
"url": "https://www.reddit.com/r/programming/comments/example-post/",
"title": "A practical guide to structured logging",
"score": 412,
"comment_count": 87,
"images": [],
"gallery": null,
"poll": null,
"duplicates": [],
"comments": []
}

An empty comment array means comments were disabled or none were returned. comments: null means comments could not be read or billed. Vote values are source-reported and can be fuzzed.

Integration Examples

The HTTP, Python, JavaScript, Make.com, n8n, and MCP examples all call agentx/subreddit-posts-scraper with the same one-post scenario. Keep tokens in secrets and bound charges.

Actor ID

ipw4MHKL6ZBj9pYeF

Also addressable by name as agentx/subreddit-posts-scraper — both forms work in the API, the SDKs, Make.com, and n8n.

HTTP

curl -X POST "https://api.apify.com/v2/acts/agentx~subreddit-posts-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
--data '{"community":"programming","sort_by":"new","max_posts":1,"max_comments":0}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("agentx/subreddit-posts-scraper").call(
run_input={
"community": "programming",
"sort_by": "new",
"max_posts": 1,
"max_comments": 0,
},
max_total_charge_usd=0.014,
)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())

JavaScript

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("agentx/subreddit-posts-scraper").call({
community: "programming",
sort_by: "new",
max_posts: 1,
max_comments: 0,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => console.log(item.title, item.score));

Make.com

  1. Add the module Run an Actor.
  2. Turn Map on, to the right of the Actor field.
  3. Paste the Actor ID ipw4MHKL6ZBj9pYeF into the Actor field.
  4. Click ⟳ Refresh to the left of Map.
  5. Edit Input JSON with community, sort_by, max_posts, and max_comments.
  6. Set Run synchronously to Yes.
  7. Add Get Dataset Items and select defaultDatasetId.

n8n

  1. Add Run an Actor and get dataset from the Apify node.
  2. Set ActorBy ID and paste ipw4MHKL6ZBj9pYeF.
  3. Edit Input JSON with community, sort_by, max_posts, and max_comments.

For MCP, follow the Apify MCP guide, load the current schema, and send the same four fields.

Pricing

The accepted pricing record switches the primary post event from Post to Result at 2026-08-17 12:15:06.759 UTC. Before that timestamp, use the live pricing page for the active Post event and price.

Scheduled eventFREEBRONZESILVERGOLD / PLATINUM / DIAMOND
Actor Start, minimum$0.01000$0.01000$0.01000$0.01000
Result, per post$0.00400$0.00360$0.00320$0.00300
Comment, per retained comment$0.00100$0.00090$0.00080$0.00075

After the scheduled cutover, one returned FREE-tier post with comments disabled costs $0.01400 at the minimum start charge. Empty or failed runs can still incur Actor Start. Confirm the live pricing page before production use.

Use Cases

  • Schedule new snapshots for public community monitoring.
  • Compare source-reported engagement across bounded top, hot, or rising samples.
  • Collect a small controversial set with comments for qualitative review.
  • Inventory linked domains, images, galleries, polls, and hosted videos.
  • Trace source crossposts and duplicate submissions through stable IDs and URLs.

The output supports research and operations; it does not verify authors, claims, influence, consensus, demographics, or intent.

Alternatives

Manual browsing works for a few posts but creates no stable Dataset or repeatable export. A search Actor is better when discovery starts from a keyword across communities. A profile Actor is better when the input is a known username. A community profile Actor is better for rules, settings, and subscriber metrics rather than post rows.

Use Reddit Viral Scraper for query discovery, Reddit Profile Scraper for one username, or SubReddit Info Scraper for community metadata.

Limits and Troubleshooting

  • Fewer posts than requested: Reddit listing coverage, community state, deletions, access, charging, and runtime can reduce output.
  • No posts: retry the minimal new input and confirm the community remains public and available.
  • Large comment workload: three concurrent 2,000-comment trees need the full 512 MiB the Actor runs at; lower memory cannot finish them.
  • Missing optional field: preserve absence rather than replacing it with a guess.
  • Media URL remains public: the save failed, so the source URL was retained instead of deleted.
  • Comments are null: source reading or billing failed; this differs from a confirmed empty array.
  • Charge cap reached: inspect current event prices before increasing maxTotalChargeUsd.

Trust and Reliability

Twenty communities across all five listing modes produced 1,700 publishable rows and 1,700 unique IDs. The broad sample reproduced 51 of 53 schema fields with zero runtime-only fields; targeted current posts reproduced video, poll, gallery, and crosspost structures.

Three posts returned 6,000 of 6,000 requested comments at 512 MiB. A 20-exit sweep produced four exits that completed all five business paths, while blocked exits were classified rather than parsed as data. Nineteen of 20 sampled media URLs downloaded successfully, and the failure path retained every original source URL.

Use this Actor only for lawful processing of public information. Respect Reddit's terms, privacy expectations, intellectual-property rights, and applicable data-protection rules. Do not use the output for spam, harassment, deanonymization, sensitive profiling, access-control evasion, or decisions requiring verified identity. Minimize retention and secure exports.

This independent Actor is not affiliated with, endorsed by, or sponsored by Reddit, Inc. Reddit and the Reddit logo are trademarks of Reddit, Inc.

Frequently Asked Questions

How do I scrape subreddit posts with comments?

Set the community and listing mode, choose a small max_posts, and raise max_comments above zero. Each post retains its nested visible comments when source reading and billing succeed.

Can I request more than 1,000 posts?

Yes. The input has no schema maximum, but Reddit normally stops one community listing near a thousand entries, so a larger request usually cannot create more source rows.

Is max_comments required?

Yes. Set it to zero for posts only; use a positive integer for bounded comment collection.

Are hot, top, and controversial complete rankings?

No. They are changeable Reddit listings, not exhaustive historical rankings or a configurable time-window query.

Why can comments be null instead of an empty array?

Null means the comments could not be read or charged. An empty array means comment collection was disabled or the source returned none.

How do I do a subreddit hot new top posts export?

Pick the listing in sort_byhot, new, top, rising, or controversial — and run once per mode. Each listing is its own ordering from Reddit, so exporting all of them means separate runs rather than one merged feed.

Do I need a Reddit API key?

No. Provide the four Actor inputs; do not send Reddit client credentials.

AgentX publishes 77 Actors — the three closest Reddit workflows first, then the full catalog by category.

Closest to this Actor:

Business and Market Intelligence

Jobs and Hiring

Social Media

Video, Transcripts and Downloads

E-Commerce and Retail

Classifieds and Automotive

Real Estate

Support and Community

Ask product questions in the AgentX community on Telegram. For a reproducible issue, include the run ID, exact input, expected behavior, and observed status, with tokens and personal information removed.

AgentX is an Arcyton brand — arcyton.com.

Last Updated: August 15, 2026