Instagram Posts Scraper — Profile Posts, Captions & Stats avatar

Instagram Posts Scraper — Profile Posts, Captions & Stats

Pricing

from $1.75 / 1,000 target checkeds

Go to Apify Store
Instagram Posts Scraper — Profile Posts, Captions & Stats

Instagram Posts Scraper — Profile Posts, Captions & Stats

Instagram posts scraper and API: every public post of a profile with caption, hashtags, mentions, likes, comments, plays, media links and location. No login, no cookies, no run fee.

Pricing

from $1.75 / 1,000 target checkeds

Rating

0.0

(0)

Developer

Matvey

Matvey

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

3 days ago

Last modified

Share

Instagram Posts Scraper turns public Instagram profiles, post links or hashtags into a flat table. One row per post or per comment: caption, hashtags and mentions pulled out of it, likes, comments, plays, the media file link, location and the author. No login, no cookies, no Instagram account of yours at risk.

Three modes, one Actor

ModeYou giveOne row is
👤 Posts of a profilehandles or profile linksone post
💬 Comments under a postpost or reel linksone comment
#️⃣ Posts under a hashtaghashtagsone post

Why this needs us at all

Instagram shows none of this to a logged-out visitor: the profile page answers with a redirect to the login screen and its internal API answers 401 require_login. Checked on 28 October 2026 from a plain server and again through a residential address — same answer both times. This Actor reads the data through a paid source that holds the sessions, so you never hand over your own cookies and never get an account flagged.

What it costs

Two charges, both stated before you press Start:

What is chargedWhen
One targetOnce per profile, post link or hashtag in your list — even if it turns out to be private, empty or deleted
One rowFor every post or comment actually delivered

There is also a run fee, and it is the smallest one in this niche — 30% below the cheapest competitor charges to start a run.

On the Apify Free plan

A run collects the first target in your list in full — every row it has, not a sample — and nothing is charged at all. The remaining targets come back as a free note saying they were left alone. So you can see the real shape and the real volume of the data before you pay anything.

The reason the rest is held back is plain: every target costs us a request to a paid data source, and the free plan does not cover it.

Why a target is charged even when it is empty: looking it up costs us one request to the data source whether it returns sixty posts or none. A private profile and a post with comments turned off are normal answers, not failures.

Output

{
"type": "post",
"postUrl": "https://www.instagram.com/p/ABC123/",
"ownerUsername": "natgeo",
"takenAt": "2026-10-27T14:07:48.000Z",
"caption": "…",
"hashtags": ["wildlife", "photography"],
"mentions": ["natgeotravel"],
"likeCount": 27400,
"commentCount": 312,
"playCount": 905718,
"imageUrl": "https://…",
"videoUrl": null,
"locationName": "Serengeti"
}

Comment rows carry the comment text, its author, when it was written, how many likes and replies it has, and whether the author of the post wrote it.

What it does not do

  • Private accounts. The target is charged like any other lookup, no rows come back.
  • Likes of a private post, or who viewed a story. Instagram does not publish those.
  • Posting, liking or replying. This Actor only reads.

For AI agents

  • Minimal input: {"mode": "posts", "usernames": ["natgeo"]} — or {"mode": "comments", "postUrls": ["https://www.instagram.com/p/DemLxMGgoL_/"]}, or {"mode": "hashtags", "hashtags": ["wildlife"]}.
  • Returns: one row per post (posts, hashtags) or per comment (comments); maxItemsPerTarget caps each profile, post or hashtag. A target that gives nothing — private account, comments off, hidden hashtag — gets one free type: "notice" row with the reason; filter it out with type != "notice".
  • Time: about 10 seconds for 20 comments of one post, 30–50 seconds for 60 posts of one profile. A few targets — call synchronously (run-sync-get-dataset-items); long lists — start the run and poll it.

Errors and empty runs

An empty run always says why in its own words — private account, comments turned off, hashtag hidden — in a free notice row. Filter it out with type != "notice". If the data source stops answering, the run passes its answer through word for word instead of guessing.

Your feedback

Found a bug or a missing field? Open an issue on the Actor page. Problems reported by buyers are fixed the same day.