100 free credits on signup · no card required

Instagram Download API

One URL in. Clean JSON out.

Give this endpoint a public Instagram Reel or video post URL and it hands back a direct link to the underlying MP4, plus the clip's duration. We do not host, re-encode or proxy the file — the link points at Instagram's own CDN, and you fetch the bytes yourself. One call costs 40 credits.

Credits 40 / video
Input ?url=
Cache 7d
GET · BEARER
Request composing…
Cached 7 days
media URLs ~1h
Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<article class="_aagv _ab8w x1n2onr6" role="presentation"><div class="x9f619 xjbqb8w x78zum5"><div class="_aagu"><img alt="Photo by @creator" class="x5yr21d xu96u03" src="https://scontent.cdninstagram.com/v/t51...blob"/></div><section class="x6s0dn4 x78zum5 xdt5ytf"><span class="x1lliihq _aacl _aaco">55,210 likes</span><div class="_a9zs"><span dir="auto">Three settings you should change today</span></div><span class="_aacl _aaco x1i10hfl">View all 981 comments</span></section><time class="_aaqe" datetime="2026-07-03T12:00:00.000Z">18h</time></div><script type="application/json" data-sjs>{"require":[["ScheduledServerJS","handle",null,[{"__bbox"...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 4 typed fields
{
"data": {
"platform": "instagram",
"entity_id": "C8xQvZ2sVAb",
"media_url": "https://cdn.example/video/master.mp4?sig=...",
"mime_type": "video/mp4",
"expires_at": "2026-07-15T13:00:00Z",
"warning": "media_url is short-lived (max 1h) — download promptly or re-request."
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 Four keys, nothing more

A small object, deliberately. There are four keys: the post's shortcode, the media URL, the runtime in seconds, and a short note reminding you that the URL expires. If you also want the caption, like count or author, that is the Instagram Stats API — this endpoint is about getting to the file and nothing else.

02 The media URL expires fast

The media URL is a signed CDN link. Instagram issues these with an embedded expiry and ties them loosely to the requesting context, so they are useful for minutes, not days. Fetch the file as soon as you have the link, store your own copy, and never write the CDN URL into a database as if it were permanent. If you serve it to a browser hours later it will 403 and you will spend an afternoon debugging something that is working as designed.

03 No video means no response

If the post has no video track — a single photo, a carousel of stills — the normalizer has nothing to return and the call fails rather than returning a half-object. That is intentional. A response either has a working media URL in it or it does not exist.

Field explorer Pick a key to see its type and the caveats.
string Always set Per item
note

A fixed reminder string that media_url is a short-lived CDN link and should be downloaded promptly.

{
"id": "…",
"media_url": "https://cdn.example/video/master.mp4?sig=...",
"duration_sec": 0,
"note": "…"
}
Good fit

Reach for this when

  • Archiving your own or a client's Reels to object storage on a schedule, so you keep a copy that outlives the account.
  • Feeding video into an ML or transcription pipeline that needs the actual file rather than a page to render.
  • Building an ad-creative or swipe-file library, where the team wants to watch competitor Reels side by side without opening Instagram.
  • Frame extraction, thumbnail generation, or duration-based analysis where you need to decode the video locally.
Different job?

There's an endpoint for that

  • You want engagement numbers, caption or author for the post — that is the Instagram Stats API, at a fraction of the cost.
  • You want a creator's recent Reels as a list before deciding what to pull — start with the Instagram Channel Reels API, then pass the URLs you care about here.
  • You want the spoken words rather than the file. Download the MP4 and run your own speech-to-text, or use the TikTok Transcript API if the same clip exists there.
  • The post is a photo or an image-only carousel. There is no video to return and the call will error.

Pricing

Start free, pay for what comes back

One video is 40 credits — about 20¢ on the monthly plan, 18¢ on annual. $5 covers roughly 25 downloads, and failed calls, including photo-only posts, are never charged.

Estimate your bill
$111/ month
30 videos/day × 40 credits × 365 days = 438,000 credits/yr, or $1,332/yr on the annual plan plus 426 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 438,000
Plan Annual $54/yr
Per video 20¢

Estimate only, on a full-year basis. 40 credits per returned video. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.

Engineering notes

Docs you can build on

We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.

Failed calls are never charged Public data only, no login session Built for parallel traffic

Instagram signs CDN URLs with a short validity window. Treat the response as a one-shot fetch instruction: call the endpoint, immediately GET the media_url, write the bytes to your own storage, then discard the URL.

A 403 from Instagram on a link you fetched hours after it was issued is the expected outcome, not a fault in the call — the endpoint worked and the link simply aged out. If you need the file again later, call again rather than retrying the stale URL.

At 40 credits a video this is one of the more expensive calls in the catalogue, because pulling media costs meaningfully more upstream than reading a page of text. At $0.005 per credit that is 20 cents per video on the monthly plan, 18 cents on annual.

So do not use it as a discovery tool. Filter first with the cheap list and stats endpoints, decide which handful of Reels you actually want the file for, and only then call download. Piping a whole channel through it unfiltered means paying 40 credits for every clip, including the ones you would never have watched.

This endpoint is cached in the near-immutable class, since a given Reel's file does not change. A repeat call for the same post inside the window returns in milliseconds with x-cache: hit — but note that a cached response can carry a media_url that has already expired, because the URL's clock is Instagram's, not ours.

If you get a cache hit and the link 403s, retry with fresh=true to force a new signed URL. Cached and fresh calls both cost 40 credits.

We read what a logged-out visitor can read. Private accounts, deleted posts, age-gated content and anything geo-restricted from our egress will error rather than return partial data. Failed calls are not charged.

Stories and content behind a follow request are out of scope entirely. There is no flag that changes this.

The file you get belongs to whoever made it. Archiving for internal research, analysis or your own back-up is one thing; reposting someone else's Reel to your own account is a copyright question and Instagram's terms apply to you regardless of how the bytes reached your disk. We give you access to public media, not a licence to it.

Questions

Frequently asked

Send a GET to /v1/instagram/download with the Reel URL and your API key. The response contains media_url, a direct link to the MP4 on Instagram's CDN, which you then fetch with an ordinary HTTP client. There is no OAuth step and no Instagram developer app involved. The Graph API only reaches media on accounts you own and manage, which is why it does not solve this problem for most people.

Instagram signs its CDN links with a short expiry. The link is valid for minutes, not days, and it is not something we control or can extend. Download the file immediately and keep your own copy. If a stored link has stopped working, call the endpoint again with fresh=true to get a newly signed one rather than retrying the old URL.

40 credits per video. Credits are $0.005 each on the monthly plan and $0.0045 on annual, so a download is about 20 cents, or 18 cents annually. It is priced above the read endpoints because fetching media costs more upstream. Failed calls — private posts, photo-only posts, deleted content — are never charged.

No. This endpoint resolves a video track and returns nothing when there is not one, so a photo post or an image-only carousel errors out. If you need the still image for a post, the Instagram Stats API returns a thumbnail URL alongside the engagement data, and it costs a small fraction of a download call.

No, and it never will. Everything we read is fetched logged out, exactly as an anonymous visitor sees it. Private accounts, follower-only posts and Stories are unreachable, and calls against them return an error rather than a partial result. That limit is deliberate — we do not log in, hold sessions, or work around access controls.

You get whatever Instagram serves from its CDN for that post, unmodified. We do not re-encode, strip anything, or add anything. If the creator uploaded a clip that already carried a TikTok watermark, that watermark is in the file. There is no watermark-removal option on this endpoint.

Not in one call — this endpoint takes a single URL and returns a single file link. The usual pattern is two steps: call the Instagram Channel Reels API to list a creator's recent Reels, filter that list down to the ones you actually want, then call download for each. At 40 credits apiece, filtering before you download is worth the extra step.

Next

Pairs well with

Full Instagram API reference →
/v1/instagram/stats
Instagram Stats API Likes, comments and view counts for an Instagram post or reel. 1 cr / post
/v1/instagram/channel-reels
Instagram Channel Reels API Latest reels from an Instagram account with per-reel metrics. 3 cr / reel
/v1/tiktok/download
TikTok Download API Resolves a downloadable media URL for a TikTok video (URL expires within 1h). 7 cr / video
/v1/facebook/download
Facebook Download API Resolves a downloadable media URL for a Facebook video (URL expires within 1h). 10 cr / video

More Instagram endpoints

/v1/instagram/transcript Full transcript of an Instagram reel with timestamped segments. 40 credits / reel /v1/instagram/summary Short AI summary of an Instagram reel, built on its transcript. 42 credits / reel /v1/instagram/stats Likes, comments and view counts for an Instagram post or reel. 1 credit / post /v1/instagram/comments Paginated comments on an Instagram post; charged per comment returned. 3 credits / comment /v1/instagram/channel-stats Follower counts, bio and profile metadata for an Instagram account. 3 credits / profile /v1/instagram/channel-posts Latest posts from an Instagram account with per-post metrics. 2 credits / post /v1/instagram/channel-reels Latest reels from an Instagram account with per-reel metrics. 3 credits / reel /v1/instagram/reels-search Keyword search over Instagram reels. 3 credits / result

Try the Instagram Download endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/instagram/download
Get your free API key