Reddit Subreddit Posts Scraper avatar

Reddit Subreddit Posts Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Reddit Subreddit Posts Scraper

Reddit Subreddit Posts Scraper

Get posts from any public subreddit by sort (hot/new/top/rising/controversial) and time filter. Bulk-paginated.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Farhan Febrian Nauval

Farhan Febrian Nauval

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

12 days ago

Last modified

Categories

Share

Bulk-fetch posts from any public subreddit by sort order — hot, new, top, rising, or controversial — with optional time-window filtering and pagination.

Why use this actor

  • No account / no login required — just give it a list of subreddit names.
  • All five sort modeshot, new, top, rising, controversial, plus a top / controversial time filter (hour, day, week, month, year, all).
  • Bulk input — scrape multiple subreddits in a single run; one clean dataset row per post.
  • Anonymous-friendly — works out of the box without any token; pass an optional Reddit app token for higher rate limits on large jobs.
  • Automatic retries and fallbacks — transient failures retry with backoff; private / banned subreddits surface as _error rows so you can triage failures.
  • Stable JSON output suitable for pipelines, spreadsheets, and databases — every row carries _input, _source, _scrapedAt envelope fields so you can join results back to your input list.

How it works

  1. You provide a list of subreddit names (e.g. python, r/MachineLearning) and pick a sort order.
  2. The actor walks the subreddit's post listing, paginating until it reaches maxPosts or the end of the feed.
  3. Each post is normalized into a flat JSON record with title, author, score, comment count, permalink, URL, media, flair, and timestamps.
  4. Results stream into your dataset, ready to download as JSON, CSV, or Excel.

You do not need to manage scrapers, browsers, or rotating IPs — all handled internally.

Input

{
"subreddits": ["python", "MachineLearning"],
"sort": "hot",
"timeFilter": "all",
"maxPosts": 25,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["DATACENTER"]
}
}
FieldTypeDescription
subredditsarraySubreddit names to scrape. Accepts plain names (python), r/-prefixed (r/python), or full URLs.
sortstringOne of hot, new, top, rising, controversial. Default hot.
timeFilterstringOne of hour, day, week, month, year, all. Only applied when sort is top or controversial. Default all.
maxPostsintegerMaximum posts per subreddit. 0 = fetch all available (Reddit caps listings at roughly 1,000). Default 25.
redditClientIdstringOptional Reddit app token for higher rate limits. Leave blank for anonymous access.
proxyConfigurationobjectApify Proxy settings. Datacenter proxy works for most subreddits.

Sort and time-filter reference

sort valueMeaning
hotReddit's front-page algorithm — recent + high-engagement mix.
newStrictly chronological, newest first.
topHighest-scoring posts within the chosen timeFilter.
risingPosts gaining engagement velocity right now.
controversialPosts with high up/down split within the chosen timeFilter.
timeFilter valueWindow
hourLast 60 minutes
dayLast 24 hours
weekLast 7 days
monthLast 30 days
yearLast 365 days
allSince the subreddit was created (default)

Output

Input: subreddits: ["AskReddit"], sort: "hot", maxPosts: 3

[
{
"_input": "AskReddit",
"_source": "S3-fallback",
"_scrapedAt": "2026-05-18T11:10:22.012033+00:00",
"id": "1tg56u8",
"name": "t3_1tg56u8",
"subreddit": "AskReddit",
"subreddit_name_prefixed": "r/AskReddit",
"subreddit_id": "t5_2qh1i",
"subreddit_subscribers": 58575107,
"title": "Who destroyed their own career within seconds by being an idiot?",
"author": "goldbeau",
"author_fullname": "t2_2dwkdlsms4",
"ups": 7687,
"score": 7687,
"upvote_ratio": 0.95,
"num_comments": 4941,
"num_crossposts": 2,
"permalink": "/r/AskReddit/comments/1tg56u8/who_destroyed_their_own_career_within_seconds_by/",
"url": "https://old.reddit.com/r/AskReddit/comments/1tg56u8/who_destroyed_their_own_career_within_seconds_by/",
"domain": "self.AskReddit",
"is_self": true,
"is_video": false,
"thumbnail": "",
"media": null,
"link_flair_text": null,
"over_18": false,
"spoiler": false,
"stickied": false,
"locked": false,
"archived": false,
"created_utc": 1779060093.0
},
{
"_input": "AskReddit",
"_source": "S3-fallback",
"_scrapedAt": "2026-05-18T11:10:22.012033+00:00",
"id": "1tg4gql",
"name": "t3_1tg4gql",
"subreddit": "AskReddit",
"title": "What are some lazy jobs that pay a ridiculous amount of money?",
"author": "Jordz0_0",
"ups": 2999,
"score": 2999,
"upvote_ratio": 0.88,
"num_comments": 1463,
"permalink": "/r/AskReddit/comments/1tg4gql/what_are_some_lazy_jobs_that_pay_a_ridiculous/",
"url": "https://old.reddit.com/r/AskReddit/comments/1tg4gql/what_are_some_lazy_jobs_that_pay_a_ridiculous/",
"domain": "self.AskReddit",
"is_self": true,
"over_18": false,
"created_utc": 1779058246.0
}
]

Output field reference

FieldTypeDescription
_inputstringThe subreddit name exactly as you supplied it. Use this to join results back to your input list.
_sourcestringInternal tag for the path used to fetch the record. S1-primary = fastest authenticated path (used when you supply redditClientId); S2-fallback / S3-fallback = anonymous public paths used when the primary is unavailable or you didn't pass a token.
_scrapedAtstringISO-8601 UTC timestamp when the record was scraped.
idstringPost ID without prefix (e.g. 1tg56u8).
namestringFully-qualified Reddit ID with t3_ prefix.
subredditstringSubreddit name (without r/).
subreddit_name_prefixedstringSubreddit with r/ prefix.
subreddit_idstringReddit's internal subreddit ID (t5_ prefix).
subreddit_subscribersintegerSubscriber count at scrape time.
titlestringPost title.
authorstringAuthor's Reddit username.
author_fullnamestringAuthor's Reddit user ID (t2_ prefix).
ups / scoreintegerNet upvote count.
upvote_rationumberRatio of upvotes to total votes (0.0–1.0).
num_commentsintegerComment count.
num_crosspostsintegerHow many times the post has been crossposted.
permalinkstringRelative URL to the post on reddit.com.
urlstringLinked URL — for self-posts this is the Reddit thread; for link posts this is the external URL.
domainstringDomain of url (e.g. self.AskReddit, github.com).
is_selfbooleantrue if the post is a text post, false for link / image / video posts.
is_videobooleantrue if the post is a Reddit-hosted video.
thumbnailstringThumbnail image URL (empty string for self-posts).
mediaobjectEmbedded media metadata when present (video, gallery, etc.); null for text / link posts.
link_flair_textstringPost flair text, or null if no flair is set.
over_18booleanNSFW flag — posts marked NSFW are returned with over_18: true.
spoilerbooleantrue if the post is marked as a spoiler.
stickiedbooleantrue if the post is pinned to the top of the subreddit.
lockedbooleantrue if comments are locked.
archivedbooleantrue if the post is older than 6 months and no longer editable.
created_utcnumberPost creation time as a Unix timestamp (seconds).

Error envelope

Subreddits that don't exist, are private, banned, or fail to fetch return a structured error instead of crashing the run:

{
"_input": "this-subreddit-does-not-exist-xyz",
"_source": "S2-fallback",
"_scrapedAt": "2026-05-18T11:10:22.012033+00:00",
"_error": "fetch_failed",
"_errorDetail": "NotFound https://www.reddit.com/r/this-subreddit-does-not-exist-xyz/hot.json"
}

Filter on _error to triage failed rows.

Pricing

This actor is billed per result: $3.50 per 1,000 posts. Each successful post = 1 result. Error rows (private / banned / not-found subreddits) are not billed.

Other Sosmed Actors

PlatformActorBest for
RedditReddit User Profile ScraperKarma, account age, trophies for any Reddit user
RedditReddit Search ScraperKeyword search globally or within a single subreddit
RedditReddit Post Detail ScraperSingle post + full nested comments tree
YouTubeYouTube Channel ScraperRecent uploads, view counts, and channel metadata
BlueskyBluesky Search ScraperKeyword search across the atproto network
TelegramTelegram Channel Posts ScraperPublic Telegram channel post history
MastodonMastodon Account ScraperProfile + toot history for any Mastodon handle

Browse the full catalog at apify.com/xtracto.

Notes

  • Private, banned, or quarantined subreddits return {"_error": "fetch_failed", ...} rather than partial data — filter on _error to triage.
  • NSFW posts are returned with over_18: true set; filter them client-side if you need a SFW-only dataset.
  • For jobs larger than ~1,000 posts per subreddit, register a free Reddit app at reddit.com/prefs/apps and pass redditClientId — anonymous access is rate-limited and large bulk runs will be noticeably slower without a token.
  • Reddit listings are capped at roughly 1,000 posts per sort regardless of maxPosts; for deeper history use the companion Reddit Search Scraper with date filters.
  • Need a single post with its full comments tree? Use Reddit Post Detail Scraper. Need a user's submission history? Use Reddit User Profile Scraper.