Reddit Video Scraper & Downloader - MP4 With Audio
Pricing
from $30.00 / 1,000 reddit video downloadeds
Reddit Video Scraper & Downloader - MP4 With Audio
A v.redd.it clip is two separate files, the picture and the sound, which is why videos saved off Reddit play silent. This muxes them back into one MP4 from any subreddit or user, with title, author, subreddit, duration and resolution. $0.03 per video record, dedupe included.
Pricing
from $30.00 / 1,000 reddit video downloadeds
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Reddit Video Scraper & Downloader
Reddit stores a v.redd.it upload as two separate streams, the picture and the sound, so a clip saved straight off the site plays silent. This puts them back together. It takes a list of subreddits or Reddit user profiles and returns the post metadata plus a muxed MP4 with audio for each video. No API key, no login, no app registration. Built for reposting, faceless content pipelines, and building video datasets.
$0.03 per video record returned, plus a small one-off fee each time a run starts. Flat rate — no volume tiers, no plan gates, no subscription. The start fee is $0.00005 today and becomes $0.002 on 30 August 2026; the $0.03 per-video price is not changing.
How it works
It discovers video posts through Reddit's public RSS feeds (so it doesn't touch the rate-limited JSON API), then for each video post it pulls the best-quality v.redd.it stream and muxes the separate video and audio tracks back together with ffmpeg into a single MP4.
Input
sources is the only required field. You can mix subreddits and user profiles in any format: oddlysatisfying, r/aww, u/GallowBoob, or a full Reddit URL.
| Field | Required | Notes |
|---|---|---|
sources | yes | Array of subreddits and/or user profiles. Accepts r/aww, u/name, bare names, or full URLs. |
sort | no | top, hot, new, rising, or controversial. Defaults to top. |
time | no | Time window for top/controversial: hour, day, week, month, year, all. Defaults to week. |
maxPostsPerSource | no | How many video posts to return per source, 1-50. Defaults to 10. |
downloadVideos | no | true downloads the muxed MP4 to the key-value store. false returns metadata and playlist URLs only. Defaults to true. |
minDurationSeconds / maxDurationSeconds | no | Skip videos outside this range. 0 means no limit. |
dedupeAcrossRuns | no | Remembers video IDs between runs so the same clip isn't returned twice. Defaults to true. |
proxyConfiguration | no | Rotating Apify datacenter addresses, used to read the subreddit feeds; the video files are downloaded directly. Metered groups (RESIDENTIAL, GOOGLE_SERP) are not offered and are swapped for datacenter automatically; your own custom proxy URLs are used exactly as given. |
Output
Each dataset item is one video post with its id, title, subreddit, author, url, createdUtc, and the hlsPlaylist / dashPlaylist stream URLs. When downloadVideos is on, the item also carries videoKey, videoUrl, resolution, durationSeconds, videoBytes, and hasAudio pointing at the MP4 saved in the key-value store. If a download fails the record still pushes, with a downloadError field explaining why.
A row is written for every video post found, whether or not the MP4 came down with it. Three fields tell you which case you are looking at:
| Field | Meaning |
|---|---|
videoKey / videoUrl | The MP4 is in the key-value store. Normal case. |
downloadError | The download was attempted and failed (network, stream error, ffmpeg). Transient — re-running usually fixes it. |
videoSkipped, videoSkipCode, videoSkipReason | The download was deliberately not made, because of the size limits below. videoSkipCode is OVERSIZED_VIDEO or RUN_SIZE_BUDGET_EXHAUSTED. |
videoDowngradedFrom | The clip was stored at a lower resolution than its best, to fit the per-clip size limit. The resolution you got is in resolution. |
In every one of those cases the hlsPlaylist and dashPlaylist URLs on the row are complete and public, so you can always fetch the clip yourself.
Size limits
The MP4s are stored on this Actor's own key-value store, and that storage is paid for by us, not by you — so there is a ceiling on it. Two limits apply:
- Per clip: 100 MB. Before downloading anything, the Actor reads the stream manifest and estimates the size of each available quality. If the best quality would exceed the limit, it steps down the quality ladder to the largest one that fits and stores that (you will see
videoDowngradedFromon the row). Only if even the lowest quality is over the limit is the clip refused, and in that case nothing is downloaded at all. - Per run: 1024 MB total across all sources. Once a run has stored that much video, the remaining posts still return full metadata rows but no MP4.
In practice neither limit is reachable with normal use: v.redd.it clips are typically well under 20 MB, so the per-run budget covers roughly 50-plus videos. If you are pulling large numbers of long videos, split the work across several runs.
Example
{"sources": ["r/oddlysatisfying", "u/GallowBoob"],"sort": "top","time": "week","maxPostsPerSource": 10,"downloadVideos": true,"proxyConfiguration": { "useApifyProxy": true }}
Pricing
| Event | When | Price |
|---|---|---|
| Actor start | Once per run, per GB of run memory | $0.00005, rising to $0.002 on 30 August 2026 |
| Video record | Each video row written to the dataset | $0.03 |
The start fee is going up because a run that finds no videos at all — pointed at a text-only subreddit, say — still returns zero rows and so bills nothing beyond the start fee, while the container it ran in is not free. At $0.002 that case covers itself. On any run that actually returns videos the change is immaterial: it is under a tenth of one video's price, once, for the whole run.
Billing follows the dataset, one charge per row. Two things worth knowing before you set maxPostsPerSource:
- With
downloadVideos: falseyou still get a row per video post — metadata plus the HLS/DASH playlist URLs — and that row is charged at the same $0.03. - If a download fails, or a clip is skipped on size, the row is still written — with
downloadErrororvideoSkipReasonexplaining why — and it is charged like any other row. The metadata and playlist URLs on those rows are complete, which is what you are paying for.dedupeAcrossRuns(on by default) is your main protection against paying twice for the same clip.
A run over three subreddits at the default 10 posts each returns up to 30 rows, so about $0.90.
No API key of any kind is required, and there is no AI step in this actor — nothing here calls a model.
Notes
Reddit-hosted video only. Clips over 100 MB are stored at a reduced quality, or refused outright if even the lowest quality is over the limit — see Size limits above. The v.redd.it mux path doesn't cover external embeds like YouTube or Imgur links posted to a subreddit. Feed reads rotate a fresh datacenter IP per attempt; if you are pulling a lot of sources at once and hit throttling, spread the run out or supply your own proxy servers as custom proxy URLs.
