Instagram Highlights Scraper With Profile Analytics
Pricing
Pay per usage
Instagram Highlights Scraper With Profile Analytics
Instagram Highlights Scraper collects data from Instagram Highlights, capturing highlight titles, story URLs, timestamps, media types, and metadata. Ideal for analytics, content archiving, monitoring brand activity, or automating Instagram research with clean, structured output
Pricing
Pay per usage
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
13
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
Instagram Highlights Scraper — Covers, Titles and Profile Leaderboard
Instagram Highlights Scraper With Profile Analytics extracts every Story Highlight from one or more Instagram profiles — title, ID, and a genuinely full-resolution cover image — then rolls each profile's highlights into a free analytics summary and ranks every processed profile on a cross-profile leaderboard by highlight volume. It's built for brand and creator research, agency audits comparing multiple accounts, and anyone who needs a permanent archive of highlight covers before Instagram's CDN links expire.
What is Instagram Highlights Scraper With Profile Analytics?
Instagram Highlights Scraper With Profile Analytics is an Apify Actor that scrapes the Story Highlights tray for one or more public Instagram profiles, with automatic proxy fallback on blocks. No Instagram login is required. Key capabilities:
- Scrape highlights for one or many profiles per run, by URL, username, or highlight shortcode
- Fully cursor-paginated tray fetching, so large accounts don't lose highlights past the first page
- Resolve each highlight's genuinely full-resolution cover image and archive a permanent copy to the run's Key-Value Store, so it survives after Instagram's CDN link expires
- Get a free, uncharged per-profile analytics summary — total highlight count, full title list, first/last highlight ID, and success rate
- Get a free, uncharged cross-profile leaderboard ranking every processed profile by highlight count
- Automatic proxy escalation (direct → datacenter → residential) on repeated blocks
What data can I extract with Instagram Highlights Scraper With Profile Analytics?
| Field | Example Value | Use Case |
|---|---|---|
username / user_id | "nike" / "13460080" | Identify the profile the highlight belongs to |
id / title | "17912345678" / "New Drops" | Identify and label the individual highlight |
cover_media | Instagram CDN thumbnail URL | The tray-size cover as Instagram serves it |
cover_media_full_res | Instagram CDN full-size URL | The genuinely highest-resolution cover found |
cover_media_expires_at | "2026-07-27T02:00:00Z" | Know when the CDN link itself will stop working |
cover_media_archive_url | Apify Key-Value Store URL | A permanent copy that survives CDN expiry |
success / error | true / null | Confirm whether this highlight resolved cleanly |
profile_highlight_count / profile_titles | 12 / ["New Drops", "Team", "Events", ...] | Per-profile roll-up (summary rows only) |
profile_first_highlight_id / profile_last_highlight_id | "17900001" / "17912345678" | Bookend IDs for this profile's highlight set |
profile_success_rate | 100.0 | Percentage of this profile's highlights that resolved successfully |
leaderboard_rank | 1 | This profile's rank by highlight count across the whole run |
timestamp | "2026-07-26T14:02:11Z" | Record when the row was collected |
Genuinely full-resolution cover archiving
cover_media_full_res is not a bigger thumbnail guess — the Actor calls Instagram's reels_media endpoint, matches the returned images back to the tray's thumbnail by CDN asset ID, and picks the true highest-resolution candidate by max(width × height). When archiveCoverImages is on (default), that full-resolution image is downloaded and saved permanently to the run's Key-Value Store as cover_media_archive_url, since Instagram's own CDN links carry an expiring oe= timestamp and will eventually stop resolving.
Free per-profile summary and cross-profile leaderboard
When enableProfileSummary is on (default), one extra row per profile (isSummary: true) rolls up profile_highlight_count, the full profile_titles list, the first/last highlight IDs, and profile_success_rate — all computed from the highlight rows already collected for that profile, at no extra request cost. When enableLeaderboard is on (default), one row per profile (isLeaderboard: true) ranks every processed profile by highlight count, highest first, for quick batch comparison. Both row types are pushed uncharged — only individual highlight rows are billed. Filter on !isSummary && !isLeaderboard if you want only the charged rows.
Why not build this yourself?
Instagram's Graph API only exposes a Business/Creator account's own Story Highlights to that account's own access token — there is no endpoint for pulling another profile's highlight tray. Building an equivalent tool yourself means reproducing Instagram's cursor-paginated highlight-tray fetching, resolving genuinely full-resolution covers by matching CDN asset IDs across two different endpoints, and archiving them before the CDN link expires. All of that is already implemented in this Actor's source.
How to use data extracted from Instagram?
Brand and creator research
Scrape a creator or brand's targetProfiles to build a visual archive of their highlight covers and titles before an outreach conversation, using profile_titles to quickly understand how they organize their Story content categories (e.g. "FAQ," "Reviews," "New Drops").
Agencies auditing multiple accounts
Run a full client or competitor list through targetProfiles in one batch and use leaderboard_rank/profile_highlight_count to see at a glance which accounts invest most heavily in curated Highlight content.
Market and content research
Compare profile_titles across a category's leading accounts to identify common Highlight organization patterns (e.g. most fashion brands running a "Size Guide" highlight) worth adopting.
AI agents and automated pipelines
An agent can call this Actor to pre-fetch a profile's highlight structure before generating a content-strategy recommendation, using profile_highlight_count and profile_titles as structured input.
🔼 Input sample
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
targetProfiles | No | array | Profile URLs, usernames, or highlight shortcodes | ["https://www.instagram.com/nike/"] |
maxHighlightsPerProfile | No | integer (min 0) | Cap on highlights fetched per profile across all pages; 0 = unlimited | 0 (default) |
archiveCoverImages | No | boolean | Archive full-resolution covers to the Key-Value Store | true (default) |
proxySettings | No | object | Proxy usage; auto-escalates on 429/403 blocks | {"useApifyProxy": true} |
enableProfileSummary | No | boolean | Push a free per-profile analytics summary row | true (default) |
enableLeaderboard | No | boolean | Push a free cross-profile leaderboard | true (default) |
{"targetProfiles": ["https://www.instagram.com/nike/", "https://www.instagram.com/adidas/"],"maxHighlightsPerProfile": 0,"archiveCoverImages": true}
Common pitfall: maxHighlightsPerProfile: 0 means unlimited, but pagination has an internal safety cap on the number of GraphQL pages fetched per profile regardless of the limit set — extremely large highlight trays may stop short of "every" highlight on very high-volume accounts.
🔽 Output sample
Output is typed, normalized JSON with three row types: individual highlight rows (charged), plus free per-profile summary and leaderboard rows (exportable as JSON, CSV, or Excel).
{"input_url": "https://www.instagram.com/nike/","username": "nike","user_id": "13460080","type": "highlight","id": "17912345678","title": "New Drops","cover_media": "https://scontent.cdninstagram.com/...thumbnail","cover_media_full_res": "https://scontent.cdninstagram.com/...fullres","cover_media_expires_at": "2026-07-27T02:00:00Z","cover_media_archive_url": "https://api.apify.com/v2/key-value-stores/.../records/cover_17912345678","success": true,"error": null,"timestamp": "2026-07-26T14:02:11Z"}
Profile summary rows (isSummary: true) additionally carry profile_highlight_count, profile_titles, profile_first_highlight_id, profile_last_highlight_id, and profile_success_rate. Leaderboard rows (isLeaderboard: true) carry leaderboard_rank. All 21 fields shown across these row types are the Actor's real dataset columns.
How do you filter and target specific highlights?
targetProfiles accepts URLs, usernames, or highlight shortcodes, so scope is set by exactly which profiles you list — this is a direct-lookup tool rather than a discovery search. The one real volume control is maxHighlightsPerProfile (0 = unlimited, subject to the internal page-safety cap); the analytics toggles enableProfileSummary and enableLeaderboard don't filter content but do control which free roll-up rows accompany the individual highlight rows in your dataset.
{ "targetProfiles": ["nike", "adidas", "puma"], "enableLeaderboard": true, "enableProfileSummary": true }
{ "targetProfiles": ["https://www.instagram.com/mrbeast/"], "maxHighlightsPerProfile": 20, "archiveCoverImages": true }
{ "targetProfiles": ["nike"], "enableProfileSummary": false, "enableLeaderboard": false }
▶️ Want to try other Instagram scrapers?
| Scraper Name | What it extracts |
|---|---|
| Instagram Profile Scraper & Account Privacy Checker | Full profile details plus privacy-status checking |
| Instagram Reels Scraper With Engagement Analytics | Reel-specific engagement analytics |
| Instagram Followers Count Scraper | Follower/following/post counts and bio data |
| Instagram Related Person Scraper With Profile Enrichment | Related/lookalike networks for a given account |
| Facebook Photos Scraper & High-Res Photo Export | Comparable full-resolution image extraction for Facebook |
| Pinterest Search + Pin Engagement Scraper | Comparable visual-content and engagement data for Pinterest |
How to extract Instagram data programmatically
Every run is a standard Apify Actor call — one API request with your token, JSON input, JSON results back.
Python example
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run_input = {"targetProfiles": ["https://www.instagram.com/nike/"],"archiveCoverImages": True,}run = client.actor("<YOUR_USERNAME>/instagram-highlights-scraper-with-profile-analytics").call(run_input=run_input)for row in client.dataset(run["defaultDatasetId"]).iterate_items():if not row.get("isSummary") and not row.get("isLeaderboard"):print(row["title"], row["cover_media_full_res"])
Export to spreadsheets or CRM
Export the dataset directly as CSV or Excel, then map username/title to your content-library columns and cover_media_archive_url to a permanent asset-reference field.
Is it legal to scrape Instagram highlights?
Highlight titles and cover images are attached to public profiles and don't carry individual commenter or follower identities, so this is closer to public brand/creator content than personal data in most business contexts — but a creator's own personal Highlights (e.g. featuring family or private life) may still carry personal-data considerations under GDPR/CCPA depending on content. Public Instagram highlight trays are visible to any logged-out visitor. Consult legal counsel for commercial applications involving bulk storage of creator content.
❓ FAQ
How is the highlight cover actually "full resolution"?
The Actor calls Instagram's reels_media endpoint separately from the tray fetch, matches the returned images to the tray thumbnail by CDN asset ID, and selects the genuine highest-resolution candidate by computed pixel area — it's not a guessed larger URL pattern.
Does the profile summary or leaderboard row cost extra?
No — both are pushed uncharged. Only individual highlight rows are billed under the row_result event. Filter on !isSummary && !isLeaderboard to isolate only the charged rows.
How many highlights can I get per profile?
maxHighlightsPerProfile (default 0 = unlimited) caps this, though an internal safety cap on GraphQL pages fetched per profile applies regardless, to protect against runaway pagination on unusually large accounts.
Do I need an Instagram account to use this?
No — the highlight tray is fetched from Instagram's public profile surface with no login required.
Will the archived cover image still work after Instagram's link expires?
Yes — that's the purpose of cover_media_archive_url: it's a permanent copy in the run's own Key-Value Store, independent of Instagram's expiring CDN oe= timestamp on cover_media/cover_media_full_res.
Does Instagram Highlights Scraper With Profile Analytics work with Claude, ChatGPT, and AI agent frameworks?
It has no dedicated MCP server registration in this Actor's current setup, but it is callable as a standard Apify API endpoint by any agent framework that can make an authenticated HTTP request and parse JSON.
How does this compare to other Instagram highlights scrapers?
No independently verifiable competitor listing could be confirmed at the time of writing, so no specific comparison is made here. This Actor's distinguishing feature is genuine full-resolution cover resolution plus free per-profile and cross-profile analytics rows.
What does profile_success_rate actually measure?
The percentage of that profile's highlights that resolved successfully (success: true) out of the total attempted — a data-quality signal for that specific profile's run, not a claim about the Actor's overall reliability.
Conclusion
Instagram Highlights Scraper With Profile Analytics turns a profile list into a full highlight archive — genuinely full-resolution covers, permanent Key-Value Store archiving, and free per-profile and cross-profile analytics computed at no extra request cost. It's built for brand researchers, agencies, and content strategists who need more than a raw highlight dump. Start a run with your target profiles to get highlights, summaries, and a leaderboard back in one pass.