Operated by Sourcelane✓ verified
Scrape Reddit posts, comments, subreddit stats and user activity from subreddit, post, profile or search URLs and keywords - export to CSV, JSON or Excel.
A Reddit-focused web scraper that extracts posts, comment threads, subreddit metadata, user activity and search results from subreddit pages, post pages, user profiles, search pages or keyword queries. Outputs flattened record rows representing posts, comments and subreddit entries with rich post metadata (identifiers, URLs, subreddit, author, title, body text, engagement metrics, timestamps, flair and link/domain info, content flags), comment metadata (identifiers, parent linkage, reply depth, author, body text, score, timestamps, permalink and OP flag), and subreddit metrics (description, subscriber and weekly activity metrics, creation date, icon/banner). Supports keyword search across Reddit or within a subreddit, multiple sort orders, time-window filtering, comment depth and per-post comment limits, and run-to-run pagination via saved cursors. Operates without using the official Reddit API or a browser and is designed to produce consistent, table-friendly records for downstream analysis.
Verified Oct 25, 10:11 PM
$0.002
per post
Up to 100 per call. Only pay for results returned; failed calls are refunded.
Market research and brand monitoring
Track what people say about products, competitors or industries
Lead generation
Find users asking for recommendations in niche subreddits
Sentiment analysis and NLP results
Collect post and comment text at scale for classification or fine-tuning
Content and trend research
Identify top posts and discussions in communities over time windows
Community analytics
Compare subreddit size, activity and engagement
Any mix of subreddit URLs, post URLs, user profile URLs and Reddit search URLs.
Keywords or phrases to search Reddit posts for, one per line.
Restrict keyword searches to one subreddit, e.g.
Optional.
Optional settings
| Window | Uptime | Success rate | p50 | p95 | Calls |
|---|---|---|---|---|---|
| 24h | — | — | — | — | 0 |
| 7d | — | — | — | — | 0 |
| 30d | — | — | — | — | 0 |
Call it through Sourcelane's gateway or MCP server. We run the connector, apply your agent's spend guardrails, and bill only the results returned.
Call it via Sourcelane
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"reddit-scraper","params":{"startUrls":["https://www.reddit.com/r/webscraping/"],"maxItems":5},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
startUrls | array | optional | Any mix of subreddit URLs (https://www.reddit.com/r/webscraping or r/webscraping), post URLs (including comment permalinks and redd.it links), user profile URLs (https://www.reddit.com/user/spez or u/spez) and Reddit search URLs (https://www.reddit.com/search/?q=...). |
searches | array | optional | Keywords or phrases to search Reddit posts for, one per line. Each keyword is its own source and results are de-duplicated across the run. |
searchSubreddit | string | optional | Restrict keyword searches to one subreddit, e.g. 'technology' or 'r/technology'. Leave empty to search all of Reddit. |
sort | string | optional | Sort order for subreddit listings, searches and user activity. Subreddits use hot/new/top/rising; searches use relevance/new/top/most comments (hot maps to relevance, rising to new). User profiles use new or top. |
timeFilter | string | optional | Only return posts from this window. Applies to searches, user activity, and subreddit listings sorted by Top or New (Hot and Rising listings ignore it, as on Reddit). |
maxItems | integer | optional | Maximum posts to return for each subreddit, search or user (user profiles return up to this many posts and this many comments). 0 = no limit, keep going until the list ends or the run times out. Capped at 100 per call. |
includeComments | boolean | optional | Also scrape the comment thread of every post. Each comment becomes its own row (recordType 'comment') linked to its post by postId. |
maxCommentsPerPost | integer | optional | Maximum comments to return per post when comments are included, in thread order (top comments with their replies first). 0 = all comments that Reddit loads without expanding collapsed branches. |
maxCommentDepth | integer | optional | How many levels of replies to keep. 1 = top-level comments only, 2 = plus direct replies, and so on. 0 = no depth limit. |
includeSubredditInfo | boolean | optional | For every subreddit URL, add one row (recordType 'subreddit') with its description, subscriber count, weekly active users, weekly contributions, icon and banner. |
userContent | string | optional | What to scrape for user profile URLs: the user's posts, their comments, or both. |
filterKeywords | array | optional | Optional. Keep only posts whose title or text contains at least one of these words (case-insensitive). User comments are matched on their text. Leave empty to keep everything. |
pageId | string | optional | Paste NEXT_PAGE_ID from the previous run's Key-value store to continue where it stopped. Only used when the run has exactly one subreddit, search, or user (posts-only or comments-only) source. |
Each result contains
| Field | Type | Description |
|---|---|---|
recordType | string | Record Type |
sourceType | string | — |
source | string | Source |
id | string | — |
url | string | Url |
subreddit | string | Subreddit |
author | string | Author |
title | string | Title |
body | string | Body |
score | integer | Score |
upvoteRatio | null | — |
numComments | integer | Num Comments |
createdAt | string | Created At |
flair | null | — |
linkUrl | null | — |
domain | null | — |
thumbnail | null | — |
isSelf | boolean | — |
isVideo | boolean | — |
over18 | boolean | — |
spoiler | boolean | — |
locked | null | — |
stickied | null | — |
postId | string | Post Id |
postTitle | string | — |
postUrl | string | — |
parentId | null | Parent Id |
depth | null | — |
isOp | null | — |
subscribers | null | — |
weeklyActiveUsers | null | — |
weeklyContributions | null | — |
description | null | — |
iconUrl | null | — |
bannerUrl | null | — |
message | null | — |
scrapedAt | string | — |
Pick your tool and connect in under a minute. Then just ask — for example: “What do r/espresso users say about the Breville Bambino? Summarise pros and cons.”
Connect Claude
Web, desktop and mobile. One click, then confirm.
Adds the Sourcelane MCP server with your key as a header.
claude mcp add --transport http sourcelane https://api.usesourcelane.com/mcp \
--header "Authorization: Bearer sl_live_your_agent_key"Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.
{
"mcpServers": {
"sourcelane": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.usesourcelane.com/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer sl_live_your_agent_key"
}
}
}
}Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).
{
"mcpServers": {
"sourcelane": {
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer sl_live_your_agent_key"
}
}
}
}Save as .vscode/mcp.json. VS Code prompts for your key once.
{
"servers": {
"sourcelane": {
"type": "http",
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer ${input:sourcelane-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "sourcelane-key",
"description": "Sourcelane agent key",
"password": true
}
]
}Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.
https://usesourcelane.com/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"reddit-scraper","params":{"startUrls":["https://www.reddit.com/r/webscraping/"],"maxItems":5},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://api.usesourcelane.com/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "reddit-scraper",
"params": {"startUrls":["https://www.reddit.com/r/webscraping/"],"maxItems":5},
"maxResults": 10,
},
timeout=300,
)
body = res.json()
print(body["receipt"]["chargedMicros"], "micro-USD for", body["receipt"]["results"], "results")
print(body["data"])—
0 reviews
Leave a review
Loading reviews…