# Instagram Post, Reel & IGTV Downloader (`fetchfinch/instagram-post-reel-igtv-downloader`) Actor

Download videos and images from individual public Instagram posts, Reels, and legacy IGTV posts with metadata and clickable storage links.

- **URL**: https://apify.com/fetchfinch/instagram-post-reel-igtv-downloader.md
- **Developed by:** [Fetch Finch](https://apify.com/fetchfinch) (community)
- **Categories:** Social media, Videos, Automation
- **Stats:** 3 total users, 2 monthly users, 85.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.50 / 1,000 media file downloadeds

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

## Instagram Post, Reel & IGTV Downloader

Download videos and images from individual public Instagram posts, Reels, and legacy IGTV posts. The Actor returns useful post information and saves downloadable media files to the run's storage by default.

### Try it first

These public tasks demonstrate the supported media types:

- [Download an Instagram Post video](https://console.apify.com/actor-tasks/EhHjXwaz4QrcfVnlo)
- [Download an Instagram Reel](https://console.apify.com/actor-tasks/CQBJFTTqoPdEprMV1)
- [Download a legacy Instagram TV video](https://console.apify.com/actor-tasks/F4d9eLD8HJ4DfqfTn)

Each task processes one public sample and saves the resulting file to the run's Key-Value Store. Open the run's **Output** tab for metadata and the **Storage** tab for the downloaded file.

### Supported links

Paste an individual public URL in one of these formats:

- `https://www.instagram.com/p/SHORTCODE/` — regular posts
- `https://www.instagram.com/reel/SHORTCODE/` — Reels
- `https://www.instagram.com/reels/SHORTCODE/` — Instagram's direct-video URL form
- `https://www.instagram.com/tv/SHORTCODE/` — legacy IGTV posts

Do not paste a profile, Story, Story Highlight, hashtag, audio page, or Explore URL. A Highlight is a collection of Stories, not one downloadable post. Open the individual post or Reel inside it and paste that URL instead.

### What you get

For each submitted URL, the Actor creates one dataset result containing:

- The canonical Instagram URL and detected type
- Caption, publication date, author, and available engagement metrics
- Media URLs, thumbnails, dimensions, and video duration when available
- Clickable storage links for saved files

Videos are saved as MP4 files and images as image files. Carousel posts include every available item in display order. Saved files use descriptive names such as `instagram-reel-ABC123.mp4`.

### Input

The only required input is **Post, Reel, or IGTV URLs**. Add one or more individual URLs. Files are saved by default; the **Save media files and create download links** option can be disabled when you only need metadata.

The advanced options let you adjust retries, set a maximum file size, or configure an Apify Proxy if Instagram temporarily restricts the default connection.

### Pricing

You are charged per successfully saved media file. A carousel item counts as one file. Failed URLs and files that cannot be saved are not charged.

### Reliability notes

Only public Instagram content that is available to an anonymous visitor can be processed. Instagram can temporarily restrict anonymous requests or change media URLs. If a public link fails, retry later or enable an Apify Proxy. Private, age-restricted, region-restricted, or login-only content may not be available.

### Responsible use

Use this Actor only for content you are authorized to download and reuse. This Actor is not affiliated with Instagram or Meta.

# Actor input Schema

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

One or more individual public Instagram URLs. Both /reel/SHORTCODE/ and Instagram's /reels/SHORTCODE/ direct-video form are accepted. Bare post shortcodes are accepted too. Do not paste a profile, Story, or Story Highlight URL.

## `saveFilesToStorage` (type: `boolean`):

Download each resolved image or video to Apify storage and include clickable download links in the results. Disable this only for metadata and temporary Instagram URLs.

## `maxDownloadBytes` (type: `integer`):

Safety limit used only when saving files to storage.

## `maxRetries` (type: `integer`):

Number of retries for transient Instagram or network errors.

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

Optional Apify Proxy configuration. Use it if Instagram blocks the Actor's default IP or returns a 403.

## Actor input object example

```json
{
  "postUrls": [
    "https://www.instagram.com/reel/DcL_yM1s92_/"
  ],
  "saveFilesToStorage": true,
  "maxDownloadBytes": 200000000,
  "maxRetries": 2
}
```

# Actor output Schema

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

Dataset records containing extraction status, metadata, media URLs, and signed download URLs.

## `downloadedFiles` (type: `string`):

MP4 and image files saved by the Actor, including the Post, Reel, or IGTV demo download.

# 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/DcL_yM1s92_/"
    ]
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fetchfinch/instagram-post-reel-igtv-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/zCKvSnhOTke8kqMBh/builds/GdzVz9mbetdxhDofS/openapi.json
