Instagram Highlights Scraper [Only $2💰] | Stories | No Login
Pricing
from $1.90 / 1,000 results
Instagram Highlights Scraper [Only $2💰] | Stories | No Login
Extract public Instagram highlights and every story item inside them with no login: media URLs, captions, hashtags, mentions, music and covers. Export clean JSON at $2 per 1,000 story items.
Pricing
from $1.90 / 1,000 results
Rating
0.0
(0)
Developer
Ahmed Jasarevic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Instagram Highlights Scraper (No Login)
Extract public Instagram highlights and every story item inside them without login: highlight titles and covers, image and video media URLs, thumbnails, dimensions, duration, captions, hashtags, @mentions, links, music metadata and timestamps. It runs on a guest web session (no cookies, no account) at $2.00 per 1,000 story items, with an optional archive that can serve expired highlights later.
Main Use Cases
- Instagram highlights monitoring - track the highlight reels of any public profile over time.
- Competitor content research - collect what competitors save into highlights and how often they rotate it.
- Influencer research - build a dataset of a creator's highlight media, captions and covers.
- Brand monitoring - watch highlight items that mention a brand, hashtag or account.
- Instagram story archiving - persist captured items to a reusable archive and serve them when they expire.
- Creative and content research - download image and video media URLs for editing or analysis.
How It Works - Build An Instagram Highlights Dataset Without Login
Instagram renders public profile and highlight pages on the server (SSR) for guests, and exposes the highlight tray as JSON inside the page. The Actor:
- Boots a guest web session against
instagram.com(using the public webAPP_IDand the storefront-stylex-ig-app-id/ browser headers) to obtain a guestcsrftoken. - Lists a profile's highlights from the SSR HTML of
/{username}/, reading thelox_highlights_connectionpayload, or useshighlightIdsdirectly when you pass them. - Expands each highlight into its story items with the guest feed endpoint
/api/v1/feed/reels_media/?reel_ids=highlight%3A{highlightId}, with a stories-HTML harvest fallback when the feed is not returned. - Optionally writes captured items to a reusable key-value archive (store
ighighlights-archive, keyhl-<highlightId>), and can merge archived items back in whenincludeHistoricalis on (each merged row is taggedarchived: true).
Instagram blocks anonymous datacenter requests, so proxyConfiguration defaults to Apify Unblocker (residential). If direct guest mode cannot be reached, the Actor falls back to the guest cookie session; no login or account password is ever used.
Input Parameters
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
usernames | array (string) | No | ["instagram"] prefill | Public profiles whose highlights should be scraped. Accepts handles, @handles or full profile URLs. Leave empty if you only pass highlightIds. |
highlightIds | array (string) | No | - | Direct highlight IDs or highlight URLs whose story items should be scraped without listing a profile first. |
expandHighlightItems | boolean | No | true | Every highlight is expanded into individual story items (one row per story). When false, only one summary row per highlight is saved. |
maxHighlightsPerUser | integer | No | 10 (1-25) | Maximum number of highlights to process per username. |
maxStoriesPerHighlight | integer | No | 200 (1-2000) | Upper bound on story items saved per expanded highlight. |
maxTotalItems | integer | No | 200 (1-2000) | Maximum total number of story-item rows saved across the entire run. |
includeRawData | boolean | No | false | When true each row also carries the unmodified item under a raw key. |
archiveEnabled | boolean | No | true | Persist captured story items to a reusable key-value store for later reuse. |
includeHistorical | boolean | No | false | Merge previously captured items that are no longer present live (tagged archived: true). |
proxyConfiguration | object | No | Apify Unblocker | Only used in direct mode (no provider key). Defaults to Apify Unblocker, which is required because Instagram blocks anonymous requests. |
Note: default values shown here follow the Actor's input schema, which is authoritative over any code defaults.
Output Fields
One row per story item (when expandHighlightItems is true; otherwise one summary row per highlight). Fields:
- Highlight context:
highlightId,highlightTitle,highlightCoverUrl,position,storyIndex. - Story identity:
storyId,storyCode,permalink,source(highlightorarchive),provider. - Owner:
username,ownerId,ownerUsername. - Media:
mediaType(imageorvideo),storyType(imageorvideo),mediaUrl(best available),imageUrl,videoUrl,thumbnailUrl,width,height,duration,hasAudio. - Content:
caption,hashtags(array),mentions(array),links(array),musicTitle,musicArtist. - Timing:
takenAt,expiringAt,expiresAt,scrapedAt. - Archive:
archived(boolean),archivedFrom(the live source a merged row came from).
The overview view shows username, highlightTitle, storyType, mediaUrl, takenAt and caption.
Example Input And Output
Example input (a few public profiles, most recent 10 highlights each):
{"usernames": ["instagram", "natgeo"],"expandHighlightItems": true,"maxHighlightsPerUser": 10,"maxStoriesPerHighlight": 200,"maxTotalItems": 200}
Example input (direct highlight IDs, with archived items merged in):
{"highlightIds": ["17900000000000000"],"expandHighlightItems": true,"archiveEnabled": true,"includeHistorical": true}
Example output row:
{"storyId": "3345678901234567890_25025320","storyCode": "C8xYzAbC123","username": "natgeo","ownerId": "25025320","ownerUsername": "natgeo","highlightId": "17900000000000000","highlightTitle": "Wildlife","highlightCoverUrl": "https://scontent.cdninstagram.com/v/t51.2885-15/cover.jpg","position": 3,"storyIndex": 1,"mediaType": "video","storyType": "video","mediaUrl": "https://scontent.cdninstagram.com/v/t50.2886-16/story.mp4","videoUrl": "https://scontent.cdninstagram.com/v/t50.2886-16/story.mp4","thumbnailUrl": "https://scontent.cdninstagram.com/v/t51.2885-15/thumb.jpg","width": 1080,"height": 1920,"duration": 12.4,"hasAudio": true,"caption": "A young elephant crossing the river #wildlife","hashtags": ["wildlife"],"mentions": ["natgeowild"],"links": [],"musicTitle": "Original audio","musicArtist": "natgeo","takenAt": "2024-06-01T18:30:00.000Z","expiringAt": null,"expiresAt": null,"permalink": "https://www.instagram.com/stories/highlights/17900000000000000/","source": "highlight","provider": "guest","archived": false,"archivedFrom": null,"scrapedAt": "2026-10-11T09:30:00.000Z"}
Integrations & Automation
- Apify API - run via
POST https://api.apify.com/v2/acts/{actorId}/runs, export viaGET /v2/datasets/{datasetId}/items?clean=true&format=json. - Schedules - run daily or weekly to keep a highlight archive current; combined with
includeHistoricalthis gives you items Instagram has already dropped from the live tray (recurring usage also improves Store recommendation signals). - Webhooks - fire on run finished to push new highlight items into your own storage.
- Zapier / Make - via the Apify integration, e.g. new highlight media into Google Drive or Airtable.
- Pay-per-event - $2.00 per 1,000 story items (
result), plus a $0.00005 run start.
Related Actors
- instagram-highlights-scraper: the most-used Instagram highlights actor on the Store.
- instagram-stories-highlights-scraper: a popular stories plus highlights actor with optional media download.
- instagram-story-details-scraper: a large no-login Instagram stories actor.
- advanced-instagram-stories-scraper: a fast public stories scraper with media URLs.
- instagram-stories-highlights-scraper: stories and highlight reels with inner items from any public profile.
FAQ
Does Instagram offer an API for highlights?
Instagram's public Graph API does not expose other accounts' highlights, and the legacy endpoints require an authenticated app. This Actor instead reads the guest-rendered SSR HTML and the public reels_media feed, with no login, no app review and no cookie.
Can I scrape Instagram highlights without login or cookies?
Yes. The Actor boots a guest session against instagram.com to obtain a temporary guest token and reads only public pages. No account, password or user cookie is used. A residential proxy (Apify Unblocker, the default) is required because Instagram blocks anonymous datacenter requests.
What are the alternatives to this Instagram highlights scraper?
Store alternatives include seemuapps/instagram-highlights-scraper ($0.015 per result), goat255/instagram-stories-highlights-scraper ($0.0033 per story), memo23/instagram-stories-highlights-scraper (account plus highlight tray events), datavoyantlab/advanced-instagram-stories-scraper (stories only) and data-slayer/instagram-highlights-scraper ($0.00217 per result). This actor returns one row per highlight story item at $2.00 per 1,000 results and can archive items for later.
How do I download all stories inside a highlight?
Leave expandHighlightItems at its default true. Each highlight is expanded into one row per story item, each with its mediaUrl, imageUrl or videoUrl. Set maxStoriesPerHighlight and maxTotalItems to bound the run.
Can I monitor a competitor's highlights over time?
Yes. Schedule a run with archiveEnabled: true. Captured items are written to a reusable archive; later, includeHistorical: true merges archived items that are no longer live, tagged archived: true.
Do I get both image and video media URLs?
Yes. Video stories carry videoUrl, image stories carry imageUrl, and every row also has mediaUrl (the best available) plus thumbnailUrl, width, height, duration and hasAudio.
How much does it cost?
$2.00 per 1,000 story items (result), plus a $0.00005 run start. Proxy traffic is billed separately by Apify when using Unblocker or residential proxies.
SEO Keywords
instagram highlights scraper, instagram highlights api, instagram highlights without login, instagram highlights no cookies, instagram story highlights download, instagram highlights monitoring, instagram media urls, instagram highlights json, instagram highlights scraper api, instagram story archive, instagram highlight covers, instagram stories and highlights, competitor content research, influencer research, brand monitoring, instagram reel music metadata, instagram highlight media download, instagram highlights csv, instagram story viewer, instagram highlights data
For AI Agents & LLM Apps
- Purpose: returns one JSON row per Instagram highlight story item (highlight context, media URLs, caption, hashtags, mentions, links, music, timestamps) for any public profile, without login.
- Minimal working input:
{ "usernames": ["instagram"], "maxTotalItems": 10 }
- Variant input (direct highlight IDs with the archive merged in):
{ "highlightIds": ["17900000000000000"], "includeHistorical": true }
- Output field names:
storyId, storyCode, username, ownerId, ownerUsername, highlightId, highlightTitle, highlightCoverUrl, position, storyIndex, mediaType, storyType, mediaUrl, thumbnailUrl, imageUrl, videoUrl, width, height, duration, hasAudio, caption, hashtags, mentions, links, musicTitle, musicArtist, takenAt, expiringAt, expiresAt, permalink, source, provider, archived, archivedFrom, scrapedAt. - Behaviors an agent should know:
- Input priority: pass
usernamesto list highlights, orhighlightIdsto go straight to items; you can combine them.usernamesaccepts handles, @handles or full profile URLs. expandHighlightItems: falsereturns a single summary row per highlight instead of one row per story, which is much cheaper.maxTotalItems(default 200) is a global cap across the whole run;maxHighlightsPerUser(default 10) andmaxStoriesPerHighlight(default 200) bound per-user work. The input schema defaults are authoritative over any code defaults.includeHistorical: trueonly has archived data to merge if a previous run wrote to the archive witharchiveEnabled: true; merged rows carryarchived: trueand anarchivedFromvalue.proxyConfigurationis used only in direct guest mode and defaults to Apify Unblocker; without a residential proxy Instagram blocks the request.includeRawData: trueadds the raw upstream item under arawkey and makes rows larger.
- Input priority: pass
- Billing: pay-per-event - $0.002 per story-item row (
result), $0.00005 per run start. Tiered pricing may be lower on higher Apify plans. Proxy traffic is billed separately.
Legal & Compliance Disclaimer
This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. or Instagram. It accesses only publicly available profile and highlight pages through a guest session; it does not log in, does not use an account password and does not use a user's cookies.
Users are responsible for complying with Instagram's terms of service and applicable data-protection law (for example GDPR or CCPA). Highlight items can include personal content such as usernames, captions, @mentions and links; do not use extracted personal data for unsolicited commercial outreach in violation of applicable law, and respect copyright in any downloaded media. Use the data for lawful purposes such as research, brand monitoring and content analysis.