Instagram Highlights Scraper
Pricing
from $4.00 / 1,000 results
Instagram Highlights Scraper
List the story highlights on any public Instagram profile — title, cover image and highlight link — with no login, cookies or API key. Reads the logged-out profile page.
Pricing
from $4.00 / 1,000 results
Rating
0.0
(0)
Developer
Farhan Febrian Nauval
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
21 days ago
Last modified
Categories
Share
List the story highlights on any public Instagram profile — title, cover image and a direct link — with no login, no cookies and no API key.
Give it usernames or profile URLs; you get one row per highlight, with the account's follower count and verification status attached to each.
What you get
| Field | Meaning |
|---|---|
title | The highlight's name, as the account set it |
highlightId | Instagram's stable id for the highlight |
highlightUrl | Link to open the highlight in a browser |
coverImageUrl | Cover thumbnail; empty when the account never set one |
rank | Position in the tray, left to right |
trayTruncated | Whether this account has more highlights than are public |
ownerUsername, ownerId, ownerFullName | Account identity |
ownerFollowerCount, ownerIsVerified, ownerIsPrivate | Account context |
Input
{ "usernames": ["nasa", "https://www.instagram.com/zara/", "@victoriassecret"] }
Handles, @handles and full profile URLs are all accepted.
Things worth knowing
Ten highlights is the public ceiling. The logged-out profile page renders at
most ten, regardless of how many the account actually has. Accounts under the limit
return everything they have; accounts over it return exactly ten. Every row carries
trayTruncated so you can tell which case you got — true means the rest exist but
sit behind a login. Reaching them would need an authenticated session, which this
actor does not use.
This actor reads the tray, not the stories inside it. Instagram serves highlight
contents only to signed-in viewers; a logged-out request for the media returns an
empty success rather than a refusal. What you get here is each highlight's identity
and cover — enough to track how an account organises and renames its highlights over
time, and to see when new ones appear. highlightUrl is a link for a person to open,
not a second endpoint to scrape.
A missing account still returns HTTP 200. Instagram serves a full-size page for a
username that does not exist, so the status code cannot tell you the account is gone.
This actor treats the absence of the profile payload as the signal and reports
profile_not_found, including the page size it saw.
Private accounts have no public tray. They are reported as no_highlights with
ownerIsPrivate set, so a private account is distinguishable from a public one that
simply has no highlights.
Use a residential proxy. Instagram is selective about client IPs. The input defaults to Apify's residential group; datacenter addresses are refused far more often.
Failure reporting
Every input produces at least one row. Failures carry _error and _errorDetail:
_error | Meaning |
|---|---|
no_highlights | The account is public but has no highlights, or is private |
profile_not_found | No profile payload in the page — account missing or removed |
login_walled | The page came back as a login prompt; try a residential proxy |
invalid_username | The input is not a usable Instagram handle |
network_error | The request never reached Instagram |
blocked | A response arrived but was unusable |
If every profile fails, the run aborts rather than finishing with an empty dataset.