Instagram Scraper 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.
$
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
Point your agents at Instagram
The Instagram connector is one of many in the SurfSense competitive intelligence platform. Start free, no credit card required.
SurfSense