Instagram Posts Scraper: Comments & Carousels, $1.2/1K
Pricing
from $0.40 / 1,000 post rows
Instagram Posts Scraper: Comments & Carousels, $1.2/1K
Scrape Instagram posts from any public account without login: photos, carousels and reels with likes, comments, plays, caption, hashtags, mentions, alt text, all carousel images, tagged users, location, music and the latest comments. Post URLs work too.
Pricing
from $0.40 / 1,000 post rows
Rating
0.0
(0)
Developer
Detroit Web Agent - Open Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
Instagram Posts Scraper: likes, comments, carousels and captions, no login

| Price per 1,000 posts | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| This Actor | $1.20 | $1.10 | $1.00 | $0.40 |
| Most-used alternative | $2.70 | $2.30 | $2.00 | $1.60 |

Scrape the posts of any public Instagram account without logging in: photos, carousels and reels, newest first. Each row is one post with its caption, hashtags, mentions, likes, comments count, the latest comments, date, type, cover image, every carousel image with its own alt text, video URL, play count and duration for videos, music or original audio, tagged users, collab co-authors, paid-partnership brands, location and the pinned flag. Paste usernames, profile URLs or single post URLs.
- No Instagram account, cookies or session. Nothing is logged in, so your own account is never at risk.
- Full details are included in the price: comments, carousel children, alt text, tagged users and music. No separate "details" charge.
- From $1.20 per 1,000 posts on the free plan, down to $0.40 per 1,000 on paid plans.
- Accounts that do not exist, private accounts, failed pages and posts you filter out are never charged.
- 20 posts with full details usually arrive in under half a minute.
Run in 30 seconds
- Open the actor in Apify Console (a free Apify account is enough).
- Press Start with the prefilled input: the 20 newest posts of @natgeo, about $0.03 on the free plan.
- Open the Output tab. The Posts view is a table with the image, type, caption, likes, comments, plays, date and link. Download CSV, Excel or JSON.
{"username": ["natgeo"],"resultsLimit": 20}
An empty input ({}) also works and runs the same example, so you can see the output before you type anything.
Why this posts scraper
- One price with everything in it. Comments, carousel children, alt text, tagged users and music come with every post. You do not pay a second fee per post for details.
- Latest comments on every post: text, author handle, author picture, verified badge, comment likes, reply count and date.
- Carousels in full.
childPostslists every slide with its own image or video URL, alt text, size and tagged users;imagesgives all slide images in one list. - Play counts for videos and reels, read from Instagram's reels feed and merged into the post rows, plus
videoViewCount, duration and an audio-only URL. - All post types in order: photos, carousels and reels, exactly as they appear on the grid, with
productTypetelling them apart and pinned posts flagged. - Collabs, tags and partnerships in their own columns, so you can map brand deals and creator networks.
- Date filter that saves money.
onlyPostsNewerThanstops paging at your date, so old posts are neither read nor charged. - Almost nothing per run. Beyond the price per post, a run costs only Apify's standard $0.00005 start event, which matters when you run many small scheduled jobs.
What it does and who it is for
The actor reads what Instagram serves to any logged-out visitor: the account's public post grid, the public reels tab for play counts, and each post's public page for comments and carousel details. It combines them into one clean row per post.
- Social media managers and agencies: report on competitors' and clients' posts with likes, comments and plays in one sheet.
- Influencer marketing: check engagement on a creator's recent posts and see their paid partnerships and collaborators.
- Brand monitoring: track what a brand posts, when, with which hashtags and which tagged accounts.
- E-commerce and product teams: collect product photos and captions from public brand accounts you are allowed to analyse.
- Researchers and journalists: archive public posts with captions, timestamps, locations and the public comment snapshot.
- AI and data teams: build datasets of captions, alt text and engagement for analysis.
What you get: output fields
Every row is one post.
| Field | What it is |
|---|---|
shortCode, url, id | Post shortcode, link and media ID |
type | Image, Video or Sidecar (carousel) |
productType | feed, carousel_container or clips (reel) |
caption | Full caption text |
hashtags, mentions | Hashtags and @mentions from the caption, original case |
likesCount | Likes (null when the owner hides likes) |
commentsCount | Total comments |
latestComments | Latest comments: id, text, ownerUsername, ownerProfilePicUrl, ownerVerified, timestamp, likesCount, repliesCount |
firstComment | Text of the first comment shown |
displayUrl | Main image (or video cover) URL |
images | All images of a carousel |
childPosts | Carousel slides: id, type, shortCode, displayUrl, videoUrl, alt, dimensions, taggedUsers |
alt | Instagram's alt text |
videoUrl, audioUrl | Video file and audio-only track (videos and reels) |
videoPlayCount, videoViewCount, fbPlayCount | Plays, legacy views and Facebook plays (videos and reels) |
videoDuration | Video length in seconds |
musicInfo | artist_name, song_name, uses_original_audio, should_mute_audio, should_mute_audio_reason, audio_id |
timestamp | Posted at, ISO 8601 UTC |
dimensionsWidth, dimensionsHeight, originalWidth, originalHeight | Size in pixels |
ownerUsername, ownerFullName, ownerId, ownerVerified, ownerProfilePicUrl | Who posted it |
ownerFollowersCount | Followers of the account you asked for |
taggedUsers | Tagged accounts (all slides) with id, username, full name, verified, picture |
coauthorProducers | Collab co-authors |
paidPartnership, sponsors | Paid-partnership flag and the brands named |
locationName, locationId | Tagged place |
isPinned | Pinned to the top of the grid |
isCommentsDisabled, likeAndViewCountsDisabled | Comment and count settings |
captionIsEdited, hasAudio | Caption edited, video has sound |
inputUrl, scrapedAt | Which input produced the row, and when it was read |
Sample output
A carousel row, shortened (long URLs cut):
{"inputUrl": "https://www.instagram.com/natgeo","id": "4006...","type": "Sidecar","productType": "carousel_container","shortCode": "DeZnnO7CBKY","url": "https://www.instagram.com/p/DeZnnO7CBKY/","caption": "Photo by ...","hashtags": [],"mentions": [],"likesCount": 73695,"commentsCount": 259,"latestComments": [{"text": "...", "ownerUsername": "...", "timestamp": "2026-10-14T...", "likesCount": 0, "repliesCount": 0}],"displayUrl": "https://scontent...jpg?...","images": ["https://scontent...jpg?...", "https://scontent...jpg?..."],"childPosts": [{"type": "Image", "displayUrl": "https://scontent...", "alt": "Photo by National Geographic ...", "dimensionsWidth": 1080, "dimensionsHeight": 1350}],"alt": "Photo by National Geographic on October ...","timestamp": "2026-10-12T...","ownerUsername": "natgeo","ownerFullName": "National Geographic","ownerVerified": true,"isPinned": false}
Input options
| Input | What it does | Default |
|---|---|---|
username | Usernames, @handles, profile URLs or post and reel URLs, one per line | ["natgeo"] |
resultsLimit | Newest posts per account, up to 1000 | 20 |
onlyPostsNewerThan | A date (2025-01-31) or a span (7 days, 2 weeks, 3 months) | none |
skipPinnedPosts | Leave out pinned posts | off |
dataDetailLevel | detailedData (comments, carousel slides, alt text, tags, music, plays) or basicData (grid data only, fastest) | detailedData |
maxItems | Hard cap on rows across all accounts | none |
maxConcurrency | Pages read in parallel | 20 |
proxyConfiguration | Apify Proxy (default). No setup needed | Apify Proxy |
Pricing
Pay per event: you pay for each post delivered. The only other charge is the standard Apify run-start event ($0.00005 per run). No monthly rental, no details surcharge.
| Apify plan | Price per 1,000 posts, details included |
|---|---|
| Free | $1.20 |
| Starter (Bronze) | $1.10 |
| Scale (Silver) | $1.00 |
| Business (Gold) and above | $0.40 |
Never charged: accounts that do not exist, private accounts, pages Instagram refuses, and posts removed by your date or pinned filters. The run summary (OUTPUT in the key-value store) shows exactly how many rows were delivered and charged.
To cap your spend, set Max rows in total or a maximum cost per run in Apify Console. The actor stops cleanly at the cap.
How to run it
- Apify Console: paste usernames, press Start, download the table.
- Schedule: run it daily or weekly with
onlyPostsNewerThan: "7 days"to collect only new posts. - API, Python or JavaScript: see "Calling it from code" below.
- Integrations: send results to Google Sheets, Slack, Make, Zapier, n8n or a webhook from the Integrations tab.
Reliability and blocking
Instagram rate-limits logged-out traffic. The actor uses Apify Proxy with a fresh session for every request, starts on fast datacenter IPs and moves to residential IPs on its own when Instagram pushes back. Slow requests are raced against a second attempt so a single stuck connection does not hold up the run. If a post page cannot be read, the post is still delivered from the grid (caption, likes, comments count, images, video, date) and the run log says how many posts are missing comments.
Limits and honest caveats
- Public accounts only. Private accounts return a warning and nothing is charged.
- Latest comments, not all comments. Instagram shows logged-out visitors about 15 recent comments per post; that is what you get.
- Play counts of old pinned reels. Plays come from the account's reels tab, which the actor reads back as far as your newest posts reach. A reel pinned to the grid from months ago can have
videoPlayCountempty; itsvideoViewCountis still filled. - Likes can be hidden. When the owner hides like counts,
likesCountis null. - Media URLs expire. Instagram's image and video links are signed and stop working after some days. Download what you need soon after the run.
- No hashtag or location feeds. Those need a login. Use account names or post URLs.
Use cases
- Weekly competitor report: last 7 days of posts from five brands, sorted by likes plus comments.
- Engagement rate per post: divide likes and comments by
ownerFollowersCountin your sheet. - Carousel analysis: count slides and read their alt text to see which formats perform.
- Brand deal mapping: filter
paidPartnershiporsponsorsto see who works with whom. - Location insights: group posts by
locationNamefor travel, hospitality or retail accounts. - Comment sentiment: export
latestCommentsto your sentiment or support tools.
Input guide
natgeo,@natgeoandhttps://www.instagram.com/natgeo/all mean the same account.- A post URL such as
https://www.instagram.com/p/DeZnnO7CBKY/returns that post only. Reel URLs (/reel/...) work too. - Hashtag, explore and story pages need a login, so they are skipped with a warning and never charged.
- Accounts and post URLs can be mixed in one input.
Worked examples
Last 7 days from three news accounts, no pinned posts
{"username": ["natgeo", "nasa", "bbcnews"],"resultsLimit": 100,"onlyPostsNewerThan": "7 days","skipPinnedPosts": true}
Fastest grid export (no comments or carousel slides)
{"username": ["nike", "adidas"],"resultsLimit": 60,"dataDetailLevel": "basicData"}
Specific posts by URL
{"username": ["https://www.instagram.com/p/DeZnnO7CBKY/","https://www.instagram.com/reel/DeeUUHNAqQj/"]}
Tips to reduce cost and runtime
- Use
onlyPostsNewerThanon scheduled runs. Paging stops at your date, so old posts are neither read nor charged. - Set
resultsLimitto what you will analyse. Instagram serves the grid 12 posts per page, so 12, 24 or 36 fill pages exactly. - Use
basicDatawhen you only need captions, likes and images. The run gets faster; the price stays the same. - Put many accounts in one run; accounts are processed in parallel.
Calling it from code
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("transparent_meteorite/instagram-posts-scraper").call(run_input={"username": ["natgeo"], "resultsLimit": 20})for post in client.dataset(run["defaultDatasetId"]).iterate_items():print(post["shortCode"], post["type"], post["likesCount"], post["commentsCount"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('transparent_meteorite/instagram-posts-scraper').call({username: ['natgeo'],resultsLimit: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((p) => [p.shortCode, p.likesCount]));
HTTP, one call that runs the actor and returns the rows:
curl -X POST "https://api.apify.com/v2/acts/transparent_meteorite~instagram-posts-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"username": ["natgeo"], "resultsLimit": 20}'
Related actors
More tools from the same publisher that fit this workflow:
- TikTok Profile Scraper: profile stats, bio links and recent posts for a creator list
- Company Enrichment by Domain: enrich a domain with socials, emails and tech stack
- Website Email Extractor: pull emails, phones and socials from each business website
- Website Tech Stack Detector: detect the CMS, frameworks and hosting behind any site
- Local Business Leads: find local businesses with no website from OpenStreetMap, a cheap complement to Maps data
- Shopify Leads & Store Scraper: Shopify store leads with apps, products and contacts
Use from AI agents: every actor here is callable through the Apify MCP server (mcp.apify.com).
FAQ
Do I need an Instagram account or cookies? No. The actor reads only what Instagram shows logged-out visitors. You never share a login, so your account cannot be blocked.
Are reels included?
Yes. Reels that appear on the grid are returned as type: "Video" with productType: "clips", with plays, duration, music and video URL. For reels only, use an Instagram reels scraper.
Is there an extra charge for comments or carousel details? No. Detailed data is the default and costs the same as basic data.
How many comments do I get per post?
The latest comments Instagram shows publicly, usually about 15. commentsCount gives the total.
How far back can I go?
As far as the account's grid goes, 12 posts per page. Large resultsLimit values simply take more pages.
What happens when Instagram blocks a request? It is retried on a fresh proxy session and then on residential IPs. Rows that still cannot be read are not charged, and the run log lists them.
Can I get posts from a hashtag? Not without a login, so this actor does not offer it.
Which export formats are there? JSON, CSV, Excel, XML, RSS and HTML, from the Output tab or the API.
Terms and responsible use
The actor collects only publicly available data that Instagram shows to anyone without logging in. You are responsible for how you use it. Respect Instagram's terms, copyright in images, videos and audio, and privacy law such as the GDPR and the CCPA, especially for comment authors. Do not use the data for spam or harassment.
Use it from AI assistants (MCP)
Connect the Apify MCP server (https://mcp.apify.com) to Claude, Cursor or another MCP client and add this actor as a tool. Ask, for example, "Pull the last 30 posts of @nike and tell me which format gets the most comments", and the assistant runs it for you.
Changelog
- 0.1 (October 2026): first release. Posts by account or URL, details included in the price (latest comments, carousel slides with alt text, tagged users, music, plays), date and pinned filters, per-row pricing.
Support
Something missing or wrong? Open an issue on the Issues tab with the run link. Requests for new fields are welcome and usually ship within days.
New to Apify? Create a free account and run this Actor in under a minute. Some links are affiliate links.
