Instagram Highlights Scraper - Stories & Media avatar

Instagram Highlights Scraper - Stories & Media

Pricing

from $3.00 / 1,000 highlight story items

Go to Apify Store
Instagram Highlights Scraper - Stories & Media

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

14 hours ago

Last modified

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.

FieldDescription
recordTypestory (default mode) or highlight (list-only mode)
highlightIdInstagram highlight reel ID
highlightTitleDisplay title of the highlight tray
highlightUrlCanonical URL of the highlight
position1-based position of the item inside the highlight
mediaIdInstagram media ID of the story item
shortcodePublic shortcode of the item
storyUrlCanonical Instagram story URL
mediaTypevideo or image
imageUrl / thumbnailUrlImage CDN URLs (full and thumbnail)
videoUrlProgressive MP4 CDN URL for video items
videoDurationVideo length in seconds
hasAudioWhether the video carries audio
width / heightOriginal media dimensions in pixels
captionCaption text, when present
likeCount / commentCountAggregated counts, when the provider exposes them
isPaidPartnershipPaid-partnership marker
musicArtist / musicTitleAttached music sticker metadata, when present
takenAtISO 8601 timestamp of the original post
ownerId / ownerUsername / ownerVerifiedHighlight owner identity
coverImageUrlHighlight cover (highlight rows)
provider / scrapedAt / sourceUrlProvenance 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

InputDefaultNotes
usernames["instagram"]Handles, @handles, or profile URLs
highlightIdsnoneHighlight IDs or highlight URLs, with or without usernames
includeStoriestrueExpand every story item; false saves one cheap row per highlight
maxHighlightsPerUser20Highlights processed per username (1–200)
maxStoriesPerHighlight100Story items saved per highlight (1–1000)
maxTotalItems5000Run-wide row cap and spend guard
providerOrderscrapecreators-firstProvider routing; fallback is automatic
includeRawDatafalseAttach 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.

EventPrice
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:

  1. ScrapeCreators for the primary highlights and highlight-detail routes.
  2. 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 a RUN_SUMMARY with 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: false when you only need to discover highlight trays, then pass selected highlightIds to 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.usersWithZeroHighlights before 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 maxHighlightsPerUser and maxStoriesPerHighlight.
  • maxTotalItems caps 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.

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.