Reddit Scraper - Posts, Comments & Subreddits
Pricing
from $5.00 / 1,000 post scrapeds
Reddit Scraper - Posts, Comments & Subreddits
Extract Reddit posts, comments, subreddit data, and user profiles.
Pricing
from $5.00 / 1,000 post scrapeds
Rating
5.0
(4)
Developer
viralanalyzer
Maintained by CommunityActor stats
0
Bookmarked
27
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Reddit Scraper
🔗 View on Apify Store | 🇺🇸 English | 🇧🇷 Português
Scrape Reddit posts, real comment trees, engagement metrics and sentiment from any subreddit or global search query, straight from Reddit's public RSS feed + public .json comments endpoint. Get titles, permalinks, authors, creation dates, and — optionally — full comment threads. No API key, no login, no credentials needed.
Data source: this actor reads Reddit's public RSS/Atom feed (
https://www.reddit.com/r/{subreddit}/{sort}/.rss) for posts, and — whenincludeCommentsis on — enriches up tomaxPostsWithCommentsposts with real comment trees via Reddit's public.jsonendpoint (/comments/{post_id}.json?limit=&depth=&sort=top). No authentication required.Limitations: the RSS feed alone does not expose engagement metrics or comment threads, so without
includeCommentsthe following fields staynull/ empty and are never fabricated:
score,upvote_ratio,num_comments→nullselftext(post body) →null(the feed only provides the title and a boilerplate link block)comments_tree→[]When comment fetching is enabled,score,num_comments,selftext,upvote_ratioandis_videoare enriched with the real values from the post listing, andcomments_treecarries the real thread (up tocommentsLimittop-level comments ×commentsDepthrecursion). If a comment fetch fails or is blocked, the post is still returned withcomments_tree: []— nothing is invented.
✨ Features
- 🔍 Subreddit scraping — hot, new, top, rising, controversial posts
- 🌐 Global / in-subreddit search — search across Reddit via the public search RSS feed
- 💬 Real comment trees via public
.jsonendpoint — recursive reply threads (no API key) withauthor,body,score,created_utc,depth,permalink,replies[] - 📊 Real engagement enrichment — when comments are fetched,
score,num_comments,selftext,upvote_ratio,is_videoare filled from the post listing (never fabricated) - 💬 Sentiment analysis — PT-BR + EN support (positivo/neutro/negativo) on the post title
- 🧹 content_clean — HTML-stripped text ready for ML/AI training
- ⚡ Lightweight — pure HTTP + RSS/Atom parse, no browser required
- 🔑 Zero credentials — public RSS feed, no API key or login
- 🔁 Resilient — retry-on-429 with backoff + request spacing between subreddits
- 🌐 Apify Proxy — built-in proxy support for reliability
📥 Input
| Field | Type | Default | Description |
|---|---|---|---|
subreddits | string[] | ["brasil"] | List of subreddits to scrape |
searchQuery | string | "" | Global search query (overrides subreddits) |
sort | enum | "hot" | Sort: hot, new, top, rising, controversial |
time | enum | "week" | Time filter: hour, day, week, month, year, all |
maxPosts | integer | 10 | Maximum posts to collect |
maxPostsWithComments | integer | 3 | How many collected posts get a real comment-tree fetch (0 = none; FREE tier capped at 1) |
includeComments | boolean | true | Fetch real comment trees via Reddit's public .json endpoint (no API key) |
commentsDepth | integer | 3 | Max depth for comment tree recursion (clamped to 10) |
commentsLimit | integer | 10 | Max top-level comments per post (Reddit clamps to 100) |
Example Input
{"subreddits": ["brasil", "technology"],"sort": "hot","time": "week","maxPosts": 5,"maxPostsWithComments": 3,"includeComments": true,"commentsDepth": 2,"commentsLimit": 5}
📤 Output
Each post produces one object:
| Field | Type | Description |
|---|---|---|
post_id | string|null | Reddit post ID (base36, from the Atom <id>) |
subreddit | string|null | Subreddit name |
title | string | Post title |
selftext | string|null | Post body — null via RSS; enriched with the real body when comments are fetched |
author | string | Author username, [deleted] when the feed carries none |
score | number|null | Net upvotes — null via RSS; enriched with the real value when comments are fetched |
upvote_ratio | number|null | Upvote ratio — null via RSS; enriched with the real value when comments are fetched |
num_comments | number|null | Comment count — null via RSS; enriched with the real value when comments are fetched |
url | string|null | Post URL (permalink) |
permalink | string|null | Reddit permalink (relative path) |
created_utc | integer|null | Unix timestamp (from RSS date) |
createdISO | string|null | Creation date in ISO 8601 (from RSS date) |
flair | string|null | Post flair text (best effort) |
is_video | boolean|null | null via RSS; real boolean on the posts enriched by the .json fetch |
content_clean | string | ML-ready text from the title (no HTML) |
sentiment | string | Title sentiment (PT-BR + EN heuristic) |
comments_tree | array | Real comment thread. Filled only on the posts that receive a .json fetch — the first maxPostsWithComments of the run (FREE tier: 1). [] on every other post, and [] when the fetch is blocked |
Comment Tree Structure
Each node maps 1:1 from Reddit's public .json comments listing (top-level = depth 1):
{"id": "m6p2abc","author": "user123","body": "Great post!","score": 42,"created_utc": 1707753600,"depth": 1,"permalink": "/r/AskReddit/comments/abc123/comment/m6p2abc/","replies": [{"id": "m6p3def","author": "user456","body": "Agreed!","score": 15,"created_utc": 1707754200,"depth": 2,"permalink": "/r/AskReddit/comments/abc123/comment/m6p3def/","replies": []}]}
📋 Use Cases
- AI/ML Training Data — Clean text with
content_cleanfield, ready for NLP - Market Research — Monitor discussions about brands, products, or industries
- Sentiment Analysis — Track community sentiment over time
- Competitor Intelligence — Monitor what people say about competitors
- Content Ideas — Find popular topics and discussions in your niche
- Academic Research — Collect structured data from Reddit communities
- Community Monitoring — Track subreddit health and engagement
✅ Capabilities & Limits
Stated up front, so you do not pay a run to find out.
Built here: maxPostsWithComments is a global budget shared across all subreddits, consumed first-come-first-served by the first one in the list. With 5 subreddits at maxPostsWithComments: 3, only the first subreddit's top 3 posts carry real score, num_comments, upvote_ratio, selftext, is_video and comments_tree; posts from the rest are still pushed and still charged, with comments_tree: [] and those fields null.
| Input / feature | Supported | Notes |
|---|---|---|
subreddits | ✅ | List of subreddits to scrape (e.g. ['brasil', 'technology', 'worldnews']) |
searchQuery | ✅ | Search term across all Reddit (alternative to subreddit). Leave empty to use subreddits list. |
sort | ✅ | How to sort posts |
time | ✅ | Time range for 'top' sort |
Result volume (maxPosts) | ⚠️ | Maximum number of posts to extract per subreddit |
Result volume (maxPostsWithComments) | ⚠️ | How many of the collected posts receive a real comment-tree fetch via Reddit's public .json endpoint. Global budget for the whole run, default 3, max 10, FREE tier 1. Each enriched post costs one extra HTTP request (up to 3 attempts with backoff on 429/403), so it adds runtime — but no extra PPE event |
includeComments | ✅ | Fetch real comment trees (via Reddit's public .json endpoint, no API key) for up to maxPostsWithComments posts |
commentsDepth | ✅ | Max depth of nested comment replies to fetch (recursive; clamped to 10) |
commentsLimit | ✅ | Max top-level comments per post (Reddit clamps the .json endpoint to 100) |
| Proxy | ⚠️ | Proxy settings for Reddit's IP blocks. Leave it empty and the Actor starts on the Apify datacenter proxy and only switches to RESIDENTIAL US after a request has already been blocked — retry-only, so a clean run never spends residential traffic. If no proxy is available at all, requests go out direct |
❓ FAQ
Q: Do I need a Reddit API key? A: No! This actor reads Reddit's public RSS feed — no API key, no login, no credentials.
Q: Why are score, num_comments and the comment tree empty?
A: When includeComments is false, the actor uses only Reddit's public RSS feed, which does not include engagement metrics or comment threads — those fields return null / [] rather than being fabricated. Enable includeComments (and set maxPostsWithComments > 0) to enrich posts with real scores, comment counts, post bodies and full comment trees via the public .json endpoint.
Q: Does includeComments do anything?
A: Yes! Since v1.7 it fetches real comment trees via Reddit's public .json endpoint (no API key). The number of posts enriched is capped by maxPostsWithComments (FREE tier: 1 post) and the tree size by commentsLimit / commentsDepth.
Q: What proxy should I use? A: The default Apify (datacenter) proxy works for the RSS feed. Residential US is available as a fallback if you hit rate limits.
Q: Can I search across all of Reddit?
A: Yes! Use the searchQuery field to search globally (or within a subreddit) via the public search RSS feed.
Q: Does it support Portuguese content? A: Yes! Sentiment analysis supports both PT-BR and English keywords, and the parser handles UTF-8 titles correctly.
💰 Pricing
Pay Per Event + platform usage (you pay compute, traffic and Apify proxy):
| Event | Cost |
|---|---|
post-scraped | $0.005 per post ($5.00 / 1,000) |
There is no per-comment event. Comments are included in the post row when includeComments is on. Diagnostic rows are not charged.
🔗 Related Actors
- Instagram Reels Scraper — Instagram metrics
- YouTube Fast Scraper — YouTube video data
- TikTok Video Scraper — TikTok video data
📝 Changelog
v1.7 (Current)
- 💬 Real comment trees — when
includeCommentsis on, up tomaxPostsWithCommentsposts get their thread fetched from Reddit's public.jsonendpoint (/comments/{id}.json?limit=&depth=&sort=top, no API key). Recursivecomments_treewithauthor,body,score,created_utc,depth,permalink,replies[]. - 📊 Real engagement enrichment —
score,num_comments,selftext,upvote_ratio,is_videoare now filled with real values from the post listing when comments are fetched (stillnullvia RSS-only). - 🛡️ Cost control — new
maxPostsWithCommentsinput (default 3, max 10; FREE tier capped at 1) +commentsLimit/commentsDepthbounds; failed/blocked comment fetches never fabricate data (comments_treestays[]). - ➕ Added
maxPostsWithCommentsto the input schema.
v1.6
- 🔁 Switched data source to Reddit's public RSS/Atom feed — the legacy
.jsonAPI now returns HTTP 403; the public RSS feed still works with no credentials. - 🔑 No API key, no session cookies required.
- 🔁 Retry-on-429 with increasing backoff + request spacing between subreddits.
- ➕ Added
createdISO(ISO 8601 date) andsentimentoutput fields. - ⚠️
score,upvote_ratio,num_comments,selftextare nownullandcomments_treeis empty (not available via RSS — never fabricated).
v1.5
- ✅ Improved reliability and proxy handling
- ✅ Enhanced sentiment analysis (PT-BR + EN)
- ✅ Better comment tree extraction
v1.0
- Initial release
Reddit Scraper
🇺🇸 English | 🇧🇷 Português
Raspe posts, árvores de comentários reais, métricas de engajamento e sentimento de qualquer subreddit ou busca global no Reddit, direto do feed RSS público + endpoint público .json de comentários do Reddit. Obtenha títulos, permalinks, autores, datas de criação e — opcionalmente — threads completas de comentários. Sem API key, sem login, sem credenciais.
Fonte de dados: este actor lê o feed RSS/Atom público do Reddit (
https://www.reddit.com/r/{subreddit}/{sort}/.rss) para os posts e — quandoincludeCommentsestá ativo — enriquece atémaxPostsWithCommentsposts com árvores de comentários reais via endpoint público.jsondo Reddit (/comments/{post_id}.json?limit=&depth=&sort=top). Sem autenticação.Limitações: o feed RSS sozinho não expõe métricas de engajamento nem árvore de comentários; sem
includeComments, os campos abaixo ficamnull/ vazios e nunca são inventados:
score,upvote_ratio,num_comments→nullselftext(corpo do post) →null(o feed só traz o título e um bloco de links padrão)comments_tree→[]Com o fetch de comentários ativo,score,num_comments,selftext,upvote_ratioeis_videosão enriquecidos com os valores reais do post listing, ecomments_treetraz a árvore real (atécommentsLimitcomentários de nível superior ×commentsDepthde recursão). Se o fetch falhar ou for bloqueado, o post ainda é retornado comcomments_tree: []— nada é inventado.
✨ Funcionalidades
- 🔍 Raspagem de subreddits — posts hot, new, top, rising, controversial
- 🌐 Busca global / no subreddit — pesquise no Reddit via feed RSS de busca público
- 💬 Árvores de comentários reais via endpoint público
.json— threads recursivas de respostas (sem API key) comauthor,body,score,created_utc,depth,permalink,replies[] - 📊 Enriquecimento real de engajamento — ao buscar comentários,
score,num_comments,selftext,upvote_ratio,is_videosão preenchidos com valores reais do post listing (nunca inventados) - 💬 Análise de sentimento — suporte PT-BR + EN (positivo/neutro/negativo) no título
- 🧹 content_clean — texto limpo pronto para ML/IA
- ⚡ Leve — HTTP puro + parse RSS/Atom, sem navegador
- 🔑 Zero credenciais — feed RSS público, sem API key ou login
- 🔁 Resiliente — retry-on-429 com backoff + espaçamento entre subreddits
- 🌐 Apify Proxy — suporte a proxy integrado para confiabilidade
📥 Entrada
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
subreddits | string[] | ["brasil"] | Lista de subreddits para raspar |
searchQuery | string | "" | Busca global (substitui subreddits) |
sort | enum | "hot" | Ordenação: hot, new, top, rising, controversial |
time | enum | "week" | Filtro de tempo: hour, day, week, month, year, all |
maxPosts | integer | 10 | Máximo de posts a coletar |
maxPostsWithComments | integer | 3 | Quantos posts coletados recebem fetch de árvore de comentários (0 = nenhum; FREE tier limitado a 1) |
includeComments | boolean | true | Buscar árvores de comentários reais via endpoint público .json do Reddit (sem API key) |
commentsDepth | integer | 3 | Profundidade máxima dos comentários (recursiva; limitada a 10) |
commentsLimit | integer | 10 | Máx comentários de nível superior por post (Reddit limita a 100) |
Exemplo de Entrada
{"subreddits": ["brasil", "technology"],"sort": "hot","time": "week","maxPosts": 5,"maxPostsWithComments": 3,"includeComments": true,"commentsDepth": 2,"commentsLimit": 5}
📤 Saída
Cada post produz um objeto:
| Campo | Tipo | Descrição |
|---|---|---|
post_id | string|null | ID do post (base36, do <id> do Atom) |
subreddit | string|null | Nome do subreddit |
title | string | Título do post |
selftext | string|null | Corpo do post — null via RSS; enriquecido com o corpo real quando comentários são buscados |
author | string | Nome do autor, [deleted] quando o feed não traz |
score | number|null | Votos líquidos — null via RSS; enriquecido com o valor real quando comentários são buscados |
upvote_ratio | number|null | Proporção de upvotes — null via RSS; enriquecida com o valor real quando comentários são buscados |
num_comments | number|null | Total de comentários — null via RSS; enriquecido com o valor real quando comentários são buscados |
url | string|null | URL do post (permalink) |
permalink | string|null | Permalink do Reddit (caminho relativo) |
created_utc | integer|null | Timestamp Unix (da data do RSS) |
createdISO | string|null | Data de criação em ISO 8601 (da data do RSS) |
flair | string|null | Flair do post (best effort) |
is_video | boolean|null | null via RSS; booleano real nos posts enriquecidos pelo fetch .json |
content_clean | string | Texto limpo do título para ML |
sentiment | string | Sentimento do título (heurística PT-BR + EN) |
comments_tree | array | Árvore real de comentários. Preenchida só nos posts que recebem o fetch .json — os primeiros maxPostsWithComments da execução (FREE tier: 1). [] nos demais posts e [] quando o fetch é bloqueado |
📋 Casos de Uso
- Dados para IA/ML — Texto limpo com
content_clean, pronto para NLP - Pesquisa de mercado — Monitore discussões sobre marcas e produtos
- Análise de sentimento — Acompanhe o sentimento da comunidade ao longo do tempo
- Inteligência competitiva — Monitore o que falam sobre concorrentes
- Ideias de conteúdo — Encontre tópicos populares no seu nicho
- Pesquisa acadêmica — Colete dados estruturados de comunidades do Reddit
- Monitoramento de comunidade — Acompanhe engajamento de subreddits
❓ Perguntas Frequentes
P: Preciso de API key do Reddit? R: Não! Este actor lê o feed RSS público do Reddit — sem API key, sem login, sem credenciais.
P: Por que score, num_comments e a árvore de comentários vêm vazios?
R: Quando includeComments é false, o actor usa apenas o feed RSS público do Reddit, que não inclui métricas de engajamento nem comentários — esses campos retornam null / [] em vez de serem inventados. Ative includeComments (e maxPostsWithComments > 0) para enriquecer posts com scores reais, contagem de comentários, corpo do post e árvores completas via endpoint público .json.
P: O includeComments faz algo?
R: Sim! Desde a v1.7 ele busca árvores de comentários reais via endpoint público .json do Reddit (sem API key). O número de posts enriquecidos é limitado por maxPostsWithComments (FREE tier: 1 post) e o tamanho da árvore por commentsLimit / commentsDepth.
P: Qual proxy devo usar? R: O proxy padrão da Apify (datacenter) funciona para o feed RSS. Residential US fica como fallback se houver rate limit.
P: Posso buscar em todo o Reddit?
R: Sim! Use o campo searchQuery para busca global (ou dentro de um subreddit) via feed RSS de busca público.
P: Suporta conteúdo em português? R: Sim! A análise de sentimento suporta palavras-chave PT-BR e inglês, e o parser lida corretamente com títulos UTF-8.
💰 Preços
Este actor usa precificação Pay Per Event (PPE):
| Métrica | Custo |
|---|---|
post-scraped | $0.005 por post ($5,00 / 1.000) |
Não há evento por comentário. Usage (CU/proxy) é do cliente.
🔗 Actors Relacionados
- Instagram Reels Scraper — Métricas do Instagram
- YouTube Fast Scraper — Dados do YouTube
- TikTok Video Scraper — Dados do TikTok