Instagram Highlights Scraper With Profile Analytics avatar

Instagram Highlights Scraper With Profile Analytics

Pricing

Pay per usage

Go to Apify Store
Instagram Highlights Scraper With Profile Analytics

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

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

13

Total users

2

Monthly active users

5 days ago

Last modified

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?

FieldExample ValueUse 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_mediaInstagram CDN thumbnail URLThe tray-size cover as Instagram serves it
cover_media_full_resInstagram CDN full-size URLThe 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_urlApify Key-Value Store URLA permanent copy that survives CDN expiry
success / errortrue / nullConfirm whether this highlight resolved cleanly
profile_highlight_count / profile_titles12 / ["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_rate100.0Percentage of this profile's highlights that resolved successfully
leaderboard_rank1This 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

ParameterRequiredTypeDescriptionExample Value
targetProfilesNoarrayProfile URLs, usernames, or highlight shortcodes["https://www.instagram.com/nike/"]
maxHighlightsPerProfileNointeger (min 0)Cap on highlights fetched per profile across all pages; 0 = unlimited0 (default)
archiveCoverImagesNobooleanArchive full-resolution covers to the Key-Value Storetrue (default)
proxySettingsNoobjectProxy usage; auto-escalates on 429/403 blocks{"useApifyProxy": true}
enableProfileSummaryNobooleanPush a free per-profile analytics summary rowtrue (default)
enableLeaderboardNobooleanPush a free cross-profile leaderboardtrue (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 NameWhat it extracts
Instagram Profile Scraper & Account Privacy CheckerFull profile details plus privacy-status checking
Instagram Reels Scraper With Engagement AnalyticsReel-specific engagement analytics
Instagram Followers Count ScraperFollower/following/post counts and bio data
Instagram Related Person Scraper With Profile EnrichmentRelated/lookalike networks for a given account
Facebook Photos Scraper & High-Res Photo ExportComparable full-resolution image extraction for Facebook
Pinterest Search + Pin Engagement ScraperComparable 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 ApifyClient
client = 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.

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.

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.