WorkingInstagram · tested Nov 12, 2026
Instagram Post Scraper
Get the posts of any public Instagram profile, with caption, likes, comment count, date, photos, videos, tags and music.
- 46 data points for every post
- Profiles or post links is all you type
- From $1 per 1,000 posts
- No Instagram account or login needed
- 21 users
- 129 runs
- 124.5K rows of data
In short
Instagram Post Scraper gets the posts of any public Instagram profile, newest first, or single posts from their links. Each post is one row with caption, likes, comment count, date, photos, videos, carousel slides, tags, mentions and music. The newest comments of each post are an optional add-on, charged per comment.
- You enter
- Usernames, profile links or post links
- You get
- Caption, likes, comment count, date, photos, videos, tags and music
- Add-ons
- Latest comments
- Price
- $1 per 1,000 posts on Apify’s Free plan, down to $0.70 on Business. Apify’s platform costs are included.
- Formats
- CSV, Excel, JSON, Google Sheets, or the API
- Runs on
- Apify, in your own account. No login to the site needed.
1Sample rows
Real rows from a recent run. The full file has 48 columns.
5 of the posts found
| Caption | Posted | Media type | Likes | Comments |
|---|---|---|---|---|
| @paigepaul can do it all, just like protein cold foam | 13 Oct 2026 | video | 191,343 | 859 |
| a little BTS with | 14 Oct 2026 | video | 36,328 | 174 |
| does | 13 Oct 2026 | video | 62,526 | 206 |
| now available under Trending in the Starbucks app | 15 Oct 2026 | carousel | 47,484 | 314 |
| the Aerocano. definitely new. definitely frothy. airier too. | 29 Sept 2026 | video | 46,945 | 477 |
2Use cases
What people use it for.
Competitor tracking
What rival accounts post, how often and in which format, and which posts draw the most likes and comments.
Vetting influencers
Engagement on each post, paid partnership labels, collab posts and the brands an influencer tags.
Content planning
The captions, hashtags, formats and music behind the best posts in your niche.
Research datasets
Every post from a set of accounts over a chosen period, for trend or sentiment analysis.
3How it works
How it works. The same steps as the form on Apify.
Type the profiles
A username or profile link gets its posts, newest first. A post link gets that one post.
Keep only the posts you want
Set a start date, how many posts to take from each profile, or leave out pinned posts.
Add comments if you need them
Choose how many of each post's newest comments to add. You pay per comment, and none are added unless you ask.
Download your list
As a spreadsheet, in Google Sheets, or into your reporting tool.
4What you get
What you get for each post. 48 fields in 9 groups.
Add-ons are extra data you switch on in the scraper’s form.
Post
Post URL, Posted, Media type, Caption, Alt text, Product type, Is video, Pinned, Paid partnership, Paid partner, and 4 more
Author
Author username, Author name, Author ID, Author profile picture
Likes and comments
Likes, Comments, Likes hidden
Photos and videos
Carousel slides, Image URL, Video URL, Reel URL, Slide 1 image, Slide 2 image, Slide 3 image, Slide 4 image, Slide 5 image
Carousel slides
Carousel slide 1, Carousel slide 2, Carousel slide 3, Carousel slide 4, Carousel slide 5, Carousel slide 6, Carousel slide 7, Carousel slide 8, Carousel slide 9, Carousel slide 10
Tags, mentions and hashtags
Hashtags, Mentions, Co-authors, Tagged accounts
Music
Music
Latest commentsAdd-on
Latest comments
Scrape details
Source input, Scraped at
See all 48 columnsShow less
Post
urlPost URLLink to the post (https://www.instagram.com/p/<shortcode>/).timestamp_datetimePostedPublication time, ISO 8601 in UTC.media_typeMedia type"image", "video" or "carousel".captionCaptionCaption text.altAlt textAlt text of the image, when Instagram or the author set one.product_typeProduct typeInstagram product type: "feed" (photo), "carousel_container" or "clips" (reel).is_videoIs videoTrue for videos and reels.is_pinnedPinnedPinned to the top of the scraped profile. Always false for single post URLs.is_paid_partnershipPaid partnershipLabelled as a paid partnership.paid_partnersPaid partnerThe brands a paid partnership names ("Paid partnership with ..."), by username. Empty when it isn't one, and on some paid partnerships that name no brand.dimensionsDimensionsWidth x height of the main media, in pixels.timestampPosted (Unix)Publication time, Unix seconds.post_idPost IDNumeric Instagram media ID, as a string.shortcodeShortcodeThe code in the post URL.
Author
owner_usernameAuthor usernameUsername of the author.owner_full_nameAuthor nameDisplay name of the author.owner_idAuthor IDNumeric Instagram user ID of the author, as a string.owner_profile_pic_urlAuthor profile pictureProfile picture URL of the author. Instagram image links expire.
Likes and comments
likes_countLikesNumber of likes. Empty when the author hides like counts (like_and_view_counts_disabled is then true).comments_countCommentsNumber of comments Instagram shows on the post.like_and_view_counts_disabledLikes hiddenTrue when the author hides this post's like and view counts. likes_count is then empty, because Instagram shows visitors no real number.
Photos and videos
carousel_media_countCarousel slidesNumber of slides, for carousels.display_urlImage URLMain image or video cover URL. Instagram media links expire.video_urlVideo URLVideo file URL, for videos and reels. Instagram media links expire.reel_urlReel URLLink to the reel (https://www.instagram.com/reel/<shortcode>/), for videos only.image_1Slide 1 imageImage URL of carousel slide 1.image_2Slide 2 imageImage URL of carousel slide 2.image_3Slide 3 imageImage URL of carousel slide 3.image_4Slide 4 imageImage URL of carousel slide 4.image_5Slide 5 imageImage URL of carousel slide 5.
Carousel slides
child_post_1Carousel slide 1Carousel slide 1: id, alt, width, height, display_url, timestamp, media_type, video_url.child_post_2Carousel slide 2Carousel slide 2: id, alt, width, height, display_url, timestamp, media_type, video_url.child_post_3Carousel slide 3Carousel slide 3: id, alt, width, height, display_url, timestamp, media_type, video_url.child_post_4Carousel slide 4Carousel slide 4: id, alt, width, height, display_url, timestamp, media_type, video_url.child_post_5Carousel slide 5Carousel slide 5: id, alt, width, height, display_url, timestamp, media_type, video_url.child_post_6Carousel slide 6Carousel slide 6: id, alt, width, height, display_url, timestamp, media_type, video_url.child_post_7Carousel slide 7Carousel slide 7: id, alt, width, height, display_url, timestamp, media_type, video_url.child_post_8Carousel slide 8Carousel slide 8: id, alt, width, height, display_url, timestamp, media_type, video_url.child_post_9Carousel slide 9Carousel slide 9: id, alt, width, height, display_url, timestamp, media_type, video_url.child_post_10Carousel slide 10Carousel slide 10: id, alt, width, height, display_url, timestamp, media_type, video_url.
Tags, mentions and hashtags
hashtagsHashtagsHashtags in the caption, with the #.mentionsMentionsUsernames mentioned in the caption, without the @.coauthorsCo-authorsCollab co-authors: id, username, full_name, is_verified, profile_pic_url.user_tagsTagged accountsAccounts tagged in the media: id, username, full_name, is_verified, profile_pic_url.
Music
musicMusicAudio of a reel or video: audio_id, song_name, artist_name, uses_original_audio, should_mute_audio, should_mute_audio_reason, is_trending_in_clips, is_explicit.
Latest commentsadd-on
latest_commentsLatest commentsOnly with Comments per post set, for posts that have comments: the post's newest comments, newest first, each with comment_id, text, created_at (Unix seconds), likes_count, is_edited, is_covered (hidden by Instagram), giphy_id, giphy_url, owner_id, owner_username, owner_is_verified, owner_profile_pic_url.
Scrape details
source_urlSource inputThe input this post came from, as you entered it.scraping_timeScraped atWhen the row was scraped, ISO 8601 in UTC.
5Pricing
Pricing. From $1 per 1,000 posts, platform costs included.
Your Apify plan
Don’t pay for data you don’t need
Tell us the data you need and we deliver just that, cleaned and ready to use.
- You pay per data point, not for a tool or a subscription
- No duplicates, no filler, no columns you'll delete
- Delivered to your sheet or CRM, once or every week
- Free sample rows before you pay anything
Good to know
Instagram hides view and play counts from visitors who aren't logged in, so posts come without them. Comments are top-level only, and a carousel row keeps its first 10 slides. Image and video links expire, so download any media you need soon after the run.
6Questions
Questions.
How do I keep my first run small and cheap?
Start with one or two profiles and keep 🔢 Max posts per profile at 20, or set 🛑 Max posts in total: the run stops there. Leave 💬 Comments per post at 0 until you know you need comments. To follow a profile over time, schedule a run with 📅 Posted after set to 1 day so each run gets only the new posts.
Is it legal to scrape Instagram?
This scraper collects only data that Instagram shows publicly to visitors who are not logged in. Posts can still contain personal data, such as usernames of tagged accounts or commenters. Personal data is protected by laws such as the GDPR in Europe, so make sure you have a lawful reason to collect and use it, and check with a lawyer if you are unsure.
Do I need an Instagram account?
No. You don't need an Instagram account, a login or cookies.
Can I scrape private Instagram profiles?
No. Instagram shows a private profile's posts only to approved followers, so private profiles are skipped.
Can I get view or play counts?
Not on posts: Instagram does not show view counts to logged-out visitors. For reels, Instagram Reels Scraper gives the play count of each reel.
How do comments work?
Set Comments per post to add each post's newest comments to its row. Comments come newest first and are top-level comments only: replies and the "most relevant" order are not available without logging in. A post with no comments has no latest_comments. If Instagram refuses a post's comments, the post is still saved without them, and the run's status message says how many posts missed their comments. You pay only for the comments you get. For many comments per post, or one row per comment, use the Instagram Comments Scraper.
Show 5 more questionsShow less
Why do some media links stop working?
Instagram image and video links expire after a while. Download the media soon after the run if you need to keep it.
What happens when a run fails?
The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both.
How much does it cost?
$1.00 per 1,000 posts on Apify's free plan, down to $0.70 on the Business plan. Use the calculator above for your numbers.
Do I need an Apify account?
Yes. The scraper runs in your Apify account and Apify bills you per result. A free Apify account is enough to try it.
Can you run it for us instead?
Yes. We can run it on a schedule, clean up the results and send them to your sheet, CRM or database. Ask for a quote and we reply within one business day.
7Updates
Kept working.
We run a small test search every day and fix the scraper when Instagram changes.
- Nov 12, 2026
Paid partnerships name the brand
A post marked "Paid partnership" now names the brand in a new paid_partners column, for example mastercard on a Leo Messi post. Some paid posts name no brand; the column is then empty.
- Nov 12, 2026
Fewer posts lost to proxy hiccups
When Apify's proxy briefly loses its connection, the request now waits a moment and goes again on a new IP, without using up one of its tries, so fewer posts are skipped as refused.
- Nov 12, 2026
Hidden likes are empty, not 3
When an author hides a post's likes, Instagram shows visitors a stand-in number, and likes_count used to say 3. It is now empty, and a new like_and_view_counts_disabled column says the likes are hidden.
All 10 updatesShow less
- Nov 12, 2026
Easier to use, for people and AI agents
The form has clearer names (Newer than is now 📅 Posted after, Max results is 🛑 Max posts in total), and both date fields use a date picker that also takes periods such as "3 months"; dates typed the old way keep working. Every view in the Output tab starts with the post's link. Every output field now has a plain description and an example value, so AI agents using Apify's MCP server know what each one holds, and a run that reaches the maximum cost you set stops cleanly, keeps everything saved so far and says so in its status. Saved tasks and API calls keep working as before.
- Nov 12, 2026
Posts between two dates
New Posted before field. With Newer than, it gives you only the posts published between two dates, for example one month last year. Newer posts are passed over without being charged.
- Nov 8, 2026
No new results is not a failure
A scheduled run with "Newer than" set no longer fails on a day the profile posted nothing new. It finishes cleanly with 0 posts and says there was nothing new.
- Oct 26, 2026
Profiles work again
Instagram changed its profile pages on October 22, and profile links stopped returning posts. They work again, with the same fields as before, pinned posts included. Each post is now read on its own, so a large profile takes longer than it did.
- Oct 18, 2026
Fewer failed runs
A profile that is private or has no posts now finishes cleanly, with the reason, instead of showing an error.
- Oct 16, 2026
Pricing set
$1 per 1,000 posts. The newest comments on each post are optional, at $1 per 1,000 comments.
- Oct 16, 2026
Launched
Paste Instagram profiles or post links and get each post's caption, likes, comment count, date, photos, videos, carousel slides, tags and music. No Instagram account needed.