Reddit Subreddit Feed Scraper - Posts by Sort Order avatar

Reddit Subreddit Feed Scraper - Posts by Sort Order

Pricing

from $1.70 / 1,000 results

Go to Apify Store
Reddit Subreddit Feed Scraper - Posts by Sort Order

Reddit Subreddit Feed Scraper - Posts by Sort Order

Reads any subreddit's post listing in Best, Hot, New, Top, Rising, or Controversial order and returns one row per post: id, permalink, title, author, score, upvote ratio, comment count, flair, post type, and creation time. Paging is automatic, and a run resumes where an earlier one stopped.

Pricing

from $1.70 / 1,000 results

Rating

0.0

(0)

Developer

The Netaji

The Netaji

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Reddit Subreddit Feed Scraper

The Actor reads one subreddit's post listing and saves a structured record for every post it returns. The listing is read in one of six orders (best, hot, new, top, rising, controversial), paged automatically until the requested number of posts is reached, and can be resumed in a later run from the point the previous one stopped. It covers post listings only; comment trees, user profiles, and subreddit rules are not part of its output. No Reddit account, application, or API credential is involved.

Accepted input

FieldRequiredDefaultNotes
subreddityesA bare name (AskReddit), a prefixed name (r/AskReddit), or a copied reddit.com link. A link is reduced to the subreddit it names; any sort or time already in that link is discarded in favour of the fields below.
sortnobestOne of best, hot, new, top, rising, controversial.
timenoOne of HOUR, DAY, WEEK, MONTH, YEAR, ALL. Read only by top and controversial.
maxItemsno100Total posts to save across the whole run. 0 removes the bound.
afternoA resume point from an earlier run: a cursor, or the id of a post already collected.
{
"subreddit": "r/dataisbeautiful",
"sort": "top",
"time": "MONTH",
"maxItems": 50
}

Response fields

Each saved record carries: id, fullname, permalink, url, title, subreddit, subreddit_prefixed, subreddit_id, author, author_id, author_icon, created_at, score, upvote_ratio, comment_count, award_count, domain, content_url, post_type, flair, flair_url, thumbnail, media, text, nsfw, spoiler, locked, archived, and language.

id is the post id as it appears in a permalink; fullname is the same id carrying Reddit's t3_ prefix, which is the form the after field accepts. permalink is the path Reddit states for the post, beginning with /r/, and url is that same address in absolute form; content_url is where the post itself points, which is the outbound link on a link post. created_at is an ISO 8601 timestamp in UTC. score, upvote_ratio, comment_count, and award_count are values at the moment the listing was read, and a second run over the same posts will differ from the first.

{
"id": "1abcdef",
"fullname": "t3_1abcdef",
"permalink": "/r/dataisbeautiful/comments/1abcdef/example_title/",
"url": "https://www.reddit.com/r/dataisbeautiful/comments/1abcdef/example_title/",
"content_url": "https://i.redd.it/example.jpeg",
"title": "Example title",
"subreddit": "dataisbeautiful",
"subreddit_prefixed": "r/dataisbeautiful",
"author": "example_user",
"created_at": "2026-08-14T09:41:07.000Z",
"score": 1842,
"upvote_ratio": 0.94,
"comment_count": 317,
"post_type": "image",
"domain": "i.redd.it",
"flair": "OC",
"nsfw": null
}

Sort orders and the time window

All six orders were checked against the same subreddit, and each returned a distinct ordering rather than a repackaging of one result set; sort is worth setting deliberately instead of leaving on the best default.

Only top and controversial read time. Setting it alongside any other order has no effect, so the Actor does not send it in that case and writes a line in the run log saying so. Where time does apply, it steers Reddit's ranking rather than acting as a date filter, and the ages of the returned posts do not always fall strictly inside the named period; a run sorted by top with time set to WEEK returned posts considerably older than seven days. When an exact date range matters, filter the saved records on created_at rather than relying on time to do it.

Pagination, limits, and resuming

maxItems bounds the number of posts saved, not the number of requests made; paging is settled before a response is returned, so a run asking for 150 posts is answered with up to 150 posts rather than a first page of 25 and a stack of follow-up work. A run that receives fewer posts than it asked for has reached the end of what the listing will serve, not a short page, and it stops there rather than retrying. Setting maxItems to 0 removes the bound and the run continues until the listing reports the end of the feed.

The continuation point is derived from the last post returned rather than being an opaque session token, which is what makes it durable: a run ends by writing the value to use next into the run log, and passing that value as after in a later run continues the same listing from that post. This holds across separate runs and across days, so a subreddit can be collected in scheduled instalments instead of one long run. The vote-ranked orders reorder themselves as votes arrive, so resuming one of them continues from a position in a listing that may have moved in the meantime; new is the stable choice when instalments have to join up exactly.

Fields that are frequently absent

media, text, and nsfw are the three fields most often empty, and they are empty for ordinary reasons rather than as a failure. text carries the body of a self post and is empty for link, image, and video posts, which have no body. media is populated only when the listing itself carries the attachment, which link posts do not. In one run over a link-heavy subreddit, all 24 returned posts had media, text, and nsfw empty at once.

nsfw has three states, and the third one matters. true means Reddit reported the over-18 mark, false means Reddit reported its absence, and null means the listing reported nothing either way. A null is an absence of information, not a statement that the post is safe for work. The Actor offers no NSFW filter for the same reason: filtering on a field that is frequently unknown would produce a result set that looks filtered without being filtered. Records can be filtered downstream on nsfw === true, provided the null cases are treated as unknown rather than as safe.

Failures and partial results

A subreddit value that cannot be reduced to a community name is rejected before any request is made, with a message naming what was received. A request that fails ends the run; posts already saved remain in the dataset, and the run log holds the resume point, so a failed long run is continued rather than restarted. Fields absent from the listing are returned as null rather than omitted, so the column set is the same in every record.

Cost

Charging is per post saved to the dataset, plus the platform's one-off Actor start event. A run that saves nothing is charged for nothing beyond that start event, and a post is charged when it is saved, never when it is merely requested. Setting maxItems is therefore the direct control on what a run costs.

  • Reddit Post Details Scraper — the full record for one post found here, including the body text and media a listing does not carry.
  • Reddit Comment Tree Scraper — a post's comments, flat, with the depth and parent needed to rebuild the thread.
  • Reddit Subreddit Details Scraper — the community itself: description, age, activity, and rules.
  • Reddit Scraper - All In One — the same read alongside the other eight, chosen at run time.

Support

Questions, bug reports, and requests for a field that is not here yet: thenetaji@proton.me.