Instagram Stories & Highlights Scraper · Download · No Login avatar

Instagram Stories & Highlights Scraper · Download · No Login

Pricing

from $7.00 / 1,000 account scrapeds

Go to Apify Store
Instagram Stories & Highlights Scraper · Download · No Login

Instagram Stories & Highlights Scraper · Download · No Login

Instagram Stories & Highlights Scraper — pull active stories and permanent highlights from any public account. Image & video URLs, media type, timestamps, music, and highlight titles. Optional permanent file download. No login, no cookies. Stories, highlights, or both. JSON/CSV/Excel.

Pricing

from $7.00 / 1,000 account scrapeds

Rating

5.0

(1)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

27

Total users

24

Monthly active users

10 hours ago

Last modified

Share

Instagram Stories & Highlights Scraper

Instagram Stories & Highlights Scraper

Scrape the active stories and permanent highlights of any public Instagram account — no login, no cookies, zero risk to your own account. Paste one or more usernames and get back every story and highlight item with direct image and video URLs, media type, timestamps, expiry, music, and highlight titles. Optionally download the media files to permanent storage so they never expire. Export as JSON, CSV, or Excel.

InputWhat you get
A single username (e.g. nike)Its active stories and/or highlight items, per dataToScrape
Multiple usernamesAll of them in one run, each row tagged by sourceUsername and type
Profile URL (https://www.instagram.com/nike)Same as a username — URLs are accepted too

Pure HTTP. No browser, no CAPTCHA solver, no cookies, no third-party bypass service.

Why Use This Scraper?

  • Zero account risk — you never hand over Instagram cookies or log in, so your account can't be flagged, throttled, or banned.
  • Stories and highlights in one Actor — collect active 24-hour stories, permanent highlight trays, or both, selected per run. Most competitors split these across separate actors.
  • Direct media URLs + optional download — every item includes the image URL and, for videos, the playable video URL. Instagram's own URLs expire after a few hours; flip on downloadMedia to save the files permanently and get a non-expiring downloadUrl.
  • Retrieve expired stories (opt-in) — every run adds what it scrapes to a permanent archive. Turn on includeHistorical to also return items captured on earlier runs that a live scrape can no longer see — stories that have since expired or been deleted — each with permanent (non-expiring) media. This is data no live-only scraper can give you; coverage grows the more an account is run.
  • Multiple profiles per run — pass a whole list of usernames; every row is tagged with its source account and list type.
  • Fast — pure HTTP, no browser, no CAPTCHA solver.

How It Works

How the Instagram Stories & Highlights Scraper works

  1. Resolve — each input username (or profile URL) is looked up to its Instagram account, and you choose stories, highlights, or both.
  2. Fetch — active 24-hour stories and permanent highlight trays are pulled page by page over pure HTTP — no browser, no cookies.
  3. Emit — every story or highlight item is pushed to the dataset as its own row, tagged with sourceUsername and type. With downloadMedia on, each file is also saved to permanent storage and its downloadUrl is added to the row.

Supported Inputs

  • Handles are accepted with or without the leading @, and full profile URLs work too (https://www.instagram.com/nike, instagram.com/nike/, mobile m.instagram.com).
  • Not supported: private accounts (their stories/highlights aren't public — the Actor returns an error item), hashtags, post/reel URLs.

Use Cases

AudienceHow they use it
Social media managersArchive a brand's own stories and highlights before they expire
Competitive analystsTrack what competitors post to stories and how they organize highlights
Content researchersCollect story/highlight media for trend and creative analysis
MarketersPull highlight covers and media for campaign audits

Input

FieldTypeRequiredNotes
usernamesarray of stringsYesPublic usernames or profile URLs, with or without @.
dataToScrapestringNoDropdown: stories, highlights, or both. Default: stories.
downloadMediabooleanNoSave each image/video to permanent storage and add a non-expiring downloadUrl. Default: false.
includeHistoricalbooleanNoAlso return archived items captured on earlier runs — including expired or deleted stories a live scrape can't see — tagged source:"archive". Paying accounts only. Default: false.
maxHighlightsPerUserintegerNoCap how many highlight trays to expand per account. Omit for all.

Example input

{
"usernames": ["nike", "https://www.instagram.com/natgeo"],
"dataToScrape": "both",
"downloadMedia": true
}

Output Schema

One dataset row per story or highlight item. Runs stream to the default dataset, exportable as JSON, CSV, Excel, or via the API.

{
"sourceUsername": "nike", // the input account this item came from
"type": "highlight", // "story" or "highlight"
"highlightId": "highlight:17975319242920589", // the tray (null for stories)
"highlightTitle": "Just Do It", // tray title (null for stories)
"mediaPk": "3718111997642014700",
"shortCode": "DOZYymWkgAN",
"mediaType": "photo", // "photo" or "video"
"takenAt": "2025-09-09T21:31:48.000Z",
"expiringAt": null, // when an active story expires (stories only)
"imageUrl": "https://scontent.cdninstagram.com/v/t51...",
"videoUrl": null, // set only for videos
"width": 1179,
"height": 2096,
"videoDuration": null, // seconds (videos only)
"hasAudio": null, // videos only
"musicTitle": null,
"musicArtist": null,
"storyCommentCount": null,
"downloadUrl": "https://api.apify.com/v2/key-value-stores/…/records/nike-highlight-….jpg" // when downloadMedia is on, else null
}

When includeHistorical is on, archived items carry three extra fields: source: "archive", firstSeenAt, and lastSeenAt (ISO timestamps for when the item was first and last captured), and a permanent downloadUrl. Live items have no source field.

Pricing

Pay-per-event — you're charged only for what you actually collect. No subscription, no per-run start fee. Rates decrease with your Apify plan tier (Free → Gold+ shown below).

EventWhen it's chargedRate (Free → Gold+)
Account scrapedOnce per public account processed$0.010 → $0.007
Highlight trayOnce per highlight tray expanded (returns all its items)$0.0040 → $0.0028
Media downloadedOnce per file saved, only when downloadMedia is on$0.0020 → $0.0014
Historical story/highlightOnce per archived (expired/deleted) item returned, only with includeHistorical$0.0040 → $0.0028

Private, missing, or invalid accounts return an error item and are not charged. Live story and highlight items themselves are free — you pay per account and per highlight tray (above); the historical charge applies only to archived items delivered via includeHistorical.

What Makes This Richer Than the Competition

CapabilityTypical competitorThis Actor
Stories and highlightsSplit across two actorsOne actor, one run
Login / cookies requiredOftenNever
Media file downloadRental-only or missingOpt-in, pay-per-file, permanent
Video duration / audio / musicRareIncluded
Private-account handlingFails the runClean error item, run succeeds

FAQ

Do I need to provide my Instagram cookies or log in? No. This Actor never asks for cookies, passwords, or a session.

Does it work on private accounts? Only public accounts. A private account's stories and highlights aren't public, so the Actor emits an error item for it and continues with your other usernames.

How fresh are stories? Active stories are fetched live at run time. They expire 24 hours after posting — the expiringAt field tells you when.

The image/video URLs stopped working — why? Instagram's own CDN URLs expire after a few hours. Enable downloadMedia to save the files to permanent storage and use the non-expiring downloadUrl instead.

Can I get highlights instead of stories? Yes — set dataToScrape to stories, highlights, or both. Every row carries a type field.

Can I retrieve stories that already expired? Yes, if they were captured on an earlier run. Every run adds what it scrapes to a permanent archive; turn on includeHistorical to also return archived items — including expired or deleted stories — each with permanent media and tagged source:"archive". It's a premium, paying-only option priced per archived item, and coverage depends on what's already in the archive, so it pays to run an account regularly.

Notes & Limitations

  • Active stories are only available while live (24 hours after posting). An account with no active stories returns zero story rows — this is normal, not an error.
  • downloadMedia adds run time and a small per-file charge; leave it off if the (temporary) URLs are enough.
  • Highlight trays can contain many items; use maxHighlightsPerUser to cap cost on accounts with lots of highlights.
  • includeHistorical returns only items already in the archive (captured on earlier runs). A never-before-scraped account has no history yet and returns nothing extra — run accounts regularly to build their archive.

🤖 For AI Agents & LLM Apps

Purpose: Return the active stories and/or permanent highlights of public Instagram accounts, with direct media URLs and optional permanent file download.

Minimal tested input:

{ "usernames": ["nike"], "dataToScrape": "both" }

Optional flags: downloadMedia: true adds a permanent downloadUrl per item. includeHistorical: true (paying accounts) also returns archived items captured on earlier runs — including expired/deleted stories — tagged source:"archive" with firstSeenAt/lastSeenAt.

Output: array of flat objects, one per media item. Fields: sourceUsername, type (story/highlight), highlightId, highlightTitle, mediaPk, shortCode, mediaType (photo/video), takenAt, expiringAt, imageUrl, videoUrl, width, height, videoDuration, hasAudio, musicTitle, musicArtist, storyCommentCount, downloadUrl. Archived rows (with includeHistorical) add source: "archive", firstSeenAt, lastSeenAt.

Behavior & billing: Pay-per-event, tiered by Apify plan — account-scraped ($0.010→$0.007), highlight-tray ($0.0040→$0.0028), media-downloaded ($0.0020→$0.0014, only with downloadMedia:true), historical-item ($0.0040→$0.0028, only for archived rows via includeHistorical). Live story/highlight items are free output. Private/missing/invalid accounts yield one error item ({sourceUsername, error, message}) and are not charged. No login or cookies required.

Support

Found a bug or need a field added? Open an issue on the Actor's Issues tab in Apify Console, or email muhamed.didovic@gmail.com.

⚠️ Disclaimer

This Actor scrapes only publicly available data and does not log into any Instagram account. Use it in compliance with Instagram's Terms of Use, applicable laws, and data-protection regulations (such as GDPR and CCPA). You are responsible for how you collect and use the data, including obtaining any consent required for personal data. This tool is intended for lawful purposes such as analytics, research, and archiving of public content.

SEO Keywords

instagram stories scraper, instagram highlights scraper, download instagram stories, instagram story downloader, instagram highlights downloader, scrape instagram stories, instagram story archive, instagram highlight export, instagram story video download, instagram media downloader, instagram story url, no login instagram scraper, no cookies instagram scraper, instagram stories api, instagram highlights api, apify instagram scraper