Reddit Scraper - Posts, Comments & Subreddits avatar

Reddit Scraper - Posts, Comments & Subreddits

Pricing

from $5.00 / 1,000 post scrapeds

Go to Apify Store
Reddit Scraper - Posts, Comments & Subreddits

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

viralanalyzer

Maintained by Community

Actor stats

0

Bookmarked

27

Total users

1

Monthly active users

6 days ago

Last modified

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 — when includeComments is on — enriches up to maxPostsWithComments posts with real comment trees via Reddit's public .json endpoint (/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 includeComments the following fields stay null / empty and are never fabricated:

  • score, upvote_ratio, num_commentsnull
  • selftext (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_ratio and is_video are enriched with the real values from the post listing, and comments_tree carries the real thread (up to commentsLimit top-level comments × commentsDepth recursion). If a comment fetch fails or is blocked, the post is still returned with comments_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 .json endpoint — recursive reply threads (no API key) with author, body, score, created_utc, depth, permalink, replies[]
  • 📊 Real engagement enrichment — when comments are fetched, score, num_comments, selftext, upvote_ratio, is_video are 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

FieldTypeDefaultDescription
subredditsstring[]["brasil"]List of subreddits to scrape
searchQuerystring""Global search query (overrides subreddits)
sortenum"hot"Sort: hot, new, top, rising, controversial
timeenum"week"Time filter: hour, day, week, month, year, all
maxPostsinteger10Maximum posts to collect
maxPostsWithCommentsinteger3How many collected posts get a real comment-tree fetch (0 = none; FREE tier capped at 1)
includeCommentsbooleantrueFetch real comment trees via Reddit's public .json endpoint (no API key)
commentsDepthinteger3Max depth for comment tree recursion (clamped to 10)
commentsLimitinteger10Max 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:

FieldTypeDescription
post_idstring|nullReddit post ID (base36, from the Atom <id>)
subredditstring|nullSubreddit name
titlestringPost title
selftextstring|nullPost body — null via RSS; enriched with the real body when comments are fetched
authorstringAuthor username, [deleted] when the feed carries none
scorenumber|nullNet upvotes — null via RSS; enriched with the real value when comments are fetched
upvote_rationumber|nullUpvote ratio — null via RSS; enriched with the real value when comments are fetched
num_commentsnumber|nullComment count — null via RSS; enriched with the real value when comments are fetched
urlstring|nullPost URL (permalink)
permalinkstring|nullReddit permalink (relative path)
created_utcinteger|nullUnix timestamp (from RSS date)
createdISOstring|nullCreation date in ISO 8601 (from RSS date)
flairstring|nullPost flair text (best effort)
is_videoboolean|nullnull via RSS; real boolean on the posts enriched by the .json fetch
content_cleanstringML-ready text from the title (no HTML)
sentimentstringTitle sentiment (PT-BR + EN heuristic)
comments_treearrayReal 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_clean field, 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 / featureSupportedNotes
subredditsList of subreddits to scrape (e.g. ['brasil', 'technology', 'worldnews'])
searchQuerySearch term across all Reddit (alternative to subreddit). Leave empty to use subreddits list.
sortHow to sort posts
timeTime 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
includeCommentsFetch real comment trees (via Reddit's public .json endpoint, no API key) for up to maxPostsWithComments posts
commentsDepthMax depth of nested comment replies to fetch (recursive; clamped to 10)
commentsLimitMax 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):

EventCost
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.

📝 Changelog

v1.7 (Current)

  • 💬 Real comment trees — when includeComments is on, up to maxPostsWithComments posts get their thread fetched from Reddit's public .json endpoint (/comments/{id}.json?limit=&depth=&sort=top, no API key). Recursive comments_tree with author, body, score, created_utc, depth, permalink, replies[].
  • 📊 Real engagement enrichmentscore, num_comments, selftext, upvote_ratio, is_video are now filled with real values from the post listing when comments are fetched (still null via RSS-only).
  • 🛡️ Cost control — new maxPostsWithComments input (default 3, max 10; FREE tier capped at 1) + commentsLimit/commentsDepth bounds; failed/blocked comment fetches never fabricate data (comments_tree stays []).
  • ➕ Added maxPostsWithComments to the input schema.

v1.6

  • 🔁 Switched data source to Reddit's public RSS/Atom feed — the legacy .json API 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) and sentiment output fields.
  • ⚠️ score, upvote_ratio, num_comments, selftext are now null and comments_tree is 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 — quando includeComments está ativo — enriquece até maxPostsWithComments posts com árvores de comentários reais via endpoint público .json do 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 ficam null / vazios e nunca são inventados:

  • score, upvote_ratio, num_commentsnull
  • selftext (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_ratio e is_video são enriquecidos com os valores reais do post listing, e comments_tree traz a árvore real (até commentsLimit comentários de nível superior × commentsDepth de recursão). Se o fetch falhar ou for bloqueado, o post ainda é retornado com comments_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) com author, body, score, created_utc, depth, permalink, replies[]
  • 📊 Enriquecimento real de engajamento — ao buscar comentários, score, num_comments, selftext, upvote_ratio, is_video sã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

CampoTipoPadrãoDescrição
subredditsstring[]["brasil"]Lista de subreddits para raspar
searchQuerystring""Busca global (substitui subreddits)
sortenum"hot"Ordenação: hot, new, top, rising, controversial
timeenum"week"Filtro de tempo: hour, day, week, month, year, all
maxPostsinteger10Máximo de posts a coletar
maxPostsWithCommentsinteger3Quantos posts coletados recebem fetch de árvore de comentários (0 = nenhum; FREE tier limitado a 1)
includeCommentsbooleantrueBuscar árvores de comentários reais via endpoint público .json do Reddit (sem API key)
commentsDepthinteger3Profundidade máxima dos comentários (recursiva; limitada a 10)
commentsLimitinteger10Má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:

CampoTipoDescrição
post_idstring|nullID do post (base36, do <id> do Atom)
subredditstring|nullNome do subreddit
titlestringTítulo do post
selftextstring|nullCorpo do post — null via RSS; enriquecido com o corpo real quando comentários são buscados
authorstringNome do autor, [deleted] quando o feed não traz
scorenumber|nullVotos líquidos — null via RSS; enriquecido com o valor real quando comentários são buscados
upvote_rationumber|nullProporção de upvotes — null via RSS; enriquecida com o valor real quando comentários são buscados
num_commentsnumber|nullTotal de comentários — null via RSS; enriquecido com o valor real quando comentários são buscados
urlstring|nullURL do post (permalink)
permalinkstring|nullPermalink do Reddit (caminho relativo)
created_utcinteger|nullTimestamp Unix (da data do RSS)
createdISOstring|nullData de criação em ISO 8601 (da data do RSS)
flairstring|nullFlair do post (best effort)
is_videoboolean|nullnull via RSS; booleano real nos posts enriquecidos pelo fetch .json
content_cleanstringTexto limpo do título para ML
sentimentstringSentimento do título (heurística PT-BR + EN)
comments_treearrayÁ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étricaCusto
post-scraped$0.005 por post ($5,00 / 1.000)

Não há evento por comentário. Usage (CU/proxy) é do cliente.

🔗 Actors Relacionados