ScavioScavio
Pricing
Tools
Sign InsGet Startedg
Blog
Instagram12 min readOct 8, 2026

6 Best Instagram Story Download APIs in 2026: Stories, Highlights and Cost per Account

The best Instagram story download API depends on the job: Scavio for live stories in one call, HikerAPI for the lowest cost, Apify or HikerAPI for highlights.

Arvid T

Oct 8, 2026

Try Scavio Free

For an Instagram story download API inside an app or agent, Scavio is the quickest to wire in: POST /api/v1/instagram/user/stories takes a public username and returns every live story with a direct image or video URL in about 2 seconds. Scavio starts from $2 per 1,000 requests; a story check is usually 8 credits, so $16 per 1,000 accounts checked on the Growth plan billed yearly. If cost per account is what decides it, HikerAPI and the datavoyantlab Actor on Apify are far cheaper; if you need highlights, use HikerAPI or the goat255 Actor; for a handful of accounts with no code at all, use our free Instagram story downloader.

We build Scavio, so that recommendation comes with an obvious bias. To keep it honest: every price below was read off the vendor's own page on October 8, 2026, every Scavio response in this post is a real capture from that day, and the section on Scavio lists what it does badly. Per account checked, Scavio costs five to ten times HikerAPI on the Growth plan billed yearly and is the most expensive tool here by a wide margin at pay as you go; it also has no highlights endpoint.

Two ground rules before the tools. Stories expire 24 hours after posting, so every tool here returns only what is live at the moment you ask. And every tool that reads other people's stories works only on public accounts: a private account's stories are visible to its approved followers and nobody else, and nothing in this post gets around that. What you do with the media afterwards is governed by the creator's rights, not by the API that fetched it.

Which Instagram story API fits your job?

ToolChoose it forUses your Instagram login?HighlightsPrice (checked Oct 8, 2026)Main thing to check
ScavioLive stories in one synchronous call inside an app or agentNoNoStarts from $2 per 1,000 requests; a story check is usually 8 credits, so $16 per 1,000 checks on the Growth plan billed yearly, $80 pay as you goNo captions or view counts, no highlights, 5 to 10 times HikerAPI per check
HikerAPILowest cost per account, plus highlights and single-story lookupNoYes2 to 3 billed requests per call; $1 per 1,000 requests, $0.60 at volumeEach call bills more than one request
Apify ActorsBatch runs over a username list, with timestampsNoYes (goat255 Actor)$3 per 1,000 usernames (datavoyantlab); from $3 per 1,000 stories (goat255)Third-party Actors, maintained by their authors
SocialCrawlStories with published_at in a schema shared across platformsNoYes, list plus a detail call5 credits per stories call; £49 for 20,000 creditsPrices in GBP; highlights take two calls
instaloaderFree downloads for a few accountsYes, required for storiesYesFree, open sourceYour account carries the risk
Official Instagram APIStories on professional accounts you manageYour business login, via a Facebook PageNoFree per callCannot read other people's stories

How often you check matters more than which tool

A story you did not fetch within 24 hours is gone, so the real unit of cost is not one call but one account checked often enough to miss nothing. In our sample the oldest live story was 22.7 hours old and the newest 0.4 hours, so an account that posts through the day needs at least one check every 24 hours, and two if you cannot afford a gap.

That turns pricing into multiplication: accounts times checks per day times 30. At 100 accounts checked twice a day, you make 6,000 calls a month. Here is what one check of 1,000 accounts costs at list price, which you then multiply by your schedule:

ToolBilling unitCost per 1,000 accounts checked
HikerAPI2 to 3 requests per call$2 to $3 ($1.20 to $1.80 at the volume rate)
Apify, datavoyantlab Advanced Instagram Stories ScraperPer username$3, plus $0.099 per run
Apify, louisdeconinck Instagram Story Details ScraperPer profile$17 to $20, plus $0.07 to $0.10 per run
Apify, goat255 Stories & Highlights ScraperPer story returnedAbout $20 to $22 at our sample's 6.5 stories per account
SocialCrawl5 credits per call£12.25 on the Growth pack, £30 on Starter
ScavioUsually 8 credits per call, 10 on some$16 to $20 on the Growth plan billed yearly, $80 to $100 pay as you go

Billing on empty accounts differs too. Per-account pricing charges for a check whether or not anything is live: Scavio billed 8 credits for our one account with no stories up. Per-story pricing such as goat255's charges nothing for stories that are not there. If most of your list is quiet most days, per-story billing wins.

What a live story check returns, measured

To see what the job looks like in practice, we checked eight public accounts likely to have stories up (sports leagues and clubs, news, a brand, a science agency and a creator) through Scavio at 11:11 UTC on October 8, 2026, then fetched every media URL it returned.

Bar chart: 7 of 8 public Instagram accounts had live stories at capture time, 52 items in total, 27 video and 25 photo. nba had 17, cnn 12, espn 8, realmadrid 6, nasa 4, natgeo 3, kyliejenner 2 and nike none. All 52 media URLs returned HTTP 200.

Seven of eight accounts had stories live, 52 items in all, and the mix varied more than we expected: CNN's 12 were all photos, ESPN's 8 all video. Every one of the 52 media URLs answered HTTP 200 when we fetched it, photos as full-size portrait JPEGs (1170 by 2080 pixels on the CNN story we opened) and videos as MP4 (the first NBA video was a 13 MB file). The median call took 2.1 seconds and the slowest 3.8.

Two findings shape how you build on this:

  • The links expire, separately from the story. Each media URL is signed with an expiry stamp. On our capture, video links expired 32 to 36 hours out and photo links 104 to 108 hours out. Download the file when you fetch the story; do not store the URL and expect it to work next week.
  • Posting and expiry times come with every story. taken_at and expiring_at are unix seconds, and expiry is exactly 24 hours after posting, so you can schedule the next check per account instead of polling blind. On our capture the 52 stories ranged from 0.4 to 22.7 hours old.

1. Scavio for live stories inside your app

Scavio is a REST API, so it fits when stories feed code: a brand-monitoring job, a creator research agent, an archive of your own campaign's tagged partners. It reads public data and never asks for your Instagram login. Stories are one of 12 endpoints on the Instagram API, and the same key covers Google, TikTok, YouTube, Reddit and the rest.

EndpointReturnsCredits
/api/v1/instagram/user/storiesEvery live story for a username or user ID, with media URLsUsually 8 (2 to 10)

A check and a download is one request plus one fetch per item:

Python
import os
import requests

r = requests.post(
    "https://api.scavio.dev/api/v1/instagram/user/stories",
    headers={"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}"},
    json={"username": "nba"},
    timeout=90,
)
for story in r.json()["data"]["items"]:
    url = story["video_url"] if story["is_video"] else story["thumbnail_url"]
    ext = "mp4" if story["is_video"] else "jpg"
    with open(f"{story['shortcode']}.{ext}", "wb") as f:
        f.write(requests.get(url, timeout=60).content)

And the response, trimmed to one video item with the signed URLs shortened:

JSON
{
  "data": {
    "items": [
      {
        "id": "4002737224843607694_20824486",
        "pk": "4002737224843607694",
        "shortcode": "DeMlExwCT6O",
        "media_type": 2,
        "is_video": true,
        "story_type": "video",
        "thumbnail_url": "https://scontent-lga3-2.cdninstagram.com/v/t51.71878-15/840101993_..._n.jpg?...",
        "video_url": "https://scontent-lga3-3.cdninstagram.com/o1/v/t2/f2/m78/AQNqcMEn....mp4?...",
        "taken_at": 1791383482,
        "expiring_at": 1791469882,
        "caption_text": null,
        "view_count": null,
        "owner": { "pk": "20824486", "username": "nba", "full_name": "NBA", "is_verified": true }
      }
    ],
    "count": 17
  },
  "response_time": 2714,
  "credits_used": 10
}

An account with no live stories returns "items": [] and "count": 0 rather than an error. The same items are repeated under a reels object keyed by the account's numeric ID, which you can ignore.

What Scavio does badly, from the same day's testing:

  • It costs five to ten times HikerAPI per check. A check usually costs 8 credits (six of our eight calls billed 8, two billed 10), so 1,000 accounts cost $16 to $20 on the Growth plan billed yearly, in the range of the pricier Apify Actors, and $80 to $100 pay as you go, the most expensive option here. HikerAPI does the same check for $2 to $3.
  • No captions or view counts. caption_text and view_count come back null on every story item.
  • No highlights. There is no highlights endpoint; HikerAPI, the goat255 Actor, SocialCrawl and instaloader all have one.
  • Empty checks are billed. Our Nike call found no live stories and still cost 8 credits.
  • No stickers, links, mentions or music. You get the media and the owner, not the interactive layer of the story.

What the price buys is a synchronous call with no run to start and no dataset to poll, one response shape shared with every other Scavio endpoint, and an MCP server so an agent can call it directly. For a few accounts by hand, the free story downloader and story viewer run on this endpoint and need no key; both work on public accounts only.

2. HikerAPI for the lowest cost per account

HikerAPI is an Instagram-only API with the deepest story coverage in this list. Its API reference has endpoints for a user's stories by ID or username, a single story by ID or URL, a story media download, a user's highlights and a highlight by ID. The reference marks the billing on each: 2 requests per call for stories by user ID, 3 by username. Pricing is pay per request, $1 per 1,000 on the popular plan and $0.60 per 1,000 at volume, with 100 free requests and no subscription.

That makes it the cheapest paid option for checking stories on a schedule, at a fifth to a tenth of Scavio's Growth-plan price per check. Check what counts as a billed request on each endpoint you use, since the multiplier is per endpoint.

3. Apify Actors for batch runs and highlights

Apify is a marketplace of scrapers called Actors, and stories have more than a dozen. Two stand out for this job:

  • Advanced Instagram Stories Scraper by datavoyantlab, the story Actor with the most monthly users (374, of 1,907 total, rated 4.72). It takes a list of usernames, needs no login, and returns taken_at, expiring_at and the media URLs. It costs $3 per 1,000 usernames plus $0.099 per run.
  • Instagram Stories & Highlights Scraper by goat255, for highlights. It returns the live tray and every item inside each highlight, with takenAt, expiringAt, music and stickers. It charges per story returned, from $3 per 1,000 stories ($3.45 on Apify's free plan), so expanding a creator's highlights can cost far more than their live stories.

The most-installed story Actor overall, louisdeconinck's Instagram Story Details Scraper with 2,046 users, charges $0.017 to $0.02 per profile, several times the datavoyantlab rate. As with any Actor, the author maintains it, not Apify; pin the one you tested and re-check it when Instagram changes.

4. SocialCrawl for timestamps in a shared schema

SocialCrawl's stories endpoint takes a handle or user ID and returns media URLs, duration and a published_at capture time, at 5 credits per call; a separate story-download endpoint fetches one known story, also at 5 credits. Highlights are a 1-credit list call plus a detail call per highlight for the items. Credit packs are £15 for 2,500, £49 for 20,000 and £299 for 150,000, one-time and never expiring, with 100 free credits. Its pricing page also says credits are refunded when a page comes back empty. Choose it if you already read other platforms through it and want one schema.

5. instaloader for free downloads

instaloader is the most popular open-source Instagram downloader: 13,519 GitHub stars, MIT licensed, latest release v4.15.3 in July 2026. It downloads stories and highlights with --stories and --highlights, and its command line docs mark both "Requires login". You run it on your own Instagram session, so Instagram's limits apply to your account. Fine for a few accounts from a laptop; at volume, your account is what absorbs the consequences.

6. The official Instagram API for accounts you manage

Meta's API does have a stories edge, GET /{ig-user-id}/stories, and it is the only sanctioned way to read story data. It works on professional accounts you manage: the token needs instagram_basic and pages_read_engagement through the Facebook Page linked to the account. Meta lists its limits plainly: "Stories are only available for 24 hours", live video stories are not included, and reshared stories are not returned. Business discovery, the official route to other accounts, returns profile and media metrics, not stories. If the stories are yours or a client's, use this and archive them before they expire; for anyone else's, it has nothing to offer. Our post on the Instagram API without OAuth walks through where Meta's login is and is not required.

What to check before buying volume

  • Run your own list on the free tier. Stories vary wildly by account; we saw 17 on one and none on another. Ten of your real targets tell you more than any vendor's sample.
  • Normalize to cost per account checked. Per request, per credit, per username, per story: convert each to 1,000 checks, then multiply by how often you must check.
  • Whether empty checks are billed. On a quiet list, this can be most of your bill.
  • Timestamps and expiry. If you need to know when a story went up, confirm the field is populated, not just present in the schema. Ours carries both on every item.
  • How long media URLs last. Fetch the file immediately. Signed links in our test lasted 32 to 108 hours.
  • Highlights cost. A creator with dozens of highlights can turn one per-story-billed run into hundreds of billable items.

Frequently asked questions

Is it possible to download someone's IG stories? Yes, if the account is public and the story is still live. Stories disappear 24 hours after posting, and a private account's stories are visible only to approved followers, which no legitimate tool gets around. For a public account, an API such as Scavio's returns each live story's image or video URL for direct download; what you do with that media is still subject to the creator's rights.

How to bulk download Instagram stories? Send a list of public usernames to an API or Apify Actor that returns media URLs, then download each URL straight away. Run it at least once a day, because a story you miss is gone after 24 hours. The signed links expire too: in our test, video links lasted 32 to 36 hours.

Is there a free Instagram Downloader API available? Not without limits. instaloader is free and open source but needs your Instagram login for stories and highlights. HikerAPI gives 100 free requests, SocialCrawl gives 100 free credits, and Scavio gives 50 free credits, enough for five or six story checks.

Does Instagram allow data scraping? No. Instagram's Terms of Use prohibit collecting information in an automated way without Instagram's express permission, whether or not you are logged in, so every third-party story tool runs against that clause. The only sanctioned route to story data is the official API, which covers professional accounts you manage. This is not legal advice; copyright in the media and personal data laws such as GDPR matter as much as which tool you pick.

Skip the story pipeline maintenance

If you build this yourself, you own the parts this post kept running into: a schedule that never lets an account go 24 hours unchecked, a downloader that grabs each file before its signed link expires, a store keyed on story ID so you do not save the same item twice, and a record of what you already downloaded, since each story disappears 24 hours after posting.

Scavio absorbs the fetching half of that. You send a username and get the same JSON shape every time, with no Instagram account involved and nothing to keep patched. Scavio starts from $2 per 1,000 requests on the Growth plan billed yearly; a story check is usually 8 credits, so $16 per 1,000 checks. It is not the cheapest per check, so price it on your schedule: checking 25 accounts once a day for 30 days is 750 calls, 6,000 to 7,500 credits, which the Project plan at $30 a month for 7,000 credits nearly covers; pay as you go at $0.01 a credit, the same month costs $60 to $75.

Get an API key with 50 free credits, no card required, and run the stories endpoint on your own list before you decide.

Search, social and ecommerce data as JSON

  • One API key for every platform
  • Pay per request with credits
  • Works with MCP, LangChain and n8n
Try Scavio Free

50 free credits, no credit card

On this page

  1. Which Instagram story API fits your job?
  2. How often you check matters more than which tool
  3. What a live story check returns, measured
  4. 1. Scavio for live stories inside your app

Related articles

View all
  • 6 Best Instagram Profile Scraper APIs in 2026: Prices, Fields and Real Tests
  • 6 Best TikTok Profile Scraper APIs in 2026: Fields, Speed and Cost per 1,000
ScavioScavio

One scraper API for every social, search, e-commerce and real estate platform. Built for AI agents.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

  • Documentation
  • API Reference
  • Quickstart
  • MCP Integration
  • Python SDK

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative
  • Serper Alternative
  • Tavily vs Scavio
  • SerpAPI vs Scavio
  • All alternatives
  • Compare Scavio vs alternatives

Search APIs

  • Google Search API
  • Amazon Product API
  • YouTube API
  • Reddit API
  • Walmart Product API
  • TikTok API
  • Instagram API

Tools

  • All Tools

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy