Reddit Scraper avatar

Reddit Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Reddit Scraper

Reddit Scraper

Scrape entire subreddits with this crawler. Returns the posts in a subreddit along with their title, text, scores and timestamps etc.

Pricing

from $1.00 / 1,000 results

Rating

4.8

(9)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

15

Bookmarked

855

Total users

57

Monthly active users

6 days ago

Last modified

Share

Reddit Subreddit Scraper

Scrape Reddit subreddits without an API key or login. Pull posts (hot, new, top, rising, controversial, best) from any subreddit with 100+ fields per post — score, upvote ratio, author, flairs, media, awards, moderation flags — plus optional full comment threads with nested replies. Filter by date range, post type, score/comment thresholds, keywords, authors and more. A residential proxy is applied automatically on every run — there's nothing to configure.

What this actor does

  • Scrape any subreddit by bare name (python), r/-prefixed name (r/python) or full URL — scrape multiple subreddits in a single run
  • 100+ fields per post: score, upvotes, upvote ratio, comment count, author + author flair, community + subscriber count, media (images, galleries, video, polls, external embeds), flairs, awards, moderation flags and timestamps
  • Optional full comment threads with nested replies, depth, parent links and OP flags, in any of Reddit's 6 comment sort orders
  • Rich filtering: 6 sort orders, time windows, date ranges, post type, score/comment-count/upvote-ratio thresholds, keyword and author allow/deny lists, and more
  • Empty fields are omitted from the output — no need to defend against null/empty values in your downstream pipeline

Output per post

Identity & contextdataType (always post), subreddit, subreddit_prefixed, subreddit_id, subreddit_subscribers, subreddit_type, post_id, post_name, title, url (canonical reddit.com permalink), permalink, content_url (the external link, or the permalink for text posts), domain, url_overridden_by_dest, post_hint, is_self, post_type (self/link/image/video/gallery/poll), content (self-post body, markdown), content_html (self-post body, HTML)

Authorauthor, author_id, author_flair, author_flair_background_color, author_flair_text_color, author_flair_type, author_flair_css_class, author_flair_richtext, author_flair_template_id, author_premium, author_is_blocked, author_patreon_flair

Engagementscore, ups, downs (always 0 — Reddit's public API doesn't expose downvotes), upvote_ratio, num_comments

Mediamedia_type (text/link/image/video/gallery/embed), has_media, images[], gallery_images[] (full resolution), gallery_count, video_url (direct MP4 for Reddit-hosted video), video_duration_seconds, video_width, video_height, video_has_audio, video_bitrate_kbps, poll_data (options, vote count, end time), thumbnail_url, thumbnail_width, thumbnail_height, embed_provider, embed_type, embed_title, embed_author_name, embed_thumbnail_url, embed_html, embed_width, embed_height (oEmbed metadata for link posts to YouTube/Imgur/Twitch/Vimeo/etc., when Reddit has cached it)

Flairlink_flair, link_flair_background_color, link_flair_text_color, link_flair_type, link_flair_css_class, link_flair_richtext, link_flair_template_id

Flags & moderationis_stickied, is_locked, is_archived, is_pinned, is_nsfw, is_spoiler, is_original_content, is_created_from_ads_ui (posted via Reddit's Ads Manager, even though it looks organic), is_crosspost, is_crosspostable, num_crossposts, num_duplicates, crosspost_parent_id, media_only, is_reddit_media_domain, quarantine, allow_live_comments, send_replies, no_follow, hide_score, content_categories, contest_mode, suggested_sort, is_meta, is_robot_indexable, gilded, total_awards_received, awards (award-type breakdown: name, count, coin price, icon URL), removed_by_category (who removed it: moderator/reddit/author/etc.), distinguished (moderator/admin badge), hidden

Timestamps & metadatacreated_utc, created_at (ISO-8601), edited, edited_at, crawled_at, source (json or dom), search_term (only populated on search-sourced runs; empty for subreddit scrapes)

Output per comment

Returned when includeComments is enabled.

IdentitydataType (always comment), subreddit, subreddit_prefixed, subreddit_id, subreddit_type, post_id, comment_id, comment_name, link_id (fullname of the parent post), parent_id (fullname of the parent post or comment), parent_kind, depth (0 = top-level), is_op (author is also the post's author)

Authorauthor, author_id, author_flair, author_flair_background_color, author_flair_text_color, author_flair_type, author_flair_css_class, author_flair_richtext, author_flair_template_id, author_premium, author_is_blocked, author_patreon_flair

Contentbody (markdown), body_html

Engagementscore, ups, downs (always 0), score_hidden, controversiality

Flags & moderationis_stickied, is_locked, archived (locked from voting/replies after 6 months), collapsed, collapsed_reason, collapsed_reason_code, collapsed_because_crowd_control, can_gild, comment_type, unrepliable_reason, no_follow, send_replies, gilded, total_awards_received, awards, removed_by_category, distinguished

Parent post contextpost_url, post_title

Timestamps & metadatapermalink, created_utc, created_at, edited, edited_at, crawled_at, source, search_term

Input

FieldTypeDefaultDescription
subredditsarrayrequiredSubreddit names, r/-prefixed names or full URLs
maxPostsint25Max posts per subreddit (1–5,000; raise for full-subreddit mode)
maxItemsint10,000Global safety cap on total records (posts + comments) for the whole run (1–100,000)
sortenumhothot, new, top, rising, controversial, best
timeFilterenumdayhour, day, week, month, year, all (for top/controversial)
includeCommentsboolfalseCollect the full comment thread of every scraped post
maxCommentsPerPostint0 (unlimited)Max comments per post (when includeComments is on)
commentSortenumconfidenceconfidence, top, new, controversial, old, qa
postedAfterdateOnly posts created on/after this date (UTC); switches to chronological collection
postedBeforedateOnly posts created on/before this date (UTC)
includeNSFWboolfalseInclude 18+ posts
onlyWithFlairboolfalseDrop posts without a flair tag
postTypeenumKeep only self, link, image, video, gallery or poll posts. Leave unset to keep all types
minScoreintKeep only posts with a score at or above this value (-100,000–1,000,000)
maxScoreintKeep only posts with a score at or below this value (-100,000–1,000,000)
minCommentsintKeep only posts with at least this many comments (0–1,000,000)
maxCommentsintKeep only posts with at most this many comments (0–1,000,000)
minUpvoteRationumberKeep only posts with an upvote ratio at or above this value (0–1)
excludeStickiedboolfalseDrop mod-stickied/pinned posts
excludeRemovedboolfalseDrop posts removed by a moderator/Reddit or deleted by their author
excludeCrosspostsboolfalseDrop crossposted posts, keeping only original submissions
excludeSpoilersboolfalseDrop posts tagged as a spoiler by their author
titleContainsstringKeep only posts whose title contains this text (case-insensitive)
contentContainsstringKeep only self posts whose body contains this text (case-insensitive)
flairContainsstringKeep only posts whose flair text contains this text (case-insensitive)
authorFlairContainsstringKeep only posts whose author flair text contains this text (case-insensitive)
distinguishedenummoderator, admin, special (official posts only) or none (exclude all distinguished posts)
authorsarrayKeep only posts submitted by these usernames
domainstringKeep only posts whose link domain contains this text (e.g. youtube.com)
minAwardsintKeep only posts with at least this many total awards (0–1,000,000)
onlyOriginalContentboolfalseKeep only posts tagged by their author as original content (OC)
excludeLockedboolfalseDrop posts whose comments were locked by a moderator
excludeDeletedAuthorboolfalseDrop posts whose author account was deleted
excludeArchivedboolfalseDrop posts Reddit has archived (locked after 6 months)
excludeAuthorsarrayDrop posts submitted by these usernames (e.g. bots like AutoModerator)
excludeKeywordsarrayDrop posts whose title, body or flair contains any of these keywords
minContentLengthintKeep only self posts whose body is at least this many characters (0–1,000,000)
maxContentLengthintKeep only self posts whose body is at most this many characters (0–1,000,000)
fullSubredditboolfalseWalk new as deep as Reddit allows instead of the first pages

Example: hot posts from a single subreddit

{
"subreddits": ["python"],
"maxPosts": 50,
"sort": "hot"
}

Example: full comment threads with a keyword filter

{
"subreddits": ["technology"],
"maxPosts": 20,
"includeComments": true,
"maxCommentsPerPost": 50,
"commentSort": "top",
"titleContains": "AI"
}

Example: date-range collection with engagement filters

{
"subreddits": ["worldnews"],
"postedAfter": "2025-06-01",
"postedBefore": "2025-06-30",
"minScore": 500,
"minUpvoteRatio": 0.8,
"excludeStickied": true
}

Example: multi-subreddit brand monitoring

{
"subreddits": ["startups", "Entrepreneur", "SaaS"],
"maxPosts": 100,
"sort": "new",
"postType": "self",
"excludeAuthors": ["AutoModerator"],
"excludeKeywords": ["megathread", "giveaway"]
}

Use cases

  • Market research — analyze authentic community opinions and pain points
  • Brand monitoring — track mentions of your product across relevant subreddits (schedule daily runs)
  • Content ideation — find viral topics and trending questions in your niche
  • Training data — build large, clean Reddit corpora for NLP / LLM fine-tuning
  • Competitive intelligence — monitor competitor discussions and launches
  • Academic & social research — export a subreddit's history for sentiment or discourse analysis

FAQ

Do I need a Reddit API key or login? No. The actor uses Reddit's public web data — no API key, no OAuth, no cookies, no account.

Do I need a proxy? No action needed on your part. Reddit blocks datacenter IPs (the free Apify AUTO group and no-proxy runs get HTTP 403 from the JSON API), so this actor always routes requests through an Apify RESIDENTIAL proxy automatically — it's hardcoded and not a configurable input, so every run is protected without you having to set anything up.

Is Reddit scraping legal? Scraping publicly available data is generally allowed, but you must comply with Reddit's terms of service and use the data responsibly. Don't exceed reasonable request rates, and respect the site's usage policies.

How many posts can I get from one subreddit? Reddit serves roughly 1,000 posts per listing. fullSubreddit mode walks as deep as Reddit allows; combining it with postedAfter lets you target a specific date window.

What is maxItems for? It's a global safety cap on the total number of records (posts + comments) pushed for the run — useful for bounding cost on large multi-subreddit jobs. Collection stops once the cap is reached.

What does removed_by_category mean? It tells you who removed a post or comment: moderator, automod_filtered, reddit, content_takedown (legal), author/deleted. Live posts simply don't have this field.

Can I get subreddit moderator lists or follower/member growth history? No. Only the current subscriber count (subreddit_subscribers) is part of the public data; moderator lists and historical follower counts aren't exposed.

Why is downs always 0? Reddit's public API doesn't expose raw downvote counts to anonymous users — only score and upvote_ratio reflect real voting data.

Can I schedule recurring runs? Yes — set up a schedule in Apify Console for daily/weekly brand monitoring or trend tracking.

How do I integrate the data with other tools? Export to JSON, CSV, Excel, XML or HTML; call via REST API; connect to n8n, Zapier or Make; or expose it to AI agents via the Apify MCP server.