Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Reddit Video Scraper & Downloader icon

Reddit Video Scraper & Downloader

Download v.redd.it videos from any subreddit or Reddit user, with the audio joined back in. Get post details and dedupe. $0.03 per video record.

431 runs on Apify $0.03 per Reddit video downloaded ($30 / 1,000)
Run this in the cloudRun on Apify →

Social Media Scrapers

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust sources, subreddits, users (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.03 per Reddit video downloaded = $30 per 1,000

You are charged forWhenPrice
Reddit video downloadedOne downloaded Reddit video.$0.03

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-30, and they are what you are actually charged.

Inputs

FieldWhat it doesType
sourcesAny mix of subreddits and Reddit user profiles: 'oddlysatisfying', 'r/aww', 'u/GallowBoob', or a full reddit URL. Works for ANY source.array
subredditsOptional alias, plain subreddit names, merged into sources.array
usersOptional. Reddit usernames (without u/), merged into sources.array
sorttop, hot (trending), new (latest), rising, or controversial.string
timeTime window for top/controversial. E.g. all time, this year, this week.string
maxPostsPerSourceHow many video posts to return/download per source.integer
downloadVideosDownload the best-quality muxed MP4 (with audio) to the key-value store. Off = return metadata + playlist URLs only.boolean
minDurationSecondsSkip videos shorter than this. 0 = no limit.integer
maxDurationSecondsSkip videos longer than this. 0 = no limit.integer
dedupeAcrossRunsRemember video IDs between runs so the same video isn't returned twice.boolean

What you get

A structured dataset — each result includes fields like:

authorcreatedUtcdashPlaylistdurationSecondsfetchedAthasAudiohlsPlaylistidpreviewUrlredditVideoIdresolutionsourceNamesourceTypesubreddittitlevideoUrlurl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

17 ready-to-run use cases

Funny Animal Videos Download from Reddit for Shorts

The week top clips from r/aww and r/AnimalsBeingDerps, capped at 60 seconds and saved as MP4 with sound. Ready to cut without re-encoding.

Oddly Satisfying Videos Download for Compilations

Top posts from r/oddlysatisfying, r/ASMR and r/SatisfyingAsFuck as MP4s under 90 seconds, audio intact, ready to stitch into a longer cut.

Viral Reddit Videos - Daily Rising Feed, No Download

Catches videos while they are still climbing r/nextfuckinglevel and r/BeAmazed. Links and metadata only, deduped run to run, so nothing repeats.

NBA Highlights Download from r/nba and r/sports

The day top clips from r/nba, r/soccer and r/sports as MP4s under 45 seconds, with audio. Dedupe is on, so a daily run skips what you already have.

UGC Video Examples Pulled From Reddit Product Subs

Real people filming real products in r/BuyItForLife and r/gadgets, downloaded as MP4s to study before you brief a creator. Up to two minutes each.

Reddit Monitoring Tool for New Product Videos

Watches r/gadgets, r/tech and r/BuyItForLife for new video posts weekly and saves them. It filters by subreddit, not keyword, so choose the subs carefully.

Reddit Clips Download for Reaction Channels

Ten to one hundred and eighty second clips from r/PublicFreakout, r/instantkarma and r/IdiotsInCars. Deduped weekly so last week videos do not come back.

Recipe Videos Download from r/Cooking and r/GifRecipes

Month top food clips under 90 seconds as MP4s for Reels and TikToks. Some GifRecipes posts are silent by nature, and the row says so with hasAudio.

B Roll Footage Free From Reddit DIY and Cooking Subs

Five to sixty second clips from r/DIY and r/MealPrepSunday to layer under narration. Downloaded as MP4. Licence is whatever the original poster granted.

Reddit Funny Videos Download - Top Clips This Week

r/funny, r/WatchPeopleDieInside and r/Wellthatsucks, best of the week, under 60 seconds, muxed to MP4 with the audio Reddit stores as a separate file.

Reddit Video Downloader MP4 for Finance Subreddits

Weekly top video posts from r/wallstreetbets, r/sportsbook and r/CryptoCurrency, saved as MP4 with sound for reaction and commentary edits.

Reddit Video Archive - Every Clip From a Profile

Point it at a username and it walks their posts, pulling each video as an MP4 with the audio muxed back in. Title, subreddit, duration and resolution per row.

Reddit Video Links Without Downloading the Files

Post URL, v.redd.it playlist links, duration and resolution, no MP4 written. Upvote counts are not returned, the score field is not part of the output.

Reddit Video Scraper for ML Training Datasets

Short clips from several subreddits, filtered to 3-30 seconds and labelled by subreddit. Note there are no upvote counts, score is not one of the fields.

Reddit Clips for YouTube Shorts, Under 60 Seconds

Duration capped at 60 seconds and floored at 5, so nothing you download needs trimming to fit. Vertical and horizontal both come through as posted.

Download Subreddit Videos Across Several Subs at Once

r/funny, r/Damnthatsinteresting and r/BeAmazed in one run, each row tagged with the subreddit it came from. Dedupe carries across runs.

Reddit Video URL and Metadata, No File Download

v.redd.it playlist URLs plus title, author, duration and resolution for your own pipeline. Nothing is written to storage, so runs stay small and quick.

Related tools in Social Media Scrapers

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Telegram Channel Scraper iconSocial Media Scrapers

Telegram Channel Scraper

Scrape public Telegram channels with no bot token and no API key. Get post text, date, views, author, media links and subscriber count. $1.50 per 1,000.

21 use cases

Pinterest Search Scraper iconSocial Media Scrapers

Pinterest Search Scraper

Search Pinterest by keyword: pin title, description, image URL, destination link, pinner and board. No login. $1.60 per 1,000 pins.

20 use cases

Bluesky Scraper iconSocial Media Scrapers

Bluesky Scraper

Scrape Bluesky posts and profiles by handle, no login. Archive keyword search needs your own app password. $2.00 per 1,000 posts.

5 use cases

Mastodon Scraper iconSocial Media Scrapers

Mastodon Scraper

Scrape public Mastodon posts by hashtag, account or timeline: text, author, followers, engagement, media and tags. $1.50 per 1,000.

2 use cases

Lemmy Scraper iconSocial Media Scrapers

Lemmy Scraper

Scrape public Lemmy posts from any instance: title, body, author, score, votes, comments and permalink. Pick the host. $1.50 per 1,000 posts.

2 use cases

Reddit Text Cleaner — TTS-Ready Narration iconSocial Media Scrapers

Reddit Text Cleaner — TTS-Ready Narration

Turn raw Reddit posts into clean TTS narration. Strips markdown, links and edit stamps, splits into sentences. No AI key. $0.20 per 1,000 texts.

2 use cases

See all Social Media Scrapers →

Reddit Video Scraper: v.redd.it clips as one MP4 with the sound in it

Point it at subreddits or Reddit profiles and it hands back the video posts, each as a single MP4 with the audio already joined on. Post title, author, subreddit, resolution and duration ride along on the same row.

The reason this actor exists: Reddit keeps a v.redd.it upload as two separate streams, picture and sound. Save one off the site the usual way and it plays silent. And the thing to know before you set the limit high: a row is written for every video post found, whether or not the MP4 came down with it, and every row counts.

InputSubreddit names, user profiles, or reddit.com URLs
OutputOne row per video post, with the MP4 in the run's key-value store
Ceiling50 video posts per source, per run
Account neededNone
Price$0.03 per video record

🎬 What Reddit Video Scraper does

It walks the sources you name, finds the posts that hold a Reddit-hosted video, and for each one pulls the picture and the sound and writes them out as one playable MP4. The file lands in the run's key-value store and the row carries a link straight to it.

Resolution, duration and file size come back on the row, so you can sort or filter after the fact without opening anything. dedupeAcrossRuns is on by default and remembers the last 5,000 clips it gave you, which is what stops a daily run handing you the same top post all week.

If you only want the metadata and the stream URLs, turn downloadVideos off. Read the cost section before you do, because that choice does not change what a row costs.

📥 What you give it

{
  "sources": ["r/oddlysatisfying", "u/GallowBoob"],
  "sort": "top",
  "time": "week",
  "maxPostsPerSource": 10
}
FieldDefaultWhat it is
sourcesnone, requiredSubreddits and profiles, mixed freely: aww, r/aww, u/name, or a full link.
subreddits, usersnoneOlder aliases. Anything here is merged into sources.
sorttoptop, hot, new, rising or controversial.
timeweekThe window for top and controversial. Ignored by the other sorts.
maxPostsPerSource10Video posts per source. 1 to 50. This is your spend cap.
downloadVideostrueOff returns the row and the stream URLs, with no MP4 saved.
minDurationSeconds, maxDurationSeconds0, 0Skip clips outside the range. 0 means no limit. Only applied while downloadVideos is on.
dedupeAcrossRunstrueSkips clips this actor already delivered to you.
proxyConfigurationApify defaultLeave it alone unless the run has to leave through your own servers. Your own URLs are used exactly as given.

sources is required. Leave it empty and the run falls back to r/oddlysatisfying and bills for whatever it finds there.

📤 What you get back

A real row from a real run, with the store link cut short so the block stays readable:

{
  "id": "1wdm51d",
  "title": "Glitter sand art",
  "subreddit": "oddlysatisfying",
  "sourceType": "subreddit",
  "sourceName": "oddlysatisfying",
  "url": "https://www.reddit.com/r/oddlysatisfying/comments/1wdm51d/glitter_sand_art/",
  "author": "Creams0da",
  "createdUtc": 1789146320,
  "redditVideoId": "ektskeqhaxoh1",
  "hlsPlaylist": "https://v.redd.it/ektskeqhaxoh1/HLSPlaylist.m3u8",
  "dashPlaylist": "https://v.redd.it/ektskeqhaxoh1/DASHPlaylist.mpd",
  "previewUrl": "https://external-preview.redd.it/bXh2OHBjbGhheG9oMcLBnvTxs7...",
  "fetchedAt": "2026-09-14T05:46:18.371Z",
  "resolution": "479x854",
  "hasAudio": true,
  "durationSeconds": 63,
  "videoKey": "video-1wdm51d.mp4",
  "videoUrl": "https://api.apify.com/v2/key-value-stores/rpbf4iFIiYMDYIQPi/records/video-...",
  "videoBytes": 8653209
}
FieldWhat it is
videoKey, videoUrlWhere the MP4 sits in the run's key-value store, and a link to it.
videoBytesSize of the stored file. resolution and durationSeconds describe that same file.
hasAudioWhether the source stream listed an audio track. It is read off the stream, not off the finished file.
hlsPlaylist, dashPlaylistReddit's own stream URLs. Present on every row, including the ones where nothing was saved.
urlThe Reddit thread, not the video file.
videoDowngradedFromPresent when the clip was stored a quality step down to fit the size cap.

🧾 Reading the output

Every row in the dataset is a video record and every one of them is charged, so it is worth knowing which of the three shapes you are holding:

RowHow to spot itWhat happened
The normal onevideoKey and videoUrl are setThe MP4 is stored and ready
Skipped on sizevideoSkipped with a videoSkipCodeNothing was downloaded, metadata and stream URLs are complete
FaileddownloadErrorThe fetch went wrong on that attempt, stream URLs are still complete

videoSkipCode is one of two values:

CodeWhat it means
OVERSIZED_VIDEOOver 100 MB even at the lowest quality on offer, so it was left alone.
RUN_SIZE_BUDGET_EXHAUSTEDThis run had already stored its 1,024 MB of video. Later posts return metadata only.

Clips between those two extremes are not refused. The actor steps down the quality ladder to the best version that fits and tells you it did, in videoDowngradedFrom.

A run that finds nothing to download writes no dataset row at all. It puts a note in the key-value store instead, under SAMPLE_AND_NOTICES, saying either NO_VIDEO_POSTS_IN_RANGE or ALL_POSTS_ALREADY_SEEN. Those notes are not video records and are not billed as one.

▶️ How to run it

1. Open Reddit Video Scraper and click Try for free. 2. Put your subreddits and profiles into Sources, one per line. 3. Pick a Sort and, for top or controversial, a Time range. 4. Set Max videos per source. Start at 5 while you see what comes back. 5. Click Start. The MP4s appear under Storage, and the rows download as JSON, CSV or Excel.

💰 How much does it cost?

$0.03 per video record. Flat on every Apify plan, no volume tiers.

One record is one row. Three subreddits at 10 videos each is up to 30 rows, so about $0.90.

Be deliberate about two of them, because they are records like any other. A row where the clip was skipped on size or the download failed is still a record. So is a row from a run with downloadVideos turned off, where the only thing you get is the metadata and the stream URLs. dedupeAcrossRuns is what stops you buying the same clip twice.

💡 What people use it for

  • Collecting clips from a niche subreddit for editing, without saving thirty silent files by hand.
  • Feeding a faceless video pipeline that needs the audio present to work at all.
  • Building a small labelled video set, where the post title doubles as a weak caption.
  • Following one creator's profile and picking up whatever they post that week.

🚧 What it does not do

  • Reddit-hosted video only. A YouTube, Imgur or Streamable link posted to a subreddit is not a

v.redd.it upload and is skipped.

  • A failed or skipped download still counts as a record. The metadata and stream URLs on those

rows are complete, which is what the record covers.

  • The duration filters only apply while downloadVideos is on. Turn downloading off and every

video post comes back, however long it is.

  • Duration is confirmed after the file arrives. A clip that turns out to sit outside your range

is dropped from the results rather than delivered.

  • No paging. One page of posts per source, capped at 50.
  • hasAudio describes the source stream, not the file that was written.
  • No comments, no post body. This is about the video. For post text, use the scraper linked

below.

🧭 Which Reddit actor do you need?

If you wantUse
Videos as playable MP4s with the soundThis one
Posts and their full body text from a subreddit or profileReddit Scraper
Posts matching a keywordReddit Search Scraper
Post text cleaned up for narrationReddit Text Cleaner

❓ Questions people ask

Do I need a Reddit account? No. Nothing to paste and nothing that expires.

Why do clips downloaded from Reddit normally play silent? Because the picture and the sound are two separate files on Reddit's side. This actor joins them before saving.

Where do the MP4s go? Into the run's key-value store, under the Storage tab. The videoUrl on each row points at that record.

Can I keep the files forever? Copy them somewhere of your own. Apify clears unnamed run storage after a while, and Reddit's own stream URLs do not last either.

What if a subreddit has no videos this week? No records are written, so there is nothing to bill for. The note in the key-value store tells you which of the two reasons it was.

Is scraping Reddit legal? This reads public posts only. The content still belongs to whoever made it, so check before you republish anything. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the sources you asked for and the run ID, and the log shows us what the run saw.