~ / endpoints / Post API

Reddit Post Scraper API

Point our Reddit post scraper at one submission and the post object comes back as structured JSON: its title, selftext body, author, score, upvote ratio, comment count, creation time, and permalink, all from a single REST call.

Get a free API keyBrowse endpoints
1,000
free requests
2.6s
median response
12
post fields
JSON
structured output
the challenge

Why Reddit Post data is hard to collect

Reading one post through Reddit's Data API means registering an OAuth client and holding it under 100 queries per minute, the free ceiling Reddit drew alongside its $0.24 per 1,000 calls charge in June 2023. Appending .json to a submission URL looks easier, yet that route answers anonymous bots with HTTP 429 unless you send a custom User-Agent, and Reddit's recovery pages do not reliably expose the score or upvote ratio you came for.

get started

Call the Reddit Post Scraper API in one request

cURL
curl "https://api.redditscraperapi.com/api/v1/reddit/post?url=https://www.reddit.com/r/python/comments/1abc234/&api_key=$API_KEY"
Python
import requests

resp = requests.get(
    "https://api.redditscraperapi.com/api/v1/reddit/post",
    params={
        "post_id": "1abc234",
        "subreddit": "python",
        "api_key": "YOUR_API_KEY",
    },
)
post = resp.json()["post"]

print(post["title"], "by u/" + (post["author"]["username"] or "[deleted]"))
print("Score:", post["score"], "| Ratio:", post["upvote_ratio"], "| Comments:", post["num_comments"])
if post["body"]:
    print(post["body"][:200])
inputs

Parameters

ParameterRequiredDefaultNotes
post_idoptional-The submission's base-36 id, with or without the t3_ prefix (for example 1abc234). Send post_id with subreddit, or send url.
urloptional-Any reddit.com .../comments//... submission link. We read the post id and subreddit straight out of it, so a URL pasted from the address bar stands in for post_id and subreddit.
subredditoptional-The subreddit the post sits in, without the leading r/. Required when you pass post_id on its own so we can reach the canonical submission; a full url already carries it.
sortoptionaltopSort applied to the thread that ships alongside the post: top, new, or controversial. The post object itself is unaffected.
the response

Fields the Reddit Post Scraper API returns

200 OK
{
  "post": {
    "id": "t3_1abc234",
    "title": "What is your favorite Python library and why?",
    "author": { "username": "dev_jane", "id": "t2_8x4q1" },
    "score": 4821,
    "upvote_ratio": 0.97,
    "num_comments": 936,
    "created": "2026-05-31T14:22:08+00:00",
    "body": "I keep coming back to requests for almost everything. What is the one library you would not start a project without?",
    "permalink": "https://www.reddit.com/r/python/comments/1abc234/",
    "external_url": null,
    "domain": null,
    "is_locked": null,
    "is_removed": null
  },
  "comments_returned": 48,
  "_meta": {
    "source": "svc-comments+post-page",
    "sort": "top",
    "pages_fetched": 2,
    "truncated": false
  }
}
FieldTypeDescription
post.idstringThe submission's t3_ thing id, unique across Reddit.
post.titlestringThe post title exactly as shown on the submission page.
post.authorobjectThe poster as { username, id }; username is [deleted] when the account was removed.
post.scoreinteger or nullNet upvotes (upvotes minus downvotes) at request time. Null only when the live vote surface was unreachable.
post.upvote_ratiofloat or nullShare of votes that are upvotes, from 0 to 1, so 0.97 means 97 percent upvoted.
post.num_commentsintegerTotal comment count Reddit reports for the submission.
post.createdstringISO-8601 timestamp of when the post was submitted.
post.bodystring or nullThe selftext body for a text post, decoded to plain readable text. Null for a pure link, image, or video post.
post.permalinkstring (url)Absolute www.reddit.com link to the submission.
post.external_urlstring or nullThe outbound link a link post points to. Null when the post is self text.
post.domainstring or nullHost of external_url (for example youtube.com) for link posts, otherwise null.
post.is_lockedboolean or nullWhether the submission is locked to new comments.
what you build

What you can build with it

>

Keyword and mention tracking

Scrape Reddit posts that mention a product, ticker, or topic and resolve each one into title, body, score, and upvote_ratio to watch how it is landing across subreddits in near real time.
>

Idea and demand mining

Capture the selftext of question and discussion posts to surface the problems, feature asks, and exact wording your audience uses before a single comment loads.
>

Virality and ranking signals

Track score, upvote_ratio, and num_comments on the same post over time to model how submissions climb, when momentum stalls, and what hits the front page.
>

Link-post auditing

Read external_url and domain off link posts to map which sources a community shares most and to build a feed of outbound links by subreddit.
>

Dataset and LLM corpora

Collect title and body pairs with their engagement counts to assemble a clean, labeled submission dataset for research, classification, or fine-tuning.
>

Archiving and compliance

Store the title, body, author, and created timestamp of posts that matter to you, with is_removed flagging when a submission later disappears.
our edge

Why developers pick our Reddit Post Scraper API

Our Reddit post scraper runs the residential fetch, anti-bot clearance, and HTML parsing on our infrastructure, then folds Reddit's split submission markup into one flat post object with the real selftext and vote data attached. Hand it a post id and a subreddit, or just the URL, and the parsed submission returns in about 2.6 seconds behind a single api_key, on a free tier of 1,000 requests.

*

One key, no developer app

A single api_key authenticates every call. There is no Reddit OAuth client to register, no secret to rotate, and no 100-queries-per-minute review to clear first.
*

Selftext bodies, fully decoded

Text submissions come back with their selftext read from the post markup and decoded to plain text, so you skip the rich-text JSON unpacking the official API hands over.
*

Live score and upvote ratio

We read the submission's net score and upvote_ratio from Reddit's rendered page, the figures the score-blind .json recovery surface tends to drop.
*

Link and self posts alike

Self posts return a body, while link posts populate external_url and domain, so a single response shape covers every submission type you throw at it.
*

Billed on success

Unreturned fetches retry across residential and datacenter pools automatically, and only requests that come back with the post are counted against your plan.
vs the api

Reddit Post Scraper API compared to the official Reddit API

FactorOur Reddit post scraper APIDIY .json fetchingReddit Data API
SetupOne api_keyProxies, User-Agent, parser, retriesRegistered OAuth client plus token
Rate limitPlan request limit only10 rpm anonymous before 429s100 queries per minute, OAuth-gated
Auth headerNot your concernCustom User-Agent or instant 429OAuth bearer token on every call
Selftext bodyDecoded plain textYou strip the markup yourselfRich-text JSON you unpack
Score and ratioRead from the live pageOften missing on recovery pagesIncluded until quota runs out
Anti-bot and proxiesHandled for youYou build and maintain itOutside the API's scope
Output shapeFlat post objectWhatever you parseNested Listing JSON
plans

Free to start, priced to scale

PlanPriceBest for
Free1,000 requestsTesting and small jobs
Pro$0.60 / 1kProduction workloads
Pay-as-you-go$0.90 / 1kSpiky or one-off volume

Median response 2.6s. You only pay for successful requests.

FAQ

How do I scrape a single Reddit post?

Send the submission's post id together with its subreddit, or just paste the thread URL, to our reddit/post endpoint with your api_key. The response carries a post object holding the title, author, score, upvote_ratio, num_comments, created timestamp, selftext body, permalink, and link fields. You do not register a Reddit OAuth app or run any proxy and parsing stack of your own.

What fields does the Reddit post object return?

Each post returns id, title, author as a username and id pair, score, upvote_ratio, num_comments, created, body (the selftext for text posts), permalink, external_url and domain for link posts, plus is_locked and is_removed flags. A text submission carries a body and a null external_url, while a link submission carries external_url and domain with a null body, so one shape fits both.

Can we scrape data from a Reddit post without the official Reddit API?

Yes. The endpoint fetches the live submission page through residential proxies and parses it for you, so no Reddit API access or OAuth client is involved. That matters because the anonymous shortcut of adding .json to a post URL returns HTTP 429 to automated traffic without a custom User-Agent, and Reddit's fallback pages frequently omit the score and upvote ratio. Our call returns those values from the rendered page, which is what makes it practical to scrape Reddit posts at any volume.

Does the response include the post's comments?

The reddit/post response is built around the submission object, and it also ships the first page of the thread as a comments array with a comments_returned count, sorted by the sort you pass. When the whole conversation is what you are after, the dedicated Reddit comment scraper API page covers the nested reply tree, depth, and parent ids in full. For post-level work, read the post object and ignore the rest.

Can I look up a post by id or only by URL?

Either works. Pass the base-36 post id (with or without the t3_ prefix) along with the subreddit it lives in, and we build the canonical submission URL for you. Or pass the full reddit.com comments URL and we read the id and subreddit out of it. A subreddit is needed with a bare post id because the underlying page is keyed by r/{subreddit}, so id alone cannot be resolved.

How fast is the Reddit post scraper?

Submissions return in a median of 2.6 seconds end to end, including proxy routing, anti-bot clearance, retries, and parsing.

What does the Reddit post scraper cost?

The free tier covers 1,000 requests, Pro pricing is about $0.60 per 1,000 requests, and pay-as-you-go top-ups run $0.90 per 1,000 successful requests. You are billed only for calls that return the post.

Pull post api as JSON
Free plan includes 1,000 requests. No card needed.
Get a free API key Browse endpoints