Reddit Scraper avatar

Reddit Scraper

Pricing

Pay per event

Go to Apify Store
Reddit Scraper

Reddit Scraper

Pricing

Pay per event

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Share

A Reddit scraper that returns posts, comment trees and search results without an API key, a login or an OAuth token. Three modes on one input: a subreddit listing, a single post with its comments, or a search.

It works because it does not use the endpoint everything else used. Reddit closed the unauthenticated JSON API in late May 2026, and that is what broke most Reddit scrapers in circulation.

What you get

  • Three modes from one actor: subreddit listing, single post with its full comment tree, and search across Reddit or inside one subreddit
  • Score, comment count, author, subreddit and timestamp on every post, read from Reddit's own data attributes rather than scraped out of rendered text
  • Comment depth, so the reply tree is reconstructable rather than a flat list
  • score_hidden as its own field, because Reddit deliberately hides comment scores for the first hour. A null score with score_hidden: true is a real state, not a parse failure
  • Post flags that matter for analysis: NSFW, spoiler, original content, crosspost count, and whether a row is a promoted post rather than an organic one
  • Real pagination that follows Reddit's own next cursor, so a 1.000-row run walks 40 pages correctly instead of re-fetching page one
  • All five sorts (hot, new, top, rising, controversial) with the time window Reddit itself offers
  • No actor-start fee. A run that returns nothing costs nothing

Why this one still works

Before May 2026, appending .json to any Reddit URL returned clean JSON with no authentication. Nearly every open-source Reddit scraper was built on that, and nearly all of them now return 403. Adding an API key does not fix it either, because Reddit's bot detection blocks the request shape regardless of the token.

This actor does not use those endpoints. It reads a rendering surface Reddit still serves in full, re-measured across 27 request profiles and 7 surfaces on 2026-09-01, and it keeps a ranked ladder of fallbacks so a single surface change does not take the actor down. Requests go out through country-pinned residential exits, so results match what a reader in that country sees.

The fields come from structured attributes on each post rather than from rendered text, so score, comment count, author, subreddit, timestamp, NSFW and promoted flags stay correct across Reddit's redesigns instead of breaking on the next CSS change.

Input

FieldTypeRequiredDefaultWhat it does
modeselectyessubredditsubreddit, post or search
subredditstringconditionalwebscrapingRequired in subreddit mode; optional in search mode to restrict the search
post_urlstringconditionalRequired in post mode. Any Reddit post link, in any of its URL forms
querystringconditionalRequired in search mode
sortselectnohothot, new, top, rising, controversial
timeselectnoallWindow for the top and controversial sorts, and for search
limitintegerno50Rows to return, 1 to 1000
proxy_countrystringnoTwo-letter country code for the exit
retriesintegerno4Retry attempts per page

Output

{
"position": 1,
"type": "post",
"id": "t3_1w39wno",
"title": "Show HN: a small Rust crate for streaming JSON",
"url": "https://www.reddit.com/r/webscraping/comments/1w39wno/...",
"link_url": "https://www.reddit.com/r/webscraping/comments/1w39wno/...",
"author": "alex_pushing40",
"subreddit": "webscraping",
"score": 35,
"comments_count": 15,
"created_at": "2026-08-27T02:38:44Z",
"domain": "self.webscraping",
"rank": 1,
"is_nsfw": false,
"is_promoted": false,
"crossposts": 0,
"selftext": "I built a fetcher that ...",
"flair": null
}

Comment rows carry type: "comment", plus text, depth, post_id, score and score_hidden.

Use cases

Monitoring what a community says about your product. Search mode with your brand name, sorted by new, on a schedule. Because created_at and score come back as real values, you can separate a post that is quietly sitting at two upvotes from one that is climbing, which is the difference between noise and something you need to answer today.

Building a dataset for a model. Subreddit mode with a high limit gives you posts with their full self text; post mode gives you the whole discussion under any of them with the reply depth intact. selftext and text are plain text with the markup stripped, which is what an embedding pipeline wants.

Tracking a subreddit's agenda over time. Run top with time: week on a schedule and store the results. Which topics reach the top of a community, and at what score, is a trend signal that no analytics product sells you.

Competitive and sentiment research. Reddit is where people say what they actually think about tools they pay for. Search inside the subreddits where your category lives, keep the rows with score above a threshold, and you have a filtered feed of opinions that carried weight with other readers.

How it compares

this actortrudax/reddit-scraper-lite
Per 1.000 rows$2,50$4,00
Actor-start feenone$0,02 per GB on start
30-day run failure rate0% across validation runs11,8%
Modessubreddit, post, searchlisting focused
Comment depthyesnot stated
Distinguishes a hidden score from a missing oneyesno
Promoted-post flagyesno

Honest about the other side: trudax/reddit-scraper-lite has 7.070 monthly users and 38 reviews against our zero, and it has been running far longer. The reason to switch is that it fails roughly one run in eight and charges a start fee before any row arrives.

Pricing

One event. item costs $0,0025 per post or comment returned, which is $2,50 per 1.000. All pricing is pay-per-event, so you only pay for rows you actually receive. No actor-start fee, no per-compute-unit charges, and a run that returns nothing costs nothing.

Limits and gotchas

  • The .json endpoints are dead and no scraper can revive them. Any tool still promising them is either using an authenticated token or is broken. This one reads HTML on purpose.
  • Comment scores are hidden for the first hour by Reddit's own rule. Those rows come back with score: null and score_hidden: true rather than a fabricated zero.
  • Post mode returns the comments Reddit renders on the first page, which is the top of the tree rather than every reply on a thousand-comment thread. Deep threads collapse behind "load more comments" links that are not followed.
  • Search results carry less detail than listings. Reddit's search template omits the data attributes, so id and created_at can be empty there while title, author, score and subreddit are present.
  • Private, quarantined and banned subreddits return nothing, which is correct rather than an error.
  • Requests are paced deliberately, roughly one page per second with a jitter. A 1.000-row run takes about a minute, and pushing harder is what gets a scraper blocked.

FAQ

Can I scrape Reddit without an API key in 2026? Yes, but not the way most guides describe. The unauthenticated .json endpoints stopped working in late May 2026, which is why most open-source scrapers now return 403. This actor uses a different, still-served rendering surface with a ranked ladder of fallbacks, so it keeps returning full rows.

Why do other Reddit scrapers return 403? Because they call reddit.com/....json, which now refuses unauthenticated requests regardless of IP, country or user-agent. It is not a proxy problem and a better proxy will not fix it.

Can I get all the comments on a post? You get the comment tree Reddit renders on the post page, with depth, which is the top of the discussion. Replies hidden behind "load more comments" are not expanded.

Does it work on private subreddits? No. Anything requiring a logged-in account is out of reach by design, since there is no credential in the input.

Can I search inside one subreddit? Yes. Use search mode and set subreddit as well as query, and the search is restricted to that community.