Reddit Popular Feed Scraper - Trending Posts avatar

Reddit Popular Feed Scraper - Trending Posts

Pricing

from $2.13 / 1,000 results

Go to Apify Store
Reddit Popular Feed Scraper - Trending Posts

Reddit Popular Feed Scraper - Trending Posts

Reads Reddit's popular listing across every community and returns one row per post: id, permalink, title, author, score, upvote ratio, comment count, flair, post type, and creation time. The listing repeats posts between reads, so repeats are counted once and a run saves distinct posts.

Pricing

from $2.13 / 1,000 results

Rating

0.0

(0)

Developer

The Netaji

The Netaji

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

10 days ago

Last modified

Share

Reddit Popular Feed Scraper

The Actor reads Reddit's popular listing — the cross-community feed of what the site is carrying right now — and saves a structured record for every post it returns. It covers that one listing: a named subreddit, an account's history, and a post's comments are the jobs of the sibling Actors named at the end. No Reddit account, application, or API credential is involved.

Accepted input

FieldRequiredDefaultNotes
maxItemsno100Total distinct posts to save across the whole run. 0 removes the bound.
afternoA continuation point from an earlier run: the value the run log prints when it stops, or the id of a post already collected.

There is no subreddit field and no sort field, because the popular listing has neither. It is one feed in one order, and that order is Reddit's own.

{
"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.

permalink is the path Reddit states for the post, beginning with /r/; url is the same address in absolute form. content_url is where the post itself points — an outbound link, an image, or a hosted video — and domain says which of those it is. created_at is an ISO 8601 timestamp in UTC.

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

The popular listing samples as much as it pages. Two reads of it a moment apart return overlapping but not identical sets, and a longer read serves the same post more than once: a deep walk returned roughly four distinct posts for every five rows it was given. The Actor therefore counts distinct posts. A post already saved in the run is recognised and skipped rather than written twice, and maxItems bounds posts saved rather than rows fetched, which is the only way that number can mean what it says.

The consequence worth planning around is that this listing has no fixed order to return to. Two runs of the same input will not produce the same list in the same sequence, and a record present in one run may be absent from the next without having been deleted. The listing is a picture of what Reddit is promoting at the moment of the read; it is not a stable index of anything. Work that needs a reproducible set should read a named subreddit sorted by new instead, which does page rather than sample.

Because the listing repeats itself, a run costs somewhat more upstream reading per saved post than its page size suggests. That is the trade for the count being honest.

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 and a stack of follow-up work. Setting maxItems to 0 removes the bound and the run continues until the listing reports that it has no more to give.

A run that stops with more available writes its continuation point into the run log, and passing that value as after in a later run continues from that post. The continuation point is derived from the last post saved rather than being a session token, so it does not expire. It is worth remembering what it continues, though: on a listing that re-ranks between reads, resuming continues from a position in a feed that has moved in the meantime.

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.

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 request that fails ends the run. Posts already saved remain in the dataset and the run log holds the continuation 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 distinct post saved to the dataset, plus the platform's one-off Actor start event. A post served twice is charged once, because it is saved once. A run that saves nothing is charged for nothing beyond that start event, so maxItems is the direct control on what a run costs.

  • Reddit Subreddit Feed Scraper — one named community, in a chosen order, and a feed that pages rather than samples.
  • Reddit Keyword Search Scraper — for finding posts about a subject rather than reading what is currently promoted.
  • 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.