Instagram Scraper API — Profiles, Posts & Reels
Scrape Instagram profiles, posts, Reels and comments by username or URL, no login: captions, hashtags, engagement, video and audio links. API, JSON, CSV.
key features
No login and no Instagram account — public profiles, posts and Reels only
Profiles with bio, full name, follower and following counts, verified and private flags, bio links and avatar
Posts, Reels and carousels with the caption, likes and comment count; Reels read from a profile's Reels tab also carry play counts
Hashtags and mentions parsed out of the caption into clean arrays
Instagram's own topic tags, tagged users, co-authors and location on every post
Every carousel child's image and video links, plus the audio-only track of each video that has one
Optional comments with author, text, likes, reply count and timestamp — up to 500 per post
Per-profile caps and a hard request cap, so a run's size is predictable
use cases
- Influencer and creator research — engagement, co-authors and the accounts they tag
- Brand and competitor monitoring across the accounts you choose
- Grouping and trend analysis by Instagram's own topic tags
- Comment and sentiment analysis on posts and Reels
- Feeding Reels' audio-only tracks to speech-to-text
- Social datasets for RAG and LLM pipelines
input parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
startUrls | array | optional | Profile, post or Reel addresses; give these or usernames |
usernames | array | optional | Profile names, with or without the @ |
maxPostsPerProfile | integer | optional | Posts and Reels to read in full per profile, each counted separately (default 24) |
includeReels | boolean | optional | Also read each profile's Reels tab — the only read that carries play counts (default on) |
includeComments | boolean | optional | Read each post's comments, up to the cap below (default off) |
maxCommentsPerPost | integer | optional | Comments stored per post or Reel, 0–500 (default 24) |
postsPerPage | integer | optional | How many posts one page asks for (default 12) |
maxConcurrency | integer | optional | Requests run at once (default 3) |
maxRequestsPerCrawl | integer | optional | Stop after this many requests; empty means no limit |
proxy | object | optional | Apify Proxy, residential by default — Instagram answers logged-out readers far more readily from a residential address |
Output Example
1{
2 "type": "post",
3 "source": {
4 "id": "instagram",
5 "canonicalUrl": "https://www.instagram.com/reel/DdRyQxKteC1/",
6 "username": "astro_jessica"
7 },
8 "kind": "reel",
9 "id": "3986188199829823669",
10 "shortcode": "DdRyQxKteC1",
11 "owner": {
12 "id": "4092263381",
13 "username": "astro_jessica",
14 "fullName": "Jessica Meir",
15 "isVerified": true
16 },
17 "takenAt": "2026-09-14T18:58:07.000Z",
18 "caption": "Volume up and get your groove on! A bit of weekend dancing on the @iss to start your week off right. …",
19 "hashtags": [],
20 "mentions": [
21 "iss"
22 ],
23 "format": "video",
24 "productType": "clips",
25 "isVideo": true,
26 "isReel": true,
27 "hasAudio": true,
28 "likeCount": 251630,
29 "commentCount": 2690,
30 "medias": [
31 {
32 "type": "Image",
33 "url": "https://…jpg",
34 "width": 892,
35 "height": 1584
36 },
37 {
38 "type": "Video",
39 "videoUrl": "https://…mp4",
40 "width": 892,
41 "height": 1584,
42 "audioUrl": "https://…mp4"
43 }
44 ],
45 "audioTitle": "Original audio",
46 "coauthors": [
47 {
48 "username": "nasa",
49 "id": "528817151",
50 "fullName": "NASA"
51 },
52 {
53 "username": "iss",
54 "id": "953293389",
55 "fullName": "International Space Station"
56 },
57 {
58 "username": "astro_anil",
59 "id": "50101577629",
60 "fullName": "Anil | Astronaut Space Doctor"
61 }
62 ],
63 "topics": [
64 "international space station",
65 "zero gravity",
66 "samantha cristoforetti",
67 "iss life",
68 "space station interior"
69 ],
70 "location": {
71 "id": "1783641135097024",
72 "name": "International Space Station"
73 },
74 "commentsRead": 24,
75 "comments": [
76 {
77 "id": "18000000000000000",
78 "authorUsername": "example_user",
79 "authorId": "10000000000",
80 "authorIsVerified": false,
81 "text": "Microgravity jazzercise 💃",
82 "likeCount": 0,
83 "createdAt": "2026-10-20T01:38:03.000Z"
84 }
85 ],
86 "scrapedAt": "2026-10-20T01:52:17.665Z"
87}
Pricing
Pay-per-event: billed once per stored post or Reel, once per stored profile, and once per comment stored with a post. Nothing is charged for a record the Actor could not read.
Tips
Start with one profile. A low maxPostsPerProfile shows you the records before you scale up. Leave the Reels tab on. It is the only read that carries play counts; turning it off makes a run smaller at that cost. Keep comments off unless you need them. Each stored comment is one charge; maxCommentsPerPost caps how many a post brings. Want what the Reels say? The Instagram Transcript Scraper turns the same accounts’ Reels into text with timestamps.
faq
Do I need an Instagram account?
Is it legal to scrape Instagram?
Is this an alternative to the Instagram API?
Can it read Stories, followers or hashtag pages?
Why do some posts have no play count?
Which Instagram links work?
related in ~/social
Instagram Transcript Scraper — Reels to Text
Instagram Reels to text, with timestamps — no login.
openTikTok Transcript & Subtitle Scraper — JSON, SRT, VTT, LLM
TikTok transcripts as JSON, SRT, VTT, or LLM-ready text.
openBluesky Scraper — Posts, Profiles, Feeds & Interactions
Scrape Bluesky posts, profiles, feeds, and interactions.
open