Instagram Profile Scraper πŸ“Έ Posts, Followers & Engagement avatar

Instagram Profile Scraper πŸ“Έ Posts, Followers & Engagement

Pricing

from $1.30 / 1,000 results

Go to Apify Store
Instagram Profile Scraper πŸ“Έ Posts, Followers & Engagement

Instagram Profile Scraper πŸ“Έ Posts, Followers & Engagement

Scrape any Instagram account plus their posts. Followers, bio, category, verification, and per-post likes, comments, plays, hashtags and media. Paste usernames or profile URLs. Export to JSON, CSV or Excel. No login, no cookies, no API key.

Pricing

from $1.30 / 1,000 results

Rating

5.0

(1)

Developer

GatherWorks

GatherWorks

Maintained by Community

Actor stats

0

Bookmarked

78

Total users

13

Monthly active users

a month ago

Last modified

Categories

Share

Give it an Instagram handle and get the account and their posts β€” followers, bio, bio link, category and verification, then per-post likes, comments, plays, hashtags and media, on a clean row each.

No account, no cookies, no API key. Paste handles and run.


πŸ” What is the Instagram Profile Scraper?

Give it handles β€” instagram, @instagram or a full profile URL, all normalised for you. For each account it returns:

  • πŸ‘€ the account β€” followers, following, post count, bio, category, verification
  • πŸ”— the link in the bio
  • πŸ“Έ their posts, with likes, comments, plays and every image URL, Reels and video posts marked with the video URL where there is one, plus hashtags lifted from each caption and any tagged location

That is a normal run. If you want the accounts on their own, switch πŸ“Έ Include their posts off.

⚑ What can it do?

  • πŸ‘₯ Take many accounts at once and return one dataset covering all of them.
  • πŸ“Έ Return their posts as part of the same run, one row per post, keyed back to the handle that published it.
  • 🎬 Keep only Reels and videos, if that is what you are analysing.
  • πŸ”’ Filter by likes and ignore the long tail.
  • πŸ“… Filter by date. Keep only posts inside a window you set.
  • 🚧 Cap how far a filter searches, so a narrow filter stops rather than running away with your budget.
  • πŸ”Ž Filter before you pay. A post that does not match is never stored and never charged for.
  • πŸ“„ Export anywhere. JSON, CSV, Excel β€” the dataset is yours.

🎯 A private account is reported, not retried

An account set to private has no publicly visible posts. Rather than returning an empty list that looks like a failure, the account row comes back with isPrivate: true and the run says so plainly β€” and you are not charged for posts that were never available.

⚑ Speed and accuracy

Speed. Measured on a real run: 1 account and 8 posts in 8 seconds. Each account is one lookup, and their posts come back twelve at a time.

Accuracy. Handles are normalised, so instagram, @instagram and a full profile URL resolve to the same account and are collected once. Counts are numbers, not display text. Timestamps are ISO 8601. Post links are canonical instagram.com/p/… permalinks built from the post's own short code. Carousels return every image URL, not just the first. A handle that does not resolve is reported and skipped rather than returned empty.

πŸ“Š What data does it return?

Account rows (rowType: "account") β€” one per handle:

FieldNotes
🏷️ handle, fullNameHandle and display name
πŸ”— profileUrlDirect link to the profile
πŸ“ bioTextThe bio text
πŸ”’ followersCount, followsCount, postsCountAudience and output, as numbers
βš–οΈ followerRatioFollowers divided by following
βœ… isVerified, 🚩 isPrivate, 🏒 isBusinessAccount state
🏷️ categoryNameThe business category, where the account sets one
πŸ”— externalUrlThe link in the bio

Post rows (rowType: "post") β€” one per post kept, following the account they belong to:

FieldNotes
πŸ“ postCaption, captionLengthThe caption and its length
πŸ”— postUrl, postShortCodeCanonical permalink and its short code
πŸ“Š likesCount, commentsCount, playsCountEngagement, as numbers
πŸ“ˆ engagementTotal, engagementPerPlayLikes plus comments, and that as a share of plays
πŸ–ΌοΈ mediaKind, imageUrls, hasVideo, videoUrlMedia type and files
🏷️ hashtagsLifted from the caption
πŸ“ locationNameTagged location, where there is one
🚩 isSponsoredWhether it is a declared paid partnership
πŸ“… publishedAtWhen it was posted, ISO 8601

🚫 What it does not return

  • Contact details. No email address and no phone number is returned on any row, for any account β€” business, creator or personal, and regardless of what the account displays in the Instagram app. If you need contact data, this is not the Actor for it.
  • Posts from private accounts. They are not publicly visible; the account row says so.
  • Stories and Highlights. They expire and are not part of a profile feed.
  • Follower lists. Audience size is a number; the individual followers are not returned.
  • Analytics only the account owner can see β€” reach, impressions, saves, audience demographics.

πŸ’° How much does it cost?

You pay per result β€” for the rows the run actually produces, never for runtime, and never on a subscription.

Standard rate: πŸ’΅ $0.0022 per row, and a row is a row: an account row and a post row cost exactly the same.

RunRowsCost
🟩 10 accounts + 30 posts each310πŸ’΅ $0.68
🟨 100 accounts, posts switched off100πŸ’΅ $0.22
🟧 1 account + 1,000 posts1,001πŸ’΅ $2.20

A handle that does not resolve is free. So is a post your filters remove. A month you do not run it costs nothing at all β€” there is no plan to keep alive.

What you get for that

Included here
πŸ“Έ Posts as part of a normal runβœ… same rate as the account row
πŸ–ΌοΈ Every image in a carousel, not just the firstβœ…
πŸ“ˆ Engagement per play, computedβœ…
🏷️ Hashtags as an arrayβœ… free
πŸ“ Tagged location and paid-partnership flagβœ… free
πŸ”Ž Video-only, likes and date filtersβœ… free
πŸ’³ Minimum spendnone

πŸš€ How do I use it?

  1. Add one or more usernames or profile URLs.
  2. Run as-is. You get each account plus their posts, every row at the same rate.
  3. Set maximum posts per account to control how much each account returns.
  4. Optionally filter the posts to videos, a like count, or a date window.
  5. Only want the profiles? Switch πŸ“Έ Include their posts off.
  6. Run, then export the dataset as JSON, CSV or Excel.

βš™οΈ Input

FieldDefaultNotes
πŸ‘€ usernamesβ€”Handles, @handles or profile URLs
πŸ“Έ includePoststrueCollect their posts β€” same rate as the account row
πŸ”’ maxPostsPerAccount50How many posts to return per account
🎬 videosOnlyfalseKeep only Reels and video posts
πŸ”’ minLikesnoneKeep only posts with at least this many likes
πŸ“… postedAfter, postedBeforenoneKeep only posts inside this window
🚧 maxScanned1000How far a filter may search before stopping
{
"usernames": ["instagram", "@natgeo"],
"includePosts": true,
"maxPostsPerAccount": 50,
"videosOnly": false
}

πŸ“„ Output example

A default run returns the account row first, captured from a live run:

{
"rowType": "account",
"handle": "nasa",
"fullName": "NASA",
"profileUrl": "https://www.instagram.com/nasa/",
"bioText": "Making the seemingly impossible, possible. \u2728",
"externalUrl": "https://www.nasa.gov/",
"followersCount": 104444393,
"followsCount": 91,
"postsCount": 4899,
"categoryName": "Government Agencies",
"isBusiness": true,
"isVerified": true,
"isPrivate": false
}

then their posts, one row each:

{
"rowType": "post",
"accountHandle": "instagram",
"postId": "3974396910131444700",
"postShortCode": "Dcn5O64y3xi",
"postUrl": "https://www.instagram.com/p/Dcn5O64y3xi/",
"postCaption": "5, 6, 7, ATE πŸ”₯",
"mediaKind": "video",
"hasVideo": true
}

❓ Frequently asked questions

Do I need an Instagram account? No. No account, no cookies, no API key.

What forms of username work? instagram, @instagram, and https://www.instagram.com/instagram/ all resolve to the same account.

Does it return posts? Yes β€” posts come with a normal run, at the same rate as the account row. Switch πŸ“Έ Include their posts off if you only want the profiles.

What happens with a private account? You get the account row with isPrivate: true, and no posts β€” because none are public. You are not charged for posts that were never available.

Does it return email addresses or phone numbers? No. No contact details are returned on any row, for any account, business or otherwise.

Does it return Stories? No. Stories expire and are not part of a profile feed.

How do I keep a run small? Lower maximum posts per account, or switch the posts off entirely and pay for one row per handle.

🏷️ Pricing

Pay per result β€” you are charged for output, not for platform time.

EventPriceCovers
πŸ“Š result β€” primaryπŸ’΅ $0.0022Any row returned, account or post, at one price
▢️ apify-actor-startπŸ’΅ $0.00005Starting one run, charged once per GB of memory
πŸ”— Bio link, follower and engagement countsβœ… freeOn every account row
🏷️ Hashtags, location and paid-partnership flagβœ… freeOn every post row
πŸ”’ Private accountsβœ… freePosts never fetched, never charged
❌ Handles that do not resolveβœ… freeReported, never charged
πŸ”Ž Posts your filters removeβœ… freeNever stored, never charged

One price, one event. Whatever the run returns, each row costs the same.

πŸ… Rates by tier

The prices above are the standard rate. Higher Apify plans are billed at the discounted tiers below, automatically:

EventFREEBRONZESILVERGOLD
πŸ“Š resultπŸ’΅ $0.0022πŸ’΅ $0.0019πŸ’΅ $0.0016πŸ’΅ $0.0013
▢️ apify-actor-startπŸ’΅ $0.00005πŸ’΅ $0.00005πŸ’΅ $0.00005πŸ’΅ $0.00005

πŸ›‘ You are never billed past your limit

Set a maximum charge on the run and the Actor stops when it reaches it, with every account collected up to that point complete and saved. Filtered-out posts are never stored and never billed.