Instagram Scraper
Extract public Instagram profiles, posts, reels, comments, story highlights, highlight media, and speech transcripts, or raw public profile embed HTML.
Workspace
Configure
Inputs stay here while results become exportable artifacts.
Start from an example
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.
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_idstringNumeric id from an instagram.com/reels/audio/{audio_id}/ page for audio_reels mode.
languagestringOptional spoken-language hint for transcript mode; omit for detection.
post_urlstring (uri)Public Instagram post or reel URL for post, comments, or transcript mode.
usernamestringInstagram username, with or without @. Use username or profile_url.
max_resultsintegerdefault: 12Maximum 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_idstringNumeric Instagram highlight id or full highlight URL for highlight_detail mode.
max_recent_postsintegerdefault: 6Maximum recent visible media cards to return
Output
modestringrequiredResolved operation mode
postobjectOne normalized public Instagram post or reel
post.idstringInstagram media id
post.urlstringCanonical public media URL
post.typestringInstagram media or product type
post.captionstringVisible caption text
post.taken_atstringISO media publication timestamp
post.author_idstringAuthor account id
post.has_audiobooleanWhether the video has audio
post.shortcodestringInstagram media shortcode
post.thumbnailstringDisplay image URL
post.video_urlstringPublic video URL when exposed
post.like_countintegerVisible like count
post.play_countintegerVisible video play count
post.view_countintegerVisible video view count
post.author_namestringAuthor display name
post.author_avatarstringAuthor profile image URL
post.comment_countintegerVisible comment count
post.video_durationnumberVideo duration in seconds
post.author_usernamestringAuthor username
post.accessibility_captionstringInstagram accessibility description
countintegerNumber of public comments returned
reelsobject[]Visible public reel cards from the profile reels tab
audio_idstringInstagram audio id
commentsobject[]Public comments embedded in the logged-out post page
has_morebooleanWhether Instagram reports another public comment page
usernamestringInstagram username
verifiedbooleanWhether the profile is verified
biographystringProfile biography
full_namestringVisible profile name
embed_htmlstringRaw public Instagram profile embed HTML
highlightsobject[]Public story highlights visible on the profile
source_urlstringrequiredPublic Instagram profile URL
transcriptobjectSpeech transcript generated from the public video rendition.
transcript.textstringNormalized spoken text.
transcript.languagestringDetected or requested language code.
transcript.duration_secondsnumberMedia duration in seconds.
transcript.language_probabilitynumberLanguage-detection confidence when available.
audio_titlestringVisible audio title
media_countintegerVisible post/media count
next_cursorstringCursor for another public comment page when exposed
audio_artiststringVisible audio artist
external_urlstringPrimary external URL
highlight_idstringInstagram story highlight id
recent_postsobject[]Recent visible media cards
follower_countintegerVisible follower count
following_countintegerVisible following count
highlight_itemsobject[]Public media items embedded in one story highlight
highlight_titlestringVisible story highlight title
private_accountbooleanWhether the profile is private
profile_pic_urlstringProfile picture URL
transcript_segmentsobject[]Timed transcript segments.
audio_reel_count_textstringInstagram'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
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}'