Reddit Subreddit Posts Scraper — New, Hot, Top with Velocity
Pricing
$1.00 / 1,000 posts
Reddit Subreddit Posts Scraper — New, Hot, Top with Velocity
Posts of public subreddits — new, hot, top, rising or controversial — page by page: title, text, link, kind, score, upvote ratio, comment count, exact time, flair, image, gallery and video, score and comments per hour, the subreddit's size; author karma on request. Only-new mode. No login.
Pricing
$1.00 / 1,000 posts
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Reddit Subreddit Posts Scraper — New, Hot, Top with Velocity 🚀
foXLabs Reddit series: Search · Post Details · Post Comments · User
🎉 Posts of any public subreddits, page by page, as Reddit shows them to a signed-out visitor: new, hot, top, rising or controversial, up to Reddit's own end of the listing. Every row carries the post's texts, numbers, exact times and media — and what other Reddit scrapers leave out: score and comments per hour, the upvote ratio, the subreddit's size, and each author's karma and account age when you ask for it. Only-new mode for recurring runs. No login, no cookies of yours, no CAPTCHA solving.
🔍 What is the Reddit Subreddit Posts Scraper — and when should you use it?
Give this Actor one or more public subreddits and it returns their posts as clean rows — in the order you pick, enriched with velocity, the upvote ratio and the subreddit's size (and each author's karma when includeAuthorInfo is on).
Use it when you need: a subreddit's feed (new/hot/top) as data; community monitoring with engagement signals; or a scheduled only-new feed.
Use something else when: you're searching by keyword → Search; you want a single post's comments → Post Comments; one user's history → User.
🤖 Use with AI agents
Already on the Apify MCP server? Ask for this Actor by name: foxlabs/reddit-subreddit-posts-scraper. An agent can discover it, run it and read the dataset over MCP.
Real-time Standby API. The same code answers HTTP requests on demand — GET /posts?subreddit=python&sort=new&maxPosts=25. Parameters: subreddit, sort, time, maxPosts (1–100), postKinds, info (0/1, default 1), authors (0/1, default 0 — each author costs one extra page read); billed with the same post event.
Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want a subreddit's posts using the Apify Actor`foxlabs/reddit-subreddit-posts-scraper`.Input: `subreddits` is a list of subreddits; `sort` is new/hot/top/rising/controversial;`time` applies to top/controversial. Each row has title, text, score, upvoteRatio, commentCount,scorePerHour, author and subredditInfo; add `includeAuthorInfo: true` for each author's karma.Start with:{ "subreddits": ["python"], "sort": "new", "maxPostsPerSubreddit": 50 }Ask me which subreddits to track, run the Actor, then summarise the posts as a table.
The machine-readable API, MCP config and OpenAPI definition live at apify.com/foxlabs/reddit-subreddit-posts-scraper.md.
📋 Overview
Everything you need to turn a public subreddit into clean, structured data — posts with velocity, the upvote ratio and the subreddit's size — in one Actor, with no login, cookies or CAPTCHA solving.
Why teams pick this Actor:
- ✅ Five orders — new, hot, top, rising, controversial (with a time window for top/controversial).
- ⚡ Velocity + upvote ratio — score/comments per hour and the ratio most Reddit scrapers leave out; the subreddit's size on every row; each author's karma and age on request.
- 🎯 Honest nulls & status rows — a line that brings nothing says why; a run never ends empty silently.
- 🔁 Only-new monitoring — schedule the same subreddits and get only what's new.
- 💰 Pay only for results — one
postevent per row (~$0.04 per 1,000 posts measured, author karma off); filtered-out and status rows free. - 🤖 Agent-ready — MCP + a real-time Standby API.
✨ Features
- 🔍 Any public subreddit — by name,
r/nameor URL. - 📄 Full post — ids, title, text, link, domain, kind (text/link/image/gallery/video/poll/crosspost), author, flair, image, gallery and video addresses.
- 📊 Engagement — score, upvote ratio, comments, awards, crossposts, and per-hour velocity.
- 🏷️ Subreddit record — subscribers and display name on every row with
includeSubredditInfo(one page read per subreddit). - 👤 Author karma — link/comment karma and the account's cake day with
includeAuthorInfo(one page read per author, so it is off unless you ask). - 🧾 What Reddit no longer shows a signed-out visitor — the edit time, the spoiler/locked/archived flags, a poll's votes and a crosspost's origin are
null; see Fields below. - 🔁 Only-new lists for recurring runs.
🎬 Quick Start
curl -X POST "https://api.apify.com/v2/acts/foxlabs~reddit-subreddit-posts-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"subreddits": ["python"], "sort": "new", "maxPostsPerSubreddit": 50}'
🚀 Getting Started (3 steps)
- Enter your subreddits — one per line:
python,r/pythonor a URL. - Pick order & period —
sort, andtimefor top/controversial. - Run and export — get a clean dataset as JSON, CSV or Excel.
📥 Input
| Field | Meaning |
|---|---|
subreddits | one per line: python, r/python or a URL; a subreddit named twice is read once. |
sort | new (default), hot, top, rising, controversial. |
time | for top/controversial: hour…all (default). |
maxPostsPerSubreddit | posts per subreddit (default 100). Reddit ends a listing after ~1,000. |
maxPosts | rows in the whole run (default 100,000). |
postKinds, minScore, minComments | keep only these; the rest are skipped and not charged. |
includeSubredditInfo | subreddit record on every row (default on). |
includeAuthorInfo | the author's karma and cake day — one profile-page read per author, so the run takes longer (default off). |
onlyNewPosts, listName | remember delivered posts and skip them next time. |
proxyConfiguration | nothing to change for normal use. |
{ "subreddits": ["python", "r/learnpython"], "sort": "new", "maxPostsPerSubreddit": 200, "postKinds": ["text", "link"], "minComments": 5 }
📤 Output
One row per post. A line that brings nothing gets a free status row saying why (not a subreddit, no such name, private, quarantined, Premium-only, empty, named twice).
| Field | What it is |
|---|---|
postId, fullname, url, subreddit, subredditId | ids and address |
title, text, link, domain, kind | title, text, linked address, domain, kind |
author, authorFlair, authorPremium, authorDeleted | who posted it |
score, upvoteRatio, commentCount, awardCount, crosspostCount | the numbers |
createdAt, editedAt, hoursSincePost, scorePerHour, commentsPerHour | times and velocity |
| flags | nsfw, spoiler, locked, stickied, archived, distinguished, originalContent, removedBy |
crosspostOf, thumbnailUrl, imageUrl, video, galleryImages, poll | crosspost origin and media |
subredditSubscribers, subredditInfo | the subreddit's size and record (includeSubredditInfo, one page read per subreddit) |
authorInfo | the author's karma and cake day (includeAuthorInfo, one page read per author) plus the avatar |
Always null since 16 October 2026 — Reddit closed the JSON API this Actor used to read as a signed-out
visitor, and its web pages do not carry these: editedAt, spoiler, locked, archived, originalContent,
removedBy, distinguished, crosspostOf, crosspostCount, poll (the kind is still poll, the votes are not
shown), thumbnailUrl, authorPremium. nsfw and stickied arrive on media posts only. Everything else above is
measured filled — see the Changelog.
| position, input, scrapedAt, type, error | place; input line; row type / free status row |
{"type": "post","postId": "1x2jj5d","url": "https://www.reddit.com/r/Python/comments/1x2jj5d/…/","subreddit": "Python","title": "A Jev-style regex, use meaning instead of rules","kind": "text","author": "iohans","score": 42,"upvoteRatio": 0.95,"commentCount": 11,"createdAt": "2026-10-10T16:29:58.000Z","scorePerHour": 24.7,"flair": "Showcase","subredditSubscribers": 1516618,"authorInfo": { "linkKarma": 853, "commentKarma": 2, "createdAt": "2020-05-24T00:00:00.000Z", "avatarUrl": "https://styles.redditmedia.com/…" }}
💼 Use cases
1. Community monitoring — watch a subreddit's new posts and what's rising.
Input: your subreddits, sort: new, onlyNewPosts scheduled. Output: new posts + velocity. Use: a live community feed.
2. Trend & content research — the top posts of a window.
Input: subreddits, sort: top, time: month, includeAuthorInfo: true. Output: top posts + author karma. Use: learn what wins in a community.
3. Dataset building — a subreddit's recent history for analysis.
Input: subreddits, high maxPostsPerSubreddit. Output: up to ~1,000 posts each. Use: feed analysis or ML.
🔗 Integration
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('foxlabs/reddit-subreddit-posts-scraper').call({subreddits: ['python'], sort: 'new', maxPostsPerSubreddit: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('foxlabs/reddit-subreddit-posts-scraper').call(run_input={'subreddits': ['python'], 'sort': 'new', 'maxPostsPerSubreddit': 50})for item in client.dataset(run.default_dataset_id).iterate_items():print(item)
Written for apify-client 3 for Python, where call() returns a run object; with version 1 or 2 it returns a dict — write run['defaultDatasetId'] there.
Automation (n8n / Zapier / Make): schedule → HTTP request to the Actor API with your subreddits → handle the JSON dataset → push to a sheet, CRM or dashboard.
📊 Pricing
Pay per event, one event per delivered row: post — whatever it carries (the subreddit's and author's records ride along free). Measured ~$0.02 per 1,000 posts. Status rows are free; filtered-out posts aren't written or charged; a run Reddit doesn't answer ends FAILED and charges nothing; no start fee. View current pricing.
❓ FAQ
Do I need a Reddit account, login or API key? No. It reads the pages Reddit's own site renders for a signed-out visitor — no account, no cookies of yours, no CAPTCHA solving.
How many posts per subreddit? Reddit ends a listing after ~1,000, whatever you ask for. For the whole history, use top across several time windows, or run new on a schedule with only-new.
Can I filter by kind/score/comments? Yes — postKinds, minScore, minComments; filtered-out posts aren't charged.
Why is subredditInfo.activeUsers null? Reddit doesn't give that number to a signed-out visitor.
Can I export to CSV / Excel / JSON? Yes — directly from the Apify dataset.
🐛 Troubleshooting
- ~1,000 posts max per subreddit — Reddit's own cap; use
top+timewindows or scheduled only-new for more. - A line returns a status row — private, quarantined, Premium-only, no such subreddit, or named twice (free).
- Share links (
/r/x/s/…) aren't accepted — this Actor reads listings, not single posts. - Scores look slightly off — Reddit fuzzes scores by design.
How it reads Reddit: opens the listing page as a signed-out visitor for its cookies, then reads the feed fragments Reddit's own web client asks for — 24 posts and a cursor at a time, page after page. Reddit answers these for residential addresses only (measured 2026-10-17: residential 200, datacenter 403), so Apify Proxy residential is used by default; four addresses rotate and a refused or used-up one is replaced.
⚠️ Trademark
Independent, third-party tool. Reddit is a trademark of Reddit, Inc.; this Actor is not affiliated with, endorsed by or connected to Reddit. The mark is used here for identification only.
⚖️ Is it legal to scrape this data?
It reads only what Reddit shows anyone who is not signed in. Rows carry user names (public pseudonyms) and publicly posted text; you are responsible for using them lawfully (GDPR, CCPA, Reddit's User Agreement). Nothing is stored outside your own Apify datasets. See Apify's blog post on the legality of web scraping.
🤝 Support & contact
- 🌐 Website: data.foxlabs.com.tr
- 📧 Email: info@foxlabs.com.tr
- 🐛 Issues: open a ticket in the Actor's Issues tab — the run's
SOURCE_REPORTrecord holds what was seen, read, delivered and why the run stopped. - 🧰 More clean data actors: Fox Labs on Apify
Changelog
0.2.1 — 2026-10-17
An address Reddit turns away answers with a page of the right size and nothing in it; the Actor now notices that, lets that address go and tries another, so a refusal is never reported as "this subreddit has no posts". A line that still comes back empty is free and retryable. The subreddit's record is retried on a second post, and the authors' karma is read only for the posts the run hands on.
0.2.0 — 2026-10-17
Reddit closed its JSON API to signed-out visitors on 16 October 2026 (HTTP 403 for a guest token, from any
address), so this Actor now reads the pages Reddit's own web client renders. Field names, the dataset shape, the
post event and its price are unchanged. What changed: Reddit's pages give 24 posts a request instead of 100
(long single-subreddit runs take longer); editedAt, spoiler, locked, archived, originalContent,
removedBy, distinguished, crosspostOf, crosspostCount, thumbnailUrl, authorPremium and a poll's votes
are null, and nsfw/stickied arrive on media posts only; includeAuthorInfo is off by default because the
karma is now one profile-page read per author; subredditInfo carries the subscriber count, display name and
description (age/type/language null). Status rows still say why a subreddit brought nothing — from its RSS when
Reddit's pages do not say — and charge nothing. Measured cost: ~$0.04 per 1,000 posts with karma off.
0.1.0 — 2026-10-10
- First release: new/hot/top/rising/controversial listings of public subreddits with velocity fields, subreddit record and author karma on every row; kind/score/comment filters; only-new lists; free status rows for lines that bring nothing; Standby API prepared.