Instagram Highlights Scraper - Stories & Media
Pricing
from $3.00 / 1,000 highlight story items
Instagram Highlights Scraper - Stories & Media
Scrape Instagram story highlights from any public profile or highlight ID. Returns every story item with image/video URLs, timestamps, captions, video duration, and music, plus highlight titles and covers. No login or cookies. MCP-ready. $0.003 per story item.
Pricing
from $3.00 / 1,000 highlight story items
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
14 hours ago
Last modified
Categories
Share
Instagram Highlights Scraper
Scrape Instagram story highlights from any public profile or highlight ID. The actor returns every story item inside each highlight with image and video CDN URLs, timestamps, captions, video duration, and music metadata, plus the highlight title, cover, and owner context. It is provider-backed with ScrapeCreators first and SociaVault fallback, so it needs no Instagram login, cookies, browser, or proxy setup.
What It Extracts
By default (includeStories: true) one dataset row is one story item, with the highlight and owner metadata denormalized on every row — so spreadsheets, BI tools, and AI agents can filter and join without a second lookup.
| Field | Description |
|---|---|
recordType | story (default mode) or highlight (list-only mode) |
highlightId | Instagram highlight reel ID |
highlightTitle | Display title of the highlight tray |
highlightUrl | Canonical URL of the highlight |
position | 1-based position of the item inside the highlight |
mediaId | Instagram media ID of the story item |
shortcode | Public shortcode of the item |
storyUrl | Canonical Instagram story URL |
mediaType | video or image |
imageUrl / thumbnailUrl | Image CDN URLs (full and thumbnail) |
videoUrl | Progressive MP4 CDN URL for video items |
videoDuration | Video length in seconds |
hasAudio | Whether the video carries audio |
width / height | Original media dimensions in pixels |
caption | Caption text, when present |
likeCount / commentCount | Aggregated counts, when the provider exposes them |
isPaidPartnership | Paid-partnership marker |
musicArtist / musicTitle | Attached music sticker metadata, when present |
takenAt | ISO 8601 timestamp of the original post |
ownerId / ownerUsername / ownerVerified | Highlight owner identity |
coverImageUrl | Highlight cover (highlight rows) |
provider / scrapedAt / sourceUrl | Provenance fields |
When To Use
This actor works well for:
- Archiving a brand's or competitor's permanent highlight content before it changes
- Competitive analysis of how accounts organize story marketing into highlights
- Collecting highlight media URLs for content libraries and creative research
- Auditing paid-partnership disclosures inside story highlights
- Feeding AI agents one clean highlight-item dataset from usernames or highlight IDs
For the 24-hour active stories tray, profile metadata, posts, reels, comments, hashtags, and follower lists, route to the matching Instagram actors in this portfolio (see Related Actors) — each is a focused standalone workflow for its own entity.
Best Fit
Choose this actor when your starting point is a public profile handle (or a highlight link you already hold) and your deliverable is highlight content: tray titles, covers, and every story item with media URLs and timestamps. Start with includeStories: false to inventory trays cheaply, then feed the highlight IDs that matter into a second expanded run. Pair it with the Instagram Profile Scraper when you also need follower counts and bio context for the same accounts.
Input
{"usernames": ["instagram"],"includeStories": true,"maxHighlightsPerUser": 20,"maxStoriesPerHighlight": 100,"maxTotalItems": 5000,"providerOrder": "scrapecreators-first"}
You can also skip the profile listing entirely and pass direct highlight IDs or URLs:
{"highlightIds": ["https://www.instagram.com/stories/highlights/18142207969557132/"]}
Important Inputs
| Input | Default | Notes |
|---|---|---|
usernames | ["instagram"] | Handles, @handles, or profile URLs |
highlightIds | none | Highlight IDs or highlight URLs, with or without usernames |
includeStories | true | Expand every story item; false saves one cheap row per highlight |
maxHighlightsPerUser | 20 | Highlights processed per username (1–200) |
maxStoriesPerHighlight | 100 | Story items saved per highlight (1–1000) |
maxTotalItems | 5000 | Run-wide row cap and spend guard |
providerOrder | scrapecreators-first | Provider routing; fallback is automatic |
includeRawData | false | Attach raw provider payloads for debugging |
Output Example
Real row from the instagram account's "creatives" highlight:
{"recordType": "story","highlightId": "18142207969557132","highlightTitle": "creatives","highlightUrl": "https://www.instagram.com/stories/highlights/18142207969557132/","position": 1,"mediaId": "3811480328699137079","shortcode": "DTlGSo0gEw3","storyUrl": "https://www.instagram.com/stories/instagram/3811480328699137079/","mediaType": "video","imageUrl": "https://scontent-bos5-1.cdninstagram.com/v/t51.71878-15/616341681_1403647328019524_609409640201682429_n.jpg","videoUrl": "https://scontent-bos5-1.cdninstagram.com/o1/v/t2/f2/m78/AQOd_6Ko6XVGRcbkl_piTFNNSHU2UxFWfFIjpdnK15GwiAeoa4EGsWVl869bbZ1oRLu0AwmWSNL0jEU8pK-CN8N13ZChU-BfJgFSRi4.mp4","videoDuration": 24.333,"hasAudio": true,"width": 1080,"height": 1920,"takenAt": "2026-01-16T17:17:56.000Z","ownerId": "25025320","ownerUsername": "instagram","ownerVerified": true,"provider": "scrapecreators","scrapedAt": "2026-08-17T00:00:00.000Z","sourceUrl": "https://www.instagram.com/instagram/"}
Pricing
This actor uses Pay per event (PPE) pricing with platform usage passed through.
| Event | Price |
|---|---|
| Actor start | $0.00005 |
Highlight story item saved (includeStories: true) | $0.003 |
Highlight row saved (includeStories: false) | $0.002 |
Only one result event applies to any given row: expanded runs charge per story item and never additionally per highlight; list-only runs charge per highlight row. See the Pricing tab on this actor's page for the live price table. Platform usage (compute) is billed in addition to event charges, and the run's opening status message shows the approximate maximum event cost from your input caps before work starts.
Reliability
The actor routes every request through managed public-data providers:
- ScrapeCreators for the primary highlights and highlight-detail routes.
- SociaVault as automatic fallback when the primary errors, rate-limits, or returns nothing usable.
Every run writes OUTPUT and RUN_SUMMARY records with provider attempts, status codes, highlights expanded, rows saved, credits used, stop reason, and the estimated event cost, so partial results and empty profiles are distinguishable from provider outages.
Workflow Story
A typical workflow: a social team tracks five competitor accounts. They first run the actor with includeStories: false across all five handles to inventory highlight trays cheaply, then re-run with highlightIds pinned to the two trays that matter and maxStoriesPerHighlight raised, feeding the media URLs into their creative asset library. Each run ends with a RUN_SUMMARY they can diff week over week to see which highlights were renamed, re-covered, or removed.
API Example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('khadinakbar/instagram-highlights-scraper').call({usernames: ['instagram'],includeStories: true,maxHighlightsPerUser: 10,maxStoriesPerHighlight: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
MCP And AI Agents
This actor is exposed through Apify MCP as khadinakbar/instagram-highlights-scraper. Agent prompt card:
Scrape Instagram story highlights for one or more public profiles or highlight IDs. Use it when you need highlight titles, covers, or every story item with media URLs and timestamps; route to a sibling Instagram actor for the active 24-hour stories tray, posts, reels, comments, or profiles. Returns one row per story item (
recordType: "story") or per highlight in list-only mode, plus aRUN_SUMMARYwith provider telemetry and cost. Costs $0.003 per story item, $0.002 per highlight row, plus a $0.00005 start.
Best Results Guidance
- Provide exact handles without spaces; profile URLs also work as input.
- Start with
includeStories: falsewhen you only need to discover highlight trays, then pass selectedhighlightIdsto an expanded run. - Cap spend with
maxTotalItems; the status message shows the cost ceiling before rows are billed. - Treat a profile with zero highlights as a valid empty result: confirm with
RUN_SUMMARY.usersWithZeroHighlightsbefore retrying. - Schedule list-only passes weekly and expanded runs on demand to keep archival costs predictable.
Builder's Note
I built this actor because highlights are the most stable part of Instagram's story surface — they outlive the 24-hour tray — yet each provider returns them through a different envelope: one ships an array, the other an index-keyed object. I found the normalizer had to flatten both into the same row shape before the dataset stayed schema-stable across provider fallbacks. In my testing, public profiles with zero highlights returned a clean VALID_EMPTY outcome, which keeps batch jobs honest when a brand simply has no trays.
Limits
- Public profiles and public highlights only; no private accounts or login-gated data.
- Story items are returned exactly as Instagram exposes them; some fields (likes, music) are absent on some items.
- Very large highlight collections are bounded by
maxHighlightsPerUserandmaxStoriesPerHighlight. maxTotalItemscaps billed rows per run; use it as a spend guard for batches.- Media URLs are Instagram CDN links with expiry; download promptly if you need the files.
Related Actors
- Instagram Posts Scraper for profile posts and hashtag feeds.
- Instagram Profile Scraper for profile metadata.
- Instagram Reels Scraper for reels feeds.
- Instagram User Scraper when you need to resolve and verify profile identity first.
- Instagram Trending Reels Scraper for discovering trending reels before choosing which profiles to track.
Legal
Use this actor only for public Instagram content you are allowed to access and process. You are responsible for complying with Instagram's Terms of Service, privacy laws, data protection rules, and any platform or jurisdiction-specific requirements. This actor does not access private accounts or login-gated content.