Instagram Scraper API & MCP for AI Agents | FetchLayer
Unofficial Third-party API
10 endpoints live

Instagram data.
Without the login.

Reels with play counts Story highlights on the profile Posts & carousels Comments — the public page

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.

Start building free
Free tier included No credit card No scraper maintenance

Trusted by developers shipping real products.

2,553,945 served today

POST /instagram/user-reels
200 OK

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_full"
  }, …11 more],
  "postCount": 12, "hasMore": true,
  "notes": ["More results are available…"],
  "pagesFetched": 1
}

Used by developers at

Individual developers or teams — not official partnerships

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, and most with their date and length. 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.

Popular reels, no account needed

The reels Instagram currently lists as popular, from many accounts, with their play counts, captions, authors and video. 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. Comments page, newest first, 10–16 to a page, up to 10 pages in one request, so a thread is reachable rather than a single sample.

FetchLayer Research Chat

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
Analyse Instagram in Chat

No code or setup required · Uses your FetchLayer credits

Instagram research

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.

Y

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. The post count column is each profile’s exact figure.

instagram-account-comparison.csv

6 accounts · 9 columns · ready to download

CSV

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.

  1. 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.

  2. 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.

  3. 03

    Go deeper where it matters

    Open one post in full for its date, counts, carousel frames, tagged accounts and topics, then read its comments and the replies to them. Store what you read: counts are as at the time of the request, and Instagram keeps no history for you.

One command. Your agent does the rest.

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.

Claude Code Codex

1 Run one command, then sign in

$ npx fetchlayer

◇  Agents

│  Claude Code and Codex

◇  Signed in as you@company.com

◇  Connected

│  ✓ Claude Code  ✓ Codex

It opens a sign-in page in your browser. New here? Signing in creates your free account.

2 Ask

›How is @nasa doing on Instagram, and which of their recent reels did best?

fetchlayer.instagram_user_reels

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, and the profile gives the exact post count: 4,963.

No key to copy and nothing to install. New accounts are free, with no credit card.

How it works
The same command connects
Cursor
VS Code
Antigravity
OpenCode
Hermes
ChatGPT, Perplexity, the Claude app and others

Use cases

What teams build with Instagram data.

Same API, endless applications. Here is what teams ship with Instagram profiles, reels and comments.

01

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.

influencervettingagencies
02

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.

competitorsbrandaudit
03

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.

competitorscronreporting
04

Comment sampling

Read the page of comments Instagram publishes on a post — about a dozen — and treat it as the sample it is. The response states the true total, so a report never implies a whole thread was read.

vocresearchproduct
05

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.

campaignsreportingcron
06

Trend and discovery datasets

Instagram does not make keyword search public, so build on what it does publish: the reels it lists as popular and the terms it is promoting, with its counts per term.

datasetstrendslistening

Compare approaches

Spend time on the insight, not the collection layer.

What you needFetchLayerOfficial APIBuild it yourself
Public data with no app review✓Business account + reviewYou run the browsers
Play counts on reels✓Own account onlyYou parse them out
Story highlight titles and covers✓Own account onlyYou find the shape
Platform ceilings stated on the response✓n/aYou discover them
Ready for AI and MCP workflows✓Your integrationYour integration

FetchLayer provides access to publicly available data. It is not affiliated with, endorsed by, or sponsored by the platform.

Start free. Scale when ready.

Try it free, buy credits as you go, or take a monthly plan when your volume is steady.

Free

$0

30 requests

Enough to call the platforms you care about and read real responses before you pay anything.

  • Every platform and endpoint
  • REST and MCP
  • No credit card
Start free

Pay as you go

$1.99

per 1,000

Buy credits when you need them. They stay on your account until you use them.

  • Credits never expire
  • No monthly commitment
  • Same access as subscribers
  • ∞ req/min, ∞ API keys
Get API key

Monthly plan

Starter

$25

per month

15,000 requests a month, about 500 a day.

$1.67 per 1,000, $5 less than credits each month

  • ∞ req/min, ∞ API keys
Get started

1 page fetched is 1 credit

A normal call reads one page. Ask for more pages and each one is one more credit.

The same on every platform

No multiplier for harder targets, and no charge per result returned.

Nothing back, nothing billed

If a request does not return usable data, it costs 0 credits.

Not sure which volume fits?

15 minutes with the founder. Tell us the workload, we tell you what it needs.

Book a call

Guaranteed throughput on the platform you run on

A dedicated platform from $400/mo, plus $500 for each ~21 req/s. Every other platform on the same key. 99.95% uptime, 24-hour support on Slack or Telegram.

Build your plan

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 — every reel with its play, like and comment counts, and most with their date and length, 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 every reel on the pages fetched, 12 a page.
pages / cursor number | string Pages to return 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, exact follower, following and post counts, whether a story is up now — and the title and cover of every story highlight on the profile.

username* string A handle with or without the @, or a profile URL
POST /instagram/user-posts

The posts an account has published, newest first, normally with each post’s date, like and comment counts and a video’s play count and length, plus captions, hashtags, mentions and every rendition. Instagram 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 every post on the pages fetched, 12 a page.
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 and comment counts, a video’s play count and length, 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 on a post or reel, newest first, 10–16 to a page. Ask for up to 10 pages in one request, continue from a nextCursor, and read GIF and photo comments through kind and mediaUrl. Each page costs one credit.

post* string A post or reel URL, or the short code from it
POST /instagram/comment-replies

The replies to one comment, oldest first, about 8 to a page, in the same shape as a comment. Pass the post and the comment’s id from post-comments, and follow nextCursor one page at a time. Each page costs one credit.

post* string The post the comment is on: URL, short code or numeric id
commentId* string The comment’s id, from post-comments
POST /instagram/reels-feed

Reels Instagram currently lists as popular, from many accounts, each with its play count, caption, author and video. Like counts, comment counts and dates come from a single post request.

limit number Maximum reels, up to 240. Defaults to every reel on the pages fetched, 12 a page.
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/user-stories

The stories an account has up right now, oldest first — each frame with when it was posted and when it expires, every rendition, attached links and re-shared posts. No active story is an empty list with a note, not an error.

username* string A handle with or without the @, or a profile URL
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.

How much does FetchLayer's Instagram API cost?

FetchLayer's Instagram API returns public Instagram profiles, posts, reels, stories and comments as JSON over REST or MCP. A request is one page of results (Instagram serves 12 posts a page), and each request costs one credit: $1.99 per 1,000 requests pay-as-you-go, or $25 a month for 15,000, with 30 free requests and no card to start. A request that fails is not billed. The same key covers 36 other platforms, and every route is also a tool on FetchLayer's MCP server at https://mcp.fetchlayer.dev, for Claude, ChatGPT, Cursor and other MCP clients.

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, the stories it has up now, one post or reel in full, the comments on a post and the replies to them, the reels Instagram lists as popular 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 makes public.

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. 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?

12 a page, and every post on the pages you ask for: pages: 2 returns 24 for 2 credits. Instagram serves a grid 12 posts at a time whatever limit says, so limit: 60 takes 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?

Comments page, newest first, 10–16 to a page. Ask for up to 10 pages in one request with pages, and continue from a nextCursor with cursor; each page costs one credit, so pages: 3 is 3 credits if three pages were fetched. A comment with no text is a GIF, photo or sticker — kind says which and mediaUrl links it. replyCount is the number of replies on every page, and /comment-replies returns the replies to any comment, about 8 to a page at 1 credit a page. totalCount counts replies too, so it is higher than the comments listed.

Which counts does a profile return?

Follower, following and post counts, all exact: stats.postCount is the real number of posts, private accounts included, never a rounded “32K”. On the rare request where only a rounded figure is available, postCount is null, the note gives the rounded figure, and a retry usually returns the exact one — a null with an explanation rather than a wrong number. The profile also says whether the account has a story up now and when it last posted one. Pass include: ["country"] and it also returns where the account is based and the month it joined.

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 engagement on listings: every reel comes back with playCount, likeCount and commentCount, and an account’s posts normally carry their dates and counts too, 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 does not make hashtag pages, location pages or keyword search public. That is a different product with a different risk profile — not a feature we left out. What Instagram does publish is the reels it lists as popular 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 is not available.

Does it return transcripts or subtitles?

No. Instagram publishes none. 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 sometimes have no like counts?

A posts listing normally carries each post’s date, like and comment counts, and a video’s play count and length; those records say fieldsFrom “listing_full”, and with include every post has them. A post still missing one is named in notes by short code, with the fields it lacks; asking again with include returns them, and so does a detail call. The popular-reels feed always comes without likes, comments and dates. Repost, share and save counts come on request: add include with any of "reposts", "shares", "saves" to a posts, reels or detail call, at the same price. Shares and saves exist for reels and videos only.

How does billing work?

One credit per page of results fetched, 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.

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 is temporary and worth retrying after a wait.

Can my AI agent use it?

Yes. All ten routes are MCP tools on the same FetchLayer MCP server, named instagram_user_profile, instagram_user_posts, instagram_user_reels, instagram_user_stories, instagram_post_detail, instagram_post_comments, instagram_comment_replies, 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.