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.
- Daily trigger Schedule trigger
- Configure input Code
- Run Apify Actor HTTP Request
- Normalize + dedupe Code
- Rows ready No operation
- 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
} | Setting | Type | Required | Default | What 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:
| Field | What it is |
|---|---|
| subreddit_prefixed | Subreddit prefixed |
| title | Title |
| author | Author |
| score | Score |
| commentCount | Comment Count |
| source | Source |
| createdAt | Created At |
| permalink | Permalink |
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.