Instagram Scraper - Posts, Profiles & Hashtags
Pricing
from $0.60 / 1,000 results
Instagram Scraper - Posts, Profiles & Hashtags
Scrape Instagram posts, profiles, and hashtags. Get captions, likes, comments, media URLs, follower counts, and more. Uses Instagram's GraphQL API with residential proxy for reliability.
Pricing
from $0.60 / 1,000 results
Rating
0.0
(0)
Developer
Thirdwatch
Maintained by CommunityActor stats
0
Bookmarked
63
Total users
9
Monthly active users
6 days ago
Last modified
Categories
Share
Instagram Scraper — Posts, Reels, Comments & Profiles
Thirdwatch portfolio: 8,800+ users across 140+ public Actors, 2M+ records delivered, >95% run success. Explore all Thirdwatch Actors.
What you get
Five Instagram scrapers in one Actor, no login required. Profile posts, profile reels, single post/reel details, comments, and profile cards — captions, hashtags, mentions, like and comment counts, music, video URLs, carousels, tagged users, bios, follower counts, and external links.
Modes
Set mode, or leave it on auto and the Actor reads each input: a post URL returns post details, a handle returns that handle's posts.
| Mode | Input | Returns | One dataset item per |
|---|---|---|---|
profilePosts | @handle or profile URL | The account's timeline — posts, reels and carousels | post |
profileReels | @handle or profile URL | The account's timeline filtered to reels | reel |
postDetails | /p/… or /reel/… URL | Full record for one post or reel | post |
comments | /p/… or /reel/… URL | Comments on that post | comment |
profile | @handle or profile URL | Profile card, optionally with recent posts attached | profile |
auto (default) | anything | Routes each input by its shape | varies |
You can mix input shapes in one run on auto:
{"queries": ["@natgeo","https://www.instagram.com/p/Dc_g-YvhWhw/","https://www.instagram.com/nasa/"],"mode": "auto","maxResults": 50}
Input parameters
| Parameter | Required | Description |
|---|---|---|
queries | Yes | Post/reel URLs, profile URLs, @handles, or #hashtags. |
mode | No | auto (default), profilePosts, profileReels, postDetails, comments, profile. |
maxResults | No | Max total dataset items across all queries. Default 10. |
maxResultsPerQuery | No | Per-query cap. 0 = no per-query cap. Default 0. |
maxCommentsPerPost | No | comments mode. Default 15. Instagram serves only the first page to logged-out clients, so higher values do not return more. |
maxPostsPerProfile | No | profile mode. Recent posts attached to each profile record. Default 12, max 60. |
searchType | No | Legacy. Only consulted when mode is auto. Prefer mode. |
A bare word is treated as a hashtag on auto, as a handle under the profile modes, and as a shortcode under postDetails/comments. So {"queries": ["nasa"], "mode": "profilePosts"} scrapes @nasa.
Output fields — posts and reels
| Field | Description |
|---|---|
type | image, video, carousel, or reel |
shortcode / url | Post shortcode and canonical URL |
caption | Full caption text |
hashtags | Hashtags parsed from the caption |
mentions | @handles parsed from the caption |
likeCount | Likes (null when the account hides counts) |
commentCount | Comments |
viewCount | Plays/views — null on public data, see Limitations |
timestamp | ISO 8601 publish time |
authorUsername / authorFullName / authorId / authorIsVerified | Author |
videoUrl | Direct MP4 URL for videos and reels |
imageUrl / thumbnailUrl | Highest-resolution still |
music | {title, artist, audioAssetId, isOriginalAudio, isExplicit} for reels |
carousel_media | Every slide of a carousel with its own image/video URL |
tagged_users | Accounts tagged in the media |
coauthors | Collab post co-authors |
location | Location name, when tagged |
dimensions | {width, height} |
productType | Instagram's own type (feed, clips, carousel_container) |
isSponsored | Paid-partnership flag |
commentsDisabled / likeAndViewCountsDisabled | Creator-side visibility settings |
accessibility_caption | Instagram's generated alt text |
Output fields — comments
| Field | Description |
|---|---|
text | Comment body |
ownerUsername / ownerFullName / ownerId / ownerIsVerified | Commenter |
ownerProfilePicUrl | Commenter avatar |
likeCount | Likes on the comment (null = Instagram did not disclose it) |
timestamp | ISO 8601 |
isReply / parentCommentId | Threading |
replyCount | Replies (null = Instagram did not disclose it) |
postShortcode / postUrl / postOwnerUsername / postCaption | Parent post |
totalCommentCount | Total comments on the post |
moreCommentsAvailable | true when Instagram holds more back behind a login |
Output fields — profiles
| Field | Description |
|---|---|
username / fullName / id | Identity |
biography | Bio text |
biographyMentions / biographyHashtags | Parsed from the bio |
followerCount / followingCount / postCount | Counts |
countsAreApproximate | true when a count came from Instagram's rounded meta tag |
isVerified / isPrivate | Status |
externalUrl / bio_links | Links in the bio |
profilePicUrl / profileUrl | Media and canonical URL |
pronouns / hasClips | Extras |
category, businessEmail, businessPhoneNumber | Business contact fields — see Limitations |
recentPosts | Recent posts, when maxPostsPerProfile > 0 |
Example output
{"type": "reel","shortcode": "Dc_g-YvhWhw","url": "https://www.instagram.com/reel/Dc_g-YvhWhw/","caption": "Again and again, this young humpback whale burst from the waters off Baja California…","hashtags": [],"mentions": ["mywildlive"],"likeCount": 8869,"commentCount": 73,"viewCount": null,"authorUsername": "natgeo","timestamp": "2026-09-07T16:16:24+00:00","videoUrl": "https://instagram.fblr22-1.fna.fbcdn.net/o1/v/t2/f2/…","music": {"title": "Original audio","artist": "natgeo","audioAssetId": "28139527835659346","isOriginalAudio": true},"dimensions": { "width": 1080, "height": 1920 },"productType": "clips"}
Use cases
- Influencer vetting —
profilefor reach, thenprofilePostsfor real engagement per post rather than a follower count alone. - Reels/short-form research —
profileReelsto isolate short-form output, withmusicto see which audio a creator rides. - Competitor content tracking —
profilePostson a competitor set to measure cadence, format mix, and hashtag strategy. - Audience and sentiment analysis —
commentsacross a campaign's posts for verbatim customer language. - Campaign reporting —
postDetailson a list of sponsored post URLs for exact like/comment counts at a point in time. - Creative asset collection —
videoUrlandcarousel_mediafor downloading a creator's public media. - CRM enrichment — attach follower counts, bio links, and verification to creator records.
Limitations
These are properties of Instagram's public web, not of this Actor. Every one of them is reported honestly in the output rather than silently zero-filled.
- View/play counts are not public. Instagram stopped serving
play_countto logged-out clients.viewCountisnull, never a fabricated0. - Comments are capped at roughly the first page (~15). Instagram gates comment pagination behind a login.
moreCommentsAvailable: truetells you when more exist. - Comment replies are rarely exposed.
replyCountisnullwhen Instagram does not disclose it. category,businessEmailandbusinessPhoneNumberrequire a login. They are returned asnull/empty, andcategoryAvailable: falsemarks the difference between "no category" and "not public".postCountcan be approximate. Instagram leaves the exact field null and only publishes a rounded count ("32K Posts") for large accounts.countsAreApproximate: trueflags it.- Private profiles return no posts. The profile record still comes back with
isPrivate: true— the account exists, its posts are not public. - Hashtag pages require a login. Hashtag queries fall back to public-index discovery and then enrich each hit from Instagram. Check
dataQuality; indexed rows may omit engagement and media. When that discovery cannot run at all the query is reported as blocked, never as "no results". - Stories and the "For You" reels feed require authentication and are not supported.
A run that never reaches Instagram fails with a clear status message. A run that did reach Instagram and found nothing succeeds with a status message saying so — a deleted handle, a private account, or a term with no public posts. An empty dataset is never left unexplained.
Compared to alternatives
- vs. single-purpose Instagram Actors: competitors split posts, reels, comments, transcripts, and profiles across separate Actors with separate billing. This one covers five modes on one schema and one price, so a pipeline that needs profile posts and their comments runs against one integration.
- vs. apify/instagram-scraper ($0.0027/result on FREE, from $0.0015 at high volume): Thirdwatch starts at $0.0012/result and drops to $0.0006.
- vs. apidojo/instagram-scraper (from $0.00047/post): Apidojo's lowest advertised high-volume rate is lower. Thirdwatch's FREE rate is transparent at $0.0012 and covers comments and reels in the same Actor.
Pairs well with TikTok Scraper and YouTube Scraper for cross-platform creator research.
Use cases & recipes
Step-by-step guides on thirdwatch.dev/blog:
- Monitor Brand Instagram Engagement (2026 Guide)
- Research Instagram Hashtag Performance (2026 Guide)
- Scrape Instagram Profiles and Posts at Scale (2026)
- Track Influencer Follower Growth on Instagram (2026)
FAQ
Can I scrape one post by URL?
Yes — pass the /p/… or /reel/… URL. On auto it returns post details; set mode: "comments" for its comments instead.
How do I get only a creator's reels?
mode: "profileReels" with the handle in queries.
Why is viewCount null?
Instagram no longer serves play counts to logged-out clients. Reporting null keeps "not available" distinct from "zero views".
Why did I only get 15 comments on a post with thousands?
Instagram serves one page of comments without a login. moreCommentsAvailable: true marks it.
Do I need an Instagram account or API key? No. The Actor works entirely against publicly accessible pages.
Will it scrape Stories? No. Stories require a login.
Last verified: 2026-09
More scrapers at thirdwatch.dev.