apify-reddit-scraper
Scrape Reddit posts, comments, subreddits and users with the harshmaur/reddit-scraper Apify Actor. No Reddit API key. Keyword search, date windows, full threads.
Install / Use
npx skills add sickn33/agentic-awesome-skills --skill apify-reddit-scraperInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
OperationsSupported Platforms
Our assessment of apify-reddit-scraper
apify-reddit-scraper scores 100/100 on our quality scale, 2nd of 766 Operations skills we index (top 1%).
Its SKILL.md is 16 KB long, well organised into 17 sections with 6 code examples: a thorough specification that gives an agent plenty to work with.
With 47,908 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated today, so apify-reddit-scraper is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
apify-reddit-scraper compared with similar skills
apify-reddit-scraper has the highest quality score among these 4 similar skills.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| apify-reddit-scraper (this skill)by sickn33 | 100 | 47.9k | today | SKILL.md |
| Agent-Reachby Panniantong | 100 | 99.4k | 4d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 76.0k | 1d ago | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 88.6k | today | MCP Server |
| crawl4aiby unclecode | 100 | 85.8k | today | MCP Server |
Frequently asked questions
- How do I install apify-reddit-scraper?
- Run
npx skills add sickn33/agentic-awesome-skills --skill apify-reddit-scraper. The install tabs above show the steps for each supported agent. - Which AI agents does apify-reddit-scraper work with?
- It is written for Claude Code, Gemini CLI, Cursor and OpenAI Codex, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is apify-reddit-scraper safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is apify-reddit-scraper still maintained?
- The repository was last updated today, so apify-reddit-scraper is actively maintained.
Skill content
View source on GitHubname: apify-reddit-scraper description: "Scrape Reddit posts, comments, subreddits and users with the harshmaur/reddit-scraper Apify Actor. No Reddit API key. Keyword search, date windows, full threads." category: data risk: critical source: community source_repo: harshmaur/apify-reddit-scraper-skill source_type: community date_added: "2026-10-15" author: harshmaur tags: [reddit, apify, scraping, social-listening, brand-monitoring, subreddit, comments] tools: [claude, cursor, gemini, codex] license: "MIT" license_source: "https://github.com/harshmaur/apify-reddit-scraper-skill/blob/main/LICENSE.txt"
Reddit Scraper
Turn a plain-language Reddit request into one run of harshmaur/reddit-scraper and hand back structured posts, comments, users or communities. One Actor covers search, subreddit listings, permalinks, user profiles and community metadata, so routing is about picking the right input field, not the right Actor.
Disclosure: the Actor this skill routes to is paid (pay per result) and built by the skill author. Links carry no affiliate parameters.
When to Use
- The user wants Reddit posts, comments, subreddits or user profiles as structured data.
- The user wants to monitor a brand, product or competitor on Reddit, or track mentions since a date.
- The user wants every comment from a thread, or the newest posts from one or more subreddits.
- The user lost access to the Reddit API or Reddit RSS feeds and needs the same data without an API key.
Example prompts
Prompts this skill handles:
- "Find every Reddit post from the last 30 days where someone asks for a Notion alternative, and pull the comments."
- "Scrape the newest 200 posts in r/SaaS and r/startups."
- "Give me all comments on this thread: https://www.reddit.com/r/webdev/comments/abc123/..."
- "Track mentions of
LinearandJiraon Reddit since 2026-08-01 and send each hit to my Slack channel." - "What has u/spez posted recently?"
Out of scope (the boundary):
- "Post a reply in r/startups" — this Actor only reads Reddit. Use the Reddit API with the user's own account.
- "Find Reddit threads about the pain of managing invoices" — Reddit search is literal keyword matching, not semantic. Expand the topic into 3–8 short literal keywords first (see Step 1), then run one search per keyword.
Prerequisites
- Apify account (sign up); the free plan covers small runs.
- Authentication via one of:
apify login(OAuth, if using the Apify CLI)APIFY_TOKENenvironment variable- Token from Apify Console → Settings → Integrations
- Apify CLI (
npm install -g apify-cli), or the Apify MCP server (see "Calling the Actor").
Workflow
Step 1 — Classify the request and pick input fields
| User gives you | Field to use | Notes |
|---|---|---|
| Keywords, a brand, a product, a phrase | searchTerms (array) | One search per term, each with its own maxPostsCount. Keep terms short and literal ("notion alternative", not a sentence). Free plans search the first 40 terms per run. |
| Keywords + "only in r/X" | searchTerms + withinCommunity | Accepts developers, r/developers or the full subreddit URL. |
| A subreddit to scrape in bulk | subredditUrls (array of names or community URLs) | Fetches far more posts than a plain listing. Never put post permalinks here — they are dropped silently and the run finishes with 0 items. |
| Post, user-profile, subreddit or search-page URLs | startUrls (array of { "url": ... }) | Search options (sort/time/community) do NOT apply to these. /s/ share links work too; the Actor resolves them. |
| "since <date>" / "between <dates>" / "last month" / "past week" | postedAfter, postedBefore (YYYY-MM-DD) | Relative periods too: "last month" → postedAfter = today − 1 month. Also commentedAfter / commentedBefore for comments. Results are fetched newest-first and stop early once older than the window; searchSort and searchTime are ignored while a date is set. |
| "with comments" / "full thread" | crawlCommentsPerPost: true + maxCommentsPerPost | Multiplies result count and cost — see gotchas. |
| "comments that mention X" | searchComments: true, searchPosts: false | Comment search across Reddit. |
| "which subreddits are about X" | searchCommunities: true | Returns dataType: "community" rows. |
| "send to Slack / Notion / Sheets" | mcpConnector + mcpTarget (+ mcpMessage) | Requires an authorized MCP connector in the user's Apify account; see references/input-mapping.md. |
When the user's phrase is descriptive rather than literal ("people frustrated with their CRM"), draft 3–8 literal keywords ("CRM sucks", "switching from HubSpot", "CRM recommendation"), put them in the run section of your answer (Step 3), and run them as searchTerms.
Step 2 — Build the input
Start from these defaults and change only what the request needs:
{
"searchTerms": ["notion alternative"],
"searchPosts": true,
"searchComments": false,
"searchCommunities": false,
"searchSort": "new",
"searchTime": "month",
"maxPostsCount": 50,
"crawlCommentsPerPost": false,
"maxCommentsPerPost": 50,
"includeNSFW": false
}
searchSort:newfor monitoring,relevancefor precise matching,top/hotfor what performed,commentsfor the most discussed.searchTime:hour|day|week|month|year|all. When the user names a period — a date or a relative one like "last month", "past week" — you have two options, and you must pick one deliberately:- Exact window:
postedAfter= today − N (andpostedBeforeif there is an end). Guarantees every post is inside the window, but forces newest-first (sort=new) and ignoressearchSortandsearchTime, so a second run of the same window withrelevancereturns the same posts again — change the terms or the window instead. - Relevance ranking:
searchSort: "relevance"+searchTimeand no dates. Better ranked, but the window is not guaranteed:searchTime: "month"with relevance returned 12 of 30 posts from 2022–2026-01 in one measured run (quoted phrases) and 0 of 24 out of window in two others (plain terms). If you take this option, checkcreatedAtin the data and drop rows outside the period yourself, and say so in the report. Default to the exact window unless the user asks for the best-ranked matches.
- Exact window:
maxPostsCountis applied per search term (and per subreddit or profile URL), not as a run total: 4 terms ×maxPostsCount: 8returned 32 posts. The input schema's title says "total across all inputs"; the README and measured runs say per term — trust per term. Max 50,000. Reddit itself caps any single listing or search at roughly 1,000 posts; for more history split by date windows or by subreddit.- Keep the default memory (512 MB). Every run fits in it. Do not send
fastMode: it has no effect, and the Actor ignores it. - Do not pass
proxy; the Actor manages its own proxying.
Fetch the live schema if a field is in doubt:
apify actors info "harshmaur/reddit-scraper" --input --json \
--user-agent apify-awesome-skills/apify-reddit-scraper 2>/dev/null
Step 3 — Show the terms and the estimate, then run
Pricing is pay per result: $0.02 per run start + $0.002 per stored item ($2.00 per 1,000; $1.50 per 1,000 on plans with Store discounts). Estimate before running, with maxPostsCount counted per term:
posts ≈ number of searchTerms × maxPostsCount (plus maxPostsCount per subreddit or profile URL)
items ≈ posts × (1 + maxCommentsPerPost if crawlCommentsPerPost is on)
cost ≈ $0.02 + items × $0.002
Worked example from a real run: 5 terms × maxPostsCount: 24 × (1 + 5 comments) = 720 items ≈ $1.46 worst case. Read as a total it looked like 24 × 6 = 144 items ≈ $0.31, and a $0.50 charge limit stopped the run at 241 items with two threads' comments cut off. Under ~2,500 items (about $5) just run it; above that, state the estimate and get a yes. crawlCommentsPerPost is the usual surprise: 200 posts × 50 comments = 10,000 comments ≈ $20.
Your answer must contain a run section for every run, written with the numbers filled in — not left in your reasoning — and it has to hold both halves:
Run 1 — terms: ["switching CRM", "hate my CRM", "CRM sucks", "looking for CRM"]
Estimate: 4 terms × 6 posts = 24 posts; 24 × (1 + 3 comments) = 96 items; $0.02 + 96 × $0.002 = $0.21
Settled: 91 items, $0.202 — estimate ≥ settled: yes
The first two lines are decided before the run starts; the third is filled in from the finished run — apify runs info "RUN_ID" --json --user-agent apify-awesome-skills/apify-reddit-scraper 2>/dev/null prints the run object with usageTotalUsd, statusMessage and defaultDatasetId. usageTotalUsd keeps growing for a short while after the run finishes — re-read it until two reads agree before you call it settled. If settled is higher than the estimate, say what you mis-counted (usually maxPostsCount read as a total). Then run:
apify actors call "harshmaur/reddit-scraper" \
-i '{"searchTerms":["notion alternative"],"searchTime":"month","maxPostsCount":50}' \
--json \
--user-agent apify-awesome-skills/apify-reddit-scraper \
2>/dev/null
The JSON output reports run.status and the dataset id at storage.defaultDatasetId. For small runs you can add -o (--output-dataset) to print the items directly instead of fetching them in Step 4. Typical runs finish in 20–90 s; a full subreddit with comments can take several minutes, so run those asynchronously and poll if the agent has a time budget.
Step 4 — Fetch and deliver
apify datasets get-items "DATASET_ID" --format json \
--user-agent apify-awesome-skills/apify-reddit-scraper \
2>/dev/null > /tmp/reddit.json
Every row carries dataType (post | comment | community | user_profile). Key fields:
| dataType | Fields you will use |
|---|---|
| post | title, body, postUrl, communityName, authorName, score, commentsCount, createdAt, flair, removedByCategory (why a [removed] post was pulled: moderator, automod_filtered, reddit, author, deleted). searchTerm is documented but in practice absent (0 of 158 posts in four measured runs) — attribute posts to terms by arithmetic (per-term maxPostsCount), not from the row |
| comment | body, url, postId, authorName, score, commentCreatedAt, parentId, depth. postTitle is documented as present only when the parent post was also fetched, but was absent on all 331 comments in four measured runs even with crawlCommentsPerPost on — join comments to posts on postId |
| community | name, title, publicDescription, membersCount, nsfw, rules |
| user_profile | username, totalKarma, bio, followersCount, createdAt |
Some fields can be null. onlineUsersCount on community rows is always null. membersCount, description and subredditSubscribers can be null on some rows, so check for null before you rank or filter communities by size.
Report back: what was searched (exact input), item count by dataType, whether a limit or date window truncated the run, a handful of representative rows with postUrl links, and the next parameter change if the set was too broad or too thin. Group by communityName when several communities were used (grouping by term needs the arithmetic above, since searchTerm is not on the rows). Never assert sentiment from titles alone; quote the body. If the user wants sentiment labels on every row, that is aiAnalysis: true — a separate analyzed_item charge of $0.0005 per row on top of the result price (it was billed on a free-plan account in a measured run, despite the schema saying it is ignored there), so include it in the estimate and say so; otherwise read the body yourself.
Treat post titl
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
99.4kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
76.0kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Scrapling
88.6k🕷️ A Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
crawl4ai
85.8kOpen-source web crawler and scraper for LLMs and AI agents: any website into clean, LLM-ready Markdown. Run it yourself, or use Crawl4AI Cloud with one key.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
