Reddit Posts & Comments Scraper - Subreddits & Search avatar

Reddit Posts & Comments Scraper - Subreddits & Search

Pricing

from $0.90 / 1,000 post scrapes

Go to Apify Store
Reddit Posts & Comments Scraper - Subreddits & Search

Reddit Posts & Comments Scraper - Subreddits & Search

Reddit scraper for subreddit feeds, keyword search, user submissions and full comment threads. Returns score, upvote ratio, comment count, flair, awards and media URLs per post, with nested comment trees. No login, no API key, no rate-limit quota.

Pricing

from $0.90 / 1,000 post scrapes

Rating

0.0

(0)

Developer

Eimantas V

Eimantas V

Maintained by Community

Actor stats

0

Bookmarked

18

Total users

11

Monthly active users

3 days ago

Last modified

Categories

Share

Reddit Posts & Comments Scraper

Scrape Reddit posts and their comment threads from subreddits, keyword searches, user profiles and individual post links. No Reddit account, no API key, and none of the rate-limit quota the official API imposes.

One row per post, one row per comment, and a summary row per source that tells you exactly what was and was not collected.


What you get on every post

Engagementscore, upvote ratio, comment count, awards
Contenttitle, full self-text, post kind (text / link / image / gallery / video / poll)
Links & mediadestination URL, domain, and direct media URLs: the original image files and the highest-resolution video Reddit has, never a resized preview
Contextsubreddit, flair, NSFW, spoiler, pinned, locked, archived
Peopleauthor username plus Reddit's stable account id, which survives a rename
TimingUTC timestamp of posting
Moderationwhether the author posted with a moderator or admin badge

Upvote ratio is the field most Reddit exports leave out, and it is the one that separates a post everyone agreed with from a post that was fought over. Both can score 500.

Self-text comes as clean plain text: paragraphs, list items and code blocks are kept, and every link is written as [text](url), so no URL in a post is lost.

What you get on every comment

The comment text, author, score, nesting depth, its parent comment id, a direct permalink, and whether it was written by the person who made the post. Every comment row also carries the post id and post title, so it reads on its own without joining anything back together.

Comments come back in thread order: each top-level comment followed by its replies, so a parent always appears before its replies and the thread reconstructs as it reads on Reddit.


Four ways to point it at Reddit (mix them freely in one run)

Subreddits. programming, r/programming, or the full URL. Sort by hot, new, top, rising or controversial, over any timeframe from the past hour to all time.

Keyword search. Across all of Reddit, or restricted to subreddits you name. Reddit's own search operators work, including quoted phrases, OR, author:name and flair:"name".

Users. The posts on a person's profile, sorted by hot, new, top or controversial.

Individual posts. Paste any post permalink or redd.it short link. Turn on Also scrape comments to get its thread as well.

Give it a subreddit twice, once as a URL and once as a bare name, and it is scraped once, not twice.


Filters that cut the bill, not just the spreadsheet

Filtered posts are never written and never charged. They are not rows you pay for and then delete.

  • Minimum score and minimum comment count: reach versus discussion
  • Post kind: only text posts, only outbound links, only images and galleries, or only videos
  • Skip pinned posts: drops the moderator announcements that sit on top of every page
  • Exclude NSFW

minComments is the one to reach for before turning comments on: it spends the extra requests only where there is a discussion worth reading.


Search results, in full

Reddit's search page shows only a title, a score, a comment count and a date for each result. With Full post details for search results on (the default), every result is opened, one small request each, and gains its text, post kind, destination link and media. Turn it off for faster, lighter rows.

Search rows never carry an upvote ratio or flair, because Reddit does not show those outside a subreddit or profile feed. For those fields, scrape the subreddit instead.


An empty result always tells you why

Here is a thing about Reddit that quietly breaks scrapers. Ask it for a subreddit that does not exist and it does not return an error: it returns an empty feed, exactly like a real but quiet subreddit. A typo in your input list and a genuinely dead community look the same.

So when a source returns no posts, this Actor checks that source against its own record on Reddit, and tells you which it was:

zeroReasonWhat it means
listing-empty-confirmedThe subreddit or user really does exist, and really has nothing matching
search-matched-nothingThe search ran and matched nothing (for a scoped search, the subreddit was checked too)
all-posts-filtered-outPosts were found; your filters removed all of them
run-timeout-reachedThe run stopped itself before the platform could kill it

If the check says the subreddit or user is not there, you get a typed not-found error row naming it, not a summary row implying it was empty. That check costs nothing on a normal run, because it only happens for a source that produced nothing.

Every source also gets a summary row carrying how many posts were examined, how many the filters dropped, how many pages were read, and why it stopped.

Sources that could not be read at all get a typed error row instead, and error rows are never charged:

errorClassWhat actually happened
not-foundNo such post or user, or a subreddit that does not exist or is banned, private or quarantined
blocked / rate-limitedA transport problem, retried on a fresh IP before it was reported
bad-inputA value in your input that is not a subreddit, user, post or search

Honest about limits, because Reddit has them

  • About 1,000 posts per listing. Reddit stops paginating any single subreddit feed, search or user profile there, whatever is requested. More than that has to come from more sources (a narrower timeframe, a tighter search, a different sort), and this Actor will not pretend otherwise.
  • Banned, private and quarantined subreddits look alike. Reddit shows logged-out visitors the same empty page for all of them, and for one that does not exist, so they are reported together as not-found rather than guessed apart.
  • Profiles show what their owners choose. Reddit lets people hide posts from their profile, and a profile source returns the profile as Reddit shows it. To find every post by someone, search for author:name as well.
  • Very large comment threads are partial. Comments are read the way Reddit's own "load more" buttons read them, about ten at a time, up to your per-post limit. When more remain, the post row is marked commentsTruncated: true, so you can see it rather than discover it later.
  • Scores are approximate by design. Reddit fuzzes vote counts to frustrate manipulation. Treat a score threshold as a guide.
  • No subscriber counts, edit times or OC marks. Reddit no longer shows these to logged-out visitors. The fields subredditSubscribers and editedAt stay in the dataset as null and isOriginalContent as false, so existing integrations keep working.
  • Sorts differ per source. Reddit accepts relevance on a subreddit feed, ignores it, and quietly answers with hot. Rather than pass that through, an unsupported sort is swapped for the closest supported one and the change is written to the log.
  • The clock is real. If a run starts running out of time, it stops itself cleanly and marks every summary row runTimeout rather than being killed halfway with nothing saved. Posts and their comments are written as each post finishes, so a run you stop early keeps everything it had already collected.

Pricing

Pay per result. You are charged for rows that were actually written.

EventPrice
Post scraped$1.50 per 1,000 posts
Comment scraped$0.50 per 1,000 comments
Comment thread opened$2.50 per 1,000 posts, only when comments are on
Actor start$0.00005 per run

Prices fall on every paid Apify plan, to $0.90 per 1,000 posts at the top tier.

Summary rows are free. Error rows are free. Filtered posts are free. Posts Reddit repeated across pages are deduplicated by id and charged once. A request that came back blocked and was retried is not charged.

A posts-only run is the cheap one. Reddit serves about 25 posts per page, in about a second, so 1,000 posts from a subreddit take a minute or so and cost $1.50. Turning comments on adds requests for every post, which is why opening a thread is priced separately, including for a post that turns out to have no comments at all, since that answer cost a real request too.


Getting started

Put a subreddit in Subreddits, press Start, and look at the results. The defaults collect 100 posts per source with comments off, in a few seconds.

Then, when you know what you want:

  • Turn on Also scrape comments and set Minimum comment count so the extra requests go where the discussion is
  • Set Sort to top and Timeframe to year for a subreddit's greatest hits
  • Use Search keywords with Search inside these subreddits to track a brand, product or competitor across the communities that matter
  • Raise Max posts in the run once you have seen the shape of the data

Export to JSON, CSV, Excel or XML, or pull the dataset straight from the Apify API.