Reddit Subreddit Posts Scraper avatar

Reddit Subreddit Posts Scraper

Pricing

$0.45 / 1,000 post scrapeds

Go to Apify Store
Reddit Subreddit Posts Scraper

Reddit Subreddit Posts Scraper

Scrape any subreddit into clean, structured data: title, full text, author, score, upvote ratio, comments, flair, awards, dates, links and every image, gallery and video URL. Sort by new, hot, top, rising or controversial, and filter by date, score, comments, flair or keyword. No account needed.

Pricing

$0.45 / 1,000 post scrapeds

Rating

0.0

(0)

Developer

Hamza

Hamza

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Turn any list of subreddits into a clean, structured dataset of posts. Give it r/webdev, r/datascience and r/smallbusiness, choose a sort (new, hot, top, rising or controversial), and get back every post with its title, full self-text, author, score, upvote ratio, comment count, flair, awards, creation date, permalink, outbound link and every attached image, gallery or video URL. Filter by date, score, comment count, flair or keyword before anything is saved, so the dataset you pay for is the dataset you actually wanted. No Reddit account, no login, no cookies, no browser extension — just a list of subreddits.

What you can do with it

  • Track a niche. Pull everything posted in your industry's subreddits each morning and feed it into a newsletter, a Slack digest or a spreadsheet.
  • Find customers and complaints. Filter for posts containing "alternative to", "recommendation" or a competitor's name and read demand as it appears.
  • Research content that works. Pull top of the year from ten subreddits, sort by score, and see exactly which titles, formats and flairs earn upvotes.
  • Build a training or analysis corpus. Self-text posts come through with the complete body, so you get real writing, not truncated previews.
  • Monitor hiring and deal flow. Filter r/forhire-style subreddits by flair and keyword to catch only the posts that match your services.
  • Feed a dashboard. Run it on a schedule with a 24h date filter and append a fresh slice of a community to your warehouse every day.

What you get

One row per post. Abridged example:

{
"id": "1v9adp0",
"fullId": "t3_1v9adp0",
"type": "post",
"title": "Five Languages, One Pyramid, Zero Practical Value",
"url": "https://www.reddit.com/r/programming/comments/1v9adp0/five_languages_one_pyramid_zero_practical_value/",
"permalink": "/r/programming/comments/1v9adp0/five_languages_one_pyramid_zero_practical_value/",
"subreddit": "programming",
"subredditSubscribers": 6942111,
"author": "Refresh98370",
"authorFlair": null,
"body": null,
"linkUrl": "https://example.dev/five-languages-one-pyramid",
"domain": "example.dev",
"score": 1,
"upvoteRatio": 1,
"numComments": 0,
"totalAwards": 0,
"flair": null,
"createdAt": "2026-07-28T20:35:11.000Z",
"isSelfPost": false,
"isVideo": false,
"isGallery": false,
"over18": false,
"stickied": false,
"locked": false,
"thumbnail": null,
"media": [],
"queriedSubreddit": "programming",
"listingSort": "new",
"listingTimeRange": null,
"listingRank": 1,
"scrapedAt": "2026-07-28T20:35:20.682Z"
}

Posts with media carry a media array — a gallery post returns every image in order with its dimensions and captions, and a Reddit-hosted video returns the direct MP4 plus the DASH and HLS stream URLs, the duration and whether it has an audio track.

Input reference

FieldTypeDefaultWhat it does
subredditslist of strings— (required)Subreddits to scrape. python, r/python, /r/python/ and full subreddit or post URLs all work. all and popular read Reddit's site-wide feeds.
sortselectnewnew, hot, top, rising or controversial.
timeselectallTime window for top and controversial: hour, day, week, month, year, all. Ignored by the other sorts.
maxPostsPerSubredditinteger100How many posts to save per subreddit, up to 1,000.
postedAfterstringemptyKeep only posts newer than this. Accepts a date (2026-01-31), a timestamp, or a relative window such as 24h, 7d, 4w.
minScoreintegeremptyKeep only posts with at least this score.
minCommentsintegeremptyKeep only posts with at least this many comments.
flairFilterlist of stringsemptyKeep only posts whose flair matches one of these. Case-insensitive; a partial match counts.
keywordFilterlist of stringsemptyKeep only posts whose title or body contains one of these words or phrases. Case-insensitive.
includeNsfwbooleantrueSet to false to drop posts marked 18+.
skipStickiedbooleantrueSkips the moderator-pinned posts at the top of a subreddit.
includeMediabooleantrueAdds the media array with direct image, gallery and video URLs.
maxConcurrencyinteger4How many subreddits are read at the same time.
proxyCountryselectusCountry to appear to browse from.

Output fields

FieldTypeDescription
id / fullIdstringReddit post id (1v9adp0) and its full name (t3_1v9adp0).
titlestringPost title.
urlstringPermanent link to the post on Reddit.
permalinkstringPath-only version of the same link.
subredditstringSubreddit the post lives in.
subredditId / subredditSubscribersstring / numberSubreddit id and subscriber count at scrape time.
author / authorId / authorFlairstringPoster's username, account id and flair.
body / bodyHtmlstringFull self-text of a text post (null for link posts).
linkUrl / domainstringOutbound link of a link post and its domain.
score / upvoteRationumberNet upvotes and the share of votes that were upvotes.
numComments / numCrosspostsnumberComment and crosspost counts.
totalAwardsnumberAwards received.
flairstringLink flair text.
createdAt / editedAtdateWhen the post was published, and edited if it was.
isSelfPost / isVideo / isGallery / isCrosspost / isOriginalContentbooleanPost type flags.
over18 / spoiler / locked / stickied / archivedbooleanModeration and status flags.
distinguished / removedBystringModerator/admin distinction, and why a post was removed if it was.
thumbnailstringThumbnail image URL when Reddit generated one.
mediaarrayDirect image, gallery, GIF and video URLs, with dimensions, duration, and the DASH/HLS streams for Reddit-hosted video.
queriedSubreddit / listingSort / listingTimeRange / listingRankstring / numberWhich of your inputs produced this row and where it sat in that listing.
scrapedAtdateWhen the run collected the post.

Pricing

This actor is pay per event. There is exactly one event: a dataset item — one charge for each post saved to your dataset. Nothing else is billed.

Posts that fail your filters are never saved, so they are never charged: reading 1,000 posts to find the 40 that match your keyword costs 40 items, not 1,000. Subreddits that turn out to be private, restricted or missing cost nothing. If you set a maximum cost for a run, the actor stops cleanly as soon as that budget is spent rather than overshooting it.

Limits and what this actor cannot do

Honest limits, all verified against Reddit's live API:

  • About 1,000 posts per listing. Reddit stops any single listing cursor at roughly 1,000 records — page 10 comes back short and the cursor ends. That is Reddit's limit, not the actor's, and no tool can page past it. To go deeper than 1,000 posts in one community, split the job: run top with several different time ranges (year, month, week), which are separate cursors and return different sets of posts.
  • Filters are applied after fetching. Reddit's listings accept only a sort and a time range, so score, comment, flair, keyword and date filters are applied by the actor as posts arrive. When a filter is set the actor keeps reading (up to the 1,000-post ceiling) until it has found the number of posts you asked for.
  • No "users online now". Reddit's API no longer exposes the live active-user count, so it is not in the output. Subscriber counts are.
  • Private, Premium-only, quarantined and banned subreddits cannot be read. They are reported in the run log and skipped; the rest of your list still runs.
  • A misspelled or removed subreddit is reported as unavailable. Reddit answers a "page not found" page for names that do not exist rather than an empty result, so check the spelling if a subreddit comes back with nothing.
  • No moderator-only data. Mod lists, mod queues, removal reasons beyond the public removedBy category, and anything else that requires moderator permissions are not available.
  • Comments are not included. Each row is a post plus its comment count. Use the companion Reddit Comments Scraper for full threads.
  • Vote counts are Reddit's fuzzed numbers. Reddit deliberately adds noise to scores; view_count is always empty on its API and is therefore not reported.
  • Edited posts report the edit timestamp only when Reddit records one.

FAQ

Do I need a Reddit account or API credentials? No. Nothing to create, connect or paste — you give it subreddit names and run it.

Does it need cookies, a login or a browser session? No. It reads Reddit's own public JSON API, so there is no login step and nothing to keep alive between runs.

How fast is it? Reddit returns up to 100 posts per request, usually in well under a second, and several subreddits are read in parallel. A 100-post pull from two subreddits takes a handful of seconds; 1,000 posts from one subreddit is ten requests.

Can I run it on a schedule? Yes. A common setup is a daily run with postedAfter set to 24h and sort set to new, which appends only the last day's posts. On a new sort the actor stops a subreddit as soon as it reads past your cut-off, so scheduled runs stay cheap.

Can I get more than 1,000 posts from one subreddit? Not from a single listing — that is Reddit's ceiling. Run the same subreddit several times with different sorts and time ranges (top/year, top/month, new), and merge the results; each combination is a separate cursor with its own 1,000 records.

Does it include NSFW subreddits and posts? Yes, they are returned by default, and includeNsfw: false drops them.

What happens if one subreddit in my list is private or misspelled? It is logged and skipped, and the run continues with the rest. You are not charged for a subreddit that returned nothing.