Reddit Scraper avatar

Reddit Scraper

Pricing

from $0.20 / 1,000 post scrapeds

Go to Apify Store
Reddit Scraper

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

Muhammad Ahmed

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

18 days ago

Last modified

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.

FieldTypeFillNotes
postIdstring100%Reddit fullname, e.g. t3_1vq1845
urlstring100%Permalink on www.reddit.com
titlestring100%Post title, HTML entities decoded
authorstring100%[deleted] when the account is gone
authorIdstring100%t2_… fullname; null for deleted accounts
subredditstring100%Canonical casing as Reddit spells it, no r/ prefix
scoreinteger100%Exact net upvotes. Not the abbreviated "17.1k" shown on the page
upvoteRationumber0% / 100%null unless Fetch upvote ratio and self-post text is on — see Limitations
commentCountinteger100%Exact comment count
createdAtstring100%ISO 8601 UTC
domainstring100%yahoo.com, or self.<subreddit> for text posts. null on crossposts, where Reddit leaves it blank
linkUrlstring100% of link postsThe outbound URL. null for self posts and crossposts, which have no external link
isSelfPostboolean100%Text post rather than a link
selfTextstring0% / self postsnull unless Fetch upvote ratio and self-post text is on — see Limitations
thumbnailboolean91% of link postsAbsolute HTTPS URL. null when Reddit has no preview (self posts, plain link icons, NSFW placeholders)
flairstring50%Post flair. Genuinely absent in subreddits that do not use flair — 100/100 in r/technology, 0/100 in r/AskReddit
isNsfwboolean100%Reddit's over-18 tag
isSpoilerboolean100%Reddit's spoiler tag
isOriginalContentboolean100%Reddit's OC tag
isPromotedboolean100%Sponsored post. Always false in practice — see Limitations
isStickiedboolean100%Pinned to the top of the subreddit (usually a moderator announcement)
isGalleryboolean100%Multi-image gallery post
numCrosspostsinteger100%How many times the post was crossposted; 0 is a real value
rankinteger100%Position in the feed, continuous across pages (1…1000)
sourcestring100%Which input produced the row, e.g. r/technology or r/movies search:dune
sourceUrlstring100%The Reddit URL that source resolved to
scrapedAtstring100%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

FieldTypeDefaultDescription
subredditsstring[]technology, r/technology, a subreddit URL, or a multireddit like technology+science
searchQueriesstring[]Reddit search queries. Optional
sortenumhothot, new, top, rising, controversial
timeRangeenumdayhour, day, week, month, year, all
maxPostsPerSourceinteger1001–1000 posts per subreddit or query
includeNsfwbooleanfalseAsk Reddit for over-18 posts
skipPromotedbooleantrueDrop sponsored posts and pinned announcements
fetchPostDetailsbooleanfalseAlso open each post's page for upvoteRatio and selfText
maxItemsinteger0Hard cap on the whole run; 0 means no cap
proxyConfigurationobjectApify residentialResidential 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 top with timeRange: all from a niche subreddit to get the canonical posts on a subject, or new to watch a topic emerge.
  • Content and SEO pipelinesdomain and linkUrl show which publishers a community actually links to.
  • Community analytics — 1000 posts of new from 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.

  • upvoteRatio and selfText are null by 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.
  • isPromoted is always false. 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 in subreddits, add a searchQueries entry and turn on includeNsfw.
  • rising returns only ~25 posts. Reddit publishes a single short rising page per subreddit with no "next" link, so a rising run stops at roughly 25 rows however high maxPostsPerSource is (r/all is the exception, at 100). Use hot or new for depth.
  • Depth is capped by Reddit. A subreddit feed hard-stops at 1000 posts and a search at roughly 250, whatever maxPostsPerSource says. For more history, split the crawl by sort and timeRange, or by narrower search queries.
  • timeRange only applies to top, controversial and searches. Reddit accepts but silently ignores it on hot, new and rising, so the Actor does not send it there — a hot run is the same feed whatever time range you pick.
  • Reddit search has no rising or controversial order. Choose either with a search query and the search falls back to relevance; the Actor logs a warning saying so. Subreddit feeds are unaffected.
  • hot and rising can 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:

EventPrice
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.