# Reddit Video, Image & GIF Downloader (`hipersoft/reddit-downloader`) Actor

Download Reddit videos, images and GIFs by post URL. Paste reddit.com or redd.it links and get ready-to-use download links — videos as a single playable MP4 with audio, images and galleries as direct links — one row per URL as JSON, CSV or Excel. Cheap, bulk, built for creators and n8n.

- **URL**: https://apify.com/hipersoft/reddit-downloader.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** Videos, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.0015 / item scraped

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Reddit Video, Image & GIF Downloader

Download Reddit media in bulk. Paste one or more Reddit post links and get a ready-to-use download link for each — plus the data behind the post: subreddit, title, author and media type. Reddit videos come back as a **single playable MP4 with sound**, images and galleries as direct links, and GIFs too. One tidy row per URL, ready to export as JSON, CSV or Excel.

This is the cheap, no-nonsense way to save Reddit videos, images and GIFs at scale for content creators, marketers, researchers and anyone building an automated media pipeline.

### Why use this Reddit downloader

- 🎬 **Video with audio** — Reddit stores each video and its sound as two separate streams. This downloader joins them back into one clean MP4 you can play or share right away.
- 🖼️ **Images & galleries** — single image posts and multi-image gallery posts both return direct image links.
- 🎞️ **GIFs supported** — GIF posts come back with a direct link too.
- 🔗 **Any Reddit link** — full `reddit.com` post URLs, `old.reddit.com` links and short `redd.it/abc123` links all work, with or without a trailing slash.
- 🧩 **Raw streams included** — the separate video-only and audio-only stream URLs are always returned as well, so nothing is lost if you want to handle them yourself.
- 📦 **Bulk in one run** — drop in a whole list of URLs and get one clean record per post.
- 💸 **Cheapest per-post pricing** — pay only for the posts you actually download, with volume discounts as you scale.
- 📤 **Export anywhere** — JSON, CSV or Excel, or pull straight from the dataset into your own tools, Make or n8n.

### What you get

Each post is one dataset record like this:

```json
{
  "source": "reddit",
  "inputUrl": "https://www.reddit.com/r/oddlysatisfying/comments/abc123/",
  "postId": "abc123",
  "subreddit": "oddlysatisfying",
  "title": "This perfectly looping animation",
  "author": "example_user",
  "mediaType": "video",
  "videoUrl": "https://v.redd.it/abc123/DASH_720.mp4",
  "audioUrl": "https://v.redd.it/abc123/DASH_AUDIO_64.mp4",
  "imageUrls": [],
  "downloadUrl": "https://.../records/video-abc123.mp4",
  "hasAudio": true,
  "nsfw": false,
  "status": "ready"
}
```

For an image post, `mediaType` is `"image"` (or `"gallery"` for multi-image posts), `imageUrls` holds the picture link(s) and `downloadUrl` points to the first image.

### Input

Give the downloader a list of Reddit post URLs. That's it.

```json
{
  "postUrls": [
    "https://www.reddit.com/r/oddlysatisfying/comments/abc123/",
    "https://redd.it/xyz789"
  ],
  "maxItems": 0
}
```

| Field | Description |
| --- | --- |
| `postUrls` | One or more Reddit post URLs (required). Full `reddit.com` links, `old.reddit.com` links and short `redd.it/…` links all work. Plain strings or `{ "url": "..." }` objects. |
| `maxItems` | Maximum number of posts to download (0 = no limit; process every URL). |
| `proxyConfiguration` | Optional. Not needed for normal use — leave it off. |

### Output fields

| Field | Description |
| --- | --- |
| `source` | Always `"reddit"`. |
| `inputUrl` | The URL you provided. |
| `postId` | Reddit post ID. |
| `subreddit` | Subreddit the post belongs to. |
| `title` | Post title. |
| `author` | Post author's username. |
| `mediaType` | `video`, `image`, `gif` or `gallery`. |
| `videoUrl` | Video-only stream URL (for video posts). |
| `audioUrl` | Audio-only stream URL, when the video has sound. |
| `imageUrls` | Array of image URLs for image and gallery posts. |
| `downloadUrl` | Best single ready-to-use link: the combined MP4 for videos with sound, otherwise the video, GIF or image link. |
| `hasAudio` | `true` when the video has an audio track. |
| `nsfw` | `true` when the post is marked NSFW. |
| `status` | `ready` when media was found and a download link is available, otherwise `failed`. |

### A note on Reddit videos

Reddit serves the picture and the sound of a video as two separate files. Many "downloaders" hand you a silent clip because of this. This tool combines the two back into a single MP4 with audio for you (`downloadUrl`), and still gives you both raw stream URLs (`videoUrl`, `audioUrl`) in case you want them.

### Use cases

- **Save Reddit videos with sound** — grab a playable MP4 for reposting, editing or archiving.
- **Collect images & galleries** — pull every picture from image and gallery posts in one go.
- **Content research** — capture titles, subreddits and authors across a batch of posts.
- **Automation** — feed a list of URLs from a spreadsheet, Make or n8n and get structured records back with direct download links.

### FAQ

**Do Reddit videos come with sound?** Yes. Reddit stores video and audio separately; this downloader joins them into one MP4 with audio, and also returns the separate streams.

**Can I download many posts at once?** Yes. Put as many URLs as you like in `postUrls` and you get one record per post.

**Does it work with short links?** Yes — `redd.it/abc123` short links, `old.reddit.com` links and full URLs are all accepted.

**What about image galleries?** Fully supported. `mediaType` is `gallery` and every image URL is returned in `imageUrls`.

**Do I need a proxy?** No. Proxy is optional and off by default.

**How much does it cost?** Pay-per-event: a tiny charge per run plus a small charge per post downloaded, with tier discounts as your volume grows. See the **Pricing** tab for current rates.

### Notes

This tool retrieves media and public metadata for Reddit posts whose URLs you provide. It is an independent tool and is not affiliated with, endorsed by or connected to Reddit; all names and trademarks belong to their respective owners. Only download content you own or have the right to use, and respect Reddit's terms and applicable copyright law. Public content only.

# Actor input Schema

## `postUrls` (type: `array`):

One or more Reddit post URLs to download. Accepts full links (https://www.reddit.com/r/aww/comments/abc123/.../), old.reddit.com links and redd.it/abc123 short links, with or without a trailing slash. You can paste plain strings or {"url": "..."} objects.

## `maxItems` (type: `integer`):

Maximum number of posts to download (0 = no limit; process every URL you provide).

## `proxyConfiguration` (type: `object`):

Optional proxy. Not required — leave off to run on a direct connection. Enable only if you specifically want requests routed through a proxy.

## Actor input object example

```json
{
  "postUrls": [
    "https://www.reddit.com/r/oddlysatisfying/comments/1kqb7z6/",
    "https://www.reddit.com/r/pics/comments/5gn8ru/"
  ],
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The results as dataset items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "postUrls": [
        "https://www.reddit.com/r/oddlysatisfying/comments/1kqb7z6/",
        "https://www.reddit.com/r/pics/comments/5gn8ru/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/reddit-downloader").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "postUrls": [
        "https://www.reddit.com/r/oddlysatisfying/comments/1kqb7z6/",
        "https://www.reddit.com/r/pics/comments/5gn8ru/",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/reddit-downloader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "postUrls": [
    "https://www.reddit.com/r/oddlysatisfying/comments/1kqb7z6/",
    "https://www.reddit.com/r/pics/comments/5gn8ru/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call hipersoft/reddit-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/reddit-downloader"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hF3ykHAr1x5oakZmu/builds/Y8KeesL1xRc7AZz6z/openapi.json
