Instagram data.
Without the login.
Public profiles with story highlights, an account’s posts, reels with play counts, and post comments — fetched live, returned as clean JSON via REST or MCP. No login, no session to keep alive.
Trusted by developers shipping real products.
246,825 served today
Request
$ curl -X POST \ https://api.fetchlayer.dev/instagram/user-reels \ -H "Authorization: Bearer ss-your-key" \ -H "Content-Type: application/json" \ -d '{"username":"@nasa","limit":12}'
Response
{
"posts": [{
"shortcode": "DdRyQxKteC1",
"kind": "video", "productType": "clips",
"playCount": 6142932,
"likeCount": 135117, "commentCount": 1667,
"countsHidden": false,
"fieldsFrom": "listing"
}, …11 more],
"postCount": 12, "hasMore": true,
"notes": ["More results are available…"],
"pagesFetched": 1
} Built for feedback workflows
Fetch the public signal. Use it wherever your team works.
Reels carry play counts
Every reel comes back with playCount, likeCount and commentCount — the engagement Instagram publishes on no other listing. Sizing an account’s video is one request rather than one per reel, which is the difference between a vetting workflow that costs a credit and one that costs fifty.
Story highlights, on the profile
The same call that returns the bio, the links and the follower count lists the id, title and cover of every story highlight the account keeps — a record of how a creator has organised themselves over months, not just what they posted this week.
One post shape everywhere
A grid post, a reel and a feed entry are the same record: shortcode, kind, caption, date, counts, dimensions, alt text, assets, carousel frames, author, co-authors, tagged accounts, place, hashtags, mentions and Instagram’s own topic labels. Write the mapping once.
Assets that keep working
Every image, carousel frame, reel video and avatar carries a downloadUrl that fetches it on demand with Range support — so what you stored last month still opens, even though Instagram’s own links are signed and expire.
Instagram’s own reel feed
The public reels feed, from no particular account — the one discovery surface open to a reader who is not signed in — with full play, like and comment counts and posting dates. It is how you watch what Instagram is pushing, not just what one creator posted.
What Instagram is promoting right now
Trending searches as Instagram groups them, each with its own count of posts — the terms Instagram is putting in front of everyone, for catching a topic while it is still moving.
Comments, with the post’s real total beside them
The comments on a post with their authors and timestamps, and the post’s full comment count alongside. Instagram publishes one page of them to a signed-out reader — about thirteen — and the response says so in words, so a sample is never mistaken for the whole thread.
Size up an account’s reels—then export it to CSV.
Prefer not to write code? Paste a handle into FetchLayer Research Chat, ask how the account is really performing, and get a clean table for the next campaign review.
- ✓Ask questions in plain English
- ✓Analyze themes, sentiment, and pain points
- ✓Download the structured results as CSV or JSON
No code or setup required · Uses your FetchLayer credits
Compare these 6 Instagram accounts: followers, bio links, story highlight titles, and for their recent reels the median and best play count, like rate and comment rate. Export as CSV.
I read each profile and its recent reels. The table gives the follower count, the bio links, the highlight titles, and per account the median and best play count with like and comment rates against plays. Instagram publishes no post count to a signed-out reader, so that column is blank rather than guessed.
instagram-account-comparison.csv
6 accounts · 9 columns · ready to download
Solutions
Build the workflow around the feedback.
The other short-form feed
TikTok accounts, videos, hashtags and comments — where a campaign usually runs alongside Instagram, on the same key.
Explore →The paid side of Meta
The ads a brand is running across Facebook and Instagram, and the creative behind them, from Meta’s own public library.
Explore →Where the discussion lands
What people say about a creator, a product or a trend once they leave the app, in threads and comment trees.
Explore →From raw feedback to action
One request is the start of the workflow.
Store the structured response, run it on a schedule, pass it to an LLM, or feed it into the system your team already uses. FetchLayer handles retrieval so you can focus on the outcome.
- 01
Point at an account or a post
A handle, a profile URL, a post URL or a short code. If all you have is a link someone pasted, run it through /resolve-url first — that is free, and it also tells you when a link names something Instagram does not publish.
- 02
Read the reels for the numbers
One request returns twelve reels with their play, like and comment counts, and the profile call beside it returns the bio, the links and the highlight titles. That is two credits for everything a vetting decision needs.
- 03
Go deeper where it matters
Open one post in full for its date, counts, carousel frames, tagged accounts and topics, then read the page of comments Instagram publishes. Store what you read: counts are as at the time of the request, and Instagram keeps no history for you.
MCP & agents
Your AI already knows
how to use this.
Use the Instagram endpoint directly from your MCP-compatible agent. Ask it to retrieve public feedback, identify patterns, and turn the result into a useful brief without writing integration glue.
Pick your editor and we hand you the config with your key already in it — no JSON to hand-edit, no wrapper code.
Get your free API keyFree tier · no credit card · any MCP host
How is @nasa doing on Instagram, and which of their recent reels did best?
104,352,683 followers and 91 following. Their best recent reel took 6,142,932 plays, 135,117 likes and 1,667 comments. One request returned all twelve reels with their counts — Instagram publishes no post count at all to a signed-out reader, so that figure is blank rather than guessed.
Works with every MCP-compatible tool
Use cases
What teams build with Instagram data.
Same API, endless applications. Here is what teams ship with Instagram profiles, reels and comments.
Creator vetting
Read an account’s reels with their play, like and comment counts and judge it on median plays rather than on a follower number — reels is the one Instagram listing that publishes engagement at all.
Brand profile audits
Pull the bio, the unwrapped bio links and the story highlight titles for a set of accounts in one call each, and see how competitors position and organise themselves.
Content calendars from the feed
Track what rival accounts post, in what format, and which carousels or reels outperform the rest — captions, hashtags, mentions and Instagram’s own topic labels on every post.
Comment sampling
Read the page of comments Instagram publishes on a post — about thirteen — and treat it as the sample it is. The response states the true total, so a report never implies a whole thread was read.
Reel performance tracking
Re-read an account’s reels on a schedule and store the play counts. Instagram publishes no history, so a time series exists only if you build one.
Trend and discovery datasets
Instagram publishes no keyword search to a signed-out reader, so build on what it does publish: its own reel feed and the terms it is promoting, with its counts per term.
Compare approaches
Spend time on the insight, not the collection layer.
| What you need | FetchLayer | Official API | Build it yourself |
|---|---|---|---|
| Public data with no app review | ✓ | Business account + review | You run the browsers |
| Play counts on reels | ✓ | Own account only | You parse them out |
| Story highlight titles and covers | ✓ | Own account only | You find the shape |
| Platform ceilings stated on the response | ✓ | n/a | You discover them |
| Ready for AI and MCP workflows | ✓ | Your integration | Your integration |
FetchLayer provides access to publicly available data. It is not affiliated with, endorsed by, or sponsored by the platform.
Pricing
Start free. Scale when ready.
Pay per request with no commitment, or lock in a flat monthly rate with built-in savings.
Free plan — 30 requests
Verify responses, inspect the API, no credit card required.
Pay as you go
$1.99
per 1,000 requests
$0.00199 per request · credits never expire
How credits work — no multipliers
One credit = one API call, on every endpoint and platform. No matter how many results come back, you pay for the call, not the output size. Most scraping APIs charge multipliers of 5x, 25x, even 75x per call depending on the target — here it's always 1.
- No multipliers — 1 request = 1 credit
- No monthly commitment
- Credits never expire
- Same API & MCP access as subscribers
- ∞ req/min, ∞ API keys
∞
Expiry
Credits stay until you use them. No monthly reset, no pressure to hit a quota.
0
Commitments
No subscription, no contract, no minimums. Start, pause, or scale whenever.
100%
Access
Every endpoint and MCP included. Not a limited tier — same data as any subscriber.
API reference
Every parameter, documented.
All requests are POST with a JSON body and Bearer auth header.
POST /instagram/user-reels An account’s reels, newest first — and the only Instagram listing that carries engagement: every reel comes back with its play, like and comment counts, so sizing an account’s video needs no detail call per reel.
username* string A handle with or without the @, or a profile URL limit number Maximum reels, up to 240, or -1 for the maximum. Defaults to 12. pages / cursor number | string Pages to read in one request, up to 20, or resume from a previous nextCursor. POST /instagram/user-profile One account’s profile: bio, unwrapped bio links, avatar, the verified, private and memorialised flags, follower and following counts — and the title and cover of every story highlight on the profile. The post count is null, because Instagram publishes none to a signed-out reader.
username* string A handle with or without the @, or a profile URL POST /instagram/user-posts The posts an account has published, newest first, with captions, hashtags, mentions, alt text and every rendition. A grid carries no counts and no dates — Instagram does not publish them on a listing — and serves 12 posts per page.
username* string A handle with or without the @, or a profile URL limit number Maximum posts, up to 240. Defaults to 12. pages / cursor number | string Page through the grid. POST /instagram/post-detail One post or reel in full by URL or short code: caption, posting date, like, comment and play counts, dimensions, alt text, a carousel expanded frame by frame, co-authors, tagged accounts, the place, Instagram’s own topic labels and every rendition.
post* string A post or reel URL, or the short code from it POST /instagram/post-comments The comments Instagram publishes on a post — the first page, about thirteen of them, whatever the post’s true total. The response reports that total and says in notes that no further page can be read, so a sample is never mistaken for a thread.
post* string A post or reel URL, or the short code from it POST /instagram/reels-feed Instagram’s own public reel feed, from no particular account — the one discovery surface open to a reader who is not signed in, with full engagement counts and posting dates.
limit number Maximum reels, up to 240. Defaults to 12. pages / cursor number | string Page through the feed. POST /instagram/trending-searches The terms Instagram itself is promoting, grouped into its own sections, each with Instagram’s rounded count of posts under it. Not keyword search — Instagram publishes none — but what Instagram is putting in front of everyone.
limit number Maximum terms, up to 100. Defaults to 48. POST /instagram/resolve-url What an Instagram link points to — post, reel, account, hashtag, place, story or explore — plus the short code, id, handle, tag or place id it encodes. Makes no request to Instagram, so it is free.
url* string Any Instagram link Fields marked * are required. Full API reference →
FAQ
Common questions.
What is an Instagram API?
Here it means one HTTP endpoint that returns public Instagram data as clean JSON: an account’s profile and the story highlights on it, the posts it has published, its reels with play counts, one post or reel in full, the public page of comments, Instagram’s own reel feed and the terms it is trending. You send a handle, a post URL or nothing at all with a Bearer token, and get back typed records. It is not Instagram’s own Graph API — there is no app review, no Business account requirement and no OAuth. Everything returned is what Instagram shows a visitor who is not signed in.
Do I need an Instagram account or developer approval?
No. You send your FetchLayer key and nothing else. There is no Instagram login, no app registration and no approval step, because this Instagram scraper API reads the public site rather than a partner API. FetchLayer is not affiliated with, endorsed by, or sponsored by Instagram or Meta, and the Instagram name is used only to identify the platform the data comes from.
How many posts come back per request?
Twelve. Instagram serves a grid 12 posts at a time whatever limit says, so limit: 60 is read as five pages and costs five credits — and the response states exactly what it did as pagesFetched, so a bill is never a surprise. Up to 240 items and 20 pages in one request. This is Instagram’s page size, not ours, and pretending otherwise would just mean a silently larger bill.
How many comments can I read on a post?
About thirteen — the first page, and only the first page. Instagram publishes that much to a signed-out reader and no more, while still reporting a total in the thousands and setting hasMore true. Rather than let you loop on that, every response says it outright: “These are the 13 comments of the 4,334 the source reports that are public for this post. The source does not publish the rest to a signed-out reader, so there is no further page to read.” Paging again returns the same thirteen and bills again, so do not. Reply text is not public either; each comment reports only how many replies it has.
Why is the post count null on every profile?
Because Instagram does not publish one to a reader who is not signed in. Follower and following counts come back normally; stats.postCount is null for every account, and the response carries a note saying to read the account’s posts and count them. It is stated rather than quietly zeroed, because a zero would be a wrong answer and a null with an explanation is a true one.
What do I get that other Instagram tools do not?
Two things, both free with a call you were already making. Story highlights: the profile response lists the id, title and cover of every highlight the account keeps, which is how an account organises itself over time — their contents are not public, and nothing here pretends otherwise. And play counts on reels: the reels listing is the only Instagram listing that carries engagement at all, so every reel comes back with playCount, likeCount and commentCount without a detail call each.
Can I get posts under a hashtag, or search by keyword?
No, and it is worth being plain about why rather than listing it as “coming soon”. Instagram redirects a signed-out reader to a login page for hashtag pages, location pages and keyword search alike. Reading them needs authenticated Instagram accounts, which is a different product with a different risk profile — not a feature we left out. What Instagram does publish is its own reel feed and the terms it is promoting, and both are available here. A hashtag or place link still resolves through /resolve-url, which tells you what it names and that it cannot be read.
Does it return transcripts or subtitles?
No. Instagram publishes none to a signed-out reader. What you do get is caption — the author’s own written post body — and altText, which is Instagram’s machine-written image description (“Photo by NASA on August 19, 2026. May be an image of text.”). Neither is a transcript of spoken audio, and the docs say so in the same words, because a caller who assumes otherwise builds something that quietly does the wrong thing.
Why does a listing have no like counts?
Instagram does not publish them on a grid. A posts listing carries the caption, hashtags, mentions, alt text and every rendition, but no like count, no comment count and no posting date — those come from a detail call. Every record says which shape produced it in fieldsFrom, so a null is never mistaken for a zero, and the response says so in notes rather than leaving you to discover it. Reels are the exception: that listing does carry engagement.
How does billing work?
One credit per page of results read, and every response states it as pagesFetched. A single-page request costs 1 credit whatever the page holds. Because Instagram’s page is twelve items, asking for sixty costs five. Parsing a URL with /resolve-url reaches Instagram not at all, reports pagesFetched 0 and is free. Instagram is in Beta while coverage expands, billed at half credit.
How reliable is it?
Every route is monitored 24/7 and a failure alerts our team, and you are only charged for successful responses. Errors are specific rather than generic: a nonexistent account is a 404 saying so by name, not a 503 dressed up as an outage; an unrecognised field is a 400 naming the field; a 502 or 503 means the source itself was unusable and is worth retrying after a wait.
Can my AI agent use it?
Yes. All eight routes are MCP tools on the same FetchLayer MCP server, named instagram_user_profile, instagram_user_posts, instagram_user_reels, instagram_post_detail, instagram_post_comments, instagram_reels_feed, instagram_trending_searches and instagram_resolve_url. Tool calls use the same key and are billed exactly like REST.
Start pulling Instagram data today.
Get a free API key, make your first request, and put public feedback to work in your own product or research workflow.
Used by developers at
Individual developers or teams — not official partnerships