Stallion Reddit Scraper avatar

Stallion Reddit Scraper

Pricing

from $1.40 / 1,000 results

Go to Apify Store
Stallion Reddit Scraper

Stallion Reddit Scraper

Scrape Reddit posts, comments, subreddit listings, and keyword search via public JSON API. Drop-in compatible with reddit-scraper-lite input/output. No login required.

Pricing

from $1.40 / 1,000 results

Rating

5.0

(1)

Developer

Stallion S

Stallion S

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

0

Monthly active users

a day ago

Last modified

Share

Apify Store: busy_evidence/stallion-reddit-scraper

Fast, lightweight Reddit scraper for Apify. Collect posts from subreddit listings, keyword search, and individual post URLs — no Reddit login required. Uses efficient HTTP requests instead of a headless browser, so runs are typically faster and cheaper.

Disclaimer: This is an unofficial scraper and is not affiliated with Reddit Inc. Reddit may change access rules at any time. Use responsibly and respect Reddit's terms of service.


Why use this Reddit Scraper?

This ActorTypical browser scrapers
SpeedSeconds per listing pageMinutes (page render + scroll)
CostLow memory (256–1024 MB)High memory (browser overhead)
Proxy usageResidential proxy for listingsResidential + browser sessions

Best for: monitoring subreddits, lead generation, sentiment pipelines, research datasets, and scheduled jobs where you need posts fast at predictable per-result pricing.

For full comment threads and vote counts on every field, set maxComments above 0 when JSON access is available, or use a browser-based scraper for maximum coverage.


Features

  • Browse subredditsnew, hot, top, rising, controversial
  • Keyword search — global or scoped to one subreddit (searchCommunityName)
  • Single post URLs — scrape one thread by URL
  • Nested comments — when maxComments > 0 (see limitations below)
  • Date filterspostDateLimit / commentDateLimit (YYYY-MM-DD)
  • NSFW toggleincludeNSFW
  • Pagination resume — pass ?after=t3_… in start URLs
  • Search → browse fallback — empty niche search falls back to subreddit listing
  • RSS fallback — when Reddit blocks JSON (common in 2026), listings use public Atom feeds automatically

How it works

  1. Phase 1 — Discovery: listing or search URLs are crawled; post stubs are collected.
  2. Phase 2 — Enrichment (optional): when maxComments > 0, each post is fetched again for full body + comments.

Data sources:

SourceWhen usedWhat you get
jsonReddit JSON API respondsFull fields: scores, comment counts, comments
rssJSON blocked (403)Title, body snippet, author, URL, date — upVotes and numberOfComments are 0; rows include "dataSource": "rss"

For listing-only runs, set maxComments: 0 (default). This is the fastest and most reliable mode on Apify Cloud.

Proxy: enable Apify Proxy with residential IPs. Reddit blocks datacenter traffic quickly.


How to use

  1. Open this Actor on Apify Store and click Try for free (or run from your private Actor page).
  2. Choose a mode:
    • Subreddit listing → add a URL like https://www.reddit.com/r/python/new/
    • Search → leave startUrls empty and fill searches
    • One post → paste a /comments/ URL
  3. Set maxItems (total results cap) and maxComments (0 for posts only).
  4. Enable proxyuseApifyProxy: true (residential recommended).
  5. Click Start and download results as JSON, CSV, Excel, or via API.

Input

Provide either startUrls or searches. When startUrls is set, search fields are ignored.

Input parameters

FieldTypeDefaultDescription
startUrlsarraySubreddit listings, post URLs, or paginated listing URLs
searchesarray[]Keywords (used when startUrls is empty)
searchCommunityNamestringRestrict search to one subreddit (no r/ prefix)
sortstringnewnew, hot, top, relevance, comments
timestringallhour, day, week, month, year, all
postDateLimitstringOnly posts on/after YYYY-MM-DD
commentDateLimitstringOnly comments on/after YYYY-MM-DD
maxItemsinteger100Hard cap on dataset rows
maxPostCountinteger100Max posts per listing/search page
maxCommentsinteger0Comments per post; 0 = skip comment fetch
scrollTimeoutinteger40Seconds to keep paginating a listing
includeNSFWbooleanfalseInclude adult content
searchPostsbooleantrueSearch posts when using searches
searchCommentsbooleanfalseSearch comments
searchCommunitiesbooleanfalseSearch communities
searchUsersbooleanfalseSearch users
skipCommentsbooleanfalseSkip comments even if maxComments > 0
includeMediaLinksbooleanfalseAdd image/video URLs (slower)
proxyobjectApify proxy config; residential recommended
{
"startUrls": [{ "url": "https://www.reddit.com/r/cartalkuk/new/" }],
"maxItems": 100,
"maxPostCount": 100,
"maxComments": 0,
"scrollTimeout": 40,
"includeNSFW": true,
"proxy": { "useApifyProxy": true }
}

Example — search inside a subreddit

{
"searches": ["machine learning", "data science"],
"searchCommunityName": "python",
"sort": "new",
"time": "year",
"postDateLimit": "2024-01-01",
"maxItems": 200,
"maxComments": 0,
"proxy": { "useApifyProxy": true }
}

Example — one post with comments

{
"startUrls": [{
"url": "https://www.reddit.com/r/python/comments/EXAMPLE/title_here/"
}],
"maxComments": 50,
"proxy": { "useApifyProxy": true }
}

Example — resume pagination

{
"startUrls": [{
"url": "https://www.reddit.com/r/dashcam/new/?after=t3_abc123"
}],
"maxItems": 100,
"proxy": { "useApifyProxy": true }
}

Output

Each dataset row is one post with a consistent, structured schema.

Post object

{
"dataType": "post",
"parsedId": "abc123",
"id": "t3_abc123",
"url": "https://www.reddit.com/r/python/comments/abc123/title/",
"title": "Example post title",
"body": "Post selftext or empty for link posts",
"parsedCommunityName": "python",
"communityName": "r/python",
"username": "reddit_user",
"upVotes": 150,
"numberOfComments": 42,
"createdAt": "2025-08-01T12:00:00.000Z",
"scrapedAt": "2026-07-01T12:00:00.000Z",
"comments": [],
"dataSource": "rss"
}

dataSource appears only when the row came from RSS fallback ("rss"). JSON-sourced rows omit this field.

Comment object (when maxComments > 0)

{
"parsedId": "cmt1",
"body": "Great post!",
"username": "reader42",
"upVotes": 3,
"createdAt": "2025-08-01T12:05:00.000Z",
"parentId": "t3_abc123"
}

With includeMediaLinks: true, posts may also include imageUrls, videoUrls, flair, over18, isVideo, and upVoteRatio.


Pricing

This Actor uses Pay per event on Apify Store:

EventTypical price
Actor start~$0.00005 per run
Result (apify-default-dataset-item)~$0.003 per post

Example: 100 posts ≈ $0.30 (+ small start fee). Platform/proxy usage may apply depending on your monetization settings.

Set a max cost per run in the Apify Console before large jobs.


API usage

Replace YOUR_TOKEN with your Apify API token.

Actor ID: busy_evidence/stallion-reddit-scraper

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("busy_evidence/stallion-reddit-scraper").call(run_input={
"startUrls": [{"url": "https://www.reddit.com/r/python/new/"}],
"maxItems": 100,
"maxComments": 0,
"proxy": {"useApifyProxy": True},
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"Scraped {len(items)} posts")

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('busy_evidence/stallion-reddit-scraper').call({
startUrls: [{ url: 'https://www.reddit.com/r/python/new/' }],
maxItems: 100,
maxComments: 0,
proxy: { useApifyProxy: true },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Scraped ${items.length} posts`);

cURL

curl -X POST \
"https://api.apify.com/v2/acts/busy_evidence~stallion-reddit-scraper/runs?token=YOUR_TOKEN&waitForFinish=300" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{"url": "https://www.reddit.com/r/python/new/"}],
"maxItems": 100,
"maxComments": 0,
"proxy": {"useApifyProxy": true}
}'

Integrations

Export results to Google Sheets, Slack, Zapier, Make, or any webhook via Apify integrations on the run's Export tab.


FAQ

Why enable residential proxy?
Reddit blocks datacenter IPs. Apify residential proxy is required for reliable runs on the platform.

Why is maxComments default 0?
Comment fetch needs the JSON API, which Reddit often blocks. Listing scans with maxComments: 0 use RSS fallback and complete in seconds.

Why are upVotes and numberOfComments zero?
When JSON is blocked, the Actor falls back to RSS feeds which do not include scores or comment counts. The row will have "dataSource": "rss".

What is scrollTimeout?
Seconds to keep paginating before stopping (default 40). Increase for large subreddits or slow proxy regions.

Why fewer results than maxItems?
Reddit caps listing depth at roughly 1,000 posts per sort. Date filters and NSFW settings also reduce counts.

Does this scrape user profiles?
Not yet. Supported start URLs are subreddit listings (/r/{sub}/{sort}) and post URLs (/r/{sub}/comments/{id}).


Limitations

  • Reddit JSON API access is restricted for unauthenticated clients (2026). Listings use RSS when needed.
  • RSS rows lack vote/comment counts and cannot fetch comment threads.
  • Historical listing depth is ~1,000 items per sort — use postDateLimit + scheduled runs for ongoing monitoring.
  • Search and comment modes depend on JSON availability and may return fewer fields than browser-based scrapers.

Local development

pip install -r requirements.txt
python -m pytest tests/
apify run --input='{"startUrls":[{"url":"https://www.reddit.com/r/python/new/"}],"maxItems":5,"maxComments":0}'

Changelog

0.1.8

  • RSS/Atom fallback when Reddit JSON returns 403
  • dataSource: "rss" on fallback rows
  • Apify Actor.log for visible platform logs

0.1.0

  • Initial release: browse, search, and post scraping