Vexaloom Labs

Reddit Subreddit Post & Comment Harvester

Pull posts from any subreddit with score, media, flairs, awards and moderation flags, plus optional nested comment threads. Filter by date, score, keyword, author, post type and more. No API key or login.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
subredditsarrayrequiredList of subreddits to scrape. Accepts bare names (python), r/ prefixed (r/python) or full URLs (https://www.reddit.com/r/python/).
maxPostsintegeroptionalMaximum number of posts to keep from each subreddit after filters. Reddit serves roughly 1,000 posts per hot/new listing and about 500 for top/controversial.
maxItemsintegeroptionalGlobal safety cap on the total number of records pushed for the whole run (posts and comments combined).
Show all input fields
FieldTypeRequiredDescription
subredditsarrayrequiredList of subreddits to scrape. Accepts bare names (python), r/ prefixed (r/python) or full URLs (https://www.reddit.com/r/python/).
maxPostsintegeroptionalMaximum number of posts to keep from each subreddit after filters. Reddit serves roughly 1,000 posts per hot/new listing and about 500 for top/controversial.
maxItemsintegeroptionalGlobal safety cap on the total number of records pushed for the whole run (posts and comments combined).
sortstringoptionalHow to sort posts in the subreddit. Reddit serves roughly 1,000 posts per hot/new listing and about 500 for top/controversial.
timeFilterstringoptionalTime filter when sorting by 'top' or 'controversial'.
includeCommentsbooleanoptionalWhen enabled, the full comment thread (including nested replies) is collected for every scraped post. Significantly increases run time and output.
maxCommentsPerPostintegeroptionalMaximum number of comments to scrape per post (only used when 'Include comments' is enabled).
commentSortstringoptionalHow to sort the comment threads.
postedAfterstringoptionalOnly keep posts created on or after this date (UTC). When set, collection runs newest-first (sort=new) and the sort option above is ignored. Reddit caps each listing at roughly 1,000 posts, so a distant date window on a very active subreddit may not be fully reachable.
postedBeforestringoptionalOnly keep posts created on or before this date (interpreted as the end of that day, UTC).
includeNSFWbooleanoptionalInclude posts Reddit explicitly flags as NSFW. Posts in 18+ communities are served by the actor's adult-content cookie and are not distinguishable at community level.
onlyWithFlairbooleanoptionalWhen enabled, posts without a flair tag are dropped from the results.
postTypestringoptionalKeep only posts of the selected content type (based on Reddit's listing type). Leave unset to keep all types. Legacy 'self' is treated as 'text'.
minScoreintegeroptionalOnly keep posts with a score at or above this value. Leave unset to keep all scores.
maxScoreintegeroptionalOnly keep posts with a score at or below this value. Useful for finding overlooked/low-visibility posts. Leave unset to keep all scores.
minCommentsintegeroptionalOnly keep posts with at least this many comments. Leave unset to keep all posts.
maxCommentsintegeroptionalOnly keep posts with at most this many comments. Useful for finding under-discussed posts. Leave unset to keep all posts.
excludeStickiedbooleanoptionalWhen enabled, posts pinned/stickied by moderators (e.g. rules, weekly threads) are dropped from the results.
minUpvoteRationumberoptionalOnly keep posts whose upvote ratio (fraction of votes that are upvotes, 0-1) is at or above this value. Useful for filtering out controversial/divisive posts. Leave unset to keep all ratios.
excludeCrosspostsbooleanoptionalWhen enabled, posts that are crossposts from another subreddit are dropped from the results, keeping only original submissions to the scraped subreddit.
excludeSpoilersbooleanoptionalWhen enabled, posts marked as a spoiler by their author are dropped from the results.
titleContainsstringoptionalOnly keep posts whose title contains this text (case-insensitive substring match). Leave empty to keep all titles.
contentContainsstringoptionalOnly keep self (text) posts whose body contains this text (case-insensitive substring match). Link/image/video posts have no body text and are excluded when this is set. Leave empty to keep all posts.
flairContainsstringoptionalOnly keep posts whose flair text contains this text (case-insensitive substring match). Leave empty to keep all flairs.
authorsarrayoptionalOnly keep posts submitted by one of these usernames (bare name or u/-prefixed, case-insensitive). Leave empty to keep posts from all authors.
domainstringoptionalOnly keep posts whose link domain contains this text (case-insensitive, e.g. 'youtube.com' or 'self.python'). Leave empty to keep all domains.
minAwardsintegeroptionalOnly keep posts with at least this many total awards. Leave unset to keep all posts.
excludeDeletedAuthorbooleanoptionalWhen enabled, posts whose author account was deleted (shown as [deleted]/[removed]) are dropped from the results.
excludeAuthorsarrayoptionalDrop posts submitted by any of these usernames (bare name or u/-prefixed, case-insensitive) — useful for filtering out bots (e.g. AutoModerator) or known spam accounts. Leave empty to keep posts from all authors.
excludeKeywordsarrayoptionalDrop posts whose title, self-text body or flair contains any of these keywords or phrases (case-insensitive substring match) — useful for filtering out megathreads, giveaways or spam boilerplate. Leave empty to keep all posts.
minContentLengthintegeroptionalOnly keep self (text) posts whose body is at least this many characters long. Link/image/video posts have no body and are excluded when this is set. Useful for dropping one-line/low-effort text posts when building NLP datasets. Leave unset to keep all lengths.
maxContentLengthintegeroptionalOnly keep self (text) posts whose body is at most this many characters long. Leave unset to keep all lengths.
fullSubredditbooleanoptionalWhen enabled, walk Reddit's 'new' listing as deep as the source allows (roughly 1,000 posts per listing) instead of stopping at the first page. Combine with a higher 'Maximum posts per subreddit'.

Download the published input schema

View complete JSON
{
  "properties": {
    "authors": {
      "description": "Only keep posts submitted by one of these usernames (bare name or u/-prefixed, case-insensitive). Leave empty to keep posts from all authors.",
      "editor": "stringList",
      "example": [
        "spez"
      ],
      "title": "Only posts by these authors",
      "type": "array"
    },
    "commentSort": {
      "default": "confidence",
      "description": "How to sort the comment threads.",
      "enum": [
        "confidence",
        "top",
        "new",
        "controversial",
        "old",
        "qa"
      ],
      "enumTitles": [
        "Best (Confidence)",
        "Top",
        "New",
        "Controversial",
        "Old",
        "Q&A"
      ],
      "prefill": "confidence",
      "title": "Sort comments by",
      "type": "string"
    },
    "contentContains": {
      "description": "Only keep self (text) posts whose body contains this text (case-insensitive substring match). Link/image/video posts have no body text and are excluded when this is set. Leave empty to keep all posts.",
      "editor": "textfield",
      "example": "tutorial",
      "title": "Post text contains keyword",
      "type": "string"
    },
    "domain": {
      "description": "Only keep posts whose link domain contains this text (case-insensitive, e.g. 'youtube.com' or 'self.python'). Leave empty to keep all domains.",
      "editor": "textfield",
      "example": "youtube.com",
      "title": "Domain contains",
      "type": "string"
    },
    "excludeAuthors": {
      "description": "Drop posts submitted by any of these usernames (bare name or u/-prefixed, case-insensitive) — useful for filtering out bots (e.g. AutoModerator) or known spam accounts. Leave empty to keep posts from all authors.",
      "editor": "stringList",
      "example": [
        "AutoModerator"
      ],
      "title": "Exclude posts by these authors",
      "type": "array"
    },
    "excludeCrossposts": {
      "default": false,
      "description": "When enabled, posts that are crossposts from another subreddit are dropped from the results, keeping only original submissions to the scraped subreddit.",
      "prefill": false,
      "title": "Exclude crossposts",
      "type": "boolean"
    },
    "excludeDeletedAuthor": {
      "default": false,
      "description": "When enabled, posts whose author account was deleted (shown as [deleted]/[removed]) are dropped from the results.",
      "prefill": false,
      "title": "Exclude posts with a deleted/removed author",
      "type": "boolean"
    },
    "excludeKeywords": {
      "description": "Drop posts whose title, self-text body or flair contains any of these keywords or phrases (case-insensitive substring match) — useful for filtering out megathreads, giveaways or spam boilerplate. Leave empty to keep all posts.",
      "editor": "stringList",
      "example": [
        "megathread"
      ],
      "title": "Exclude keywords",
      "type": "array"
    },
    "excludeSpoilers": {
      "default": false,
      "description": "When enabled, posts marked as a spoiler by their author are dropped from the results.",
      "prefill": false,
      "title": "Exclude spoiler-tagged posts",
      "type": "boolean"
    },
    "excludeStickied": {
      "default": false,
      "description": "When enabled, posts pinned/stickied by moderators (e.g. rules, weekly threads) are dropped from the results.",
      "prefill": false,
      "title": "Exclude stickied/pinned posts",
      "type": "boolean"
    },
    "flairContains": {
      "description": "Only keep posts whose flair text contains this text (case-insensitive substring match). Leave empty to keep all flairs.",
      "editor": "textfield",
      "example": "Discussion",
      "title": "Flair contains keyword",
      "type": "string"
    },
    "fullSubreddit": {
      "default": false,
      "description": "When enabled, walk Reddit's 'new' listing as deep as the source allows (roughly 1,000 posts per listing) instead of stopping at the first page. Combine with a higher 'Maximum posts per subreddit'.",
      "prefill": false,
      "title": "Full subreddit mode (deepest reachable history)",
      "type": "boolean"
    },
    "includeComments": {
      "default": false,
      "description": "When enabled, the full comment thread (including nested replies) is collected for every scraped post. Significantly increases run time and output.",
      "prefill": false,
      "title": "Include comments for each post",
      "type": "boolean"
    },
    "includeNSFW": {
      "default": false,
      "description": "Include posts Reddit explicitly flags as NSFW. Posts in 18+ communities are served by the actor's adult-content cookie and are not distinguishable at community level.",
      "prefill": false,
      "title": "Include NSFW (18+) content",
      "type": "boolean"
    },
    "maxComments": {
      "description": "Only keep posts with at most this many comments. Useful for finding under-discussed posts. Leave unset to keep all posts.",
      "example": 500,
      "maximum": 1000000,
      "minimum": 0,
      "title": "Maximum number of comments",
      "type": "integer"
    },
    "maxCommentsPerPost": {
      "default": 0,
      "description": "Maximum number of comments to scrape per post (only used when 'Include comments' is enabled).",
      "example": 100,
      "maximum": 100000,
      "minimum": 0,
      "prefill": 0,
      "title": "Maximum comments per post",
      "type": "integer"
    },
    "maxContentLength": {
      "description": "Only keep self (text) posts whose body is at most this many characters long. Leave unset to keep all lengths.",
      "example": 5000,
      "maximum": 1000000,
      "minimum": 0,
      "title": "Maximum post body length (characters)",
      "type": "integer"
    },
    "maxItems": {
      "default": 10000,
      "description": "Global safety cap on the total number of records pushed for the whole run (posts and comments combined).",
      "example": 5000,
      "maximum": 100000,
      "minimum": 1,
      "prefill": 10000,
      "title": "Maximum total items (safety cap)",
      "type": "integer"
    },
    "maxPosts": {
      "default": 25,
      "description": "Maximum number of posts to keep from each subreddit after filters. Reddit serves roughly 1,000 posts per hot/new listing and about 500 for top/controversial.",
      "example": 25,
      "maximum": 5000,
      "minimum": 1,
      "prefill": 25,
      "title": "Maximum posts per subreddit",
      "type": "integer"
    },
    "maxScore": {
      "description": "Only keep posts with a score at or below this value. Useful for finding overlooked/low-visibility posts. Leave unset to keep all scores.",
      "example": 1000,
      "maximum": 1000000,
      "minimum": -100000,
      "title": "Maximum score (upvotes minus downvotes)",
      "type": "integer"
    },
    "minAwards": {
      "description": "Only keep posts with at least this many total awards. Leave unset to keep all posts.",
      "example": 1,
      "maximum": 1000000,
      "minimum": 0,
      "title": "Minimum awards received",
      "type": "integer"
    },
    "minComments": {
      "description": "Only keep posts with at least this many comments. Leave unset to keep all posts.",
      "example": 5,
      "maximum": 1000000,
      "minimum": 0,
      "title": "Minimum number of comments",
      "type": "integer"
    },
    "minContentLength": {
      "description": "Only keep self (text) posts whose body is at least this many characters long. Link/image/video posts have no body and are excluded when this is set. Useful for dropping one-line/low-effort text posts when building NLP datasets. Leave unset to keep all lengths.",
      "example": 100,
      "maximum": 1000000,
      "minimum": 0,
      "title": "Minimum post body length (characters)",
      "type": "integer"
    },
    "minScore": {
      "description": "Only keep posts with a score at or above this value. Leave unset to keep all scores.",
      "example": 10,
      "maximum": 1000000,
      "minimum": -100000,
      "title": "Minimum score (upvotes minus downvotes)",
      "type": "integer"
    },
    "minUpvoteRatio": {
      "description": "Only keep posts whose upvote ratio (fraction of votes that are upvotes, 0-1) is at or above this value. Useful for filtering out controversial/divisive posts. Leave unset to keep all ratios.",
      "example": 0.8,
      "maximum": 1,
      "minimum": 0,
      "title": "Minimum upvote ratio",
      "type": "number"
    },
    "onlyWithFlair": {
      "default": false,
      "description": "When enabled, posts without a flair tag are dropped from the results.",
      "prefill": false,
      "title": "Only posts that have a flair",
      "type": "boolean"
    },
    "postType": {
      "description": "Keep only posts of the selected content type (based on Reddit's listing type). Leave unset to keep all types. Legacy 'self' is treated as 'text'.",
      "enum": [
        "text",
        "link",
        "image",
        "video",
        "gallery",
        "poll",
        "crosspost",
        "multi_media"
      ],
      "enumTitles": [
        "Text post",
        "Link",
        "Image",
        "Video",
        "Gallery",
        "Poll",
        "Crosspost",
        "Multi-media post"
      ],
      "title": "Only posts of this type",
      "type": "string"
    },
    "postedAfter": {
      "description": "Only keep posts created on or after this date (UTC). When set, collection runs newest-first (sort=new) and the sort option above is ignored. Reddit caps each listing at roughly 1,000 posts, so a distant date window on a very active subreddit may not be fully reachable.",
      "editor": "datepicker",
      "example": "2025-01-01",
      "title": "Posts created on or after (YYYY-MM-DD)",
      "type": "string"
    },
    "postedBefore": {
      "description": "Only keep posts created on or before this date (interpreted as the end of that day, UTC).",
      "editor": "datepicker",
      "example": "2025-12-31",
      "title": "Posts created on or before (YYYY-MM-DD)",
      "type": "string"
    },
    "sort": {
      "default": "new",
      "description": "How to sort posts in the subreddit. Reddit serves roughly 1,000 posts per hot/new listing and about 500 for top/controversial.",
      "enum": [
        "hot",
        "new",
        "top",
        "rising",
        "controversial",
        "best"
      ],
      "enumTitles": [
        "Hot",
        "New",
        "Top",
        "Rising",
        "Controversial",
        "Best"
      ],
      "prefill": "new",
      "title": "Sort posts by",
      "type": "string"
    },
    "subreddits": {
      "description": "List of subreddits to scrape. Accepts bare names (python), r/ prefixed (r/python) or full URLs (https://www.reddit.com/r/python/).",
      "editor": "stringList",
      "example": [
        "python",
        "r/programming",
        "https://www.reddit.com/r/webdev/"
      ],
      "minItems": 1,
      "prefill": [
        "python"
      ],
      "title": "Subreddits",
      "type": "array"
    },
    "timeFilter": {
      "default": "day",
      "description": "Time filter when sorting by 'top' or 'controversial'.",
      "enum": [
        "hour",
        "day",
        "week",
        "month",
        "year",
        "all"
      ],
      "enumTitles": [
        "Past Hour",
        "Past Day",
        "Past Week",
        "Past Month",
        "Past Year",
        "All Time"
      ],
      "prefill": "day",
      "title": "Time filter (for 'top' and 'controversial' sort)",
      "type": "string"
    },
    "titleContains": {
      "description": "Only keep posts whose title contains this text (case-insensitive substring match). Leave empty to keep all titles.",
      "editor": "textfield",
      "example": "launch",
      "title": "Title contains keyword",
      "type": "string"
    }
  },
  "required": [
    "subreddits"
  ],
  "schemaVersion": 1,
  "title": "Reddit Subreddit Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
postAndCommentRecordsstringoptionalDataset containing one record per post, plus one record per comment when 'Include comments' is on. Records are distinguished by the `dataType` field (`post` or `comment`).

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Reddit subreddit posts with score, flair, selftext, images, galleries, video, polls and crosspost context, plus optional nested comment threads.",
  "properties": {
    "postAndCommentRecords": {
      "description": "Dataset containing one record per post, plus one record per comment when 'Include comments' is on. Records are distinguished by the `dataType` field (`post` or `comment`).",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Post & comment records",
      "type": "string"
    }
  },
  "title": "Reddit Subreddit Post & Comment Harvester Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Reddit Posts",
      "transformation": {
        "fields": [
          "subreddit_prefixed",
          "title",
          "author",
          "score",
          "upvote_ratio",
          "num_comments",
          "post_type",
          "created_at",
          "link_flair",
          "url"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Reddit Subreddit Post & Comment Harvester

Harvest posts from any public subreddit — hot, new, top, rising, controversial or best — with score, author, flair, selftext, images, galleries, video, polls and crossposts. Add full nested comment threads when you need the discussion too. Rich date, score, comment-count, upvote-ratio, keyword and author filters; no API key, no login, no proxy setup.

What this actor does

  • Any public subreddit: bare name (python), r/-prefixed name (r/python) or a full Reddit URL; multiple subreddits in one run
  • Six listing modes: hot, new, top, rising, controversial, best; top and controversial support Reddit's six time windows
  • Deep history: follows Reddit's listing pages to the practical ceiling (roughly 1,000 posts for hot/new, about 500 for top/controversial)
  • Posts with media: score, upvote ratio, comment count, author, flair, selftext, images, gallery images (full resolution), video (HLS + MP4), poll options and votes, crosspost parent
  • Optional comment threads: full nested trees with 6 comment sorts, depth, parent links, OP flag, edited/deleted flags and awards
  • Rich filtering: date range, score, comment count, upvote ratio, post type, flair, title/body keywords, authors, domain, awards, content length and moderation flags
  • Empty fields are omitted from the output — no need to defend against null/empty values downstream

Output per post

  • dataType — always post
  • subreddit, subreddit_prefixed, subreddit_id
  • post_id, post_name, title
  • author, author_id
  • url, permalink, content_url, domain
  • is_self, post_type (self/link/image/video/gallery/poll), post_type_raw
  • score, upvote_ratio, num_comments
  • link_flair, link_flair_background_color, flair_url
  • content (self-post text), content_html
  • thumbnail_url
  • created_utc, created_at (ISO-8601 UTC)
  • is_stickied, is_nsfw, is_spoiler, is_crosspost
  • is_archived — when the comment mode loads the post page
  • total_awards_received, top_award_id, top_award_icon_url
  • media_type, has_media
  • images[], gallery_images[], gallery_count
  • video_url (direct MP4), video_hls_url (HLS)
  • poll_data — options, option ids, total votes, closing time
  • crosspost_parent_id, crosspost_parent_subreddit, crosspost_parent_url
  • language, crawled_at, source

For crossposts, content is the parent text Reddit renders in the listing, while post_type_raw is crosspost and the crosspost_parent_* fields identify the source post.

Output per comment

Returned when includeComments is on and maxCommentsPerPost is above 0. The parent post is emitted first, then its comments.

  • dataType — always comment
  • subreddit, subreddit_prefixed, subreddit_id
  • post_id, post_url, post_title, link_id
  • comment_id, comment_name, parent_id, parent_kind
  • author, avatarUrl
  • body, body_html
  • score, total_awards_received
  • depth (0 = top-level), position, parentPositions
  • is_op, collapsed, contentType
  • isCommentDeleted, isAuthorDeleted, isHighlighted, hasPaidAward — present only when true
  • created_utc, created_at, edited, edited_at
  • permalink, crawled_at, source

Fields not available anonymously

Reddit no longer exposes these to logged-out readers of the public pages, so they are omitted rather than guessed: author flair, raw upvotes/downvotes, post distinguished (mod/admin badge), removed_by_category, post locked, original-content marker, gilded, the award-type breakdown, video duration/bitrate/dimensions, and oEmbed title/author/HTML for external links. Link posts still carry their target URL and preview image.

Input

Field Type Default Description
subreddits array – Required. Subreddit names, r/-prefixed names or full URLs
maxPosts int 25 Max posts per subreddit after filters (1–5,000)
maxItems int 10,000 Global safety cap on total records (posts + comments)
sort enum new hot, new, top, rising, controversial, best
timeFilter enum day hour, day, week, month, year, all (top/controversial)
includeComments bool false Collect comments for every harvested post
maxCommentsPerPost int 0 Max comments per post (0–100,000); needs includeComments
commentSort enum confidence confidence, top, new, controversial, old, qa
postedAfter date – Only posts created on/after this date (UTC); switches the listing to new
postedBefore date – Only posts created on/before this date (UTC)
includeNSFW bool false Include posts explicitly flagged NSFW
onlyWithFlair bool false Drop posts without a link flair
postType enum – text, link, image, video, gallery, poll, crosspost, multi_media
minScore int – Minimum post score
maxScore int – Maximum post score
minComments int – Minimum comment count
maxComments int – Maximum comment count
minUpvoteRatio number – Minimum upvote ratio (0–1)
excludeStickied bool false Drop pinned/stickied posts
excludeCrossposts bool false Drop crossposts
excludeSpoilers bool false Drop spoiler-tagged posts
titleContains string – Keep posts whose title contains this text
contentContains string – Keep self posts whose body contains this text
flairContains string – Keep posts whose flair contains this text
authors array – Keep posts by these usernames
excludeAuthors array – Drop posts by these usernames
excludeKeywords array – Drop posts whose title/body/flair contains any keyword
domain string – Keep posts whose link domain contains this text
minAwards int – Minimum total awards
excludeDeletedAuthor bool false Drop posts with a deleted/removed author
minContentLength int – Minimum self-post body length
maxContentLength int – Maximum self-post body length
fullSubreddit bool false Walk the new listing as deep as Reddit allows

Example: 25 new posts from r/Python

{
  "subreddits": ["python"],
  "maxPosts": 25,
  "sort": "new"
}

Example: top image posts with media

{
  "subreddits": ["pics"],
  "maxPosts": 50,
  "sort": "top",
  "timeFilter": "week",
  "postType": "gallery"
}

Example: posts plus full comment threads

{
  "subreddits": ["technology"],
  "maxPosts": 20,
  "sort": "hot",
  "includeComments": true,
  "maxCommentsPerPost": 100,
  "commentSort": "top"
}

Example: brand monitoring with filters

{
  "subreddits": ["startups", "Entrepreneur", "SaaS"],
  "maxPosts": 100,
  "sort": "new",
  "postedAfter": "2026-10-01",
  "minScore": 5,
  "excludeAuthors": ["AutoModerator"],
  "excludeKeywords": ["megathread", "giveaway"]
}

Use cases

  • Market research — collect authentic community opinions and pain points
  • Brand monitoring — track product mentions across subreddits on a schedule
  • Content ideation — find trending questions and high-engagement topics
  • Training data — build clean Reddit corpora with full comment context for NLP/LLM work
  • Competitive intelligence — monitor launches, sentiment and competitor discussions
  • Academic and social research — export a subreddit's reachable history for discourse analysis

FAQ

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

Do I need to configure a proxy? No. The actor chooses a working connection to Reddit automatically. Just fill in the input and run it.

What happens with private, banned or misspelled subreddits? They return no records and the run continues with the remaining subreddits. If nothing is found, the run finishes with a status message suggesting you check the names or loosen filters.

How many posts can I get from one subreddit? Up to maxPosts (5,000), but Reddit serves roughly 1,000 posts per hot/new listing and about 500 for top/controversial. fullSubreddit walks the new listing to that ceiling. Filters are applied after posts are loaded, so strict filters can return fewer rows than maxPosts.

Why did I get no comments? maxCommentsPerPost defaults to 0, which collects none. Set it (for example 100) and enable includeComments. If maxItems is tight, the actor keeps every requested post and trims comments first.

Why are some fields missing from a record? The actor omits values Reddit does not expose publicly (author flair, raw upvotes/downvotes, post distinguished/removed flags, award breakdown, video duration). Empty values are omitted rather than emitted as null, so records stay clean.

Why is the video URL a low-resolution MP4? Reddit serves a direct low-resolution MP4 plus an HLS playlist. The actor provides both: video_url for durable downloads and video_hls_url for the adaptive stream when Reddit's signed playlist is available. HLS links can expire; video_url is the stable choice.

Why are some NSFW or spoiler posts still included? includeNSFW filters posts Reddit explicitly flags. Posts in 18+ communities are served to the actor's adult-content session and cannot be distinguished at community level; use excludeSpoilers or keyword filters for tighter control.

Can I schedule recurring runs? Yes — create a schedule in Apify Console for daily or weekly monitoring. Use postedAfter or sort: "new" to collect only recent posts.

How do I export or integrate the data? Download JSON, CSV, Excel or HTML from the run, call the dataset API, or connect to n8n, Make, Zapier or the Apify MCP server.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build qdSuwLoNAqkhDc3y4. Documentation is regenerated from the default published build; private drafts are not included.