Reddit posts data API

Read a subreddit's posts, the full comment tree under a post, a community's profile, or Reddit search results. Each post, comment or community comes back as one record.

Record types
post comment community
Fields
58
From
$1.80 per 1,000 records

What you can request

Set mode in the request body to choose what comes back; without it the request runs as posts. Each mode reads the inputs listed next to it.

ModeWhat comes backInputsBilled as
postsOne record per post in each subreddit, sorted hot, new, top or rising.

With includeComments: true, each post's comments come back too, billed as comment.

subreddits sort timepost
commentsOne record per comment under each post.postUrls subreddits commentSort maxCommentsPerPostcomment
communityA community's profile: subscribers, weekly activity, description and creation date.subredditscommunity
searchOne record per post, comment or community that matches each query.searchQueries searchType searchSort searchTimesearch-result

Every request also takes maxItems (records for the whole request) and maxItemsPerInput (records per search, URL or name).

Datasets

These Reddit record types have their own page, with their own example record, fields, options and prices.

DatasetOne record isFieldsFrom, per 1,000
CommentsOne record describes a single Reddit comment, from a post's comment thread or from a search hit.26$1.80

Example request and record

The request below is the one this example record answers. The names, usernames, photos and contact details of people in it are fictional. Long values in the record are shortened.

curl

curl -X POST https://api.urakimon.com/records/reddit \
  -H "x-api-key: $URAKIMON_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "mode": "posts",
    "subreddits": ["Python"],
    "sort": "hot",
    "maxItemsPerInput": 30
  }'

Python

import os
import requests

res = requests.post(
    "https://api.urakimon.com/records/reddit",
    headers={"x-api-key": os.environ["URAKIMON_API_KEY"]},
    json={
        "mode": "posts",
        "subreddits": [
            "Python"
        ],
        "sort": "hot",
        "maxItemsPerInput": 30
    },
)
res.raise_for_status()
records = res.json()["records"]

Node

const res = await fetch("https://api.urakimon.com/records/reddit", {
  method: "POST",
  headers: {
    "x-api-key": process.env.URAKIMON_API_KEY,
    "content-type": "application/json",
  },
  body: JSON.stringify({
    "mode": "posts",
    "subreddits": ["Python"],
    "sort": "hot",
    "maxItemsPerInput": 30
  }),
});
const { records } = await res.json();
Example Reddit recordDownload
{  "source": "reddit",  "id": "t3_1wkziub",  "postId": "1wkziub",  "title": "State of the art in Python 2026?",  "url": "https://www.reddit.com/r/Python/comments/1wkziub/state_of_the_art_in_python_2026/",  "permalink": "/r/Python/comments/1wkziub/state_of_the_art_in_python_2026/",  "contentUrl": "https://www.reddit.com/r/Python/comments/1wkziub/state_of_the_art_in_python_2026/",  "domain": "self.Python",  "postType": "text",  "subreddit": "Python",  "subredditPrefixed": "r/Python",  "subredditId": "t5_2qh0y",  "author": "example_user_1",  "authorId": "t2_example1",  "score": 427,  "upvoteRatio": 0.9383983572895277,  "commentCount": 167,  "awardCount": 0,  "createdAt": "2026-09-19T22:26:17.014000+0000",  "language": "en",  "isNsfw": false,  "isSpoiler": false,  "isPromoted": false,  "isStickied": false,  "moderationVerdict": null,  "thumbnail": "https://www.redditstatic.com/avatars/defaults/v2/avatar_default_4.png",  "authorFlair": null,  "flair": "Discussion",  "text": "What would you guys consider the state of the art in python in 2026, or what do you expect from modern python codebases?\n\nHeres my list, …",  "bodyHtml": "<p>\n      What would you guys consider the state of the art in python in 2026, or what do you expect from modern python codebases?\n    </…",  "mediaType": "text",  "media": [],  "isSelf": true,  "isGallery": false,  "hasMedia": false,  "wordCount": 157,  "type": "post",  "event": "post",  "collectedAt": "2026-09-20T19:44:36.052Z"}

Fields

Every record starts with the same envelope: source, type, event, id, url, collectedAt. What the envelope means. The tables below list the fields after it, read from real Reddit records. Where a field does not apply to an item it is null or an empty list, not left out. "Present on" names the billed events a field comes with when it is not on every record of that type.

post records

One record describes a single Reddit post, from a subreddit listing or from a search hit. Billed as post or search-result.

36 fields on post records, besides the envelope
FieldTypeWhat it holdsPresent on
postIdstringPost's id with the leading t3_ type prefix removed.Only post
titlestringPost title as shown on Reddit.All
permalinkstringSite-relative path to the post's page, for example /r/sub/comments/id/slug/.All
contentUrlstringPost's primary content link: the post page for a self post, or an external URL for a link post.Only post
domainstringDomain the post links to; self.<subreddit> for a self (text) post.Only post
postTypestringReddit's raw post type: text, image, gif, gallery, video, link, poll, multi_media, or crosspost.Only post
subredditstringName of the subreddit the post was posted in, without the r/ prefix.All
subredditPrefixedstringSubreddit name with the r/ prefix, for example r/Python.Only post
subredditIdstringReddit's internal id for the subreddit, t5_ prefixed.All
authorstringUsername of the post's author.All
authorIdstringReddit's internal id for the post's author, t2_ prefixed.All
scoreintegerNet upvotes (upvotes minus downvotes) at collection time.All
upvoteRatiointeger | numberFraction of votes that were upvotes, from 0 to 1.Only post
commentCountintegerTotal number of comments on the post at collection time.All
awardCountintegerNumber of awards given to the post.Only post
createdAtstringISO 8601 timestamp the post was created.All
languagestringLanguage code Reddit detected for the post, or null when unknown.Only post
isNsfwbooleanWhether the post is marked not safe for work.All
isSpoilerbooleanWhether the post is marked as a spoiler.All
isPromotedbooleanWhether the post is a promoted or ad post.Only post
isStickiedbooleanWhether the post is pinned (stickied) in the subreddit.Only post
moderationVerdictnullModeration action recorded against the post, or null when none applies.Only post
thumbnailstringURL of the post's thumbnail or author icon image.Only post
authorFlairnullAuthor's flair text in the subreddit, or null.Only post
flairnull | stringPost's flair text, with any emoji rendered as :shortcode:, or null.Only post
textnull | stringPlain-text body of a self post, or null for a post with no self-text.Only post
bodyHtmlnull | stringRaw HTML of the self post body, or null for a post with no self-text.Only post
mediaTypestringSame value as postType: the kind of media the post contains.Only post
mediaarrayMedia attached to the post: an array of objects with type (image, gif, video, or poster) and url.Only post
isSelfbooleanWhether the post is a self (text) post rather than a link post.Only post
isGallerybooleanWhether the post is a multi-image gallery.Only post
hasMediabooleanWhether the post has at least one media item.Only post
wordCountinteger | nullNumber of words in the post's self-text body, or null when the post has no self-text.Only post
snippetnullShort excerpt of the post body shown in search results, or null. Only on search-result records.Only search-result
searchQuerystringSearch query string that produced this result. Only on search-result records.Only search-result
pageinteger1-based page number of search results this record came from. Only on search-result records.Only search-result

comment records

One record describes a single Reddit comment, from a post's comment thread or from a search hit. Billed as comment or search-result. 26 fields. Reddit comments: every field, an example record and the options

community records

One record describes a single subreddit (community), from its own page or from a search hit. Billed as search-result.

13 fields on community records, besides the envelope
FieldTypeWhat it holdsPresent on
createdAtstringISO 8601 date the subreddit was created; a date-only source is pinned to UTC midnight.All
namestringSubreddit name, without the r/ prefix.All
prefixedNamestringSubreddit name with the r/ prefix, for example r/Python.All
subscribersintegerTotal subscriber count. Only on search-result records.All
onlineCountintegerNumber of members currently marked online, or null. Only on search-result records.All
descriptionstringSubreddit's public description or about text, or null.All
iconnull | stringURL of the subreddit's icon image. Only on search-result records.All
over18booleanWhether the subreddit is marked not safe for work (over 18).All
searchQuerystringSearch query string that produced this result. Only on search-result records.All
pageinteger1-based page number of search results this record came from. Only on search-result records.All
displayNamestringSubreddit's display name as shown in its banner, or null. Only from the subreddit's own page.All
weeklyActiveUsersintegerNumber of members active in the subreddit over the last 7 days. Only from the subreddit's own page.All
weeklyContributionsintegerNumber of posts and comments in the subreddit over the last 7 days. Only from the subreddit's own page.All

Reddit data pricing

You pay once for each record you receive, at the price of the event it carries. A request that returns nothing costs nothing.

EventPer 1,000 recordsPer record
comment$1.80$0.00180
post$2.10$0.00210
search-result$2.10$0.00210
community$2.30$0.00230

Freshness and limits

  • Records are collected when you send the request. Each one carries collectedAt, the UTC time it was read.
  • POST /records/reddit returns up to 500 records in one response. Ask for more and it answers 413; send the same body to POST /jobs/reddit instead.
  • A request without maxItems returns up to 100 records.
  • Your key's rate limit and quotas apply to every source.

Next steps