PluginBench
Skill
Review
Audit score 70

instagram-api

fetcher-sh/fetcher-skills

Instagram data API: profiles, posts, reels, stories, followers, hashtags, and locations—pay-per-call in USDC or prepaid credits.

What is instagram-api?

A pay-per-call Instagram API alternative that retrieves profile data, posts, reels, stories, followers, hashtags, locations, and comments without login or Graph API verification. Use it when you need to programmatically fetch Instagram public data at $0.004 per call via prepaid credits or x402 USDC micropayments.

  • Look up Instagram profiles by @handle and search accounts by keyword
  • Fetch a user's posts, reels, stories, tagged posts, followers, and followings
  • Retrieve individual posts by shortcode and read post comments
  • Find posts under hashtags, locations, and audio/music tracks
  • Paginate through results with cursor or page parameters
  • Support both prepaid Bearer token and x402 pay-per-call USDC authentication

How to install instagram-api

npx skills add https://github.com/fetcher-sh/fetcher-skills --skill instagram-api
Prerequisites
  • A fetcher.sh account with prepaid credits (get a Bearer key at https://fetcher.sh/topup) or ability to pay via x402 USDC on Base, Polygon, Arbitrum, Monad, or Solana
  • API key in FETCHER_API_KEY environment variable for prepaid mode, or no auth header for x402 pay-per-call
Claude Code
Cursor
Windsurf
Cline

How to use instagram-api

  1. 1.Set your FETCHER_API_KEY environment variable to your Bearer token (bby_live_...) or omit it for x402 payment
  2. 2.Call GET /api/user/handle/{handle} to resolve a profile by @handle and get its numeric ID
  3. 3.Use the numeric ID to fetch posts (/api/user/{id}/posts), reels, stories, followers, or followings
  4. 4.Query hashtags with GET /api/hashtag/{name}/posts or locations with GET /api/location/{id}/posts
  5. 5.Paginate results using cursor or page parameters as returned in responses
  6. 6.Parse the standard response format: {status, message, data}

Use cases

Good for
  • Influencer discovery and competitor content tracking by resolving profiles and pulling their recent posts
  • Hashtag and location monitoring to track trending content in specific niches or geographic areas
  • Building Instagram data pipelines for analytics without official Graph API business verification
  • Exporting follower lists and analyzing account relationships programmatically
  • Monitoring posts using specific audio tracks for music-driven content discovery
Who it's for
  • Social media analysts and researchers
  • Influencer marketing professionals
  • Content strategists tracking competitor activity
  • Data engineers building Instagram analytics pipelines
  • AI agents automating Instagram data collection

instagram-api FAQ

How much does each API call cost?

$0.004 USD per call, flat rate. Pay via prepaid credits with a Bearer key or x402 USDC micropayments on Base, Polygon, Arbitrum, Monad, or Solana.

Do I need Instagram login credentials or a headless browser?

No. The API works without login, session cookies, or a browser—it retrieves public Instagram data directly.

Do I need Instagram Graph API business verification?

No. This is an alternative to the official Graph API and does not require business account verification or approval.

What happens if my prepaid credits run out?

You'll receive a 402 error with topup_required. Top up credits via POST /api/credits/topup or the fetcher skill.

Can I use this with an AI agent or MCP?

Yes. The skill includes an MCP server at https://instagram.fetcher.sh/mcp with free endpoints (search, describe, check balance) and paid data-fetch operations.

Full instructions (SKILL.md)

Source of truth, from fetcher-sh/fetcher-skills.


name: instagram-api description: >- An Instagram API alternative on fetcher.sh — pay-per-call in USDC via x402, or prepaid credits with a Bearer key, no login and no session cookies. Use when the user wants to resolve an Instagram profile by @handle, search users by keyword, pull a profile's posts, reels, stories, tagged posts, followers, or followings, look up a single post by its shortcode, read a post's comments, fetch posts under a hashtag or reel-only hashtag feed, pull posts from a location, or pull posts using a specific audio/music track. Also covers Instagram follower export, hashtag and location monitoring, influencer discovery, competitor content tracking, and Instagram data pipelines without an official Graph API business verification or a headless browser. keywords:

  • instagram
  • instagram-api
  • instagram-api-alternative
  • ig-api
  • social-media
  • social-listening
  • hashtag-tracking
  • x402
  • ai-agent

Instagram 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