Better Fetch

Instagram Scraper

Extract public Instagram profiles, posts, reels, comments, story highlights, highlight media, and speech transcripts, or raw public profile embed HTML.

Socialv0.7.3~2 credits/runPro or Scale requiredSource on GitHub

Workspace

Configure

Inputs stay here while results become exportable artifacts.

Start from an example

Profile metadata and posts, reels, audio reels, story highlights, highlight media, one post, comments, a public video transcript, or profile embed HTML.

Numeric id from an instagram.com/reels/audio/{audio_id}/ page for audio_reels mode.

Optional spoken-language hint for transcript mode; omit for detection.

Public Instagram post or reel URL for post, comments, or transcript mode.

Instagram username, with or without @. Use username or profile_url.

Maximum visible reels, comments, highlights, or highlight items to return in the selected mode.

Public Instagram profile URL. Use username or profile_url.

Numeric Instagram highlight id or full highlight URL for highlight_detail mode.

Maximum recent visible media cards to return

View Pro and Scale plans
~2 base credits/run + 32 per residential attempt10 runs/minute

Results

Preview, inspect, copy, or export the complete output.

Your result will become an artifact

Run the tool to inspect structured rows, raw JSON, execution details, and downloadable JSON, CSV, and Markdown files.

modepostcountreelsaudio_idcommentshas_moreusername

Overview

Instagram Scraper is the broader public Instagram entry point for Better Fetch tools. Version 0.1 focuses on the reliable public web profile response: it accepts a username or profile URL, returns account metadata and counts, and includes recent visible media cards with captions, thumbnails, timestamps, likes, and comments when Instagram exposes them.

Last validated: Aug 9, 2026

Input

mode"profile_posts" | "user_reels" | "audio_reels" | "story_highlights" | "highlight_detail" | "embed" | "post" | "post_comments" | "transcript"

Profile metadata and posts, reels, audio reels, story highlights, highlight media, one post, comments, a public video transcript, or profile embed HTML.

audio_idstring

Numeric id from an instagram.com/reels/audio/{audio_id}/ page for audio_reels mode.

languagestring

Optional spoken-language hint for transcript mode; omit for detection.

post_urlstring (uri)

Public Instagram post or reel URL for post, comments, or transcript mode.

usernamestring

Instagram username, with or without @. Use username or profile_url.

max_resultsintegerdefault: 12

Maximum visible reels, comments, highlights, or highlight items to return in the selected mode.

profile_urlstring (uri)

Public Instagram profile URL. Use username or profile_url.

highlight_idstring

Numeric Instagram highlight id or full highlight URL for highlight_detail mode.

max_recent_postsintegerdefault: 6

Maximum recent visible media cards to return

Output

modestringrequired

Resolved operation mode

postobject

One normalized public Instagram post or reel

post.idstring

Instagram media id

post.urlstring

Canonical public media URL

post.typestring

Instagram media or product type

post.captionstring

Visible caption text

post.taken_atstring

ISO media publication timestamp

post.author_idstring

Author account id

post.has_audioboolean

Whether the video has audio

post.shortcodestring

Instagram media shortcode

post.thumbnailstring

Display image URL

post.video_urlstring

Public video URL when exposed

post.like_countinteger

Visible like count

post.play_countinteger

Visible video play count

post.view_countinteger

Visible video view count

post.author_namestring

Author display name

post.author_avatarstring

Author profile image URL

post.comment_countinteger

Visible comment count

post.video_durationnumber

Video duration in seconds

post.author_usernamestring

Author username

post.accessibility_captionstring

Instagram accessibility description

countinteger

Number of public comments returned

reelsobject[]

Visible public reel cards from the profile reels tab

audio_idstring

Instagram audio id

commentsobject[]

Public comments embedded in the logged-out post page

has_moreboolean

Whether Instagram reports another public comment page

usernamestring

Instagram username

verifiedboolean

Whether the profile is verified

biographystring

Profile biography

full_namestring

Visible profile name

embed_htmlstring

Raw public Instagram profile embed HTML

highlightsobject[]

Public story highlights visible on the profile

source_urlstringrequired

Public Instagram profile URL

transcriptobject

Speech transcript generated from the public video rendition.

transcript.textstring

Normalized spoken text.

transcript.languagestring

Detected or requested language code.

transcript.duration_secondsnumber

Media duration in seconds.

transcript.language_probabilitynumber

Language-detection confidence when available.

audio_titlestring

Visible audio title

media_countinteger

Visible post/media count

next_cursorstring

Cursor for another public comment page when exposed

audio_artiststring

Visible audio artist

external_urlstring

Primary external URL

highlight_idstring

Instagram story highlight id

recent_postsobject[]

Recent visible media cards

follower_countinteger

Visible follower count

following_countinteger

Visible following count

highlight_itemsobject[]

Public media items embedded in one story highlight

highlight_titlestring

Visible story highlight title

private_accountboolean

Whether the profile is private

profile_pic_urlstring

Profile picture URL

transcript_segmentsobject[]

Timed transcript segments.

audio_reel_count_textstring

Instagram's visible total reel count for the audio

Examples

openai-profile

{
  "username": "openai",
  "max_recent_posts": 3
}

openai-reels

{
  "mode": "user_reels",
  "username": "openai",
  "max_results": 10
}

public-audio-reels

{
  "mode": "audio_reels",
  "audio_id": "1392969992841787",
  "max_results": 12
}

nasa-story-highlights

{
  "mode": "story_highlights",
  "username": "nasa",
  "max_results": 10
}

nasa-highlight-detail

{
  "mode": "highlight_detail",
  "max_results": 50,
  "highlight_id": "18201653992314974"
}

openai-embed

{
  "mode": "embed",
  "username": "openai"
}

openai-public-reel

{
  "mode": "post",
  "post_url": "https://www.instagram.com/openai/reel/DawRXxVMil6/"
}

openai-public-comments

{
  "mode": "post_comments",
  "post_url": "https://www.instagram.com/openai/reel/DawRXxVMil6/",
  "max_results": 20
}

openai-public-reel-transcript

{
  "mode": "transcript",
  "language": "en",
  "post_url": "https://www.instagram.com/openai/reel/DawRXxVMil6/"
}

Use cases

Social research

Collect public Instagram profile and recent-media context for creator research, brand monitoring, social listening, or competitive analysis.

Recent post summaries

Give an agent a bounded set of recent visible Instagram captions, post URLs, thumbnails, timestamps, likes, and comment counts for quick review.

Profile monitoring

Track account metadata, bios, links, follower counts, and visible media counts over time without using private Instagram credentials.

Story highlight research

List a public profile's named highlights, then extract the images, videos, timestamps, dimensions, captions, and links embedded in one highlight.

FAQ

Does Instagram Scraper require a login?

No. It uses public Instagram web responses visible without account-specific cookies and does not use passwords, exported sessions, or private API tokens.

Does this version scrape comments, hashtags, or every post?

No. Version 0.1 returns public profile metadata and recent visible media cards. Comments, hashtags, locations, and deep timeline pagination should be added as separate validated slices.

What happens with private profiles?

Private or unavailable profile data is not bypassed. The tool returns only what Instagram exposes in the public web profile response.

Use it anywhere

MCP (Claude, ChatGPT, Codex)

# After connecting https://betterfetch.co/api/mcp, ask your AI to:
1. Call search_tools for "Instagram Scraper"
2. Call run_tool with:
   name: "instagram_scraper"
   input: {"username":"openai","max_recent_posts":3}

REST

curl -sS -X POST "https://betterfetch.co/api/tools/instagram_scraper/run" \
  -H "Authorization: Bearer bf_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"input": {"username":"openai","max_recent_posts":3}}'

Run locally

git clone https://github.com/better-fetch/tools/tree/main/tools/instagram-scraper && cd instagram-scraper && npm i
BETTER_FETCH_API_KEY=bf_your_key_here npx bf-tool run --input '{"username":"openai","max_recent_posts":3}'