Instagram Scraper: Posts, Comments & Stories avatar

Instagram Scraper: Posts, Comments & Stories

Pricing

from $0.99 / 1,000 posts

Go to Apify Store
Instagram Scraper: Posts, Comments & Stories

Instagram Scraper: Posts, Comments & Stories

Scrape Instagram accounts by username — posts, comment threads (up to 500 per post) and live Stories. No login, no cookies. Business-plan rates: accounts $1.50/1K, posts $0.99/1K, comments $0.49/1K, Stories $8.00/1K; higher on lower plans. No keyword or hashtag search.

Pricing

from $0.99 / 1,000 posts

Rating

5.0

(1)

Developer

Socialhz

Socialhz

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Give it a list of Instagram accounts. Get back their posts with full engagement data, their comment threads, and their live Stories — in one run, with no Instagram login and no cookies.

Built for competitor monitoring, creator and influencer tracking, campaign reporting and content analysis.


What it does

  • Posts by account — 12 per page, paging as deep as you ask for. Photos, videos, reels and carousels, each labelled by type
  • Full carousel expansion — every still in a multi-image post, not just the cover
  • Deep comment threads — up to 500 top-level comments per post, paged automatically; every record tells you whether more remain
  • Live Stories — captured while they are live, with media type, dimensions and media count
  • No login required — no Instagram account, no cookies, no session token, ever
  • Every account accounted for — each account you supply comes back with a record, so you always know what was found
  • 100% run success rate — retries, backoff and duplicate detection built in

Input

FieldTypeDefaultDescription
usernamesarrayRequired. Accounts to scrape. A username, @handle or full profile URL all work. Post, reel, Story and hashtag links are rejected — they are not profile links. Invalid entries are skipped and never charged. Max 200 accounts per run
maxPostsPerAccountinteger12Posts per account. Arrive in pages of 12. Max 500
includeCommentsbooleanfalseRetrieve comment threads. Charged separately
maxPostsToCommentinteger5How many of each account's posts get their comments retrieved, newest first. Max 100
maxCommentsPerPostinteger50Comments per post. Arrive ~13 at a time. Max 500
includeStoriesbooleanfalseCapture live Stories. Charged per account checked

Example input

{
"usernames": ["nasa", "natgeo", "@zara"],
"maxPostsPerAccount": 24,
"includeComments": true,
"maxPostsToComment": 5,
"maxCommentsPerPost": 50,
"includeStories": false
}

Output

Three kinds of record, told apart by the type field.

post — one per post. The main output. story — one per live Story, when Stories are requested. account — one per account that produced no posts, so you can see what happened and why.

FieldTypeDescription
typeenumpost, story or account
usernamestringThe account this record belongs to
profileIdstring | nullInstagram's internal account id
displayNamestring | nullAccount display name
isVerifiedboolean | nullBlue-tick status
profileUrlstringLink to the profile
accountStatusenumok, no_posts, not_found, unavailable
postIdstring | nullPost id. null on story and account records
shortCodestring | nullShort code from the post URL
postTypeenumphoto, video, reel, carousel
urlstring | nullLink to the post
captionstring | nullPost caption
postedAtstring | nullISO 8601 UTC
likeCountnumber | nullLikes at time of retrieval
commentCountnumber | nullInstagram's own count. Usually higher than commentsRetrieved
viewCount / playCountnumber | nullVideo posts only. null on photos
hashtags / mentions / taggedUsersarrayExtracted from the post
thumbnailUrlstring | nullPreview image
videoUrlstring | nullVideo file. Video posts only
videoDurationSecondsnumber | nullVideo length. Video posts only
postsPartialboolean | nulltrue when paging stopped early for this account, so fewer posts were returned than asked for
imageUrlsarrayImage files, including every still in a carousel. A carousel item that is a video has no entry here, so this can be shorter than carouselItemCount
carouselItemCountnumberItems in a carousel, counting both stills and videos. 0 on single-media posts
mediaWidth / mediaHeightnumber | nullMedia dimensions
isAd / isPaidPartnershipboolean | nullAs reported by Instagram
isPinnedboolean | nullPinned to the profile grid
commentsarrayTop-level comments. Empty unless requested
commentsRetrievednumberHow many comments this record contains
commentsRemainingbooleantrue if further comments exist that were not retrieved
commentsStatusenumretrieved, skipped_no_comments, skipped_limit, not_requested, unavailable

Story record

Emitted once per live Story when Stories are requested.

FieldTypeDescription
typeenumAlways story
username / profileId / displayName / isVerifiedAccount identity, as above
mediaCategorystring | nullThe Story's media type
width / heightnumber | nullMedia dimensions in pixels
mediaCountnumberHow many media files the Story had. The files themselves are not returned
postedAtstring | nullISO 8601 UTC

Account record

Emitted once for an account that produced no posts, so a paid-for lookup is never silent.

FieldTypeDescription
typeenumAlways account
accountStatusenumno_posts, not_found or unavailable
postsFound / storiesFoundnumberWhat was retrieved for this account
postIdnullAlways null on this record type

Comment object

FieldTypeDescription
idstringComment id
textstringComment body
authorstring | nullUsername
authorNamestring | nullDisplay name
authorIsVerifiedboolean | nullBlue-tick status
likeCountnumber | nullLikes on the comment
postedAtstring | nullISO 8601 UTC
isPinnedboolean | nullPinned by the account owner

Pricing

Charged per account looked up, per row delivered, plus a small fixed fee when a run starts. Cheaper on higher Apify plans.

EventFree planBusiness plan
Account looked up$2.50 per 1,000$1.50 per 1,000
Post$1.60 per 1,000$0.99 per 1,000
Comment$0.89 per 1,000$0.49 per 1,000
Stories checked$12.00 per 1,000$8.00 per 1,000
Run start$0.005$0.005

Why accounts are charged separately. Looking up an account costs the same whether it turns out to have 500 posts, no posts, or not to exist at all. Charging for the lookup keeps the per-post price low for everyone instead of loading the cost of dead handles onto customers with clean lists. Entries that are not valid usernames are rejected before any lookup happens and cost you nothing.

Stories are charged per account checked, not per Story. One check covers an account however many Stories it has — including none, which is common, since Stories expire after 24 hours.

Worked examples, at Business-plan rates

Daily watch — 10 accounts, 12 posts each, no comments 10 × $0.0015 + 120 × $0.00099 + $0.005 = $0.14

Deep pull — 10 accounts, 24 posts each, comments on the newest 5 posts (~50 each) 10 × $0.0015 + 240 × $0.00099 + 2,500 × $0.00049 + $0.005 = $1.48

Stories sweep — 50 accounts, Stories only, 12 posts each 50 × $0.0015 + 50 × $0.008 + 600 × $0.00099 + $0.005 = $1.07

Set Maximum cost per run in the run options to cap spend. The Actor stops cleanly at that ceiling and returns everything it charged for.


Tips

  • Start with Stories and comments off. Get the posts first, see which accounts and posts matter, then re-run narrowly with comments enabled.
  • Five posts per account is usually enough to read the room on comments, and keeps runs quick.
  • Schedule it for Stories. A daily or twice-daily schedule catches them while they are live.
  • Keep your username list current. Every account you supply is looked up, so a tidy list keeps runs lean.

Support

Report a problem through the Issues tab on this Actor's page. Issues are reviewed regularly.

When reporting, please include the run ID, the input you used, and what you expected.

For volume enquiries, custom requirements, or anything not specific to a single run, email socialhtz@gmail.com.