SFOLN

Catalogue / Social media data

Reddit Posts Scraper (Subreddits)

sfoln/reddit-subreddit-posts · Social media, News, Lead generation On request

Scrape posts from any public subreddit sorted by hot, new or top: title, author, date, score, upvote ratio, comment count, flair, text, link and NSFW flag, one JSON record per post. $0.60 per 1,000 posts + $0.003 per page of ~25. No Reddit account or API key needed.

About

What it does

Reddit Posts Scraper (Subreddits) gets posts from any public subreddit sorted by hot, new or top (with a timeframe), one normalized record per post: post ID, URL, title, author, creation date, score, upvote ratio, comment count, flair, text body (first 2,000 characters), external link, thumbnail and NSFW flag. It's built for community and brand monitoring, market research, trend detection, dataset building and AI agents.

Price

Price per delivered record

EventPricePer 1,000Charged for
Reddit post
reddit-post
$0.0006$0.60 / 1,000Charged once per Reddit post delivered as a dataset record. Subreddit summary records are never charged.
Reddit listing page
reddit-posts-query
$0.003$3 / 1,000Charged once per page of a subreddit listing (about 25 posts) that delivered at least one post, or that the provider billed although it had no new posts (e.g. an empty or private subreddit). Covers the per-request upstream fee.

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~reddit-subreddit-posts/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"subreddits":["AskReddit"],"maxPostsPerSubreddit":10}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/reddit-subreddit-posts"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~reddit-subreddit-posts/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Get the top 25 posts of the past week from r/technology and summarize the main discussion topics with their scores and comment counts.

Input

Input fields

Enter subreddit names or URLs. Each subreddit produces one dataset record per post plus one summary record per subreddit.

FieldTypeDefaultMeaning
subreddits *arrayrequiredSubreddits
Subreddit names (news, r/news) or URLs such as https://www.reddit.com/r/news/. Duplicates are removed. Accounts on the Apify free plan can process up to 10 subreddits per run.
sortstring"hot"Sort
hot = Reddit's front-page ranking, new = newest first, top = highest score within the timeframe. One of "hot", "new", "top".
timeframestring"day"Timeframe (for Top)
Period for sort = top (ignored for hot and new). One of "day", "week", "month", "year", "all".
maxPostsPerSubredditinteger25Max posts per subreddit
How many posts to return per subreddit (1–250). Posts are fetched in pages of about 25; each delivered post is one charged event, plus one page event per page. Range 1–250.
maxSubredditsinteger100Max subreddits
Safety cap on the number of subreddits processed in this run. Range 1–1000.
concurrencyinteger4Concurrency
How many subreddits are fetched in parallel (1–8). Range 1–8.
itemTimeoutSecsinteger600Time limit per input (seconds)
Pagination for one subreddit stops cleanly shortly before this limit (60–3600). Raise it for very large per-input limits. Range 60–3600.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified provider post object to each post record.
Example input
{
  "subreddits": [
    "AskReddit"
  ],
  "maxPostsPerSubreddit": 10
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstring | objectInput
The subreddit name or URL as provided.
recordTypestringRecord type
post (one per delivered post, charged) | subreddit (one summary per subreddit, never charged) e.g. "post"
positionintegerPosition
subredditstring | nullSubreddit
postIdstring | nullPost ID
fullnamestring | nullFullname
t3_… id
urlstring | nullPost URL
titlestring | nullTitle
authorstring | nullAuthor
createdAtstring | nullCreated at
ISO 8601 UTC
scorenumber | nullScore
upvoteRationumber | nullUpvote ratio
numCommentsnumber | nullComments
flairstring | nullFlair
isSelfboolean | nullText post
selftextstring | nullText
Post body, first 2,000 characters
selftextTruncatedbooleanText truncated
linkUrlstring | nullLink URL
External link for link posts
domainstring | nullDomain
thumbnailstring | nullThumbnail
isNsfwboolean | nullNSFW
isVideoboolean | nullVideo
isStickiedboolean | nullStickied
subredditSubscribersnumber | nullSubreddit subscribers
subredditUrlstringSubreddit URL
subreddit records only.
sortstringSort
subreddit records only.
timeframestring | nullTimeframe
subreddit records only.
postsDeliveredintegerPosts delivered
subreddit records only.
pagesFetchedintegerPages fetched
subreddit records only.
pagesChargedintegerPages charged
subreddit records only.
reachedEndbooleanReached end
subreddit records only.
stopReasonstringStop reason
subreddit records only.
statusstringStatus
ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan e.g. "ok"
chargedbooleanCharged
Post records: charged reddit-post. subreddit summary records are never charged themselves: the reddit-posts-query page fees charged for the input (including empty pages the provider billed) are counted in pagesCharged.
chargedEventstringCharged event
errorobjectError
warningsarrayWarnings
sourcestringSource
fetchedAtstringFetched at
Example record
{
  "input": "AskReddit",
  "recordType": "post",
  "position": 1,
  "subreddit": "AskReddit",
  "postId": "1lfbo7u",
  "fullname": "t3_1lfbo7u",
  "url": "https://www.reddit.com/r/AskReddit/comments/1lfbo7u/what_is_a_thing_you_love_that_lots_of_people_hate/",
  "title": "What is a thing you love that lots of people hate?",
  "author": "Vetro_Nodulare2",
  "createdAt": "2025-06-19T14:05:59.000Z",
  "score": 45,
  "upvoteRatio": 0.9,
  "numComments": 349,
  "flair": null,
  "isSelf": true,
  "selftext": null,
  "selftextTruncated": false,
  "linkUrl": null,
  "domain": "self.AskReddit",
  "thumbnail": null,
  "isNsfw": false,
  "isVideo": false,
  "isStickied": false,
  "subredditSubscribers": 56146328,
  "status": "ok",
  "charged": true,
  "chargedEvent": "reddit-post",
  "source": "scrapecreators",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents