Reddit Scraper V1 — Subreddit Feeds, Posts, Comments (4) avatar

Reddit Scraper V1 — Subreddit Feeds, Posts, Comments (4)

Pricing

from $1.99 / 1,000 results

Go to Apify Store
Reddit Scraper V1 — Subreddit Feeds, Posts, Comments (4)

Reddit Scraper V1 — Subreddit Feeds, Posts, Comments (4)

Scrape Reddit posts and comments by URL or subreddit name. No Reddit account or OAuth required.

Pricing

from $1.99 / 1,000 results

Rating

5.0

(4)

Developer

Red Crawler

Red Crawler

Maintained by Community

Actor stats

3

Bookmarked

10

Total users

2

Monthly active users

16 days ago

Last modified

Share

Reddit Scraper — Subreddit Feeds, Posts, Comments

Endpoints Auth Proxy Pricing Cap

Scrape Reddit posts and comments by URL or subreddit name. Four self-contained endpoints — pull a subreddit's feed, a single post's full payload, a post's full comment tree, or a single comment's metadata. No Reddit account or proxy required.

Pick the endpoint, fill the matching section, hit Start.


Endpoints at a glance

#EndpointRecords returnedBest for
1Scrape Postsup to 1000 posts (subreddit feed)niche monitoring, daily snapshots, RSS-style feeds
2Post Detail1 record (one post)refreshing a single post, importing a thread
3Scrape Commentsup to 5000 (or uncapped)sentiment, archives, megathread research
4Comment Detail1 record (one comment)quoting, refreshing one comment

Every endpoint accepts URLs, prefixed fullnames, or raw IDs:

EntityExamples
posthttps://www.reddit.com/r/Wordpress/comments/1s4a4j6/ · t3_1s4a4j6 · 1s4a4j6
commenthttps://www.reddit.com/r/.../comment/lwbnv0t/ · t1_lwbnv0t · lwbnv0t
subredditAskReddit · r/AskReddit · /r/AskReddit · full subreddit URL

What you can fetch

1. Scrape Posts — subreddit feed

Pulls a subreddit's post feed and streams pages so records appear in the dataset within seconds. Pages are fetched in 100s and stitched together up to your limit.

Inputs

FieldTypeDefaultNotes
subredditstringAskRedditSubreddit name (without r/).
sortenumhotbest / hot / new / top / rising / controversial.
timeenum(none)Only used when sort is top / controversial. hourall.
limitint251 – 1000.

Returns per post — Reddit ID, fullname, title, body / selftext, author, subreddit, score, ups / downs / upvote ratio, comment count, crosspost count, created + edited timestamps, permalink, external URL, domain, post-type flags (is_self, is_video, over_18, spoiler, locked, stickied, pinned, archived), distinguished status, removal category, link & author flair, thumbnail, media (images / video / gallery), awards.

Use it when — niche monitoring, daily community snapshots, content syndication (r/programming hot → RSS), bulk research, competitor watching.

Example I/O

Input (Apify form):

{
"endpoint": "subreddit_posts",
"subreddit": "Wordpress",
"sort": "hot",
"limit": 3
}

Output (one dataset record per post; first record shown, truncated):

{
"endpoint": "subreddit_posts",
"id": "1r80vkz",
"name": "t3_1r80vkz",
"title": "Monthly AMA - Suggestions wanted!",
"author": "RealKenshino",
"author_fullname": "t2_6wkumqdb",
"subreddit": "Wordpress",
"subreddit_name_prefixed": "r/Wordpress",
"subreddit_id": "t5_2qhjq",
"score": 29,
"ups": 29,
"downs": 0,
"upvote_ratio": 1.0,
"num_comments": 12,
"num_crossposts": 0,
"created_utc": 1771415293.0,
"edited": false,
"permalink": "https://reddit.com/r/Wordpress/comments/1r80vkz/monthly_ama_suggestions_wanted/",
"url": "https://www.reddit.com/r/Wordpress/comments/1r80vkz/monthly_ama_suggestions_wanted/",
"domain": "self.Wordpress",
"is_self": true,
"is_video": false,
"over_18": false,
"locked": false,
"stickied": true,
"archived": false,
"distinguished": "moderator",
"author_flair_text": "WordPress.org Volunteer",
"selftext": "We're launching a monthly AMA series featuring people from across the WordPress ecosystem...",
"thumbnail": "self",
"total_awards_received": 0,
"...": "..."
}

2. Post Detail

Full payload of a single post.

Inputs

FieldTypeNotes
poststringURL, t3_ fullname, or raw ID.

Returns — same rich post record as Scrape Posts.

Use it when — single-post deep dive, refreshing one record after an edit, importing a single thread.

Example I/O

Input (Apify form):

{
"endpoint": "post_detail",
"post_detail_url": "https://www.reddit.com/r/Wordpress/comments/1s4a4j6/"
}

Output (one dataset record; post holds the full Reddit payload, truncated):

{
"endpoint": "post_detail",
"post": {
"id": "1s4a4j6",
"name": "t3_1s4a4j6",
"title": "Serious question: which group smokes more crack?",
"author": "evanmac42",
"author_fullname": "t2_ebufp",
"subreddit": "Wordpress",
"subreddit_name_prefixed": "r/Wordpress",
"subreddit_id": "t5_2qhjq",
"score": 87,
"ups": 87,
"upvote_ratio": 0.92,
"num_comments": 41,
"created_utc": 1774538392.0,
"permalink": "/r/Wordpress/comments/1s4a4j6/serious_question_which_group_smokes_more_crack/",
"url": "https://www.reddit.com/r/Wordpress/comments/1s4a4j6/serious_question_which_group_smokes_more_crack/",
"domain": "self.Wordpress",
"is_self": true,
"is_video": false,
"over_18": false,
"locked": false,
"stickied": false,
"selftext": "MS - The new features team at Microsoft\n\nOR\n\nWPBE - the wordpress team that creates new features...",
"link_flair_text": null,
"total_awards_received": 0,
"...": "..."
}
}

3. Scrape Comments — post comment tree

Comments under a single post, with control over how the tree is traversed.

Inputs

FieldTypeDefaultNotes
poststring(required)URL, t3_, or raw ID.
sortenumtopbest / top / new / controversial / old / qa.
modeenumcustomcustom (capped), top_level (top-level only), all (uncapped).
countint1001 – 5000. Used by custom mode.

Returns per comment — ID, fullname, parent post / parent comment IDs, author, body (markdown + HTML), score / ups / downs / controversiality, created + edited timestamps, permalink, OP flag (is_submitter), depth, stickied / distinguished / locked / archived / score-hidden flags, subreddit, awards.

Use it when — sentiment analysis, comment archives, support-ticket mining, debate / megathread research, training data.

Example I/O

Input (Apify form):

{
"endpoint": "post_comments",
"comments_post_url": "https://www.reddit.com/r/Wordpress/comments/1s4a4j6/",
"comments_num": 3,
"comment_sort": "top",
"comment_mode": "custom"
}

Output (one dataset record per comment; first record shown, truncated):

{
"endpoint": "post_comments",
"id": "ocls9cs",
"name": "t1_ocls9cs",
"parent_id": "t3_1s4a4j6",
"link_id": "t3_1s4a4j6",
"author": "evanmac42",
"author_fullname": "t2_ebufp",
"body": "Microsoft experiments on users.\n\nWordPress experiments on developers.\n\nPick your poison.",
"body_html": "<div class=\"md\"><p>Microsoft experiments on users.</p>\n\n<p>WordPress experiments on developers.</p>\n\n<p>Pick your poison.</p>\n</div>",
"score": 46,
"ups": 46,
"downs": 0,
"controversiality": 0,
"created_utc": 1774541569.0,
"edited": false,
"permalink": "https://reddit.com/r/Wordpress/comments/1s4a4j6/serious_question_which_group_smokes_more_crack/ocls9cs/",
"is_submitter": false,
"depth": 0,
"stickied": false,
"distinguished": null,
"score_hidden": false,
"locked": false,
"archived": false,
"gilded": 0,
"subreddit": "Wordpress",
"subreddit_name_prefixed": "r/Wordpress",
"subreddit_id": "t5_2qhjq",
"total_awards_received": 0,
"all_awardings": [],
"...": "..."
}

4. Comment Detail

Full payload of a single comment.

Inputs

FieldTypeNotes
commentstringURL, t1_ fullname, or raw ID.

Returns — same rich comment record as Scrape Comments.

Use it when — pulling a quoted comment, refreshing one record after edits, citation tooling.

Example I/O

Input (Apify form):

{
"endpoint": "comment_detail",
"comment_url": "https://www.reddit.com/r/Wordpress/comments/1s4a4j6/comment/ocls9cs/"
}

Output (one dataset record; comment holds the full Reddit payload, truncated):

{
"endpoint": "comment_detail",
"comment": {
"id": "ocls9cs",
"name": "t1_ocls9cs",
"parent_id": "t3_1s4a4j6",
"link_id": "t3_1s4a4j6",
"author": "evanmac42",
"author_fullname": "t2_ebufp",
"body": "Microsoft experiments on users.\n\nWordPress experiments on developers.\n\nPick your poison.",
"body_html": "<div class=\"md\"><p>Microsoft experiments on users.</p>\n\n<p>WordPress experiments on developers.</p>\n\n<p>Pick your poison.</p>\n</div>",
"score": 46,
"ups": 46,
"downs": 0,
"controversiality": 0,
"created_utc": 1774541569.0,
"edited": false,
"permalink": "/r/Wordpress/comments/1s4a4j6/serious_question_which_group_smokes_more_crack/ocls9cs/",
"is_submitter": false,
"depth": 0,
"stickied": false,
"score_hidden": false,
"locked": false,
"archived": false,
"subreddit": "Wordpress",
"subreddit_name_prefixed": "r/Wordpress",
"subreddit_id": "t5_2qhjq",
"total_awards_received": 0,
"...": "..."
}
}

How to run

  1. Pick an endpoint in the "What to fetch" dropdown.
  2. Open the matching section and fill its fields. Each section is independent — fields outside your chosen section are ignored.
  3. Click Start.

Default subreddit is AskReddit and default test post is the public WordPress post — the actor runs out of the box.


Output

Results are pushed to the actor's default dataset. View as a table or download as JSON / CSV / Excel / XML.

EndpointRows pushed
Scrape Postsup to limit posts
Post Detail1 record
Scrape Commentsup to count (or uncapped if mode=all)
Comment Detail1 record

Every record carries an endpoint field. Most useful columns (id, title, score, created, etc.) are placed first so the Table view is readable without scrolling.


Status & error reference

Run status (Apify-side, shown on the run page)

StatusApify messageMeaningWhat to do
Succeeded"Actor succeeded with N results in the dataset"Run finished. Some or zero records pushed.Open the dataset to view results.
Failed"The Actor process failed…"Validation error or upstream Reddit fault.Check the run log. You are NOT charged for failed runs.
Timed out"The Actor timed out. You can resurrect it with a longer timeout to continue where you left off."Run exceeded its timeout.Re-run with a smaller limit or fewer inputs.
Aborted"The Actor process was aborted. You can resurrect it to continue where you left off."You stopped the run manually.No charge for unpushed results.

Common in-run conditions (visible in run log)

ConditionCauseResult
Empty result setSubreddit empty / banned / private.Run SUCCEEDED, 0 records, no charge.
Subreddit feed capAsked for more than ~1000 posts.Run SUCCEEDED, capped at Reddit's pagination limit.
Removed post stubPost was removed; metadata still partial.Run SUCCEEDED, returns stub with removed_by_category.
qa sort fallbackqa sort outside QA-mode subs.Run SUCCEEDED, falls back to top.
Validation error: post requiredMissing post field on Detail / Comments.Run FAILED immediately, no charge.

Common edge cases

  • Removed / deleted posts return whatever metadata Reddit still exposes — often a stub with removed_by_category.
  • Private / quarantined subreddits return zero records.
  • Subreddit feed cap — Reddit caps subreddit feed pagination at ~1000 unique posts. Higher limit won't return more.
  • Comments all mode is uncapped — long threads (10k+ comments) hit Reddit's tree size limit before our cap.
  • Comment qa sort — only meaningful in QA-mode subreddits; falls back to top elsewhere.
  • NSFW content — fully supported; the over_18 flag tells you if a post is age-gated.

Why this actor is fast

  • Speed — 1–3 seconds per call, end-to-end. Pure HTTP to Reddit's API. No browser to boot, no Playwright / Selenium / Puppeteer overhead. Competing browser-based scrapers typically take 15–60 seconds per call.
  • Reliability — zero browser flakiness. No headless-Chromium crashes. No JS-render timeouts. No captcha pages. No surprise mid-run failures from a browser quirk.
  • Footprint — under 100 MB RAM per run. Most browser-based scrapers need 1–4 GB. Built for reliability behind the scenes — just paste your inputs and run.

Pricing

Pay-per-result. You're only charged for records actually pushed to the dataset.

OutcomeCharged?
SUCCEEDED with resultsYes — per record pushed.
SUCCEEDED with zero recordsNo.
FAILED (validation / upstream)No.
ABORTEDOnly for records already pushed before you stopped.

See the actor's Pricing tab for the current per-result rate.

EventTriggerPrice (per 1,000)
resultEach post / comment record pushed to the dataset$1.99

A 1000-post Scrape Posts run = 1000 rows. A 250-comment Scrape Comments run = 250 rows. A Post Detail or Comment Detail lookup = 1 row.


Need a different shape of data?


Support and feedback

Found a bug, want a feature, or hit a Reddit error code we don't translate clearly? Open an issue via the actor's Apify Console feedback link, or reach out at the RedCrawler support channel.


Reddit Scraper — Subreddit Feeds, Posts, Comments is part of the RedCrawler family of Reddit actors. RedCrawler is independent — not affiliated with, endorsed by, or sponsored by Reddit, Inc. Use it within Reddit's API terms.