Instagram Stories & Highlights Scraper
Pricing
from $2.50 / 1,000 story item saveds
Instagram Stories & Highlights Scraper
Scrape public Instagram story highlights and the live 24-hour story tray for one or more usernames. Returns one record per story item with original media URLs, timestamps, captions, music, mentions and links as structured JSON. No login required for highlights.
Pricing
from $2.50 / 1,000 story item saveds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
Capture every story item from public Instagram highlight reels — plus the live 24-hour tray when it is reachable — as structured, exportable rows. Each row carries the original media URL, timestamp, caption, music, mentions, hashtags, and links for one story item. Built for social media managers, brand marketers, journalists, and AI agents that need permanent, analyzable copies of ephemeral story content.
Best fit for this Actor
Choose this Actor when you have public usernames and need their archived story highlights as a clean dataset for content strategy, campaign archiving, or monitoring. It works as a focused standalone workflow: provide usernames, read the terminal outcome, then export the default dataset. For the permanent feed behind a story item, use the Instagram Posts Scraper next; it returns the lasting feed rather than ephemeral story items.
What data you receive
Each dataset row represents one story item captured from a highlight reel (source: "highlight") or the live tray (source: "story").
| Field | Meaning |
|---|---|
id, position | Story item identity and order inside its reel |
ownerUsername, ownerId | Public profile the story belongs to |
source, highlightId, highlightTitle | Where the item came from and its parent reel |
mediaType, mediaUrl, thumbnailUrl, width, height | Media kind and best available CDN renditions |
takenAt, expiresAt | Publish time; expiry for ephemeral tray items |
caption, musicTitle, musicArtist | Text and music sticker metadata when present |
mentions, hashtags, links | Extracted tags, @-mentions, and sticker/caption URLs |
provider, scrapedAt | Capture route and freshness timestamp |
Fields stay null when Instagram exposes no stable public value for that item. The actor records only what it observes.
Input
Pass public usernames, profile URLs, or numeric user IDs. The actor deduplicates entries, strips @ prefixes, and applies maxResults across the entire run.
{"usernames": ["natgeo", "https://www.instagram.com/instagram/"],"includeStories": true,"includeHighlights": true,"expandHighlightItems": true,"maxHighlightsPerUser": 10,"maxResults": 200}
maxResults is a strict 1–2000 cap on saved rows; maxHighlightsPerUser bounds provider cost per profile (1–25, default 10). An optional sessionCookie (treated as a secret) supplies your own logged-in sessionid to make live tray reads reliable; it is never required for highlights.
Example output
{"id": "3551234567890123456","ownerUsername": "instagram","ownerId": "25025320","source": "highlight","highlightId": "18142207969557132","highlightTitle": "creatives","mediaType": "video","mediaUrl": "https://scontent-mia3-3.cdninstagram.com/v/t51...mp4","thumbnailUrl": "https://scontent-mia3-3.cdninstagram.com/v/t51...jpg","width": 1080,"height": 1920,"takenAt": "2026-01-16T17:17:56.000Z","expiresAt": null,"caption": "New drop! #design","musicTitle": "Golden Hour","musicArtist": "JVKE","mentions": ["natgeo"],"hashtags": ["design"],"links": ["https://example.com/go"],"position": 1,"provider": "scrapecreators","scrapedAt": "2026-08-17T12:00:00.000Z"}
Pricing
Pay per event: $0.0025 per validated story item plus a $0.0025 profile scan and a $0.00005 Actor start event. Platform usage is additional because Pay per event + usage is enabled in the live Pricing tab. A story item is billed only after its complete validated row is saved, and a profile scan is billed only after the profile has been scanned successfully. The run status message shows the maximum event-charge estimate before any request fires.
Reliability and sources
Highlight capture runs through managed public-data providers — ScrapeCreators primary, SociaVault fallback — using owner-managed API keys, with no Instagram login and no user cookies. Live 24-hour tray reads are attempted anonymously through residential proxy, with your optional session cookie improving reliability; when Instagram requires sign-in for the tray, the affected profile is noted in RUN_SUMMARY and you are never charged for that tray attempt.
If no route returns useful public data for any profile, the run ends as UPSTREAM_FAILED rather than reporting an empty success. Instagram changes response shapes frequently, so release evidence covers multi-profile highlight runs, sign-in-gated trays, invalid inputs, duplicate handling, and cost-cap behavior.
Workflow story
A typical monitoring week: schedule a daily run with your 10 competitor usernames, includeHighlights: true, expandHighlightItems: true, and maxResults: 500. Deduplicate on id downstream, keep the newest takenAt items, and diff captions, link stickers, and music across days to see which story content a brand promotes and for how long. Tray captures, when available, add the ephemeral layer with expiresAt.
Terminal outcomes
Every terminal path writes OUTPUT and RUN_SUMMARY in the default key-value store.
COMPLETE: all accepted profiles scanned cleanly.PARTIAL: useful rows saved, with sign-in-gated trays, skipped inputs, or cap warnings.VALID_EMPTY: scanned profiles returned no highlight or tray items.INVALID_INPUT: no valid username, or an out-of-range cap was supplied.UPSTREAM_FAILED: no useful output because every route was unavailable for every profile.CONFIG_ERROR: deployment configuration prevented the advertised work.
The first four outcomes finish successfully; the last two signal that no advertised work was useful, so downstream automations can tell an outage from a quiet profile.
API example
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("khadinakbar/instagram-stories-highlights-scraper").call({usernames: ["natgeo", "instagram"],includeHighlights: true,expandHighlightItems: true,maxResults: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Use with an AI agent through Apify MCP
Scan these public Instagram profiles and return every story highlight item with its media URL, timestamp, caption, music, mentions, hashtags, and links. Try the live 24-hour tray too, and report which profiles require sign-in rather than retrying them. Read the terminal outcome and the dataset before summarizing, cap the output at 100 items so the cost is clear, and summarize per profile how many highlight reels and items were found.
Best results and data quality
- Start with
maxHighlightsPerUser: 10and raise to 25 only for profiles with many reels; each expanded reel is a provider call. - For pure archival of permanent story content, set
includeStories: falseto skip tray attempts entirely and keep runs fast. - For live-tray monitoring, provide your own
sessionCookie; anonymous tray reads are opportunistic by design. - Deduplicate on
idwhen re-scanning the same profiles; Instagram media IDs are stable.
Builder's note
I built the highlight route first because it is the only story surface that stays analyzable after 24 hours. During the 2026-08 probe window, neither managed provider exposed a live-tray endpoint and anonymous tray requests required sign-in from every IP I tried, so this actor charges only for delivered items and honest scans rather than promising anonymous ephemeral access. The tray stays wired as an opportunistic route for residential proxies, and your own session cookie closes the gap when ephemeral capture is a hard requirement.
Related actors
- Extend brand research after story items reveal a campaign with the Instagram Posts Scraper for the permanent feed.
- Add reach context when story cross-posts appear as reels with the Instagram Reels Scraper.
- Enrich the owner behind the stories with the Instagram Profile Scraper + Emails & Contacts.
- Monitor engagement on cross-posted content with the Instagram Likes Scraper.
- Discover similar public profiles first with the Instagram Keyword Search Scraper, then feed the winners into this actor.
Responsible use
Use only publicly available story data in a manner consistent with Instagram's terms, privacy expectations, and applicable law. Use the actor for authorized research on public profiles rather than to access private accounts, close-friends content, or story viewer identities.