Instagram Profile, Posts & Reels Scraper
Pricing
from $1.50 / 1,000 scraped records
Instagram Profile, Posts & Reels Scraper
Scrape public Instagram profiles, posts and reels — no cookies, nothing to configure. Get followers, bio and links, plus every post's likes, comments, plays, caption, hashtags and direct image/video URLs. Add top comments, filter by date or media type, or pull single posts and reels by URL.
Pricing
from $1.50 / 1,000 scraped records
Rating
0.0
(0)
Developer
Hamza
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Turn any public Instagram handle into clean, structured data. Give it a list of usernames and get back full profile stats plus every post with likes, comments, plays, captions, hashtags, timestamps and direct media URLs — no login, no cookies, no browser automation, nothing to configure.
Built on Instagram's own JSON endpoints rather than by parsing the page, so the output is complete and typed instead of scraped-from-HTML guesswork.
What it does
Point it at profiles, at individual post URLs, or both.
Per profile, choose one of three modes:
| Mode | What you get |
|---|---|
| Profile details | The profile record only — fast and cheap for bulk audits. |
| Posts (default) | The profile plus its timeline, paged back through history. |
| Reels | The profile plus its Reels tab, with play counts and audio attribution. |
Also supported:
- Single posts and reels by URL — paste any
/p/…or/reel/…link. - Top comments per post — comment text, author, likes, replies and timestamp.
- Filters — cap posts per profile, only posts newer than a date, and filter by media type (image / video / carousel / reel).
What people use it for
- Influencer vetting — real follower counts, engagement rates and posting cadence before you pay a creator.
- Competitor tracking — what rivals post, how often, and what actually lands.
- Campaign and UGC reporting — pull the exact posts in a campaign and their performance.
- Content research — find the top-performing formats and hooks in a niche.
- Audience sentiment — read what commenters actually say under a post.
- Media archiving — direct image and video URLs for every post.
What you get
Three record types land in one dataset, each tagged with a type field so you can
filter or split them. All examples below are real output, abridged.
type: "profile"
{"type": "profile","username": "nasa","userId": "528817151","fullName": "NASA","profileUrl": "https://www.instagram.com/nasa/","biography": "Making the seemingly impossible, possible. ✨","externalUrl": "https://www.nasa.gov/","bioLinks": [{ "title": "Download the NASA App", "url": "https://www.nasa.gov/nasa-app/", "linkType": "external" },{ "title": "Artemis III", "url": "https://www.nasa.gov/mission/artemis-iii/", "linkType": "external" }],"followersCount": 104292683,"followingCount": 91,"postsCount": 4859,"reelsCount": 171,"highlightsCount": 5,"isVerified": true,"isPrivate": false,"isBusinessAccount": true,"businessCategoryName": "Government Agencies","relatedProfiles": [{ "username": "cosmic.travelerr", "fullName": "CosmicTraveler", "isVerified": true }],"profilePicUrl": "https://instagram.f…fbcdn.net/v/t51.2885-19/29090066_…jpg"}
type: "post"
{"type": "post","id": "3948507321457537241","shortcode": "DbL6n0ggXDZ","url": "https://www.instagram.com/reel/DbL6n0ggXDZ/","ownerUsername": "nasa","ownerFullName": "NASA","ownerIsVerified": true,"caption": "Sound on!\n\nSonifications take images from across the universe and turn them into music…","hashtags": ["NASA", "Space", "MusicLife"],"mentions": ["nasachandraxray"],"mediaType": "reel","productType": "clips","takenAt": "2026-07-24T18:46:42.000Z","takenAtTimestamp": 1784918802,"likesCount": 429292,"commentsCount": 1947,"playsCount": 11371177,"videoDuration": 34.004,"countsHidden": false,"commentsDisabled": false,"isSponsored": false,"displayUrl": "https://instagram.f…fbcdn.net/v/t51.82787-15/753557824_…jpg","imageUrls": ["…"],"videoUrls": ["…"],"width": 1080,"height": 1920,"source": "profile-feed","commentsScraped": 0}
type: "comment"
{"type": "comment","id": "17873383008553356","postShortcode": "DbL6n0ggXDZ","postUrl": "https://www.instagram.com/reel/DbL6n0ggXDZ/","postOwnerUsername": "nasa","text": "95% of the universe is stuff we still can't directly see or explain…","createdAt": "2026-07-27T00:24:15.000Z","likesCount": 0,"repliesCount": 0,"username": "3xsaintcom","userIsVerified": false}
Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
| Instagram profiles | list | ["nasa"] | Usernames, @handles or profile URLs — all three forms work. |
| What to get for each profile | select | posts | details, posts or reels. |
| Single post or reel URLs | list | empty | Any /p/… or /reel/… link. Works with or without profiles. |
| Save the profile record | boolean | true | Turn off to get posts only. |
| Max posts per profile | integer | 30 | Your per-profile cap. |
| Only posts newer than | date | empty | Skip anything older. |
| Post type | select | all | all, image, video, carousel or reel. |
| Also scrape top comments | boolean | false | Adds comment records under each post. |
| Max comments per post | integer | 15 | Lowers the ceiling; see limits below. |
| Parallel profiles | integer | 3 | How many profiles to work on at once. |
| Country | string | us | Proxy country for the requests. |
Nothing is required — the defaults run out of the box.
Pricing: pay per event
You are charged for two things, and they add together.
| Event | Fires |
|---|---|
| Dataset item | Once per record saved — every profile, every post, and every comment. |
post-comments | Once per post whose comments were fetched as a separate request and came back with at least one comment. |
What that means in practice
Scraping one post with comments turned on and 10 comments returned costs:
- 1 dataset item for the post row
- 10 dataset items for the 10 comment rows
- 1 ×
post-commentsfor the enrichment
So post-comments is on top of the dataset items, not instead of them. It is
a per-post fee for the extra round-trip Instagram requires to read comments.
You are not charged post-comments when:
- Comments are off — the default. Then you only pay dataset items.
- The post came from a single post URL. That route returns the post and its comments in one response, so there is no extra request to bill.
- Instagram returned no comments for the post, or the comment request failed. The request still happened; you are billed only for comments you actually get.
Rough guide: a 30-post profile with the profile record and comments off is 31
dataset items. The same run with comments on and ~15 comments per post is about
481 dataset items plus 30 post-comments.
To keep costs predictable, leave comments off unless you need the text, and use Max posts per profile as your budget dial.
Limits — please read before buying
Everything here was measured against the live site, not assumed.
Private accounts
A private profile returns its real follower and post counts but zero posts. You get the profile record and a warning. There is no logged-out way around this.
Rate limiting is the real ceiling
Instagram meters requests per IP and per URL path. In testing, roughly 35
requests to the post endpoint from one IP over 30 minutes triggered a
401 "Please wait a few minutes" that had not cleared 25 minutes later.
Single posts have their own fallback: if the full post route is unavailable, the
actor reads the public embed endpoint. That record is marked
source: "oembed-partial" and has the caption, author and thumbnail but no
likes, comments or timestamp.
Practical advice: prefer several smaller runs over one enormous one. Very deep crawls across many profiles will be slower than the item count suggests.
Comments cap at ~15 per post
Instagram returns only the top ~13–15 comments to logged-out clients. The response
advertises a next-page cursor, but no logged-out query accepting it exists, so
deeper comment paging is not available at any price. maxCommentsPerPost can
lower that ceiling, never raise it. commentsCount on the post is the true total;
commentsScraped is how many were saved.
Other things worth knowing
- Page size is fixed at 12. Instagram ignores a
countparameter, so 100 posts is always at least 9 requests. - A post-type filter costs extra requests. It is applied after each page, so asking for 30 reels from a photo-heavy account pages through hundreds of posts. Filtered runs get up to 60 extra pages, then stop — a very rare media type may return fewer rows than your cap.
- Media URLs expire.
imageUrlsandvideoUrlsare signed CDN links that need no auth but go stale within hours. Download at scrape time; don't store the URLs. - Play counts depend on route.
playsCountis present on timeline and Reels posts. Single posts fetched by URL come from an endpoint with no view count, so it isnullthere. - Hidden engagement stays null, not zero. When a creator hides like counts,
likesCountisnullandcountsHiddenistrue— so your averages aren't silently dragged down by fake zeros. - Some fields are route-specific.
taggedUsers,accessibilityCaptionandtopicsare only present on posts fetched by URL, not from the timeline.musicTitle/musicArtistappear only when a reel uses licensed audio.
FAQ
Do I need an Instagram account, cookies or a session? No. Nothing to log in with, nothing to paste, nothing to configure.
Can it scrape private accounts? No. You get the profile's public counts and no posts.
Does it return video files? It returns direct video and image URLs. They expire within hours, so download at scrape time.
How do I keep profiles, posts and comments apart?
Filter on the type field: profile, post or comment. Every comment also
carries postShortcode and postUrl so you can join it back to its post.
Why did I get fewer posts than I asked for? Either the profile has fewer, your date or post-type filter excluded them, or a rate limit stopped the walk part-way — in which case everything fetched before the block is still saved, and the log says how many pages went through.
Is scraping Instagram legal? This actor reads only public data that any logged-out visitor can see. You are responsible for how you use it — in particular for GDPR/CCPA obligations when the data includes personal information, and for Instagram's own terms. Do not use it to build profiles of private individuals.