How to scrape Instagram Posts
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.
Open Instagram Posts Scraper on Apify
Instagram posts scraper with no login: one row per post from any public account, with caption, hashtags, mentions, likes, comment count, the latest comments, every carousel image with its alt text, play count and duration for videos, music, tagged users, collab co-authors and location.
This Actor vs apify/instagram-post-scraper: that one is the most-used, by Apify itself, and returns caption, metrics, images, coauthors, recent comments and sponsored status. Choose this one for every carousel image with its own alt text, music or original audio and tagged users in the same row, and because private accounts, missing accounts and posts you filter out are never charged.
What it outputs
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 |
Example input
{
"username": ["natgeo"],
"resultsLimit": 20
}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.
Where do I run it?
On Apify: https://apify.com/transparent_meteorite/instagram-posts-scraper. Check the Pricing tab there for current prices.