# Instagram Videos & Reels Downloader (`karamelo/instagram-downloader`) Actor

Download Instagram Reels, videos, photos, and carousels from any post URL. Direct media download links with optional permanent storage.

- **URL**: https://apify.com/karamelo/instagram-downloader.md
- **Developed by:** [karamelo](https://apify.com/karamelo) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Instagram Video & Reel Downloader

Instagram Video & Reel Downloader extracts direct, full-quality video and photo download links from public Instagram Reels, videos, carousels, and photos, including clean media URLs, post metrics, captions, and creator details. Provide one or more post URLs or shortcodes to receive structured records containing ready-to-download MP4 and JPG links with optional permanent cloud storage. Content creators, marketing teams, and developers can automate competitor research, backup creative assets, and build media pipelines without requiring an Instagram login or browser extension.

#### Quick start

1. Open **Instagram Video & Reel Downloader** on the Apify platform.
2. Enter one or more Instagram post or Reel URLs into **Post / Reel URLs** (`postUrls`).
3. (Optional) Set **Save files to storage** (`saveFiles`) to `true` if you need permanent download links stored in Apify Key-Value Store.
4. Click **Start** and monitor the execution in the run console.
5. Export your structured records from the **Dataset** tab as JSON, CSV, or Excel.

```json
{
  "postUrls": [
    "https://www.instagram.com/reel/DdJomaZFWkW/"
  ],
  "saveFiles": false
}
```

#### What data you get

Each processed post returns a comprehensive record containing post metrics, author metadata, and a structured `downloads` array for every video or image slide:

- **Media download links:** Direct headline `videoUrl` and `thumbnailUrl`, plus an itemized `downloads` list with dimensions (`width`, `height`), media `type`, `downloadUrl`, and permanent `savedUrl` (when storage is enabled).
- **Post attributes:** Post ID, shortcode, canonical post URL, media type (`video`, `image`, `carousel`), product type (`clips`, `feed`), creation timestamp (`takenAt`), caption text, and video duration in seconds.
- **Engagement metrics:** Like count, comment count, view count, and play count.
- **Author profile:** Username, full name, profile picture URL, and verified status badge.

#### Output example

Below is a verified output record from a real Reel:

```json
{
  "input": "https://www.instagram.com/reel/DdJomaZFWkW/",
  "postId": "3983893906924595478",
  "shortcode": "DdJomaZFWkW",
  "postUrl": "https://www.instagram.com/p/DdJomaZFWkW/",
  "mediaType": "video",
  "productType": "clips",
  "takenAt": "2026-09-11T16:00:04.000Z",
  "caption": "What does it mean to live life after you've been given a second chance? Twenty-five years after 9/11, survivors reflect on the people who helped them make it home.\n\nSee the reunions in #911Reunited, now streaming on @DisneyPlus and @hulu. For more first-person accounts, explore the National Geographic archive at the link in bio.",
  "videoDuration": 85.098663,
  "likeCount": 30549,
  "commentCount": 135,
  "viewCount": 0,
  "playCount": 0,
  "authorUsername": "natgeo",
  "authorFullName": "National Geographic",
  "authorProfilePicUrl": "https://instagram.falg1-2.fna.fbcdn.net/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg",
  "authorIsVerified": true,
  "thumbnailUrl": "https://instagram.falg1-2.fna.fbcdn.net/v/t51.82787-15/805027862_18696160270019133_2927811009723395662_n.jpg",
  "videoUrl": "https://instagram.falg1-2.fna.fbcdn.net/o1/v/t2/f2/m86/AQNDf48Nb6pc94ZIuLR_0zU63tjAl4hRF3_OIx-n6tO7FM5PslOjNfd_XmPFWXJreFNaIfcgcrDiD41htSTZm8Jg3x7EjQ209FTcfdY.mp4",
  "downloads": [
    {
      "index": 0,
      "type": "video",
      "imageUrl": "https://instagram.falg1-2.fna.fbcdn.net/v/t51.82787-15/805027862_18696160270019133_2927811009723395662_n.jpg",
      "videoUrl": "https://instagram.falg1-2.fna.fbcdn.net/o1/v/t2/f2/m86/AQNDf48Nb6pc94ZIuLR_0zU63tjAl4hRF3_OIx-n6tO7FM5PslOjNfd_XmPFWXJreFNaIfcgcrDiD41htSTZm8Jg3x7EjQ209FTcfdY.mp4",
      "width": 720,
      "height": 1280,
      "downloadUrl": "https://instagram.falg1-2.fna.fbcdn.net/o1/v/t2/f2/m86/AQNDf48Nb6pc94ZIuLR_0zU63tjAl4hRF3_OIx-n6tO7FM5PslOjNfd_XmPFWXJreFNaIfcgcrDiD41htSTZm8Jg3x7EjQ209FTcfdY.mp4",
      "savedUrl": null
    }
  ]
}
```

#### Input settings

| Field | Type | Description | Default |
| --- | --- | --- | --- |
| `postUrls` | `array` | List of Instagram Reel, post, video, or photo URLs or raw shortcodes (e.g. `https://www.instagram.com/reel/DdJomaZFWkW/` or `DdJomaZFWkW`). | *Required* |
| `saveFiles` | `boolean` | When enabled, downloads each video and photo to Apify Key-Value Store and returns permanent, non-expiring `savedUrl` links. | `false` |
| `proxyConfiguration` | `object` | Proxy settings for Instagram requests. Apify Residential Proxy is recommended. | Residential |

#### Proxies and network routing

To ensure high reliability and efficient bandwidth consumption:

- **Instagram metadata extraction:** Requests to Instagram endpoints route through Apify Residential Proxies to prevent rate limits and geographic blocks.
- **Media file downloads:** Actual media streaming and downloads (MP4 and JPG files) route through direct connections or datacenter proxies. Because Instagram CDN servers do not require residential IPs, this saves expensive residential data usage and delivers higher download speeds.

#### Use cases

- **Creative swipe files & ad research:** Collect trending competitor Reels and top-performing organic videos for creative analysis and inspiration.
- **Multi-image carousel extraction:** Download every individual picture or video clip in carousel posts in original resolution without manual screenshotting.
- **Permanent content archiving:** Instagram CDN download URLs typically expire after several hours. Enabling `saveFiles` permanently backs up digital assets directly to your Apify storage.
- **AI & machine learning pipelines:** Extract high-quality video footage alongside structured captions and creator metadata for computer vision, audio processing, or multimodal LLM training.

#### Programmatic integration

Run this Actor through the Apify API using your preferred language or client library.

##### Node.js (JavaScript)

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

const client = new ApifyClient({
    token: process.env.APIFY_TOKEN,
});

const input = {
    postUrls: [
        'https://www.instagram.com/reel/DdJomaZFWkW/',
    ],
    saveFiles: true,
};

const run = await client.actor('karamelo/instagram-downloader').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Retrieved ${items.length} downloaded post record(s):`, items);
```

##### Python

```python
from apify_client import ApifyClient

client = ApifyClient(token="YOUR_APIFY_TOKEN")

run_input = {
    "postUrls": [
        "https://www.instagram.com/reel/DdJomaZFWkW/"
    ],
    "saveFiles": False
}

run = client.actor("karamelo/instagram-downloader").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"Shortcode: {item['shortcode']}, Media Type: {item['mediaType']}")
    for dl in item.get("downloads", []):
        print(f" - Slide {dl['index']}: {dl['downloadUrl']}")
```

#### Pricing and operational costs

This Actor is designed to run efficiently on the Apify platform:

- Runs comfortably within 1024 MB to 2048 MB memory allocations.
- Direct media streaming minimizes residential proxy traffic costs.
- Compute units are charged only for the actual run duration (typically 2–5 seconds per post).

#### Frequently asked questions

##### Does this Actor require an Instagram account or login cookies?

No. The Actor operates completely without logins, passwords, or session cookies. You can download media from any public Instagram post or Reel anonymously.

##### Why do Instagram direct download links stop working after a while?

Instagram CDN URLs contain authentication tokens (`oh` and `oe` query parameters) that expire after several hours. If you need permanent links that remain accessible indefinitely, set `saveFiles: true`. The Actor will download each video and image into your Apify Key-Value Store and provide a permanent `savedUrl`.

##### Does it support albums and multi-slide carousels?

Yes. When a carousel post is submitted, every slide (whether image or video) is extracted and placed into the `downloads` array with its respective index, dimensions, and download link.

##### What URL formats are accepted?

You can supply standard post URLs (`/p/CODE/`), Reel URLs (`/reel/CODE/`), Reels URLs (`/reels/CODE/`), IGTV URLs (`/tv/CODE/`), or bare shortcodes (e.g. `DdJomaZFWkW`).

# Actor input Schema

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

One or more Instagram Reel, video, or photo URLs (e.g. https://www.instagram.com/reel/DdJomaZFWkW/) or bare shortcodes (DdJomaZFWkW). Each one is returned as a record with direct media download links.

## `saveFiles` (type: `boolean`):

Also download each video/image and store it on Apify, returning a permanent download link (savedUrl). Instagram's own CDN links expire after a few hours - enable this if you need links that keep working. Slower and uses more storage.

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

Select proxies to be used by the Actor. Recommended: Apify Residential Proxy.

## Actor input object example

```json
{
  "postUrls": [
    "https://www.instagram.com/reel/DdJomaZFWkW/"
  ],
  "saveFiles": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

View the records returned by this run.

# 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.instagram.com/reel/DdJomaZFWkW/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("karamelo/instagram-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.instagram.com/reel/DdJomaZFWkW/"] }

# Run the Actor and wait for it to finish
run = client.actor("karamelo/instagram-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.instagram.com/reel/DdJomaZFWkW/"
  ]
}' |
apify call karamelo/instagram-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,karamelo/instagram-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/bhKAbQhXXJzXLEY8l/builds/K7nM71kJTL0LciF9W/openapi.json
