Instagram Stories Scraper avatar

Instagram Stories Scraper

Pricing

from $5.00 / 1,000 instagram stories

Go to Apify Store
Instagram Stories Scraper

Instagram Stories Scraper

Get every active Instagram story from any account you can view — direct image and video links, mentions, hashtags, link stickers, music, location, and when each story expires.

Pricing

from $5.00 / 1,000 instagram stories

Rating

0.0

(0)

Developer

VeroAPIs

VeroAPIs

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

5 days ago

Last modified

Share

Instagram Stories Scraper — every active story, with direct media links

Give it a list of accounts and get back every story they have live right now: the full-size image or MP4, who and what is tagged, the link sticker, the song, and the exact minute each story expires.

What you can do

  • Download story images and videos in full quality before they disappear.
  • Track what competitors and creators post every day.
  • See which accounts, hashtags, and links a story sends viewers to.
  • Know exactly when each story expires, down to the second.
  • Spot paid partnerships and the brands behind them.

How to use it

  1. Add the accounts you want — usernames, profile links, or story links all work.
  2. Click Start.
  3. Download your results as JSON, CSV, or Excel.

No Instagram login needed. Every public account works straight away.

Want stories from private accounts you follow? Connect your own Instagram session under Advanced — see Using your own Instagram session.

What you get

One row per story, with the media ready to download:

AccountTypePostedExpiresMentionsStory link
natgeovideo2026-08-04 09:122026-08-05 09:12nasaopen
{
"username": "natgeo",
"url": "https://www.instagram.com/stories/natgeo/3512345678901234567/",
"storyId": "3512345678901234567",
"type": "video",
"fullName": "National Geographic",
"isVerified": true,
"displayUrl": "https://instagram.com/…/story.jpg",
"videoUrl": "https://instagram.com/…/story.mp4",
"width": 1080,
"height": 1920,
"videoDuration": 14.9,
"postedAt": "2026-08-04T09:12:07.000Z",
"expiresAt": "2026-08-05T09:12:07.000Z",
"mentions": ["nasa"],
"hashtags": ["wildlife"],
"links": ["https://www.nationalgeographic.com/"],
"location": { "id": "212988663", "name": "Serengeti National Park", "lat": -2.33, "lng": 34.83 },
"musicTitle": "Bad Guy",
"musicArtist": "Billie Eilish",
"isPaidPartnership": false
}

Story media links are short-lived, so download the files you want to keep.

Using your own Instagram session

Public accounts work with no setup at all. Adding your own sessionid under Advanced also gets you the private accounts you already follow — the run sees exactly what your account sees.

To find it: open Instagram in your browser, then DevTools → Application → Cookies → instagram.com, and copy the sessionid value.

Here is exactly what happens to that cookie:

  • It only ever goes to instagram.com. The actor talks to no other host — no analytics, no third party, nowhere else.
  • Only your run can read it. Apify encrypts it the moment you enter it, and it can only be decrypted inside your own run. It is masked in the input tab.
  • It never lands in your results. Not in the dataset, not in the logs, not in any file.
  • It lives only as long as your run does. Delete the run and the encrypted value goes with it.

You can revoke it any time by logging out of Instagram in your browser, which retires that sessionid everywhere.

Real-time API

Need stories on demand? Turn on Standby mode and call the actor like a live API — one account per request, every live story straight back in the HTTP response. Perfect for checking an account the moment someone asks, instead of waiting on a run.

Every request needs your Apify token, passed as a Bearer token (or a ?token= query param).

curl "https://vero-api--instagram-stories-scraper.apify.actor/?username=nasa" \
-H "Authorization: Bearer <APIFY_TOKEN>"

A username, a profile link, or a story link all work:

curl "https://vero-api--instagram-stories-scraper.apify.actor/?username=https://www.instagram.com/nasa/" \
-H "Authorization: Bearer <APIFY_TOKEN>"

The response names the account once, then lists its stories with the media grouped together:

{
"account": {
"username": "nasa",
"profileUrl": "https://www.instagram.com/nasa/",
"userId": "528817151",
"fullName": "NASA",
"isVerified": true,
"profilePicUrl": "https://instagram.com/…/nasa.jpg"
},
"storiesCount": 1,
"stories": [
{
"id": "3512345678901234567",
"url": "https://www.instagram.com/stories/nasa/3512345678901234567/",
"type": "video",
"postedAt": "2026-08-04T09:12:07.000Z",
"expiresAt": "2026-08-05T09:12:07.000Z",
"media": {
"imageUrl": "https://instagram.com/…/story.jpg",
"videoUrl": "https://instagram.com/…/story.mp4",
"width": 1080,
"height": 1920,
"durationSeconds": 14.9
},
"caption": "A rocket lifts off at sunrise",
"mentions": ["spacex"],
"hashtags": ["artemis"],
"links": ["https://www.nasa.gov/"],
"location": { "id": "212988663", "name": "Kennedy Space Center", "lat": 28.57, "lng": -80.65 },
"music": { "title": "Starman", "artist": "David Bowie" },
"sponsors": [],
"isPaidPartnership": false
}
]
}

When an account has nothing live you get storiesCount: 0, an empty stories list, and a message telling you why. Ask for an account that does not exist and you get a 404.

Private accounts you follow. Send your own Instagram sessionid in the x-instagram-sessionid header and the request sees exactly what your account sees. Leave the header out and the actor uses its own session, which covers every public account.

curl "https://vero-api--instagram-stories-scraper.apify.actor/?username=nasa" \
-H "Authorization: Bearer <APIFY_TOKEN>" \
-H "x-instagram-sessionid: <YOUR_SESSIONID>"

Your session travels in a header rather than the URL, so it stays out of server logs, browser history, and proxy logs. See Using your own Instagram session for where to find the value and exactly how it is handled.

Pricing

You pay only for the stories you get — no subscriptions, no surprises.

FAQ

Do I need to log in? No. Public accounts work with no setup at all.

Can I get stories from private accounts? Yes — paste your own sessionid under Advanced, and you get every private account you already follow.

Is my Instagram session safe? Yes. It goes only to instagram.com, it is encrypted so that only your own run can read it, and it never appears in your results or logs. See Using your own Instagram session.

What if an account has no stories up? You get one row for that account explaining it — nothing is silently dropped.

Can I call it like an API? Yes — turn on Standby mode and request one account at a time over HTTP. See Real-time API.

How fresh is the data? Live. Every run reads the stories that are up at that moment, which is why the expiry time is included on every row.