Skip to content

September 23, 2026 · 11 min read

Instagram Downloader API: 773 of 815 Runs Succeeded (2026)

By Crawlerbros Engineering Team

Each downloaded media file carries 18 structured fields, returning exact technical properties like resolution, duration, file size, and source post URLs directly to Apify's dataset and key-value store. Authentication relies on an automated managed pool of shared Instagram sessions, requiring no manual cookie configuration. Telemetry records 773 successful public runs out of 815 in the last 30 days, while 26 timed out, 1 failed, and 15 were aborted by users. Together, 3.3% of runs failed or timed out, about 3 in a hundred. This is built for engineers and analysts archiving media or gathering visual datasets, and is not for anyone who needs access to private account posts, which the records do not include.

Try it before you read further. You can run it on Apify's free plan without a credit card. Open Instagram Downloader API on Apify and run the prefilled example.

How reliable is Instagram Downloader API in production?

Across the last 30 days of public runs on the Apify platform, Instagram Downloader API recorded 815 runs with the following outcomes.

Outcome Runs Share
Succeeded 773 94.8%
Failed 1 0.1%
Aborted by the user 15 1.8%
Timed out 26 3.2%
Total 815 100.0%

When scheduling automated runs, expect about 3 in a hundred runs to fail or time out based on recent telemetry. Build robust retry mechanisms, keep input batches sized conservatively, and set up alerts around timeout intervals to maintain pipeline stability.

How do you run Instagram Downloader API from the API?

None of its 3 controls is strictly required, so the defaults below produce a valid run on their own. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for Instagram Downloader API, so the request works once your token is in place.

Call the synchronous endpoint to start a run and receive dataset items in one request:

curl -X POST "https://api.apify.com/v2/acts/crawlerbros~instagram-downloader-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"postUrls":["https://www.instagram.com/leomessi/p/DZifppZj_cB/"],"maxPosts_per_username":2,"usernames":["forbes","leomessi"]}'

The same run from Python, using the official client:

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run_input = {
  "postUrls": [
    "https://www.instagram.com/leomessi/p/DZifppZj_cB/"
  ],
  "maxPosts_per_username": 2,
  "usernames": [
    "forbes",
    "leomessi"
  ]
}

run = client.actor("crawlerbros~instagram-downloader-api").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

And from Node.js:

import { ApifyClient } from 'apify-client'

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })

const input = {
  "postUrls": [
    "https://www.instagram.com/leomessi/p/DZifppZj_cB/"
  ],
  "maxPosts_per_username": 2,
  "usernames": [
    "forbes",
    "leomessi"
  ]
}

const run = await client.actor('crawlerbros~instagram-downloader-api').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)

Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.

Which Instagram Downloader API inputs matter, and which can you skip?

The input schema exposes 3 controls, of which 0 are required. Use postUrls to target specific links or usernames paired with maxPosts_per_username to pull recent uploads from specific accounts.

  • postUrls (array): List of Instagram post/reel URLs to process.
  • maxPosts_per_username (integer): Maximum number of posts to process per username. Default: 10.
  • usernames (array): Usernames whose recent posts should be processed.

What does Instagram Downloader API return?

Returned records provide direct file references, storage keys, download URLs, and technical properties like resolution and video_codec. They do not include private post content or ephemeral stories.

  • filename - saved file name including extension (e.g. 3918833148741120108.jpg)
  • post_url - source Instagram post URL
  • username - Instagram handle of the post creator
  • type - image or video
  • download_status - finished when the file was successfully downloaded and stored
  • downloaded_at - ISO 8601 timestamp of when the file was downloaded
  • storage_key - key name used in Apify's key-value store
  • download_url - public URL to access or download the file from Apify's key-value store
  • media_meta_data - object containing technical file details (see below)
  • width - media width in pixels
  • height - media height in pixels
  • ext - file extension (jpg, mp4, etc.)
  • filesize_bytes - file size in bytes
  • aspect_ratio - width-to-height ratio (rounded to 2 decimal places)
  • fps - frames per second
  • duration - video length in seconds
  • video_codec - codec identifier (e.g. avc1)
  • total_bitrate_kbps - total bitrate in kilobits per second

These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

How do you build the workflow end to end?

Open Instagram Downloader API and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

  1. Supply direct Instagram links in the postUrls array or target creator handles via the usernames array.
  2. Set maxPosts_per_username to cap how many recent entries the run fetches from each specified profile.
  3. Trigger a trial run with a single handle or post URL to verify the output shape before scaling up.
  4. Inspect the resulting dataset records to confirm that the download_status field reads finished for each item.
  5. Verify that storage_key and download_url point to valid media files inside Apify's key-value store.
  6. Check that technical attributes like width, height, and filesize_bytes are populated inside media_meta_data.
  7. Export media files from Apify storage before retention limits apply if you require permanent copies.

How do you apply it? Three worked playbooks

These are Instagram Downloader API's own documented use cases, each worked through as an operating pattern rather than a description.

Use case 1: Content archiving

Outcome: Save a creator's posts offline or back them up before deletion

Configure: Set usernames to your target creator handles and adjust maxPosts_per_username to cover the desired archive depth.

Working method: Run against a single test handle first to check download success rates, then scale up the username list for full archival runs.

Deliverable: A structured dataset of metadata records alongside media files stored in Apify's key-value store.

Stop condition: Consecutive runs return private account error states or fail to populate download URLs.

Use case 2: Brand monitoring

Outcome: Download posts from competitors or partners for analysis and reporting

Configure: Supply competitor profile handles to the usernames array and set maxPosts_per_username to capture recent campaign windows.

Working method: Execute scheduled extractions on a regular cadence, verifying that new posts appear correctly in the dataset output.

Deliverable: Media files and technical file details for competitor posts ready for integration into reporting dashboards.

Stop condition: The run aborts repeatedly or encounters persistent timeout errors during profile discovery.

Use case 3: Social media research

Outcome: Collect video and image datasets from specific accounts for AI training or analysis

Configure: Populate the usernames control with a curated list of research subjects and define maxPosts_per_username for dataset size control.

Working method: Sample a small batch of accounts first, validate the presence of resolution and video_codec metadata, and then launch the full batch.

Deliverable: A clean batch of image and video assets complete with aspect ratios, video codecs, and file sizes.

Stop condition: Media metadata fields return null or file size properties fail to populate across runs.

What breaks, and how do you design around it?

  • Public posts only - private account posts are not accessible. The actor detects private profiles and skips them with an error record.
  • Stories not supported - only permanent posts, reels, and IGTV are downloaded. Stories are excluded.
  • Download URLs are temporary - files in Apify's key-value store follow standard Apify dataset retention. Export files before they expire if you need permanent storage.
  • Username post discovery - post discovery from a profile scrolls up to 100 posts; the exact number available depends on how many posts Instagram surfaces in the feed.

Private profiles are skipped automatically and output error records instead of media. Plan around the reality that discovery depends on how many posts Instagram surfaces in the feed and store your files before key-value store retention policies apply.

When should you not use Instagram Downloader API?

Do not use this Actor if your workflow depends on collecting ephemeral stories, which are explicitly unsupported by this tool. Similarly, avoid it if you need to gather data from private accounts, as those profiles are skipped with an error record. If your primary objective is to inspect profile metrics rather than download media files, use the Instagram Profile Scraper instead. If you need to extract direct post data without browser overhead, use the Instagram Post Scraper. Finally, if your objective is to gather comments from post discussions, deploy the Instagram Comment Scraper for complete reply threads.

What should you check before trusting the output?

  • Verify that the download_status field is set to finished for every record before relying on the media file.
  • Check that media_meta_data contains valid non-zero dimensions for width and height.
  • Ensure that video records successfully populate duration, fps, and total_bitrate_kbps fields.
  • Confirm that private profile error records are filtered out if your workflow requires active media payloads.
  • Stop scheduled runs immediately if the rate of timeout outcomes exceeds about 3 in a hundred runs.

None of this proves a record is correct. It gives a scheduled Instagram Downloader API run defined points where it should stop instead of quietly passing bad data downstream.

Frequently asked questions

Do I need to supply my own Instagram session cookies or credentials?

No configuration is required from you. Authentication is handled automatically using a managed pool of shared Instagram sessions maintained by the infrastructure.

What happens when the actor encounters a private Instagram account?

Private account posts are not publicly accessible and cannot be downloaded. The actor detects private profiles during execution and outputs an error record containing profile metadata instead of media files.

Are carousel posts with multiple images fully supported?

Yes. Each image in a multi-photo carousel post is downloaded as a separate file and generates its own independent dataset record and key-value store entry.

How long do the downloaded media files remain available in storage?

Files are uploaded to Apify's key-value store and remain subject to standard dataset and storage retention policies. You should export or transfer files before they expire if you require permanent storage.

How many posts can I fetch when scraping by username?

The maxPosts_per_username control limits how many recent posts are processed per profile, up to a maximum of 100 posts depending on what Instagram surfaces in the feed.

Where to go next

When you are ready to run it, open Instagram Downloader API on Apify.

Start with the Instagram Downloader API Actor page for the current input schema, pricing tier, and run history.

It is part of the Instagram Scraping Suite, which puts every related Actor on one page with its price and run history.

If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:

Readers running Instagram Downloader API commonly pair it with:

Related guides:

Resources

  • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-23.

  • Actor last updated by its maintainers on 2026-08-14.

  • Run outcome figures cover the 30 day public window ending 2026-09-23.

  • Instagram Downloader API on Apify

● Featured actors

Instagram Downloader Api

Download photos, videos, reels, and carousels from Instagram posts. Extracts detailed metadata for videos and images.

Run on Apify ↗