Reddit posts and comments scraper in n8n

Pick one of five modes to pull subreddit posts, full comment threads, user profiles, keyword search results or curated community listings from Reddit, each with deep post/comment filters. No account or API key needed.

What this workflow does

Import it and n8n runs the Reddit Multi-Mode Scraper for Posts, Comments & Profiles Actor on Apify every day at 08:00 with the starter input below. Each row comes back with subreddit prefixed, title, author, score and 5 more; repeats with the same permalink are dropped. A Google Sheets append is included and stays off until you add your sheet. The only credential it needs is your Apify API token.

Read from the workflow file, built for Reddit Multi-Mode Scraper for Posts, Comments & Profiles version 2.0.2. Updated 2026-11-14.

How the rows travel

6 nodes, in the order n8n runs them. The yellow stop is the call to the Apify Actor; the dashed stop is optional.

  1. Daily trigger Schedule trigger
  2. Configure input Code
  3. Run Apify Actor HTTP Request
  4. Normalize + dedupe Code
  5. Rows ready No operation
  6. Google Sheets (optional) Google Sheets, off until you switch it on

From the Short

This workflow is the one the video points to: the number in each video opens this page.

Input

The Configure input node holds the starter input. Change it there; every setting the Actor accepts is listed below.

{
  "mode": "subreddit",
  "subreddits": [
    "smallbusiness"
  ],
  "sort": "top",
  "timeFilter": "week",
  "maxItems": 25,
  "maxPosts": 10,
  "maxComments": 20,
  "includeComments": true
}
Input settings of Reddit Multi-Mode Scraper for Posts, Comments & Profiles
SettingTypeRequiredDefaultWhat it does
mode string Yes subreddit What to scrape: a subreddit listing, post URLs with comments, a user profile, or keyword search. One of: subreddit, post, profile, search.
source string No auto auto uses live Reddit first and the Arctic Shift archive for depth/bulk or as a fallback. archive is faster and cheaper but lags live Reddit by several hours; live never uses… One of: auto, live, archive.
subreddits array No ["programming"] Subreddits to scrape (mode=subreddit). Accepts names, r/ names or URLs.
postUrls array No – Post URLs, comment URLs, share links or bare post IDs (mode=post).
usernames array No – Reddit usernames to scrape (mode=profile). Accepts names, u/ names or profile URLs.
searchQuery string No – Keyword or phrase to search for (mode=search). Reddit search syntax such as "exact phrase", author:name, subreddit:name and -exclude is supported by live search.
maxItems integer No 50 Hard cap on all records pushed by the run, across every target.
maxPosts integer No 25 Posts per subreddit, keyword or profile section.
maxComments integer No 100 Comments per post, keyword, or profile comment section. 0 disables comment records.
maxDepth integer No 6 Deepest reply level to emit (0 = top-level comments only).
includeComments boolean No true Emit comment records for each post. Disable to fetch only the parent post.
includePost boolean No true Emit the post record before its comments.
sort string No hot Post/listing sort. Search accepts relevance, hot, top, new or comments; other modes use hot, new, top, rising, controversial or best. 8 choices.
timeFilter string No day Time window for top/controversial sorts and search. One of: hour, day, week, month, year, all.
commentSort string No confidence Comment ordering for mode=post. One of: confidence, top, new, controversial, old, qa.
includeNSFW boolean No false Include over-18 posts and communities.
includeSubredditInfo boolean No false Emit one community record per subreddit before its posts.
includeSubredditRules boolean No false Attach posting rules to the community record. Requires includeSubredditInfo.
includeProfileInfo boolean No true Emit a profile record with karma, counts and account metadata.
sections array No ["overview"] Which history sections to fetch (mode=profile). Allowed values: overview, posts, comments.
searchPosts boolean No true Include post results in keyword search.
searchComments boolean No false Include comment results in keyword search when Reddit's comment tab returns them.
searchCommunities boolean No false Include subreddit matches in keyword search.
searchUsers boolean No false Include matching Reddit accounts in keyword search.
withinCommunity string No – Limit post/comment search to a single subreddit (name, r/name or URL). Required for archive keyword search.
maxCommunities integer No 10 Maximum subreddit matches per search query.
maxUsers integer No 25 Maximum account matches per search query.
onlyNew boolean No false Emit only records newer than the watermark saved under stateKey by a previous run.
stateKey string No reddit-mcp-state Key-value store key prefix used by onlyNew watermarks.
failOnEmpty boolean No true Mark the run FAILED with a clear status message instead of finishing silently with 0 records.
maxProxyBytesMb integer No 50 Safety ceiling for paid proxy traffic. The run stops when the ceiling is reached. Images, media and fonts are never downloaded.
proxyMode string No none Direct (no proxy) is the default. Choose datacenter if Reddit blocks your runs. Residential is an explicit last resort and is capped by maxProxyBytesMb. One of: none, datacenter, residential.
minScore integer No – Drop posts/comments below this score.
maxScore integer No – Drop posts/comments above this score.
minPostComments integer No – Drop posts with fewer comments than this.
maxPostComments integer No – Drop posts with more comments than this.
minUpvoteRatio number No – Drop posts below this upvote ratio (0-1).
postType string No – Keep only posts of this type. One of: self, link, image, video, gallery, poll.
titleContains string No – Keep only posts whose title contains this text.
contentContains string No – Keep only posts whose body/self-text contains this text.
flairContains string No – Keep only posts whose link flair contains this text.
authorFlairContains string No – Keep only posts whose author flair contains this text.
domain string No – Keep only posts whose link domain contains this text.
authors array No – Keep posts by these usernames.
excludeAuthors array No – Drop posts by these usernames.
excludeKeywords array No – Drop posts whose title, body or flair contains any of these terms.
excludeStickied boolean No false Exclude pinned/stickied posts from results.
excludeRemoved boolean No false Exclude posts or comments removed by moderators.
excludeCrossposts boolean No false Exclude crossposts.
excludeSpoilers boolean No false Exclude posts marked as spoilers.
excludeLocked boolean No false Exclude locked posts and comments.
excludeDeletedAuthor boolean No false Exclude records whose author account was deleted.
excludeArchived boolean No false Exclude archived posts that no longer accept votes or comments.
onlyWithFlair boolean No false Drop posts without a link flair.
onlyOriginalContent boolean No false Keep only posts tagged as OC.
minAwards integer No – Keep only posts with at least this many awards.
minContentLength integer No – Keep only posts whose body is at least this many characters.
maxContentLength integer No – Keep only posts whose body is at most this many characters.
postedAfter string No – UTC date lower bound (YYYY-MM-DD).
postedBefore string No – UTC date upper bound (YYYY-MM-DD), inclusive.
restrictSubreddits array No – Only keep profile posts/comments made in these subreddits.
keyword string No – Only keep profile posts/comments whose title, body or text contains this phrase.
minCommunitySubscribers integer No – Community search only: drop smaller subreddits.
maxCommunitySubscribers integer No – Community search only: drop larger subreddits.
minUserKarma integer No – User search only: drop accounts with less total karma.
maxUserKarma integer No – User search only: drop accounts with more total karma.
distinguished string No – Keep only moderator/admin/special posts, or only regular posts. One of: moderator, admin, special, none.

What each row holds

Every field the Actor returns stays in the row (9 in its dataset schema). Normalize + dedupe trims text, drops empty fields, removes repeats with the same permalink and adds _source and _scrapedAt. The main fields:

Main output fields of Reddit Multi-Mode Scraper for Posts, Comments & Profiles
FieldWhat it is
subreddit_prefixedSubreddit prefixed
titleTitle
authorAuthor
scoreScore
commentCountComment Count
sourceSource
createdAtCreated At
permalinkPermalink

What the first run costs

With the starter input (maxItems = 25) a first run costs about $0.42 on the Apify Free plan: $0.40 to start the run at 4 GB of memory and $0.02 for the results, plus platform usage.

The Actor lists $0.99 per 1,000 results; its catalogue page breaks the price down by Apify plan. The Apify Free plan includes $5 of usage a month.

The Actor behind it

Reddit Multi-Mode Scraper for Posts, Comments & Profiles: Pick one of five modes to pull subreddit posts, full comment threads, user profiles, keyword search results or curated community listings from Reddit, each with deep post/comment filters. No account or API key needed.

The same job from an AI agent

The matching agent skill gives Claude Code, Codex, Cursor and other agents the same Actor, input and fields. Install it in one line:

npx skills add https://scraperfinder.com --skill reddit-multi-mode-scraper-for-posts-comments-and-profiles

The reddit posts and comments scraper skill, with manual install and run steps

Questions people ask

How do I import this workflow into n8n?

Copy https://scraperfinder.com/n8n/reddit-multi-mode-scraper-for-posts-comments-and-profiles.json. In n8n, open a new workflow, click the three-dot menu, choose Import from URL and paste it. Or download the JSON file and use Import from File; both give the same 6 nodes.

Do I need an Apify account?

Yes. The workflow calls the Reddit Multi-Mode Scraper for Posts, Comments & Profiles Actor through the Apify API with your own token, and each run is billed to your Apify account. The Free plan includes $5 of usage a month.

What does a run cost?

With the starter input (maxItems = 25) a first run costs about $0.42 on the Apify Free plan: $0.40 to start the run at 4 GB of memory and $0.02 for the results, plus platform usage. The Actor's Store page shows the current price.

Can I change what it collects?

Yes: edit the input object in the Configure input node. The Actor takes 67 settings; the table on this page lists each one with its default. Raise maxItems once the first rows look right.

Does it work without Google Sheets?

Yes. The rows wait in the Rows ready node, so you can connect any other node there: a database, Airtable, a webhook or an email. The Google Sheets node is only one option.

Workflow updated 2026-11-14