Instagram Post Scraper
Pricing
from $1.00 / 1,000 posts
Instagram Post Scraper
Scrape public Instagram posts and reels from profiles or direct links. Get captions, photos, videos, likes, comments, reel play counts, hashtags, mentions, tagged users, co-authors and paid partnerships. Filter by date, skip pinned posts, and export to JSON, CSV or Excel.
Pricing
from $1.00 / 1,000 posts
Rating
0.0
(0)
Developer
Coder
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Collect public Instagram posts and reels from profiles or direct links, with captions, media, engagement, reel play counts and comments, in a clean, structured format.
Add a username or paste a link, choose how many posts you need, and export the results as JSON, CSV or Excel, or pull them through the Apify API.
What This Actor Does
- Collects the latest posts from public Instagram profiles, by username or profile link
- Collects single posts and reels from direct links
- Supports many profiles and links in one run
- Returns captions, hashtags, mentions, photos, videos, audio and carousel items
- Includes engagement: likes, comment counts and reel play counts
- Adds owner details, tagged users, co-authors, music info, pinned status and paid partnerships
- Optionally includes the latest comments on every post
- Filters by publish date and can skip pinned posts
Best For
- Social listening and brand monitoring
- Competitor and influencer research
- Tracking content and reel performance over time
- Finding sponsored posts and brand partnerships
- Building datasets for dashboards, BI, NLP or AI workflows
Input
Add one or more Instagram profiles or post links and set how many posts to collect.
Main input fields
startUrlsOne entry per row. Accepts usernames (natgeo,@natgeo), profile links (https://www.instagram.com/natgeo/), post links (https://www.instagram.com/p/SHORTCODE/) and reel links (https://www.instagram.com/reel/SHORTCODE/).maxPostsHow many of the most recent posts to collect from each profile. Direct post and reel links always return one post.includeCommentsAdds the latest comments to every post. Leave off if you only need post details.skipPinnedPostsLeaves out posts pinned to the top of a profile, so you get only the latest posts in order.postsDateRangeOnly collects posts newer than a date (2026-01-31) or a relative period (7 days,2 weeks,3 months,1 year).
Example input
{"startUrls": ["natgeo", "https://www.instagram.com/reel/DdG4RIxIPyf/"],"maxPosts": 100,"includeComments": true,"skipPinnedPosts": false,"postsDateRange": "30 days"}
Output
Each dataset item is one Instagram post or reel. If the same post is reached through both a profile and a direct link in one run, it is returned only once.
Fields
| Field | Description |
|---|---|
url, shortCode, id | Post link and identifiers |
type, productType | Image, Video or Sidecar (carousel); clips for reels |
caption, hashtags, mentions | Post text and the hashtags and accounts it mentions |
alt | Accessibility text for the post |
timestamp | Publish time (ISO 8601, UTC) |
likesCount, commentsCount | Engagement counts |
videoPlayCount | Play count for reels and videos |
displayUrl, images, videoUrl, audioUrl | Media links |
videoDuration, dimensionsWidth, dimensionsHeight | Media size and length |
childPosts | Every item of a carousel post |
ownerUsername, ownerFullName, ownerId | Who published the post |
taggedUsers, coauthorProducers | Tagged accounts and collaborators |
musicInfo | Song or original audio used in a reel |
isPinned | Whether the post is pinned on the profile |
paidPartnership, sponsors | Paid partnership flag and the brands involved |
isCommentsDisabled | Whether comments are turned off |
firstComment, latestComments | Latest comments with author, time and likes (when comments are enabled) |
inputUrl | The link or username from your input that produced this post |
Example output
{"inputUrl": "https://www.instagram.com/natgeo/","id": "3985535646503749253","type": "Video","productType": "clips","shortCode": "DdPd43hg0aF","url": "https://www.instagram.com/p/DdPd43hg0aF/","caption": "Summer school looks a little different for loon chicks. During their first 12 weeks, they learn essential survival skills from their parents...","hashtags": ["InsideTheEnchantedWaterways"],"mentions": ["DisneyPlus"],"alt": "Video by National Geographic on September 13, 2026.","timestamp": "2026-09-13T20:55:32.000Z","likesCount": 100362,"commentsCount": 258,"videoPlayCount": 1484927,"videoDuration": 30.04,"displayUrl": "https://instagram.fvii2-1.fna.fbcdn.net/v/t51.82787-15/...","videoUrl": "https://instagram.fvii2-4.fna.fbcdn.net/o1/v/t2/f2/m86/...","audioUrl": "https://instagram.fvii2-1.fna.fbcdn.net/o1/v/t2/f2/m78/...","dimensionsWidth": 1080,"dimensionsHeight": 1920,"childPosts": [],"ownerUsername": "natgeo","ownerFullName": "National Geographic","ownerId": "787132","taggedUsers": [],"coauthorProducers": [],"isPinned": null,"paidPartnership": false,"sponsors": null,"isCommentsDisabled": false,"firstComment": "Such a beautiful video!","latestComments": [{"id": "17870010036639467","text": "Such a beautiful video!","ownerUsername": "example_user","timestamp": "2026-09-14T15:22:34.000Z","likesCount": 0}]}
Media links are provided by Instagram and expire after a while, so download any files you need soon after the run.
How To Use
- Add one or more Instagram usernames, profile links, or post and reel links to
startUrls. - Set
maxPoststo how many recent posts you need from each profile. - Turn on
includeCommentsonly if you need comments. - Optionally set
postsDateRangeorskipPinnedPosts. - Run the actor and open the dataset, or export it as JSON, CSV or Excel, or read it through the Apify API.
Pricing
This actor uses pay-per-event pricing, so you only pay for results you receive:
- Post — charged once for each post saved to your dataset.
- Post comments — charged once for each post that comes back with comments, only when
includeCommentsis on. - Actor start — a small fixed fee of $0.001 per run.
Links that cannot be collected (private, deleted or unavailable) are not charged. Platform usage is included in these prices. Current prices for each Apify plan are shown on the actor's Pricing tab.
Free plan
On the Apify free plan, each run processes up to 2 links and up to 5 posts per profile. Upgrade to a paid Apify plan to remove these limits.
Best Practices
- Start with a small
maxPostsvalue to check the output quickly. - Use
postsDateRangefor recurring monitoring, so each run only collects new posts. - Turn on
skipPinnedPostswhen you need strictly the most recent posts. - Enable comments only for runs that need them; runs without comments are faster and cheaper.
- Use JSON export when you need nested data such as comments, carousel items and music info.
FAQ
Why is no data returned for some links?
The profile or post is probably private, age-restricted, deleted, or otherwise not publicly available. The run log names each link that could not be collected.
Why did a profile return fewer posts than I asked for?
The profile may simply have fewer posts, your date filter may exclude older ones, or Instagram did not return more at that moment. In that last case the log says so, and running again later usually collects the rest.
Do all posts have play counts?
Play counts are available for reels and videos. Photos and carousels don't have them.
How many comments are included per post?
The latest comments Instagram shows publicly for each post, usually around 10–15. The full comment count is always in commentsCount.
Can I collect stories, highlights or private accounts?
No. This actor collects public posts and reels only.
How long does a run take?
It depends on the number of profiles, maxPosts, and whether comments are enabled. Around 100 posts with comments from one profile typically finishes in well under a minute.
Responsible Use
Use this actor only for publicly available content, and make sure your use complies with applicable laws (including data protection rules such as GDPR) and Instagram's terms. Avoid collecting personal data you don't need.
Troubleshooting
- Open each link in a logged-out browser window to confirm it is public.
- Check the run log: it names any link that was skipped and why.
- If a profile returned fewer posts than expected, run it again a little later.
- Test with a small
maxPostsvalue before large runs.