# Instagram Photos Downloader (`solid-scraper/instagram-photos-downloader`) Actor

📸 Instagram Photos Downloader—save and download photos & videos fast with a smooth experience. ⚡️ Ideal for creators, marketers, and social media fans. 🔥 Download instantly, organize easily, and share smarter! 🚀

- **URL**: https://apify.com/solid-scraper/instagram-photos-downloader.md
- **Developed by:** [SolidScraper](https://apify.com/solid-scraper) (community)
- **Categories:** Social media, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Photos Downloader 📥

**Instagram Photos Downloader** is an Apify actor that scrapes Instagram posts, reels, and galleries and saves the media (including single items and carousel media) into your dataset—so you can *download Instagram photos* at scale without doing it manually. It’s built for **instagram photos downloader** workflows, including **download instagram photos**, **instagram photo download**, and **instagram images downloader** use cases. Whether you’re a marketer, data analyst, researcher, or automation builder, this tool helps you turn publicly available Instagram media into structured results—saving you hours of manual work.

***

### Why choose Instagram Photos Downloader?

| Feature | Benefit |
|---|---|
| ✅ All-in-one Instagram media scraping | Collect post, reel, and gallery media in one run (including carousel items) |
| ✅ Reliability with fallback logic | Automatically falls back to HTML parsing when the primary request doesn’t return data |
| ✅ Resilient execution pattern | Includes built-in delays between requests to support smoother batch runs |
| ✅ Structured dataset output | Returns consistent JSON with author + thumbnails + media URLs you can export later |
| ✅ Batch-friendly scaling | Accepts multiple start URLs and processes them sequentially while saving results live |
| ✅ Automation-ready results | Each input URL is pushed to the dataset immediately as it finishes |

***

### Key features

- 📊 **Structured media details for each item**: Gets media URLs plus per-media metadata like type (image/video), dimensions, and extension.
- 🌐 **Input flexibility for posts, reels, and galleries**: Works from Instagram URLs that match post/reel/tv paths.
- 🔄 **Fallback for resilience**: If the primary request fails or doesn’t return expected data, the actor falls back to parsing the page content.
- 💾 **Real-time dataset saving**: Results are appended live during the run, so you don’t lose data if you stop early.
- 🛡️ **Proxy support for reliable scraping**: Built-in proxy configuration support for more dependable scraping in bulk scenarios.
- ⏱️ **Batch pacing with configurable delays**: Uses `sleepMin` / `sleepMax` to space requests between input URLs.

***

### Input

Provide input via an `input.json` file. Example structure:

```json
{
  "startUrls": [
    {
      "url": "https://www.instagram.com/p/CaHpoweBjmx"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "sleepMin": 3,
  "sleepMax": 7
}
```

#### Input Fields

| Key | Required | Description |
|---|---|---|
| `startUrls` | ✅ | List of Instagram URLs to scrape (Posts, Reels, or TV). You can provide objects like `{ "url": "..." }` as shown in the prefill. |
| `proxyConfiguration` | ❌ | Proxy settings. The actor checks `proxyConfiguration` for `proxy support` to decide whether to use Apify proxy URLs. |
| `proxyConfiguration.proxy support` | ❌ | When `true`, the actor uses Apify proxy support for scraping requests. |
| `sleepMin` | ❌ | Minimum delay (seconds) between processing each start URL. Default is `3` when not provided. |
| `sleepMax` | ❌ | Maximum delay (seconds) between processing each start URL. Default is `7` when not provided. |

***

### Output

This actor pushes one JSON result per input URL into the dataset (live during execution).

Example output object:

```json
{
  "url": "https://www.instagram.com/p/CaHpoweBjmx",
  "source": "instagram",
  "shortcode": "CaHpoweBjmx",
  "author": "username or full name",
  "music_attribution_info": null,
  "duration": 0,
  "owner": {
    "pk": "123456789",
    "id": "123456789",
    "username": "username",
    "profile_pic_url": "https://example.com/profile.jpg",
    "show_account_transparency_details": true,
    "__typename": "XDTUserDict",
    "is_private": false,
    "friendship_status": null,
    "transparency_product": null,
    "transparency_product_enabled": false,
    "transparency_label": null,
    "ai_agent_owner_username": null,
    "is_unpublished": false,
    "is_verified": false
  },
  "view_count": 0,
  "like_count": 0,
  "title": "caption text (may be empty)",
  "thumbnail": "https://example.com/thumbnail.jpg",
  "medias": [
    {
      "url": "https://example.com/media1.jpg",
      "height": 720,
      "width": 720,
      "id": "media-id",
      "quality": "image 720x720p 1",
      "resolution": "720x720",
      "type": "image",
      "extension": "jpg"
    }
  ],
  "type": "image",
  "error": false,
  "time_end": 1532
}
```

#### Output Fields

| Field | Type | Description |
|---|---|---|
| `url` | string | The input URL that was processed. |
| `source` | string | Always set to `"instagram"` for these results. |
| `shortcode` | string | The extracted shortcode from the Instagram URL. |
| `author` | string | null | The author name (full name or username) if available. |
| `music_attribution_info` | object | null | Music attribution info when present (otherwise `null`). |
| `duration` | number | Video duration value if available; otherwise `0`. |
| `owner` | object | Owner/account metadata object (IDs, username, profile pic URL, and account flags). |
| `view_count` | number | null | View/play count when available. |
| `like_count` | number | Like count when available. |
| `title` | string | Caption text (may be empty). |
| `thumbnail` | string | null | Thumbnail URL when available. |
| `medias` | array | List of extracted media items (supports carousel items). |
| `type` | string | Media type classification: `"multiple"` (more than one media), otherwise `"video"` or `"image"`. |
| `error` | boolean | `false` when scraping succeeded; `true` when an error occurred. |
| `time_end` | number | Time spent for the request in milliseconds. |
| `message` | string | (only on error) | Error message text when `error` is `true`. |

##### `medias` array fields

Each item in `medias` includes:

| Field | Type | Description |
|---|---|---|
| `url` | string | null | Direct media URL (image or video). |
| `height` | number | Media height in pixels (when available). |
| `width` | number | Media width in pixels (when available). |
| `id` | string | null | Media ID when available. |
| `quality` | string | A readable quality label like `image 720x720p 1` or `video 640x360p 1`. |
| `resolution` | string | Resolution string in the form `WIDTHxHEIGHT`. |
| `type` | string | `"image"` or `"video"`. |
| `extension` | string | `"jpg"` for images or `"mp4"` for videos. |

After the run, you can export your dataset in JSON or CSV from the Apify Console (depending on the dataset export options you choose).

***

### How to use Instagram Photos Downloader (via Apify Console)

1. **Open Apify Console**\
   Log in at https://console.apify.com and go to the **Actors** page.

2. **Find Instagram Photos Downloader**\
   Search for the actor and open its listing to view the **Input** tab.

3. **Add your start URLs**\
   In the **INPUT** section, paste one or more Instagram URLs (Posts, Reels, or TV) into `startUrls`. The input supports entries like `{ "url": "https://www.instagram.com/p/..." }`.

4. **(Optional) Configure proxies**\
   If you want proxy support for batch runs, set `proxyConfiguration.proxy support` to `true`.

5. **(Optional) Tune request pacing**\
   Adjust `sleepMin` and `sleepMax` to control the delay between processing each URL (defaults: `3` and `7`).

6. **Run the actor**\
   Click **Run**. While it works, you’ll see logs for each processed URL. Results are pushed to the dataset live, and the actor may fall back to HTML parsing if needed.

7. **Review results in the dataset**\
   When finished, open the **OUTPUT** tab and open the dataset to view the structured media results (perfect for building an instagram photos downloader workflow).

8. **Export to your format**\
   Export the dataset as JSON or CSV for your reporting, analysis, or downstream automation.

No coding required—get accurate results in minutes with this **instagram photo saver** style workflow.

***

### Advanced features & SEO optimization

- 🧠 **Engineered for Instagram media download**: Designed to work as an **instagram media downloader** for posts, reels, and galleries—especially when you need *multiple* items from carousels (gallery-style).
- 🔁 **Resilience with fallback parsing**: Includes fallback behavior for cases where the primary request doesn’t return usable data, improving outcomes for **instagram photo download tool** needs.
- ⏳ **Compliance-friendly pacing**: Uses `sleepMin` / `sleepMax` delays to help keep requests smoother during **instagram bulk photo downloader** runs.
- 🔍 **Clean, export-ready JSON**: Each run outputs consistently structured fields—so “download instagram pictures” becomes a repeatable data pipeline step.

***

### Best use cases

- 📈 **Marketing teams building content moodboards**: Quickly gather captions and direct media URLs for visual campaigns without manual downloading.
- 🔎 **Researchers analyzing visual trends**: Collect image/video URLs, dimensions, and engagement metrics like `like_count` and `view_count`.
- 👥 **Influencer and brand auditing**: Pull profile media from specific posts/reels and compare engagement patterns across multiple pieces of content.
- 🛠️ **Data teams creating enrichment datasets**: Feed the `medias` array into ETL pipelines as part of an **instagram images downloader** workflow.
- 💻 **Developer workflows for media archiving**: Use the dataset output as input to storage, caching, or media processing jobs (turning an **insta photos downloader** into an automated pipeline).
- 🧺 **Bulk gallery extraction**: Download carousel-style posts as multiple media records using the `type` field (`"multiple"`) for easy grouping.
- 🧾 **Analysts tracking media performance over time**: Compare `like_count`, `view_count`, and media resolutions across runs for time-based reporting.

***

### Technical specifications

- **Supported Input Formats**
  - ✅ `startUrls`: list of Instagram URLs for Posts, Reels, or TV (array of URL objects or URL strings as handled by the actor)

- **Proxy Support**
  - ✅ Proxy configuration via `proxyConfiguration.proxy support` (Apify proxy URL support when enabled)

- **Retry / Reliability Behavior**
  - ✅ Includes fallback logic (primary request + fallback HTML parsing) to improve the chance of extracting the needed fields

- **Dataset Structure**
  - ✅ One result object per processed URL, containing top-level fields like `url`, `owner`, `thumbnail`, and `medias`

- **Rate Limits & Performance**
  - ✅ Uses a randomized delay between `sleepMin` and `sleepMax` seconds between URLs (defaults are `3` and `7`)

- **Limitations**
  - ❌ If an input URL is invalid or the actor cannot extract a shortcode, the result will include an error.
  - ❌ If required media data isn’t available, the result may include an error message with `error: true`.

***

### FAQ

#### Can I use Instagram Photos Downloader for multiple posts at once?

✅ Yes. Provide multiple items in `startUrls`, and the actor processes them sequentially, pushing each result live to the dataset as it completes.

#### What kinds of Instagram content does it support?

✅ It supports Instagram posts, reels, and galleries. It also handles single media and carousel media by returning multiple items inside the `medias` array when applicable.

#### Do I need to write any code?

✅ No coding required. You can use the actor directly in Apify Console by entering your `startUrls` (and optionally proxy settings and delays).

#### What does the actor store in the dataset?

✅ The actor saves a JSON object per URL including fields like `author`, `owner`, `thumbnail`, and `medias` (with direct media URLs, dimensions, and file extension). The actor also includes `error` and an error `message` when something goes wrong.

#### Does it support proxy configuration?

✅ Yes. You can enable Apify proxy support by setting `proxyConfiguration.proxy support` to `true`. The actor uses proxy configuration for more reliable scraping during bulk runs.

#### How does it handle failures?

✅ When scraping fails, the actor returns a result with `error: true` and includes a `message`. It also includes fallback logic so that if the primary request doesn’t provide usable data, it attempts alternative parsing.

#### Can I export my results as CSV?

✅ You can export from the Apify Console dataset view. The actor outputs structured JSON objects, which can typically be exported to CSV depending on your selected export options.

***

### Support & feature requests

Want to improve your **Instagram Photos Downloader** experience? Share feedback and feature requests with us—your ideas help shape the roadmap.

- 💡 **Feature Requests**: Ideas like additional export formats, extra media metadata, or better grouping for carousel galleries are welcome.
- 📧 **Contact**: Email us at <dataforleads@gmail.com>.

Thanks for building with **instagram photos downloader** workflows—tell us what you need next.

***

*This is the most comprehensive **Instagram Photos Downloader** for structured Instagram media results. Get started and turn downloads into repeatable data with less manual work.*

### Disclaimer

**This tool only accesses publicly accessible sources.** It does not access private profiles, authenticated data, or password-protected content. It is your responsibility to comply with applicable laws (including GDPR and CCPA where relevant), spam regulations, and Instagram platform policies / Terms of Service.

For data-removal requests, contact <dataforleads@gmail.com>. Please use this actor responsibly, ethically, and for legitimate purposes only.

# Actor input Schema

## `startUrls` (type: `array`):

List of Instagram URLs to scrape (Posts, Reels, or TV).

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.instagram.com/p/CaHpoweBjmx"
    }
  ]
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.instagram.com/p/CaHpoweBjmx"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("solid-scraper/instagram-photos-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 = { "startUrls": [{ "url": "https://www.instagram.com/p/CaHpoweBjmx" }] }

# Run the Actor and wait for it to finish
run = client.actor("solid-scraper/instagram-photos-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 '{
  "startUrls": [
    {
      "url": "https://www.instagram.com/p/CaHpoweBjmx"
    }
  ]
}' |
apify call solid-scraper/instagram-photos-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,solid-scraper/instagram-photos-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/175zHHIlfRLj4iI0d/builds/yxhsAxn6fyLI7Zsfa/openapi.json
