Instagram profiles, posts, reels, comments, stories, highlights, followers, hashtags, locations, and audio through one API key
Public Instagram data without a Meta app review: profiles and their whole feed, reels with view and share counts, comment threads, story trays and saved highlights, the follower and following graph, hashtag and location feeds, and the audio library. Most reads are 1 credit; the ones that need a heavier upstream are 5. Which is which is the main thing to learn on this platform.
Base URL: /v1/instagram/...
/v1/instagram/post does not carry a share count, and no cheap endpoint does. Share counts, follower lists, stories and comments all come from a 5-credit upstream — /v1/instagram/post/stats for one post, /v1/instagram/profile/posts/full or /v1/instagram/profile/reels/full for a whole feed. View counts are different: they stay on the 1-credit reads, with post, profile/posts and profile/reels all carrying them on video. Plan the call before you build the loop.Getting started
Every endpoint is a GET with query parameters and an x-api-key header. Handles never carry a
leading @.
# 1. The account
curl "https://www.socialcrawl.dev/v1/instagram/profile?handle=instagram" \
-H "x-api-key: $SOCIALCRAWL_API_KEY"
# 2. What it posted, cursor-paged on next_max_id
curl "https://www.socialcrawl.dev/v1/instagram/profile/posts?handle=instagram" \
-H "x-api-key: $SOCIALCRAWL_API_KEY"
# 3. One post in detail
curl "https://www.socialcrawl.dev/v1/instagram/post?url=https://www.instagram.com/p/CnpPou9hWqq/" \
-H "x-api-key: $SOCIALCRAWL_API_KEY"GET /v1/instagram/profile/full?handle=instagram collapses steps 1 and 2 into one flat 5-credit
call and adds computed analytics on top — average engagement rate, posting cadence, top post,
and the mix of formats. Set posts (1-100, default 25) to choose the window the averages cover,
or include=computed to drop the raw posts array from the payload. If the posts leg fails the
profile still comes back, with the post-dependent metrics null.
Accounts
profile is the snapshot: bio, the exact integer follower count on author.followers, following count, post count, avatar, verification.
/v1/instagram/basic-profile is its minimal sibling for when all you hold is a numeric userId
and you only need a name and picture. /v1/instagram/engagement does the arithmetic for you —
an overall engagement rate, totals, and a per-post breakdown including likes and comments per
hour.
Three endpoints walk the graph, all 5 credits and all accepting either handle or user_id:
/v1/instagram/followers and /v1/instagram/following for the two directions, and
/v1/instagram/similar for the accounts Instagram itself suggests as comparable, which is a
single fixed list with no pagination.
/v1/instagram/search is Instagram's own mixed search box: accounts, hashtags, and places in
one payload. Reach for search/profiles, search/hashtag, or search/location when you want
one type already split. /v1/instagram/search/popular is the popular-posts feed for a keyword,
distinct from search/reels. /v1/instagram/search/profiles finds accounts by bio or caption
keyword. It reads Google's index of Instagram rather than Instagram's own account search, so
treat it as discovery rather than a lookup. /v1/instagram/username-suggestions is unrelated
despite the name: it invents available handle ideas from a keyword and does not look anything
up. /v1/instagram/user/embed returns an embeddable HTML snippet for dropping a profile onto
your own page.
Posts, reels and share counts
/v1/instagram/profile/posts and /v1/instagram/profile/reels are the cheap feed pulls (1
credit each), and they return likes, comments and, on reels, views. Neither carries a share
count, because the upstream that serves them does not expose one.
When shares matter, /v1/instagram/profile/posts/full and /v1/instagram/profile/reels/full
fan out to a second source and attach a per-item share count plus a coverage figure telling
you what fraction of the items got one. Both are metered: they consume upstream pages of 12
items and bill 5 credits per page, from 5 up to 25 for a limit=50 walk. Both need a handle
for the share leg — a user_id-only call still returns views, likes and comments, with shares
null and a partial refund.
For a single post, /v1/instagram/post returns the caption, media, tagged users and the
engagement numbers, including the play count on video. Instagram removed play counts from its
public web pages in August 2026, so the API now fills the count from a second source inside the
same call; you still make one request and pay one credit. /v1/instagram/post/stats adds the
paper-plane share count on video. Photo posts return views and shares as null, which is
Instagram's behaviour rather than a gap. /v1/instagram/post/likers returns who liked it, and
/v1/instagram/media/transcript returns the spoken words in a video or reel.
Comments
/v1/instagram/post/comments returns a post's comment section, ranked by Instagram's popularity
order by default. Pass sort=recent whenever you intend to walk a whole thread: Instagram only
ranks the most-liked head of the list, so a top walk starts repeating comments once you page
past it. Page deeper with the next_cursor from each response. To open one comment's replies,
use /v1/instagram/post/comment/replies with the same post url and that comment's comment_id.
It is the thread, not a second copy of the section.
GET /v1/instagram/comment resolves one specific comment you already know about, by permalink
(comment_url) or by post_url plus comment_id. It can also search a post for comments by
author_username or text_contains, returning up to max matches. It is a bounded server-side
scan rather than a direct fetch, because Instagram exposes no fetch-one-comment read: it costs 5
credits, or 15 with deep_scan for comments buried deep in a large thread. Passing back the
lookup.position_hint from an earlier call replays the last-known sort chain first, which makes
re-checking a comment you have already found much cheaper.
Stories and highlights
/v1/instagram/stories returns the tray a user has live right now — an account with nothing
live returns an empty list rather than an error. /v1/instagram/story/download pulls one
specific story's full-resolution media, taking the author's user_id together with the
story_id. Highlights are the permanent version: /v1/instagram/highlights lists the saved
collections on a profile, and /v1/instagram/highlight/detail opens one by id.
Discovery
/v1/instagram/search/hashtagpulls a tag feed, withtypeselectingtop(default),recent, orclipsfor reels only/v1/instagram/search/reelssearches reels by keyword or phrase, page-paginated, with an optionaldate_postedfilter/v1/instagram/reels/trendingsamples Instagram's public trending page; it takes no parameters, sends a small batch per call, and repeats items, so call again to see more/v1/instagram/search/locationturns a place name into alocation_id, which/v1/instagram/location/poststhen uses to return what was posted there/v1/instagram/taggedreturns posts other people tagged an account in, which is a different question from what that account posted itself
Reel search ordering is relevance, not a stable list
/v1/instagram/search/reels returns Instagram's own relevance ranking for the keyword, and that
ranking is live: the same query re-run minutes later can come back with a different, partially
overlapping set of reels, and pages can overlap at their boundaries. There is no parameter that
pins an ordering, and date_posted narrows the window rather than sorting it.
Build on that rather than against it. Rank on engagement.views in your own code instead of
trusting result order, deduplicate by post.id across pages and across runs, and if you need a
stable view of a keyword over time, accumulate results into your own store across repeated runs
rather than expecting one call to be reproducible. For a creator's complete back catalogue in a
fixed order, walk /v1/instagram/profile/reels instead — a profile listing is stable in a way a
relevance search cannot be.
Follower counts next to search results
/v1/instagram/search/reels rows carry the creator's identity on every row: post.author.username and post.ext.author_id, the numeric user id. post.ext.author_followers is historical — Instagram stripped follower counts out of its search payload in August 2026, so the field is null on every row and no source can restore it. Resolve follower counts from the creator's username instead.
The current count lives on author.followers via GET /v1/instagram/profile?handle= (1cr, the exact integer, cached for 15 minutes) — every row's post.author.username is the join key. For a crawl, deduplicate creators across the whole run, then resolve them through POST /v1/prism/profiles: up to 50 handles per call at 1 credit per resolved profile, failed rows refunded, never served from cache, and one call can mix platforms, so TikTok and Instagram creators resolve together. Match rows to your input by each row's index.
curl "https://www.socialcrawl.dev/v1/instagram/profile?handle=nasa" \
-H "x-api-key: sc_your_api_key_here"Audio
/v1/instagram/search/music finds a track by name and /v1/instagram/music/trending returns
whatever is popular right now with no parameters at all. Both return an audio id, and
/v1/instagram/audio/reels takes that audio_id — the number in an
instagram.com/reels/audio/{audio_id}/ URL — and returns the reels using that sound,
cursor-paged. That chain is how you measure a sound's spread rather than its chart position.
Endpoints
36 endpoints available.
| Endpoint | Path | Credit Tier |
|---|---|---|
| List Instagram reels using an audio track | /v1/instagram/audio/reels | standard (1cr) |
| Get Instagram basic profile | /v1/instagram/basic-profile | standard (1cr) |
| Get Instagram highlight detail | /v1/instagram/highlight/detail | standard (1cr) |
| List Instagram story highlights | /v1/instagram/highlights | standard (1cr) |
| Get Instagram post details | /v1/instagram/post | standard (1cr) |
| List replies under an Instagram comment | /v1/instagram/post/comment/replies | standard (1cr) |
| Get Instagram user profile | /v1/instagram/profile | standard (1cr) |
| Instagram profile, recent posts, and computed analytics in one call. | /v1/instagram/profile/full | standard (5cr) |
| List Instagram user posts | /v1/instagram/profile/posts | standard (1cr) |
| List Instagram user reels | /v1/instagram/profile/reels | standard (1cr) |
| Search Instagram accounts, hashtags, and places | /v1/instagram/search | standard (1cr) |
| Search popular Instagram posts | /v1/instagram/search/popular | standard (1cr) |
| Search Instagram profiles by keyword | /v1/instagram/search/profiles | standard (1cr) |
| Search Instagram reels | /v1/instagram/search/reels | standard (1cr) |
| Get Instagram user embed HTML | /v1/instagram/user/embed | standard (1cr) |
| Look up one Instagram comment by URL or id | /v1/instagram/comment | advanced (5-15cr)metered |
| Get Instagram engagement statistics | /v1/instagram/engagement | advanced (5cr) |
| List Instagram followers | /v1/instagram/followers | advanced (5cr) |
| List Instagram following | /v1/instagram/following | advanced (5cr) |
| List recent posts at an Instagram location | /v1/instagram/location/posts | advanced (5cr) |
| List trending Instagram music | /v1/instagram/music/trending | advanced (5cr) |
| List Instagram post comments | /v1/instagram/post/comments | advanced (5cr) |
| List Instagram post likers | /v1/instagram/post/likers | advanced (5cr) |
| Get Instagram post stats including the share count | /v1/instagram/post/stats | advanced (5cr) |
| Instagram posts with views, likes, comments, and per-post share counts where available, in one call. | /v1/instagram/profile/posts/full | advanced (5-25cr)metered |
| Instagram reels with views, likes, comments, and per-reel share counts where available, in one call. | /v1/instagram/profile/reels/full | advanced (5-25cr)metered |
| Get trending Instagram reels | /v1/instagram/reels/trending | advanced (5cr) |
| Search Instagram posts by hashtag | /v1/instagram/search/hashtag | advanced (5cr) |
| Search Instagram locations | /v1/instagram/search/location | advanced (5cr) |
| Search Instagram music | /v1/instagram/search/music | advanced (5cr) |
| List similar Instagram accounts | /v1/instagram/similar | advanced (5cr) |
| List an Instagram user's active stories | /v1/instagram/stories | advanced (5cr) |
| Download a single Instagram story | /v1/instagram/story/download | advanced (5cr) |
| List posts an Instagram user is tagged in | /v1/instagram/tagged | advanced (5cr) |
| Get Instagram username suggestions | /v1/instagram/username-suggestions | advanced (5cr) |
| Get Instagram media transcript | /v1/instagram/media/transcript | premium (10cr) |
Read this before you build
Media URLs expire. The media_urls on any post are short-lived signed CDN links. For
archiving, call post with download_media=true and read the durable links from
data.post.ext.download_media_urls, each entry carrying post_id, cdn_url, type and
cached. It adds a few seconds of latency while the media is fetched.
Likers are capped at roughly 100. post/likers returns a sample regardless of how many
likes the post has; the full like count is in the same response, but the list is not complete.
Instagram does not expose more.
safe_url=true where you are embedding. Several endpoints accept it, and it returns
URL-safe profile picture and media links suitable for dropping straight into a page.
Carousels return every slide. A sidecar post's media_urls is the full array, not just the
cover image.
Notes
- All endpoints use
GETwith query parameters - Authentication via the
x-api-keyheader - Responses follow the unified SocialCrawl schema
- Handles are passed without the
@; where an endpoint acceptsuser_idas well, it is the faster of the two trim=trueon the profile and feed endpoints returns a slimmed-down payload
Official Instagram Resources
- Instagram Graph API — Official Meta developer documentation
- Instagram Basic Display API — Basic profile and media access
