Skip to content

Instagram Highlights Scraper

Try for free

Scrape and download public Instagram story highlights. Get every photo and video of a profile's highlights with media URLs, type, duration, posting time and highlight title. No login needed.

📌 Instagram Highlights Scraper

Every photo and video in a public profile's story highlights, as clean dataset rows, from a username or a highlight link.

Paste a profile and each highlight comes back item by item: the media link, photo or video, duration, the time it was first posted, and the highlight's title and cover. Turn on Download media files to keep a saved copy of every file.

✨ Features

  • 👤 Whole profiles. usernames takes usernames, @handles or profile URLs. Every highlight Instagram lists on the profile is scraped, with all of its items (see Limits for long trays).
  • 🔗 Single highlights. highlightUrls takes highlight links (https://www.instagram.com/stories/highlights/<id>/), share links (https://www.instagram.com/s/...) or the numeric highlight id.
  • 🎞️ Photos and videos. mediaType says which one it is. Videos come with videoUrl, videoDurationSeconds and hasAudio, plus a still frame in imageUrl. Each link is the largest size Instagram sent.
  • 🕒 When it was posted. takenAt (UTC) and takenAtTimestamp give the time the story was first published, before it was saved to the highlight.
  • 🔗 Links and tags on the story. Link stickers and buttons (the target URL, without Instagram's redirect wrapper), hashtags and tagged locations, when the story has them.
  • 💾 Saved files when you ask. downloadMedia stores each photo or video in the run's key-value store and adds its link as downloadedMediaUrl. Instagram's own media links expire after a few days; the saved copy stays with the run.
  • 🚫 Clear failures. A private or missing profile, or a highlight that no longer exists, is listed in the run status and in the OUTPUT record. It is not stored as a row and not charged.

🚀 Why teams use this

Fast and light: no browser, so a list of profiles finishes in seconds. Logged-out only: no account, no session cookie, nothing to configure.

Use it to archive a brand's or creator's highlights, check what a competitor keeps pinned on its profile, collect product and campaign stories for research, or save highlight videos before they are removed.

💡 Use cases

  • Download every highlight video and photo of a public profile.
  • Archive a brand's or creator's highlights with posting dates.
  • Collect the links and hashtags placed on highlight stories.

🧪 Example input

{
  "usernames": [
    "nasa"
  ]
}

🧾 Sample output

One item from a real run of the example input, shortened. Long links are cut.

{
  "highlightId": "18195781759377100",
  "highlightTitle": "Roman",
  "highlightUrl": "https://www.instagram.com/stories/highlights/18195781759377100/",
  "highlightCoverUrl": "https://scontent-eze1-1.cdninstagram.com/v/t51.71878-15/…",
  "highlightItemCount": 9,
  "position": 1,
  "ownerUsername": "nasa",
  "ownerId": "528817151",
  "ownerProfileUrl": "https://www.instagram.com/nasa/",
  "itemId": "3975089864169193671",
  "mediaType": "video",
  "mediaUrl": "https://scontent-eze1-2.cdninstagram.com/o1/v/t2/f2/m78/…mp4?…",
  "imageUrl": "https://scontent-eze1-2.cdninstagram.com/v/t51.71878-15/…jpg?…",
  "videoUrl": "https://scontent-eze1-2.cdninstagram.com/o1/v/t2/f2/m78/…mp4?…",
  "width": 1080,
  "height": 1920,
  "videoDurationSeconds": 26.833,
  "hasAudio": true,
  "takenAt": "2026-08-30T11:00:53.000Z",
  "takenAtTimestamp": 1788087653,
  "links": [],
  "hashtags": [],
  "locations": [],
  "isPaidPartnership": false,
  "inputUrl": "nasa",
  "scrapedAt": "2026-11-06T18:37:25.000Z"
}

📥 Input

FieldRequiredWhat it does
usernamesOne of the twoUsernames, @handles or profile URLs. The highlights Instagram lists on each profile.
highlightUrlsOne of the twoHighlight links, share links or numeric highlight ids. Only those highlights.
downloadMediaNoSave each photo and video file in the run's key-value store and set downloadedMediaUrl. Default false.
{
  "usernames": ["nasa"],
  "highlightUrls": ["https://www.instagram.com/stories/highlights/18195781759377100/"],
  "downloadMedia": true
}

📤 Output

One dataset item per photo or video in a highlight, in the order Instagram shows them (position 1, 2, 3 …).

  • Highlight: highlightId, highlightTitle, highlightUrl, highlightCoverUrl, highlightItemCount.
  • Owner: ownerUsername, ownerId, ownerProfileUrl.
  • Media: itemId, mediaType (image or video), mediaUrl (the video for videos, the photo for photos), imageUrl, videoUrl, width and height (the photo file's size for photos; for videos the size Instagram gives for the copy it serves, or the original upload size when it gives none), videoDurationSeconds, hasAudio, downloadedMediaUrl (only with Download media files).
  • Time: takenAt, takenAtTimestamp.
  • Stickers and labels: links (link stickers and buttons, without Instagram's redirect wrapper; Instagram sends link URLs to logged-out visitors in lower case, so a case-sensitive link (for example a YouTube video id) may not open), hashtags, locations (id and url; Instagram sends no place name to logged-out visitors), isPaidPartnership.
  • Run info: inputUrl, scrapedAt.

The same highlight asked for twice in one run (for example through its profile and through its own link) is returned for each input.

⚠️ Limits

  • Public profiles only. Instagram shows a private profile's highlights only to approved followers, so a private profile fails with that reason.
  • Long highlight trays: Instagram lists only the first page of a profile's highlights to logged-out visitors (10 on the profiles we checked; the next-page request is refused without a login). The run status names every profile where more highlights exist. Paste the links of the other highlights in Highlight URLs to get them: single highlights always work.
  • Some public profiles keep their highlight contents for logged-in visitors: Instagram lists the highlights (title and cover) but sends no photos or videos to logged-out visitors. We saw this on a small personal account, while brand, media and creator accounts worked. Such a profile fails with that reason and nothing is charged.
  • Highlights only. Current 24-hour stories are shown by Instagram only to logged-in visitors, and this scraper does not log in.
  • Instagram's media links (mediaUrl, imageUrl, videoUrl) are signed and expire after a few days. Download the files soon, or turn on Download media files to keep a copy with the run.
  • View counts, viewers and replies are shown only to the account owner and are not available. Mention and music stickers are not sent to logged-out visitors, so there are no mention or music fields.

💰 Pricing

Pay per result. Platform usage (compute, proxy) is included in the price; you pay the events only.

EventFreeStarterScaleBusiness
Highlight item (per 1,000)$2.93$2.80$2.67$2.55
Media download (per 1,000)$1.70$1.53$1.36$1.19
  • Highlight item: each photo or video saved to the dataset.
  • Media download: each file saved in the run's storage, only when Download media files is on.

Example: all highlights of nasa (5 highlights, 89 items in our run) cost $0.26 on Free and $0.23 on Business; with Download media files on, $0.41 on Free and $0.33 on Business. Failed inputs are never charged. If you set a maximum charge for the run, the scraper stops cleanly when it is reached and keeps every item it already saved.

❓ FAQ

Can I download the videos? Yes. Every row has a direct mediaUrl you can open or save. With Download media files on, the file is also stored with the run and linked in downloadedMediaUrl.

Do I need an Instagram account? No. The scraper reads what Instagram shows to visitors who are not logged in.

Can I schedule it or use the API? Yes. Save your input as a task and schedule it, or start runs and read the results through the Scrape.ly API, CLI, or from AI agents through the Scrape.ly MCP server.

//From the blog\\

Latest articles

All articles

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

No credit card. No setup calls.