Scrape public Instagram posts, reels, and profile details (anonymous-only)
The Instagram scraper has two verbs: scrape for posts and reels, and details for profile metadata. It reads only public, logged-out data — no account, login, or Graph API app required.
Instagram login-walls hashtag feeds, place feeds, and comment threads for anonymous visitors, so those are not supported. The scraper focuses on what is reliably public: profiles, posts, and reels.
Scrape posts and reels
POST /api/v1/workspaces/{workspace_id}/scrapers/instagram/scrapeGive it Instagram URLs (profile, post /p/, or reel /reel/) or search queries. Returns structured media items — caption, hashtags, mentions, like and comment counts, media URLs, owner, carousel children, tagged users, coauthors, and location. Comment content is login-walled, so only the comment count is returned (never comment text).
Provide exactly one source: urls or search_queries (never both).
| Field | Default | Description |
|---|---|---|
urls | — | Profile, post, or reel URLs or bare profile IDs (max 20 sources per call) |
search_queries | — | Discovery keywords resolved to public profiles via Google; each returns up to max_per_target items |
search_type | profile | What to discover from search_queries: profile or user (aliases — anonymous discovery resolves both to profiles) |
result_type | posts | Which feed to return: posts or reels |
newer_than | — | Only return posts newer than this: YYYY-MM-DD, ISO timestamp, or relative (2 months), UTC |
skip_pinned_posts | false | Exclude pinned posts in posts mode |
max_per_target | 10 | Max results per URL or per discovered target |
max_items | 10 | Max total items across all sources (1–100) |
curl -X POST "$BASE_URL/api/v1/workspaces/1/scrapers/instagram/scrape" \
-H "Authorization: Bearer $SURFSENSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"urls": ["https://www.instagram.com/natgeo/"],
"result_type": "reels",
"max_items": 20
}'Billing is per returned item.
Fetch details
POST /api/v1/workspaces/{workspace_id}/scrapers/instagram/detailsGive it profile URLs (or search queries) and get profile metadata back: follower/post counts and bio. Each item carries a detailKind field, always profile.
| Field | Default | Description |
|---|---|---|
urls | — | Profile URLs or bare profile IDs (max 20) |
search_queries | — | Terms to discover public profiles for (provide these OR urls) |
search_type | profile | What to discover from search_queries: profile or user (aliases — anonymous discovery resolves both to profiles) |
max_items | 10 | Max detail items to return |
Billing is per returned item.
For the full input and output JSON schemas and generated code snippets in your language, open API Playground → Instagram in your workspace.