Reddit Scraper
Pricing
from $0.20 / 1,000 post scrapeds
Reddit Scraper
Scrape Reddit posts from any subreddit or search query: titles, scores, comment counts, authors, flair, timestamps, outbound links and NSFW/spoiler/OC flags. No login, no browser.
Pricing
from $0.20 / 1,000 post scrapeds
Rating
0.0
(0)
Developer
Muhammad Ahmed
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
18 days ago
Last modified
Categories
Share
Scrape Reddit posts from any subreddit or search query — titles, scores, comment counts, authors, flair, timestamps, outbound links and the NSFW / spoiler / original-content flags — as clean JSON, CSV or Excel.
No Reddit account, no API key, no browser. The Actor reads Reddit's own server-rendered HTML over plain HTTP, so a 1000-post crawl finishes in under a minute.
What it does
- Subreddit feeds — hot, new, top, rising or controversial, with a time window for top and
controversial. Multireddits (
technology+science+programming) work too. - Reddit search — site-wide or scoped to specific subreddits, with Reddit's own search
operators (
flair:Discussion,nsfw:yes,author:spez,site:nytimes.com). - Deep pagination — up to 1000 posts per subreddit and ~250 per search, 100 posts per request, de-duplicated.
- NSFW access — opt in and the Actor sends the adult-content signal Reddit requires.
- Optional detail pass — fetch each post's own page to fill in the upvote ratio and the full body text of self posts.
Example output
{"postId": "t3_1vq1845","url": "https://www.reddit.com/r/technology/comments/1vq1845/bernie_sanders_calls_out_sergey_brin_for_spending/","title": "Bernie Sanders calls out Sergey Brin for spending over $100 million to defeat California's billionaire tax","author": "marketrent","authorId": "t2_fj9vsvfd","subreddit": "technology","score": 17528,"upvoteRatio": null,"commentCount": 1364,"createdAt": "2026-08-16T16:17:34.000Z","domain": "yahoo.com","linkUrl": "https://www.yahoo.com/news/politics/articles/bernie-sanders-calls-sergey-brin-120113695.html","isSelfPost": false,"selfText": null,"thumbnail": "https://external-preview.redd.it/nsJu9QGFhJ_zinuKmfm2kyh9BU0Gy1D1JtDBihia2jE.jpeg?width=140&height=93&auto=webp&s=04feec5562b5afdbd5ae6fd1b193197f50f7bbd4","flair": "Society","isNsfw": false,"isSpoiler": false,"isOriginalContent": false,"isPromoted": false,"isStickied": false,"isGallery": false,"numCrossposts": 3,"rank": 1,"source": "r/technology","sourceUrl": "https://old.reddit.com/r/technology/?limit=100","scrapedAt": "2026-08-17T04:14:06.345Z"}
Output fields
Fill rates below are measured on a real platform run — 500 posts from r/technology, r/AskReddit, r/pics, r/worldnews and r/movies. Where a field is not 100%, the reason is stated; nothing here is guesswork.
| Field | Type | Fill | Notes |
|---|---|---|---|
postId | string | 100% | Reddit fullname, e.g. t3_1vq1845 |
url | string | 100% | Permalink on www.reddit.com |
title | string | 100% | Post title, HTML entities decoded |
author | string | 100% | [deleted] when the account is gone |
authorId | string | 100% | t2_… fullname; null for deleted accounts |
subreddit | string | 100% | Canonical casing as Reddit spells it, no r/ prefix |
score | integer | 100% | Exact net upvotes. Not the abbreviated "17.1k" shown on the page |
upvoteRatio | number | 0% / 100% | null unless Fetch upvote ratio and self-post text is on — see Limitations |
commentCount | integer | 100% | Exact comment count |
createdAt | string | 100% | ISO 8601 UTC |
domain | string | 100% | yahoo.com, or self.<subreddit> for text posts. null on crossposts, where Reddit leaves it blank |
linkUrl | string | 100% of link posts | The outbound URL. null for self posts and crossposts, which have no external link |
isSelfPost | boolean | 100% | Text post rather than a link |
selfText | string | 0% / self posts | null unless Fetch upvote ratio and self-post text is on — see Limitations |
thumbnail | boolean | 91% of link posts | Absolute HTTPS URL. null when Reddit has no preview (self posts, plain link icons, NSFW placeholders) |
flair | string | 50% | Post flair. Genuinely absent in subreddits that do not use flair — 100/100 in r/technology, 0/100 in r/AskReddit |
isNsfw | boolean | 100% | Reddit's over-18 tag |
isSpoiler | boolean | 100% | Reddit's spoiler tag |
isOriginalContent | boolean | 100% | Reddit's OC tag |
isPromoted | boolean | 100% | Sponsored post. Always false in practice — see Limitations |
isStickied | boolean | 100% | Pinned to the top of the subreddit (usually a moderator announcement) |
isGallery | boolean | 100% | Multi-image gallery post |
numCrossposts | integer | 100% | How many times the post was crossposted; 0 is a real value |
rank | integer | 100% | Position in the feed, continuous across pages (1…1000) |
source | string | 100% | Which input produced the row, e.g. r/technology or r/movies search:dune |
sourceUrl | string | 100% | The Reddit URL that source resolved to |
scrapedAt | string | 100% | ISO 8601 UTC |
A source that returns nothing produces one row with source, sourceUrl, error and scrapedAt
instead of being silently dropped. Those rows are never charged for.
Input
| Field | Type | Default | Description |
|---|---|---|---|
subreddits | string[] | — | technology, r/technology, a subreddit URL, or a multireddit like technology+science |
searchQueries | string[] | — | Reddit search queries. Optional |
sort | enum | hot | hot, new, top, rising, controversial |
timeRange | enum | day | hour, day, week, month, year, all |
maxPostsPerSource | integer | 100 | 1–1000 posts per subreddit or query |
includeNsfw | boolean | false | Ask Reddit for over-18 posts |
skipPromoted | boolean | true | Drop sponsored posts and pinned announcements |
fetchPostDetails | boolean | false | Also open each post's page for upvoteRatio and selfText |
maxItems | integer | 0 | Hard cap on the whole run; 0 means no cap |
proxyConfiguration | object | Apify residential | Residential proxy is required |
Subreddits and queries combine. With subreddits: ["technology"] and
searchQueries: ["apple"] the Actor searches apple inside r/technology. Queries on their own
search all of Reddit; subreddits on their own list the feed. Every combination is logged at the
start of the run with the exact URL it resolved to.
Use cases
- Brand and product monitoring — search your product name across Reddit and watch score, comment count and subreddit to see where a thread is taking off.
- Trend and topic research — pull
topwithtimeRange: allfrom a niche subreddit to get the canonical posts on a subject, ornewto watch a topic emerge. - Content and SEO pipelines —
domainandlinkUrlshow which publishers a community actually links to. - Community analytics — 1000 posts of
newfrom a subreddit gives a clean posting-rate, flair-mix and engagement time series. - LLM / dataset building — turn on the detail pass and every self post arrives with its full body text.
Limitations — read before you buy
These are real constraints of Reddit's public HTML, not bugs. Everything below was measured, not assumed.
upvoteRatioandselfTextarenullby default. Reddit publishes neither in its listing or search markup — the ratio only exists on a post's own page and self-post bodies are loaded by JavaScript. Turn on Fetch upvote ratio and self-post text and both fill to 100% (verified: 0/10 → 10/10 on a platform run), at the cost of one extra request per post, so a 100-post run goes from ~10 seconds to ~7 minutes.isPromotedis alwaysfalse. Logged-out old Reddit no longer serves sponsored posts; across ~2500 rows from multiple countries and IP types not one promoted row appeared. The column is wired to Reddit's own attribute and stays in the output for completeness, but do not expect it to fire. Because of this, Skip promoted and pinned posts does its real work on the pinned half — on a platform control run it removed exactly the 7 stickied moderator announcements across four subreddits and nothing else.- Fully 18+ subreddits cannot be listed as a feed. Reddit walls
r/<adult-sub>/for logged-out clients no matter what. The Actor detects this and tells you so per subreddit instead of returning an empty result. The workaround that does work is search: put the subreddit insubreddits, add asearchQueriesentry and turn onincludeNsfw. risingreturns only ~25 posts. Reddit publishes a single short rising page per subreddit with no "next" link, so arisingrun stops at roughly 25 rows however highmaxPostsPerSourceis (r/all is the exception, at 100). Usehotornewfor depth.- Depth is capped by Reddit. A subreddit feed hard-stops at 1000 posts and a search at roughly
250, whatever
maxPostsPerSourcesays. For more history, split the crawl bysortandtimeRange, or by narrower search queries. timeRangeonly applies totop,controversialand searches. Reddit accepts but silently ignores it onhot,newandrising, so the Actor does not send it there — ahotrun is the same feed whatever time range you pick.- Reddit search has no
risingorcontroversialorder. Choose either with a search query and the search falls back to relevance; the Actor logs a warning saying so. Subreddit feeds are unaffected. hotandrisingcan return the same posts in a quiet subreddit. On r/technology they overlapped 25/25 (in a different order); on r/all they shared 0/25. That is Reddit's ranking, not a filtering failure.- Residential proxy is required. Reddit blocks datacenter addresses outright and answers roughly half of residential addresses with a login page instead of the post list. Reddit also returns a 403 "whoa there, pardner!" page to individual exit IPs at random — even for huge public subreddits. The Actor treats both as address problems, rotates to a fresh proxy session and retries up to six times per page, and never charges for a blocked request. A genuinely private, restricted or quarantined subreddit also answers 403; that one is told apart by Reddit's own page title and reported as such instead of being retried. Leave the proxy setting alone.
- Comments are not scraped. This Actor returns posts only.
Pricing
Pay per event:
| Event | Price |
|---|---|
| Actor start | $0.005 per run |
| Post scraped | $0.0002 per post |
| Post details fetched | $0.005 per post (only when the detail pass is on) |
1000 posts cost about $0.21. Failed, blocked and empty sources are never charged.