Skip to Content
SourcesReddit

Reddit

Reddit

Scan subreddits — posts, threaded comments, attached media, and linked video transcripts. Always read-only.

Category
Social Media
Source type
REDDIT
Produces
postcommentimagevideofileexternal_video

Public discussion is where leaks surface first — a frustrated employee pasting a config file, a customer posting a screenshot of their invoice, a support thread quoting an internal ticket. Monitoring the subreddits that matter to you turns that into something you find rather than hear about.

What you need to connect

A Reddit app (client ID and secret), a user agent string, and the subreddits to watch. Three app types are supported: read-only, script (with a username and password), and web/installed (with a refresh token).

Scanning is always read-only — nothing is posted, voted or commented.

What Classifyre reads

  • Posts from the listing you choose — new, hot, top, rising or controversial, with a time window for top and controversial.
  • Comments, each as its own asset, linked parent-to-reply so a thread stays navigable. Capped per post, with optional expansion of “load more comments”.
  • Media attached to a post — images, video, audio, documents, gallery items — each as a scannable asset.
  • Linked external videos (YouTube, Vimeo and similar), analysed with the same captions, transcription and on-screen-text pipeline as the YouTube source.

NSFW and stickied posts can be excluded.

Media attached to posts are read with the shared file pipeline: see Supported File Formats for everything it can open, and OCR & Transcription for reading text out of images, audio and video.

Metadata on every asset

Asset kind · post

FieldTypeAlways presentWhat it is
submission_idstringYesReddit submission id (base-36, without the t3_ prefix)
subredditstringYesSubreddit the submission belongs to, without the r/ prefix
titlestringYesSubmission title
authorstringNoRedditor who posted, or [deleted]
scoreintegerNoNet score at extraction time
upvote_rationumberNoFraction of votes that are upvotes
num_commentsintegerNoComment count Reddit reports for the submission
flairstringNoLink flair text
is_selfbooleanNoWhether the submission is a text post rather than a link
over_18booleanNoWhether Reddit flags the submission as over-18
spoilerbooleanNoWhether the submission is marked as a spoiler
stickiedbooleanNoWhether the submission is pinned to the top of the subreddit
lockedbooleanNoWhether the submission is locked to new comments
domainstringNoDomain of the outbound link, or self.<subreddit> for text posts
outbound_urlstringNoURL a link submission points at
listingstringNoSubreddit listing this submission was sampled from
links_countintegerYesNumber of linked assets (comments and media)

Asset kind · comment

FieldTypeAlways presentWhat it is
comment_idstringYesReddit comment id (base-36, without the t1_ prefix)
submission_idstringYesSubmission the comment belongs to
subredditstringNoSubreddit the comment belongs to, without the r/ prefix
authorstringNoRedditor who commented, or [deleted]
parent_fullnamestringNoReddit fullname of the parent (t3_ for a top-level comment, t1_ for a reply)
parent_hashstringNoAsset hash of the parent submission or comment
depthintegerNoNesting depth in the comment forest (0 for top-level)
scoreintegerNoNet score at extraction time
is_submitterbooleanNoWhether the commenter is the submission's author
stickiedbooleanNoWhether the comment is pinned to the top of the thread
reply_countintegerNoNumber of direct replies materialised for this comment
links_countintegerYesNumber of linked assets (parent plus replies)

Asset kind · image

FieldTypeAlways presentWhat it is
filenamestringNoOriginal file name
mime_typestringNoMIME type
size_bytesintegerNoRaw byte size
image_widthintegerNoWidth in pixels
image_heightintegerNoHeight in pixels
submission_idstringYesSubmission the media was attached to
subredditstringNoSubreddit the submission belongs to, without the r/ prefix
file_namestringYesFile name derived from the Reddit media URL
source_urlstringNoReddit-hosted URL the bytes are downloaded from
gallery_indexintegerNoPosition within a gallery submission (0-based)
parent_hashstringNoAsset hash of the submission the media belongs to

Asset kind · video

FieldTypeAlways presentWhat it is
filenamestringNoOriginal file name
mime_typestringNoMIME type
size_bytesintegerNoRaw byte size
submission_idstringYesSubmission the media was attached to
subredditstringNoSubreddit the submission belongs to, without the r/ prefix
file_namestringYesFile name derived from the Reddit media URL
source_urlstringNoReddit-hosted URL the bytes are downloaded from
gallery_indexintegerNoPosition within a gallery submission (0-based)
parent_hashstringNoAsset hash of the submission the media belongs to
duration_secondsintegerNoDuration Reddit reports for a hosted video

Asset kind · file

FieldTypeAlways presentWhat it is
filenamestringNoOriginal file name
mime_typestringNoMIME type
size_bytesintegerNoRaw byte size
submission_idstringYesSubmission the media was attached to
subredditstringNoSubreddit the submission belongs to, without the r/ prefix
file_namestringYesFile name derived from the linked URL
source_urlstringNoURL the bytes are downloaded from
gallery_indexintegerNoPosition within a gallery submission (0-based)
parent_hashstringNoAsset hash of the submission the file belongs to

Asset kind · external_video

FieldTypeAlways presentWhat it is
submission_idstringYesSubmission that linked the video
subredditstringNoSubreddit the submission belongs to, without the r/ prefix
video_urlstringYesURL of the linked video
providerstringNoHost that serves the video (e.g. youtube.com, vimeo.com)
titlestringNoVideo title reported by the provider
parent_hashstringNoAsset hash of the submission that linked the video
duration_secondsintegerNoVideo duration in seconds
transcript_availablebooleanNoWhether transcript text was obtained for the video
transcript_sourcestringNoOrigin of the transcript text: 'captions' (caption track) or 'whisper' (audio transcribed with faster-whisper)
transcript_languagestringNoLanguage code of the fetched transcript
transcript_is_generatedbooleanNoWhether the transcript is auto-generated (vs creator-uploaded)

Lineage

Lineage

This source records no lineage. Nothing in the system it reads describes data moving from one place to another, so no FLOW edges are produced. Related items are still linked — see Lineage & Relationships for what those links mean and how they differ from lineage.

Worth knowing

  • Comment forests are unbounded. The per-post comment cap is what keeps a busy subreddit from consuming an entire scan.
  • Rate limits are absorbed by pacing requests rather than failing.
  • Self-hosted Reddit-compatible instances can be pointed at by overriding the site endpoints.

Configuration

Beyond the fields below, every source also has the settings shared by all of them: the sampling strategy, the detectors to run, the scan schedule, and the compute limits for its scan jobs.

Required

Without these, the source will not save.

This section depends on which authentication method you pick — one of the following applies.

Reddit Read-Only App

FieldTypeRequiredWhat it doesDefault
auth_mode"READ_ONLY"Yes
subredditsarrayYesSubreddits to scan, by name (e.g. datasets) or URL (e.g. https://www.reddit.com/r/datasets/).
user_agentstringYesUnique application description required by Reddit's API rules. Recommended format: <platform>:<app ID>:<version string> (by u/<reddit username>).

Reddit Script App

FieldTypeRequiredWhat it doesDefault
auth_mode"SCRIPT"Yes
subredditsarrayYesSubreddits to scan, by name (e.g. datasets) or URL (e.g. https://www.reddit.com/r/datasets/).
user_agentstringYesUnique application description required by Reddit's API rules. Recommended format: <platform>:<app ID>:<version string> (by u/<reddit username>).

Reddit Web / Installed App

FieldTypeRequiredWhat it doesDefault
auth_mode"REFRESH_TOKEN"Yes
subredditsarrayYesSubreddits to scan, by name (e.g. datasets) or URL (e.g. https://www.reddit.com/r/datasets/).
user_agentstringYesUnique application description required by Reddit's API rules. Recommended format: <platform>:<app ID>:<version string> (by u/<reddit username>).

Secrets

Stored encrypted and never shown again after you save them. See Configuration & Fields.

This section depends on which authentication method you pick — one of the following applies.

Reddit App Credentials

FieldTypeRequiredWhat it doesDefault
client_idstringYesApp client id — the ~14-character string shown under the app name.
client_secretstringYesApp client secret — the ~27-character string shown next to 'secret'.

Reddit Script Credentials

FieldTypeRequiredWhat it doesDefault
client_idstringYesApp client id — the ~14-character string shown under 'personal use script'.
client_secretstringYesApp client secret — the ~27-character string shown next to 'secret'.
usernamestringYesReddit account name that registered the script app.
passwordstringYesPassword for that Reddit account. With 2FA enabled use password:token.

Reddit Refresh Token

FieldTypeRequiredWhat it doesDefault
client_idstringYesApp client id from https://www.reddit.com/prefs/apps.
client_secretstringNoApp client secret. Leave empty for installed apps, which are issued no secret.
refresh_tokenstringYesLong-lived refresh token saved from a previous code-grant authorization.

Optional

Everything you can tune. Sensible defaults apply when you leave them alone.

FieldTypeRequiredWhat it doesDefault
optionalobjectNono extra properties
connectionobjectNoPRAW client behaviour: rate limiting, timeouts and startup checks.no extra properties
connection.check_for_asyncbooleanNoWarn when PRAW is used from an asynchronous environment, recommending Async PRAW (PRAW default: true).true
connection.check_for_updatesbooleanNoPRAW's own update check, which reports newer PRAW releases on standard error (PRAW default: true). Disabled by default here because it contacts PyPI on every run from an ephemeral scan job.false
connection.ratelimit_secondsintegerNoLongest Reddit-reported ratelimit PRAW will absorb by sleeping rather than raising. PRAW sleeps for the reported value plus one second. Reddit can report up to 14 minutes, so raising this trades run time for fewer failures.min 0, max 9005
connection.timeoutintegerNoSeconds PRAW waits for a single Reddit request before raising (PRAW default: 16).min 1, max 30016
connection.window_sizeintegerNoSeconds between Reddit rate-limit resets, used by PRAW to pace requests (PRAW default: 600).min 1, max 3600600
scopeobjectNoWhat is pulled out of each subreddit.no extra properties
scope.comment_sortenumNoOrder Reddit returns a submission's comment forest in. TOP and BEST surface the most-engaged branches first, which is what a bounded max_comments_per_post should keep. Allowed: TOP, BEST, NEW, OLD, CONTROVERSIAL, Q_AND_ATOP
scope.exclude_file_extensionsarrayNoNever download attachments with these extensions.
scope.exclude_file_extensions[]stringNo
scope.exclude_nsfwbooleanNoSkip submissions Reddit flags as over-18.false
scope.exclude_stickiedbooleanNoSkip stickied/announcement submissions.false
scope.expand_more_commentsbooleanNoExpand the 'load more comments' placeholders. Off by default: each expansion is an extra API round-trip and a busy thread can need hundreds.false
scope.include_commentsbooleanNoEmit each comment as its own asset, linked to its parent submission or comment so the thread is navigable.true
scope.include_external_videosbooleanNoAnalyse YouTube/Vimeo-style videos a submission links to using the same captions, Whisper transcription and frame-OCR pipeline as the YouTube source.true
scope.include_file_extensionsarrayNoOnly download attachments with these extensions (e.g. ['.pdf', '.png']). Empty means all extensions.
scope.include_file_extensions[]stringNo
scope.include_mediabooleanNoDownload images, video, audio and documents attached to a submission (including gallery items) and emit each as its own asset, parsed by the standard file pipeline.true
scope.listingenumNoSubreddit listing that supplies candidate submissions. Leave unset to let the sampling strategy pick: LATEST/AUTOMATIC/ALL use NEW (chronological, so cursors stay meaningful) and RANDOM uses HOT. Allowed: NEW, HOT, TOP, RISING, CONTROVERSIAL
scope.max_comments_per_postintegerNoUpper bound on comments materialised per submission. Reddit's comment forest is unbounded and each expansion costs an API call, so this caps both.min 0, max 5000200
scope.max_media_bytesinteger | nullNoSkip attachments larger than this many bytes. Null means no limit.104857600
scope.time_filterenumNoTime window applied to the TOP and CONTROVERSIAL listings. Ignored by the other listings. Allowed: ALL, DAY, HOUR, MONTH, WEEK, YEARALL
siteobjectNoEndpoints and fullname prefixes of the Reddit instance. Only change these for a self-hosted or third-party Reddit-compatible site.no extra properties
site.comment_kindenumNoType prefix for comments on the instance (default: t1_). Allowed: t1_, t2_, t3_, t4_, t5_, t6_t1_
site.message_kindenumNoType prefix for messages on the instance (default: t4_). Allowed: t1_, t2_, t3_, t4_, t5_, t6_t4_
site.oauth_urlstringNoURL used to reach the instance's API.format urihttps://oauth.reddit.com
site.reddit_urlstringNoBase URL of the Reddit instance. PRAW assumes the OAuth authorization endpoints live under it.format urihttps://www.reddit.com
site.redditor_kindenumNoType prefix for redditors on the instance (default: t2_). Allowed: t1_, t2_, t3_, t4_, t5_, t6_t2_
site.short_urlstringNoURL used to generate short links on the instance.format urihttps://redd.it
site.submission_kindenumNoType prefix for submissions on the instance (default: t3_). Allowed: t1_, t2_, t3_, t4_, t5_, t6_t3_
site.subreddit_kindenumNoType prefix for subreddits on the instance (default: t5_). Allowed: t1_, t2_, t3_, t4_, t5_, t6_t5_
site.trophy_kindenumNoType prefix for trophies on the instance (default: t6_). Allowed: t1_, t2_, t3_, t4_, t5_, t6_t6_
Last updated on