mcpField
I
instagram-scraper

instagram-scraper

github.com/fetcher-shData & databases23.8k installsUpdated 8w ago
Repository

About instagram-scraper

instagram-scraper is an Instagram data API skill for analysts and social media researchers, covering profiles, content, and interactions through HTTP and MCP.

Key features

  1. 01Look up profiles by handle
  2. 02Retrieve posts, Reels, and Stories
  3. 03Fetch followers and followings
  4. 04Search hashtag, location, and audio feeds
  5. 05Read posts and comments

Use cases

  1. 01Track an account's published content
  2. 02Monitor hashtag or location posts
  3. 03Analyze post comments and engagement
  4. 04Find Instagram accounts by handle

MCP support

It provides an MCP server at https://instagram.fetcher.sh/mcp with endpoint discovery, endpoint descriptions, balance checks, and paid data retrieval.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/fetcher-sh/fetcher-skills --skill instagram-scraper

After installing, type/instagram-scraperin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
comparison.md
endpoints.md
faq.md
scenarios.md

Details

From the project README

Instagram Scraper API

Instagram data on demand: profile lookup by @handle, posts, reels, stories, tagged posts, followers and followings, hashtag and location feeds, audio/music feeds, and post comments — one plain HTTP GET per call, paid as you go. No login, no session cookies, no headless browser, no Graph API business verification.

Base URL: https://instagram.fetcher.sh

Quick reference

Base URLhttps://instagram.fetcher.sh
AuthAuthorization: Bearer bby_live_... or x402 (USDC)
Price$0.004/call (flat)
Endpoints16, all GET
MCPhttps://instagram.fetcher.sh/mcp
Machine-readable/openapi.json · /llms.txt · /skill.md

Which endpoint do I need?

I want to...Call
Look up a profile by @handleGET /api/user/handle/{handle}
Search accounts by nameGET /api/user/search
Get a user's posts, reels, or storiesGET /api/user/{id}/posts / /reels / /stories
Get a user's followers or followingsGET /api/user/{id}/followers / /followings
Look up a post by its share-URL shortcodeGET /api/post/code/{code}
Get a post's commentsGET /api/post/{id}/comments
Find posts under a hashtagGET /api/hashtag/{name}/posts
Find posts tagged at a locationGET /api/location/{id}/posts

Full param details for every row: references/endpoints.md.

Authentication

Two ways to pay, same data — full mechanics in the fetcher skill:

# 1. Prepaid credits (recommended — get a key at https://fetcher.sh/topup
#    or via POST /api/credits/topup, see the fetcher skill)
export FETCHER_API_KEY="bby_live_xxxxxxxxxxxx"
curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/user/handle/nasa"

# 2. x402 pay-per-call — omit the header; a GET with no payment returns 402
#    with machine-readable payment requirements (USDC on Base, Polygon,
#    Arbitrum, Monad, or Solana). @x402/fetch signs and retries automatically.

Every response is { "status": number, "message": string, "data": ... }; the HTTP status mirrors status.

Endpoints (16 — all GET, $0.004/call)

EndpointWhat it returns
/api/user/handle/{handle}Full profile by @handle — follower counts, bio, numeric ID
/api/user/searchProfiles matching a keyword query
/api/userid/{handle}Just the numeric user ID for a @handle
/api/user/{id}Profile by numeric ID
/api/user/{id}/postsA user's posts
/api/user/{id}/posts/taggedPosts the user is tagged in
/api/user/{id}/reelsA user's reels
/api/user/{id}/storiesA user's active stories
/api/user/{id}/followersA user's followers
/api/user/{id}/followingsAccounts a user follows
/api/post/code/{code}A single post by its shortcode (from the post URL)
/api/post/{id}/commentsA post's comments
/api/hashtag/{name}/postsPosts under a hashtag
/api/hashtag/{name}/reelsReels under a hashtag
/api/location/{id}/postsPosts tagged at a location
/api/audio/{id}/postsPosts using a specific audio/music track

{id} / {handle} / {name} / {code} are path parameters. Optional cursor / page paginate; query (user search) is required where it appears.

Scenarios

Resolve a profile by handle — the endpoint most callers want first:

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/user/handle/nasa"

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/user/handle/natgeo"

Search for profiles by keyword, or resolve just the numeric ID for a handle:

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  --data-urlencode "query=fitness influencer" -G \
  "https://instagram.fetcher.sh/api/user/search"

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/userid/nasa"

A profile's posts, reels, stories, and tagged posts (by numeric ID from the handle lookup above):

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/user/528817151/posts"

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/user/528817151/reels"

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/user/528817151/stories"

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/user/528817151/posts/tagged"

Followers and followings:

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/user/528817151/followers"

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/user/528817151/followings"

A single post by shortcode (the part of the URL after /p/), and its comments:

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/post/code/C0JD3tntcmy"

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/post/3245142029192513970/comments"

Posts and reels under a hashtag, posts from a location, and posts using an audio track:

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/hashtag/travel/posts"

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/hashtag/travel/reels"

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/location/213131048/posts"

curl -H "Authorization: Bearer $FETCHER_API_KEY" \
  "https://instagram.fetcher.sh/api/audio/271328201351336/posts"

MCP

{
  "mcpServers": {
    "instagram": {
      "url": "https://instagram.fetcher.sh/mcp",
      "headers": { "Authorization": "Bearer bby_live_..." }
    }
  }
}

Free: search_endpoints, describe_endpoint, check_balance. Paid: fetch_data (any endpoint above), topup_credits, plus the named shortcut instagram_user_handle. Drop the headers block to pay per call with x402 instead — see the fetcher skill for the full flow.

Errors

  • 400 — missing/invalid parameter (message names it)
  • 401 — unknown or rotated key
  • 402 — payment required (x402 challenge) or topup_required (credits exhausted)
  • 404 — not a priced path
  • No rate limits; no refunds on upstream failures (settlement precedes delivery)

Reference

Comments

Markdown supported