Reddit Scraper: Posts, Comments & Search avatar

Reddit Scraper: Posts, Comments & Search

Pricing

from $1.20 / 1,000 post saveds

Go to Apify Store
Reddit Scraper: Posts, Comments & Search

Reddit Scraper: Posts, Comments & Search

Scrape public Reddit posts, comments and search results with no login or API key. Paste subreddits, URLs, post IDs or old RSS links. Pay only for what is saved: $1.50 per 1,000 posts, $0.50 per 1,000 comments, no start fee. Exact limits. Schedules return only new posts.

Pricing

from $1.20 / 1,000 post saveds

Rating

0.0

(0)

Developer

Kumo

Kumo

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Reddit Scraper collects public Reddit data: subreddit feeds, Reddit search (site-wide or inside subreddits), single posts and their comment threads, with no login and no API key. Paste any Reddit link, a subreddit name, a post ID or even your old RSS feed URL. You pay only for posts and comments saved to your dataset. Runs that collect nothing cost nothing.

Why this scraper

  • One input for everything. python, r/python, https://www.reddit.com/r/python/top/?t=week, a post URL, https://redd.it/1xm7oif, 1xm7oif, a search URL, https://www.reddit.com/r/python/new/.rss: all go into the same Targets list.
  • Pay per result, nothing else. No start fee, no charge for duplicates, filtered posts, deleted comments, problem reports, or empty and blocked runs.
  • Honest status. Every problem target (private, missing, blocked, feed ended early) is a row in the dataset with a reason and a hint. The run's status line says what was collected and what was not. A run that Reddit blocked completely ends as FAILED and costs $0.
  • Exact limits. maxTotalPosts and the run's charge limit are never exceeded, not even by one item.
  • Schedules without duplicates. newSinceLastRun remembers what each target already showed, so an hourly schedule delivers only new posts: no overlap, no gaps, no date math.
  • Replacement for Reddit RSS (Reddit turns RSS off on 2026-11-13) and for other Reddit scrapers: paste their input as is; outputFormat: rss gives the items n8n's RSS Read node made of Reddit feeds, outputFormat: trudax the rows of trudax/reddit-scraper-lite.

What people use it for

  • Brand and product monitoring. Search for your product name and get new mentions on a schedule.
  • Market and audience research. Pull what a community says about a topic, with scores and comments.
  • Keeping automations alive after Reddit RSS ends. Feed new posts to n8n and other tools.

Quick start

Latest 100 posts of a subreddit:

{ "targets": ["r/python"] }

A week's top posts of two subreddits, with the 20 best comments each, top-level only (the cheapest comment mode):

{
"targets": ["https://www.reddit.com/r/python/top/?t=week", "r/learnpython/top"],
"timeWindow": "week",
"maxPostsPerTarget": 25,
"includeComments": true,
"maxCommentsPerPost": 20,
"maxCommentDepth": 0
}

Search for a product across Reddit, last month, only posts that really mention it:

{
"searchQueries": ["\"standing desk\""],
"sort": "new",
"timeWindow": "month",
"filterKeywords": ["standing desk"],
"fullText": true
}

Every hour, only what is new (schedule this):

{
"targets": ["r/SaaS", "r/startups"],
"newSinceLastRun": true,
"maxPostsPerTarget": 0,
"postedAfter": "2 hours"
}

Input

FieldWhat it does
targetsSubreddits, posts, search pages, RSS feed URLs. Sort and time window inside a URL win over the fields below.
searchQueriesReddit search queries. Reddit operators work: "exact phrase", OR, NOT, title:, author:, flair:, self:yes.
searchInRun every query inside these subreddits instead of all of Reddit.
sort, timeWindownew, hot, top, rising, controversial for feeds; new, hot, top, relevance, comments for search. A sort that does not fit a target falls back to new, with a warning.
postedAfter, postedBeforeDate filters for any sort: 2026-10-01, 2026-10-01T12:00:00Z, or relative 30 minutes, 6h, 2 weeks. A new feed stops reading once it is past postedAfter.
newSinceLastRunOnly posts the target has not shown in earlier runs.
maxPostsPerTargetDefault 100. 0 means as many as Reddit shows.
maxTotalPostsA hard cap for the whole run. 0 means no cap.
includeComments, maxCommentsPerPost, commentSort, maxCommentDepthComments in reading order. maxCommentDepth: 0 gives top-level comments only and is the cheapest mode.
includeStickiedPinned moderator posts are dropped by default.
filterKeywords, filterKeywordModeKeep only posts whose title, text or flair contain the words (whole words, any or all).
fullTextOpen each post's page for the full text and fields the feed card lacks. On automatically with comments.
outputFormatdefault, trudax or rss.

0 always means "no limit". Fields from other Reddit scrapers (startUrls, searches, maxItems, maxPostCount, skipComments, time, ...) are accepted and listed in the run summary under inputWarnings.

Output

One dataset; the type field tells rows apart (post, comment, target). The console views Posts, Comments and Problems pick columns for each kind but show every row, so filter by type in your sheet, Zapier step or code. With outputFormat trudax or rss rows use those field names and the views stay mostly empty; use the JSON or CSV export.

A post:

{
"type": "post",
"id": "1xm7oif",
"url": "https://www.reddit.com/r/Python/comments/1xm7oif/fastapi_cloud_is_now_generally_available/",
"title": "FastAPI Cloud is now generally available",
"body": "I'm excited to share with you all that FastAPI Cloud is now generally available: ...",
"author": "tiangolo",
"subreddit": "Python",
"score": 70,
"upvoteRatio": 0.9,
"commentCount": 12,
"createdAt": "2026-11-02T19:57:30Z",
"postType": "text",
"flair": "News",
"mediaUrls": [],
"isNsfw": false,
"target": "r/python",
"listing": "new",
"rank": 2,
"scrapedAt": "2026-11-04T09:00:07Z"
}

A comment carries postId, postTitle and postUrl, so every row reads on its own in a sheet or a Slack message. parentCommentId is null for top-level comments, depth starts at 0.

A problem row (only when something went wrong):

{
"type": "target",
"target": "r/python",
"status": "partial",
"reason": "feed_end_before_window",
"message": "Reddit's 'new' feed ends after ~1000 posts. Reached 2026-02-26T07:14:09Z; postedAfter is 2025-01-01T00:00:00Z. Delivered 954 of up to 5000 posts.",
"hint": "Older posts are reachable only as a sample: add searchQueries with searchIn: [\"r/python\"]."
}

Every row of one type has the same keys; unknown values are null, lists are []. Times are UTC ISO 8601 with Z. IDs have no t3_/t1_ prefix.

The run summary (key-value store record SUMMARY) lists every target with its status, counts, the oldest and newest post reached, requests made, and what was charged.

Pricing

EventFree planPaid plans
Post saved to the dataset$1.50 per 1,000$1.20 per 1,000
Comment saved (not deleted)$0.50 per 1,000$0.40 per 1,000

Examples on the Free plan:

JobCost
100 latest posts$0.15
1,000 posts with 20 comments each$11.50
Hourly schedule for a month, 3,000 new posts in total$4.50

Nothing else is charged. The status line shows the most a run can cost before it starts. Set a maximum cost per run in the run options and the scraper stops exactly there.

Limits of public Reddit pages

  • A feed shows about 1,000 posts (top and controversial: about 500 per time window). Older posts of a busy subreddit are not in any feed; the problem row says how far back the feed went. Reddit search reaches further: combine searchQueries with searchIn.
  • A search returns about 250 results per query and sort. Split a broad query into narrower ones.
  • Posts marked 18+ are never collected: they are dropped and not charged, and an 18+ community stops after two pages.
  • Private communities are not readable without login. Reddit shows logged-out visitors the same page for a private and a missing community, so both are reported as not_found_or_private.
  • Search results show fewer fields than feed cards: post type, flair and text come with fullText: true.
  • User profiles and community info are not scraped yet.

Moving from Reddit RSS or another scraper

  • Put your RSS URL (https://www.reddit.com/r/<sub>/new/.rss) into targets, set outputFormat: "rss" and newSinceLastRun: true: each run returns only new posts as items with the keys and date format of n8n's RSS Read node on a Reddit feed (title, link, pubDate, author, content, contentSnippet, id, isoDate). Checked against real Reddit feeds: titles, links, authors, ids and dates match exactly; contentSnippet matches up to line breaks and spaces; content is equivalent HTML, not byte-identical. Make and Zapier RSS modules and Reddit's comment feeds have not been compared yet.
  • Paste a trudax/reddit-scraper-lite input as is and set outputFormat: "trudax": rows come with trudax field names (dataType, username, communityName, upVotes, numberOfComments, ...). Search queries also run when start URLs are present.

FAQ

Why did my run return fewer posts than I asked for?

Reddit shows about 1,000 posts per feed and about 250 per search. The Problems view says where a target stopped and what to try next.

Why did my run fail?

If Reddit blocks every request, the run ends as FAILED and costs $0. Try again later. If it keeps happening, open an issue with the run ID.

Can I get old posts?

Only as far as Reddit shows them. Combine searchQueries with searchIn to reach further back in a subreddit.

Can I scrape private communities or user profiles?

No. The Actor reads only what a logged-out visitor sees. It does not use accounts.

Responsible use

You are responsible for how you use the data and for following the laws and terms that apply to you, including data protection rules such as GDPR. Reddit data includes usernames. Collect only what you need and do not use it to identify or profile people. This is not legal advice.

The Actor keeps no data outside your Apify account. With newSinceLastRun it stores, per target, the time of the last run and the IDs of posts already returned in the key-value store reddit-scraper-state in your account.

This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by Reddit, Inc.

Support

Open an issue with the run ID. The SUMMARY record and the problem rows usually tell what happened; we read every issue.