Skip to main content

Scraper API for Instagram

The ScrapeBadger Instagram API turns instagram.com into a clean JSON feed: user profiles with their about, related accounts, posts, videos, reels, tagged and pinned media, followers/following, stories and highlights; media detail with oembed, likers, comments, comment replies and comment likers; hashtag, location and audio feeds; and search (users, hashtags, places, top, reels, music, autocomplete).
All endpoints are GET, live under https://scrapebadger.com/v1/instagram/*, and authenticate with the X-API-Key header. No Instagram account or upstream API key is required — ScrapeBadger handles authentication, rate limiting, TLS fingerprinting and proxy rotation transparently. Credits are charged per request (see the table below) and reported on the X-Credits-Used response header.

Features

  • Profiles — full public profile by username: bio, links, counts, verification, business/professional metadata, plus about (country, join date, former usernames), related accounts and paginated posts.
  • User media — videos, reels, tagged and pinned media, active stories and highlights.
  • Social graph — paginated followers and following, and search within a user’s followers.
  • Media — media detail by shortcode code, oEmbed, likers, paginated comments, comment replies and per-comment likers.
  • Hashtags — hashtag info by tag, plus top, recent and reels feeds.
  • Locations — search, location detail by pk, plus top and recent feeds.
  • Audio — trending audio, track info and the media using a track.
  • Search — users, hashtags, places, blended top, reels, music and autocomplete.

Endpoints

  • /users/{username}/videos pages the user’s main feed and keeps the video posts, so a page can hold slightly more than amount items; pass next_cursor back as cursor to continue the feed.
  • /search/places takes optional lat and lng to bias the ranking toward a point; without them the ranking is global.

Honesty caveat

These endpoints read Instagram’s public surface only. Private accounts expose profile metadata but not their posts or media. Fields reflect what Instagram serves; some professional/business fields are only present when the account has opted into them.

Conventions

  • Pagination. List endpoints take amount (page size) and a cursor (opaque next-page token). Every list response is wrapped in { items, count, next_cursor, has_more } — pass next_cursor back as cursor to walk forward until has_more is false. Pass it back unchanged: it identifies the session that served the page, because Instagram’s own cursors only continue on that session.
  • Page sizes. amount is a target. Hashtag feeds and /videos return whole Instagram pages, so a page can hold a few more items than amount; nothing is skipped between pages.
  • Followers. Instagram shows a viewer only about the first 50 followers of another account, so /followers stops there with has_more: false. /following pages through the full list.
  • Datetimes. Every datetime ships in both a Unix form (*_utc) and an ISO 8601 UTC string (*_at), e.g. taken_at + taken_at_utc.

Credits

Standard read (8) covers profile, about, related, media detail, hashtag and location info, audio, and search users, places, top, reels and music. Paginated listings (12) cover posts, videos, reels, tagged, pinned, comments, replies, likers, and hashtag, location and audio feeds. Search suggestions (3) cover search hashtags, autocomplete and media oembed. Followers/following (15) include follower search; stories/highlights (23) include single story and highlight lookups. The live per-endpoint price is published at GET /api/public/pricing.

Quickstart

Resolve a handle with /users/{username}, then page their media with /users/{username}/posts by passing the returned next_cursor back as cursor until has_more is false.

ScrapeBadger is an independent tool and is not affiliated with, endorsed by, or sponsored by Instagram or Meta. “Instagram” is a trademark of Meta Platforms, Inc., used here only to describe the platform this scraper is designed to work with.