Instagram Downloader API avatar

Instagram Downloader API

Pricing

from $4.50 / 1,000 instagram medias

Go to Apify Store
Instagram Downloader API

Instagram Downloader API

Download media URLs from public Instagram posts, reels, TV links, or usernames. Export direct media links, thumbnails, captions, engagement counts, source URLs, and publication times.

Pricing

from $4.50 / 1,000 instagram medias

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

1

Bookmarked

63

Total users

15

Monthly active users

4 days ago

Last modified

Share

Instagram Downloader API helps creators, researchers, and developers collect direct media links from known public Instagram posts, reels, TV pages, or usernames. It saves one structured dataset row for each eligible media item, with source links and public post details, so you can review, archive, or process the links later.

Use public pages without Instagram cookies, a login, or an Instagram API key. For a shorter first run, use one or two URLs or set a small recent-post count.

Use it for content review, research, reporting, archiving, social media operations, or an API workflow.

Try these task examples

📦 Public media rows

What you get

Each saved row is one eligible public Instagram media item. A true carousel post can create one row for each media item Instagram exposes. An ordinary single-media post has carousel_count set to null. media_index and carousel_count keep carousel rows tied to the parent post. Public values that Instagram does not expose are saved as null or empty arrays.

▶️ Run from URLs or usernames

Run steps

  1. Choose Post, reel, or TV URLs to process known links, or choose Instagram usernames to find recent public posts.
  2. In URL mode, add 1 to 100 public Instagram post, reel, or TV URLs.
  3. In username mode, add one or more usernames without @. You can set Recent posts per username to a positive number. Leave it empty to return all available results until the source is exhausted.
  4. Start the Actor, open the dataset, and use download_url for the source-hosted media link or source_url to trace the row to Instagram.

For a small first run, keep the prefilled public Instagram reel URL.

⚙️ Input

Input fields

FieldTypeWhat it does
discoveryMethodstringSelects urls for known public post, reel, or TV links, or usernames for recent public post discovery.
urlsarray of stringsAdds 1 to 100 public Instagram post, reel, or TV URLs. Used in URL mode and ignored in username mode.
usernamesarray of stringsAdds one or more Instagram usernames without @. Used in username mode and ignored in URL mode.
recentPostsPerUsernameintegerSets the positive number of recent public posts to collect per username. Leave it empty to return all available results until the source is exhausted. Used in username mode and ignored in URL mode.

Public URL forms include https://www.instagram.com/p/SHORTCODE/ and https://www.instagram.com/username/reel/SHORTCODE/.

Example input

This is the public input from a successful hosted run:

{
"discoveryMethod": "urls",
"urls": [
"https://www.instagram.com/kyliejenner/reel/DRP7Cajkpn9/",
"https://www.instagram.com/reel/DXhdA58CMDa/",
"https://www.instagram.com/reel/DYIYFhOSzis/",
"https://www.instagram.com/reel/CAErDMyHnMO/",
"https://www.instagram.com/reel/DTY8VWgkuzK/"
]
}

Access limits

The Actor works with public Instagram post, reel, and TV pages, plus recent public posts found from supplied usernames. Private, deleted, or login-only pages, stories, highlights, hashtag and keyword searches, location pages, follower or following lists, comment-only pages, and arbitrary non-Instagram pages are outside its scope.

🧾 Output

The output link opens the default dataset. Every dataset row has the same shape for a photo, video, or carousel media item. A direct media link is source-hosted, so it can expire or change after the run.

Output fields

FieldTypeWhat it does
resultsstringOpens the saved dataset for this run.
input_urlstringThe Instagram URL submitted for this row.
source_urlstringThe public Instagram post URL for this row.
shortcodestringThe shortcode of the Instagram post that contains this media.
raw_media_idstring or nullThe source media ID when Instagram exposes it.
media_typestringThe media type, either photo or video.
media_indexintegerThe zero-based position of this media in its post.
carousel_countinteger or nullThe number of media items when the post is a true carousel. It is null for an ordinary single-media post.
download_urlstringThe source-hosted URL for the media file.
thumbnail_urlstring or nullThe source-hosted thumbnail URL when Instagram exposes one.
usernamestring or nullThe username of the account that posted this media when exposed.
captionstring or nullThe post caption when Instagram exposes it.
like_countinteger or nullThe public number of likes when Instagram exposes it.
comment_countinteger or nullThe public number of comments when Instagram exposes it.
view_countinteger or nullThe public number of views or plays when Instagram exposes it.
taken_atstring or nullThe post publication time when Instagram exposes it.
widthinteger or nullThe media width in pixels when Instagram exposes it.
heightinteger or nullThe media height in pixels when Instagram exposes it.
file_extensionstring or nullThe media file extension when available.
comments_previewarray of objectsA short list of public comment previews when Instagram exposes them.
comments_preview[].textstringThe text of a public comment preview.
comments_preview[].usernamestring or nullThe username that wrote the comment when exposed.
file_size_bytesinteger or nullThe media file size in bytes when available.
duration_secondsnumber or nullThe media duration in seconds when available.
frame_ratenumber or nullThe video frame rate when available.
codecstring or nullThe media codec when available.
bitrate_bpsinteger or nullThe media bitrate in bits per second when available.

Example single-media row

This genuine row is from a successful hosted run and is shown in full.

{
"input_url": "https://www.instagram.com/kyliejenner/reel/DRP7Cajkpn9/",
"source_url": "https://www.instagram.com/p/DRP7Cajkpn9/",
"shortcode": "DRP7Cajkpn9",
"raw_media_id": "3769491063829600765",
"media_type": "video",
"media_index": 0,
"carousel_count": null,
"download_url": "https://scontent-arn2-1.cdninstagram.com/o1/v/t2/f2/m86/AQNowtAuMfosQvXvM_U0z2-qJynbz0TdQmG1U8QeDl0LUhFcrfsgp3ewj4Ztk7KTFX0bm6Qu4AVGuLBNqo6txtvwHuT_fEBGoxGR0fg.mp4?_nc_cat=111&_nc_sid=5e9851&_nc_ht=scontent-arn2-1.cdninstagram.com&_nc_ohc=KLZfV6-5E9wQ7kNvwGlaNGt&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTUzODcwNDkzMDQ5OTIyMCwiYXNzZXRfYWdlX2RheXMiOjI4OCwidmlfdXNlY2FzZV9pZCI6MTAwOTksImR1cmF0aW9uX3MiOjg2LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=1a8a9f296cc734e0&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC83MDQzRjg1NEQ1RkVGMjI0RDJCODFDRTAwMjg1NzJBN192aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYR2lnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC8yMTI2OTIzNTkxMTczNjgxXzMzMDcyMTQxNDA5NTc5ODA1NDkubXA0FQICyAESACgAGAAbAogHdXNlX29pbAExEnByb2dyZXNzaXZlX3JlY2lwZQExFQAAJqiq34y13LsFFQIoAkMzLBdAVYIcrAgxJxgSZGFzaF9iYXNlbGluZV8xX3YxEQB1_gdl5p0BAA&_nc_gid=PKssW5r7KYd7HURM69qRzg&_nc_ss=73689&_nc_zt=28&oh=00_AQJa3ZPL8Ii6nFXGcgFLPwRfk5fcjFrSHGX2Ctb1Do9anA&oe=6A9B8D2C",
"thumbnail_url": "https://scontent-arn2-1.cdninstagram.com/v/t51.71878-15/582080440_1374751327366750_1331460171701662848_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=109&ig_cache_key=Mzc2OTQ5MTA2MzgyOTYwMDc2NTE1Mzg3MDU2NjA0OTkxNDc%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjY0MC5zZHIudmlkZW9fbmZyYW1lX2NvdmVyX2ZyYW1lLkMzIn0%3D&_nc_ohc=iYifU2J-HM4Q7kNvwHI8cGt&_nc_oc=AdpQrqAaEIgpm-lGJ99i7U72CKgzkFS-DRJvRqpHg6RjcYCF8NzLvrbKZsgrqrM9WSA&_nc_zt=23&_nc_ht=scontent-arn2-1.cdninstagram.com&_nc_gid=PKssW5r7KYd7HURM69qRzg&_nc_ss=73689&oh=00_AQL7s3mDPH7thBoL67NIFAcH5WPoxUoySNRNZy25OfVNzA&oe=6A9F9D9A",
"username": "kyliejenner",
"caption": "obsessed @smashkitchen",
"like_count": 860731,
"comment_count": 7237,
"view_count": null,
"taken_at": "2025-11-19T18:54:29.000Z",
"width": 640,
"height": 1136,
"file_extension": "mp4",
"comments_preview": [
{
"text": "3",
"username": "mark24709033"
},
{
"text": "🖤❤️",
"username": "jasonlomboleni"
},
{
"text": "😍😍😍",
"username": "timo.rl26"
},
{
"text": "Doing faithfully 😍with love 💕😘",
"username": "ralph.wendling"
},
{
"text": "😭",
"username": "c3xa_"
},
{
"text": "King Kong",
"username": "simwickk2"
},
{
"text": "@kyliejenner Look how fun to see I wrote your name in small 😂😂",
"username": "simwickk2"
},
{
"text": "Idk What youre talking about im just here to look @ you 😂",
"username": "simwickk2"
},
{
"text": "Fun ✨🩷💚💚🩷🥕",
"username": "scottiedwaynecolombiano_"
},
{
"text": "🧘🏿‍♂️🤯",
"username": "scottiedwaynecolombiano_"
}
],
"file_size_bytes": 14827671,
"duration_seconds": 86.03333333333333,
"frame_rate": 30,
"codec": "avc1",
"bitrate_bps": 1378784
}

Example carousel row

This genuine row is from a successful hosted carousel run and is shown in full.

{
"input_url": "https://www.instagram.com/p/CQdSTP1CJ5z/",
"source_url": "https://www.instagram.com/p/CQdSTP1CJ5z/",
"shortcode": "CQdSTP1CJ5z",
"raw_media_id": "2602316638158678060",
"media_type": "photo",
"media_index": 0,
"carousel_count": 5,
"download_url": "https://scontent-ord5-1.cdninstagram.com/v/t51.82787-15/656867347_18116750920568962_1668093009637522885_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=111&ig_cache_key=MjYwMjMxNjYzODE1ODY3ODA2MA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMTA4MC5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=irxk11fRqf0Q7kNvwHogPQR&_nc_oc=Adr4BliGR4WD_tTpkrr4L3oDxc5pIHwyINBxyVTirzNVB9cK0ykcfXG-F_oxlWaj6e4&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=mZA8SRhz2KOf__5ad3OSYg&_nc_ss=73689&oh=00_AQKDA25jnkTFmUiiE571YJ0DtKvq2FZZx3d_2aXxxifJGA&oe=6A9F9A8F",
"thumbnail_url": "https://scontent-ord5-1.cdninstagram.com/v/t51.82787-15/656867347_18116750920568962_1668093009637522885_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=111&ig_cache_key=MjYwMjMxNjYzODE1ODY3ODA2MA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMTA4MC5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=irxk11fRqf0Q7kNvwHogPQR&_nc_oc=Adr4BliGR4WD_tTpkrr4L3oDxc5pIHwyINBxyVTirzNVB9cK0ykcfXG-F_oxlWaj6e4&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=mZA8SRhz2KOf__5ad3OSYg&_nc_ss=73689&oh=00_AQKDA25jnkTFmUiiE571YJ0DtKvq2FZZx3d_2aXxxifJGA&oe=6A9F9A8F",
"username": "gencat",
"caption": "«La nit de Sant Joan és nit d’alegria.» Aquesta revetlla, amb responsabilitat:\n\n👨‍👩‍👧‍👧 Celebra-la en grups reduïts i mantén les mesures de protecció.\n🌳 Prioritza espais a l'aire lliure o ben ventilats.\n🧨 El gel hidroalcohòlic i la pirotècnia són del tot incompatibles.\n🚘 0,0 és l'única taxa segura. Es faran controls d'alcohol i drogues.\n🚉 La xarxa de metro i TRAM ofereix servei ininterromput, i FGC, fins a les 2h.\n\nBona revetlla! 🎉\n\n#SantJoan #revetlla #cultura #petards #fogueres #gencat",
"like_count": 446,
"comment_count": 3,
"view_count": null,
"taken_at": "2021-06-23T09:25:40.000Z",
"width": null,
"height": null,
"file_extension": "jpg",
"comments_preview": [
{
"text": "No serveixen de res aquests consells. A tot arreu es segueixen tirant petards, sense tenir en compte la distància als habitatges ni vehicles. Les persones amb problemes de salut mental i els animals pateixen molt i l'angoixa dura un grapat d'hores.",
"username": "carmequeralto"
},
{
"text": "No serveixen de res aquests consells. A tot arreu es segueixen tirant petards, sense tenir en compte la distància als habitatges ni vehicles. Les persones amb problemes de salut mental i els animals pateixen molt i l'angoixa dura un grapat d'hores.",
"username": "carmequeralto"
}
],
"file_size_bytes": null,
"duration_seconds": null,
"frame_rate": null,
"codec": null,
"bitrate_bps": null
}

💳 Pricing

This Actor uses pay-per-event pricing. The primary event covers each public media link saved to the dataset. A separate run-start event is charged once when the Actor run starts. Apify shows the price for your plan before you start.

🔌 Integrations

Open or export the dataset as JSON, CSV, Excel, XML, RSS, or HTML, or read it through the Apify API. You can also schedule runs or connect the dataset to Apify webhooks.

❓ FAQ

What does one saved row represent?

One row represents one eligible public Instagram media item. A carousel can create several rows, with media_index and carousel_count showing each item's place in the post.

Can I use username mode instead of URLs?

Yes. Choose Instagram usernames, add names without @, and optionally set Recent posts per username. Leave that limit empty to return all available results until the source is exhausted.

Can I use this for Instagram reels?

Yes. Add a public reel URL in URL mode. The row includes a source-hosted download_url when Instagram exposes one.

What happens when a URL is private, deleted, or unavailable?

Those pages may be unavailable to the Actor. The run continues with rows already saved and can finish with zero or partial rows. Check the run log for warnings and saved counts, then open the dataset link. Missing public values are not guessed.

No. download_url and thumbnail_url point to URLs hosted by Instagram. They can expire or change, so use or store them soon after the run.

Does the Actor store the media files?

No. It returns source-hosted media links and structured metadata in the dataset. It does not mirror the files in Actor storage.

Do I need an Instagram login or API key?

No. Submit public Instagram URLs or usernames without buyer-supplied Instagram cookies, a login, or an Instagram API key.

Can I call the Actor through the Apify API?

Yes. The run returns a standard Apify dataset that you can read through the Apify API or export in common formats.

Can I use Instaloader Python instead?

Instaloader Python is a separate tool that you run yourself. This Instagram downloader API runs in Apify and saves structured rows from public URLs or usernames.

📝 Changelog

v1.0

  • Add recent public-post discovery by Instagram username alongside direct URLs.
  • Show running saved-media counts in progress logs and include richer media details in the dataset.

v0.1

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré