Instagram API for Profiles, Posts, and Reels
The SurfSense Instagram scraper extracts public profiles, posts, and reels without logging in or registering for the Instagram Graph API. Give your AI agents a live feed of what creators post, so you spot trends and shifts in engagement first.
Prefer to look at the code first? Read the docs.
Pull recent reels from @competitor and summarize what they're posting
instagram.scrape({ urls: ["instagram.com/competitor/"],
result_type: "reels", max_items: 20 })- Behind the scenes of our new launch@competitor · 84.2k likes · 1,203 commentstop reel
- Cadence up 40% this month, all short-form reels20 reels · 12 daystrend
- 3 creators tagged asking for a collab@a · @b · @c · buying intentlead signal
20 reels · surfaced in 2.4s
What you can extract from Instagram
Every Instagram scraper call returns structured items keyed by type. Point the API at a public profile, post, or reel URL, or discover creators with a search query.
Posts and reels
Caption, hashtags, mentions, like and comment counts, media URLs, dimensions, and timestamp from any public post or reel.
Profile data
Follower, following, and post counts, bio, external URL, verified and business flags for public Instagram profiles.
Owner and media
Owner username and id on every item, plus image and video URLs, alt text, and view counts.
What teams do with the Instagram scraper API
Creator and competitor monitoring
Scrape Instagram profiles and feeds to track what competitors and target creators post, and how engagement moves. Feed the stream to an agent that flags viral formats, launches, and shifts in cadence the moment they land.
Content and format research
Pull a creator's recent posts and reels to see which formats earn the most likes and comments, and turn that into a content calendar your team can act on.
Influencer vetting and outreach
Use the Instagram profile scraper to verify follower count, post cadence, and real engagement from public data before you pay for a partnership.
Call it from your code or your agent
One typed endpoint, one API key. Or add the SurfSense MCP server and let your agent call instagram.scrape as a native tool.
curl -X POST "$SURFSENSE_API_URL/workspaces/$WORKSPACE_ID/scrapers/instagram/scrape" \
-H "Authorization: Bearer $SURFSENSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"instagram.com/natgeo/"
],
"result_type": "reels",
"max_items": 20
}'Instagram API request and response schema
The exact contract behind POST /workspaces/{workspace_id}/scrapers/instagram/scrape. The same fields power the instagram.scrape MCP tool.
Request parameters
Provide exactly one source: urls OR search_queries (never both). Up to 20 sources per call.
| Field | Type | Description |
|---|---|---|
urls | string[]default [] | Instagram URLs or bare profile IDs: profile, post (/p/), or reel (/reel/). Hashtag and place URLs are login-walled and unsupported. Max 20. |
search_queries | string[]default [] | Discovery keywords resolved to public profiles via Google. Provide these OR urls, not both. Max 20. |
search_type | stringdefault "profile" | What to discover from search_queries: profile or user. Only used with search_queries. |
result_type | stringdefault "posts" | Which feed to return: posts or reels. |
newer_than | string | Only return posts newer than this: YYYY-MM-DD, ISO timestamp, or relative ('1 day', '2 months'), UTC. |
skip_pinned_posts | booleandefault false | Exclude pinned posts in posts mode. |
max_per_target | integerdefault 10 | Max results per URL or per discovered target. |
max_items | integerdefault 10 | Max total items to return across all sources. 1 to 100. |
add_parent_data | booleandefault false | Attach a dataSource block to each feed item describing its source. |
Response fields
The response is { items: [...] } with one flat media item per result. Fields the anonymous endpoints do not expose are null. One returned item is one billable unit.
| Field | Type | Description |
|---|---|---|
id / shortCode / url | string | Identity and provenance: the media id, shortcode, and canonical post URL. |
type | string | Media type: Image, Video, or Sidecar (carousel). |
caption / hashtags / mentions | string / string[] | Caption text plus the hashtags and @-mentions parsed from it. |
likesCount / commentsCount | integer | Engagement counts. likesCount is -1 when the creator hides likes. |
displayUrl / videoUrl / videoViewCount | string / integer | Media URLs and, for videos, the public view count. |
ownerUsername / ownerId / ownerFullName | string | The account that posted the item. |
timestamp | string | ISO timestamp for when the post was published. |
images / childPosts | string[] / object[] | Carousel (sidecar) children: each child's media URL and metadata. |
taggedUsers / coauthorProducers | object[] | Users tagged in the media and any co-authors credited on it. |
locationName / locationId / productType / isPinned | string / boolean | Location tag, product type (feed/clips), and whether the post is pinned. |
An Instagram Graph API alternative built for agents
The official Instagram Graph API requires a Business account, app review, and access tokens, and it cannot read arbitrary public profiles. SurfSense is an Instagram API alternative for public data. Here is how it compares.
| Feature | Instagram Graph API | SurfSense |
|---|---|---|
| Access | Business/Creator account + app review + tokens | Public data only, no login or account required |
| Coverage | Mostly your own or connected accounts | Any public profile, post, or reel |
| Setup | Register an app, pass review, manage tokens | One API key, or add the MCP server to your agent |
| Agent-ready | No; you build the harness yourself | MCP server exposes instagram.scrape as a native tool |
Instagram API: frequently asked questions
Is scraping Instagram legal?
SurfSense reads only public Instagram data, the same posts, reels, and profiles any logged-out visitor can see. It never logs in and cannot access private accounts, stories, or login-walled feeds. As always, review Instagram's terms and your own compliance needs before you run at scale.
Do I need an Instagram account or the Graph API?
No. This Instagram scraper API is an independent alternative to the Instagram Graph API, not a wrapper. You do not create a Business account, pass app review, or manage access tokens. You call SurfSense with one key, or add the MCP server to your agent, and get structured profile, post, and reel data back.
What Instagram data can I scrape?
Public profiles, posts, and reels. Each item includes captions, hashtags, mentions, engagement counts, media URLs, and owner metadata. Point the Instagram profile scraper at a handle, or pass post and reel URLs directly. Discover creators with search queries when you do not have a URL yet.
What are the rate limits?
Each call caps at 100 returned items across all sources, with up to 20 URLs or search queries per request. SurfSense manages the underlying request budget and proxy rotation for you, so you scale reads without managing tokens.
Can I scrape hashtags, places, or comments?
No. Instagram login-walls hashtag feeds, place feeds, and comment threads for logged-out visitors, so SurfSense does not offer them. You still get each post's comment count, just not the comment text. The API focuses on what is reliably public and anonymous: profiles, posts, and reels.
Point your agents at Instagram
The Instagram connector is one of many in the SurfSense open web research platform. Start free, no credit card required.