Instagram Profile Scraper avatar

Instagram Profile Scraper

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Instagram Profile Scraper

Instagram Profile Scraper

Scrape public Instagram profiles from usernames or links. Get bio, followers, following, posts, verified status, emails and phones from the bio, engagement rate and latest posts with likes and comments. Bulk input, live results, no login needed.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Insights Data

Insights Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

๐Ÿ“ธ What is Instagram Profile Scraper?

Instagram Profile Scraper turns a list of Instagram usernames or profile links into one clean row per account, with followers, bio, engagement analytics and the latest posts. Marketers, agencies, sales teams and researchers just paste their profiles and click Start, with no code, no Instagram account and no cookies. On the Apify Free plan, results cost $2.00 per 1,000 profiles, paid from your $5 monthly credit.

Each row also has the posts count, verified and private status, bio links, any email or phone number written in the bio, and the latest posts with likes, comments and top comments.

  • Vet creators: compare followers, engagement rate, average likes and posts per week before you reach out.
  • Find business contacts: collect the emails, phone numbers and websites that businesses chose to write in their bio, for Instagram lead generation. Contact buttons are not read, and you are responsible for using personal data lawfully (see the FAQ).
  • Monitor competitors and brands: track follower counts, posting frequency, content mix and top posts over time.
  • Research hashtags and mentions: see which hashtags and accounts a group of profiles uses most.
  • Feed your tools: send an Instagram profile dataset to Google Sheets, a CRM, a dashboard or an AI pipeline.

What can Instagram Profile Scraper do?

  • ๐Ÿ“‹ Bulk input: paste usernames, @handles and profile links in one list. Formats can be mixed, and duplicates are removed.
  • ๐Ÿ“ธ Profile details: name, bio, followers, following, posts count, verified, private, reels, highlights, pronouns and profile picture link.
  • ๐Ÿ“ง Instagram contact scraper for bios: emails, phone numbers and the domain of every bio link.
  • ๐Ÿ“ˆ Instagram analytics per profile: engagement rate, average and median likes, average comments, posts per week, days since the last post, content mix, top hashtags, top mentions and the top post.
  • ๐Ÿ—‚๏ธ Latest posts: 10 posts per profile by default and up to 2,000, with likes, comments, exact time, video link, music, tagged users, collaborators, location and top comments.
  • ๐Ÿ”“ No login: no Instagram account, password or cookies.
  • โšก Live results: each profile and each post is saved while the run is still going.
  • ๐Ÿ”Œ Apify platform: start runs through the API, schedule them, monitor them and send the results to other apps.

๐Ÿ“Š Instagram Profile Scraper data: what can you extract?

Each saved row holds the Instagram profile data below. Most people only need the first few fields; the rest are there for deeper analysis. The field names are the same in Apify Console, the API and every export format.

FieldWhat you get
๐Ÿ‘ค username, fullNameUsername and display name
๐Ÿ”— url, inputUrlProfile link, and the username or link exactly as you typed it
๐Ÿ“ biographyBio text
๐Ÿ‘ฅ followersCountFollower count as a full number (for example 268354129, not "268M")
๐Ÿ‘ฃ followsCountNumber of accounts the profile follows
๐Ÿงฎ postsCount, postsCountApproxNumber of posts, and a flag when Instagram shows that number rounded (see the FAQ)
๐ŸŽ–๏ธ verified, privateVerified badge and private-account flag
๐Ÿ“ง contactemails and phones found in the bio text, plus linkDomains of the bio links
๐ŸŒ externalUrl, externalUrlsFirst bio link, and every bio link with its title and domain
๐Ÿท๏ธ bioHashtags, bioMentionsHashtags and accounts mentioned in the bio
๐Ÿ“ˆ analyticspostsAnalyzed, avgLikes, medianLikes, avgComments, engagementRatePct, postsPerWeek, lastPostAt, daysSinceLastPost, contentMix, topHashtags, topMentions, topPost, collabPostsShare
๐Ÿ—‚๏ธ latestPostsThe collected posts (see the post fields below)
๐ŸŽฌ hasReelsWhether the profile has published reels
๐Ÿ“Œ highlights, pronounsStory highlights (ID and title) and pronouns, when Instagram shows them
๐Ÿ–ผ๏ธ profilePicUrlProfile picture link
๐Ÿ†” id, fbidInstagram user ID and the linked Facebook-side account ID
๐Ÿ—’๏ธ notesAnything that limited the row, such as a private account
๐Ÿ“… scrapedAtTime the row was collected (UTC)
๐Ÿšซ errorOnly on rows of profiles that could not be collected (not billed)

Post fields

Posts in latestPosts and rows of the separate Posts table use these fields. Several of them are only filled when Full post details is on (see the note below the table).

FieldWhat you get
๐Ÿ”— url, shortCode, idPost link and identifiers
๐ŸŽฌ mediaType, isReel, is_video, videoUrlPost type, reel and video flags, video link. mediaType is GraphImage for a photo, GraphVideo for a video and GraphSidecar for a carousel post
๐Ÿ“ caption, hashtags, mentions, altCaption, its hashtags and mentions, and the image description
๐Ÿ–ผ๏ธ displayUrl, childPostsImage link and the items of a carousel post
โค๏ธ likesCount, likesHiddenLikes, and a flag when the owner hides them
๐Ÿ’ฌ commentsCount, commentsDisabled, topCommentsComments count, comments-off flag, and the top comments with text, author, likes, replies and time
๐Ÿ“… timestamp, timestampApproxExact post time with full details, or an approximate time without them
๐Ÿ“ locationId, locationNameTagged location
๐ŸŽต musicSong title and artist, or "Original audio"
๐Ÿท๏ธ tagged_usersAccounts tagged in the post
๐Ÿค coauthors, isCollabCollaborators on the post
๐Ÿค– isAiLabeledWhether the post carries Instagram's AI label
๐Ÿšง detailsMissingPresent (true) when Instagram didn't return a post's details; the post keeps its basic fields

Note: likesCount, likesHidden, commentsCount, commentsDisabled, topComments, timestamp, videoUrl, childPosts, locationId, locationName, music, tagged_users, coauthors, isCollab and isAiLabeled are only filled when Full post details is on. Without it, posts have timestampApprox instead. analytics and latestPosts only appear when Collect latest posts is on. fullName, biography and externalUrl are empty when the profile doesn't have them.

What data can't Instagram Profile Scraper extract?

  • Follower lists and following lists (you get the counts only)
  • Posts of private accounts (you still get the profile details)
  • Stories
  • Emails or phone numbers that are not written in the bio text
  • Reel or video view counts
  • Full comment threads (you get the top comments shown with each post)
  • More than 2,000 posts per profile
  • Accounts found by keyword: this Instagram user scraper needs usernames or profile links and can't search for accounts

๐Ÿš€ How to scrape Instagram profile data

Instagram Profile Scraper is built for an easy start, even if you have never extracted data from the web before. Here is how to scrape Instagram profiles in five steps:

  1. Create a free Apify account with your email.
  2. Open Instagram Profile Scraper and click Try for free.
  3. Paste usernames, @handles or profile links into Instagram profiles, one per line. For a first test, use 1 or 2 profiles.
  4. Click Start. Profiles appear in the Output tab of the run one by one.
  5. To download, go to Storage โ†’ Datasets, open the run's dataset and click Export. The Output section below explains the three tables.

You run this Instagram profile scraper online in Apify Console, so there is nothing to install.


๐Ÿ’ฒ Instagram Profile Scraper pricing

How much does it cost to scrape Instagram profiles?

Instagram Profile Scraper is an Actor, which is Apify's name for a program that runs in the cloud. It uses pay-per-event pricing: you pay a fixed price for specific events, here each saved profile row and each run start. Your bill has three parts:

  1. Results: a fixed price for each profile row that is saved. The price depends on your Apify plan (see the table).
  2. Start fee: $0.00005 (a small fraction of a cent) each time a run starts. This is the price at the default memory of 1 GB, which is the amount of computer memory the run gets.
  3. Platform usage: the computing time and storage the run uses on Apify's servers. You pay it at your Apify plan's rates, and it grows with the amount of work the run does.
Apify planPrice per profilePrice per 1,000 profiles
๐Ÿ’ฒ Free$0.002$2.00
๐Ÿ’ฒ Starter$0.0018$1.80
๐Ÿ’ฒ Scale$0.0016$1.60
๐Ÿ’ฒ Business and higher$0.0015$1.50

The plan discount applies to the result price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.

What is billed as a result: only saved profile rows. Rows for profiles that could not be collected or were skipped are not billed, and the Posts and Top comments tables don't add result charges. A private account still gives a saved profile row (details, no posts), so it is billed like any other profile.

Example: 1,000 profiles on the Free plan cost $2.00 in result charges, plus the start fee and the platform usage of the run.

How to keep the cost low

  • Test first: run 1 or 2 profiles with the default settings. When the run finishes, the run page shows what it cost, so you can scale up from there.
  • Lighter runs: every post adds work, and full details add more for each post. Switching off Full post details, lowering Posts per profile, or switching off Collect latest posts means less work per profile and less platform usage.
  • Set a maximum charge limit: you set it in the run options when you start a run. When the limit is reached, the run stops and keeps everything saved so far.

See the pricing tab for the current prices.

Can I try Instagram Profile Scraper free?

Yes. Free-plan runs work the same way as paid runs; the Actor adds no extra cap. The Apify Free plan gives you $5 of credit every month, and that credit pays for result charges and platform usage together, so your credit is what limits how much you can run. Start with a few profiles to see what a run costs you.


โฌ‡๏ธ Input

The only required field is Instagram profiles. Set the input in the Console form, or send it as JSON through the API.

Settings most people change

SettingWhat it doesDefault
๐Ÿ“ธ Instagram profiles (urls)One profile per line: a username, an @handle or a profile linkRequired
๐Ÿงฎ Posts per profile (maxPosts)How many of the latest posts to collect per profile. 0 = every post, up to 2,00010
๐Ÿ—‚๏ธ Collect latest posts (includePosts)Off = profile details only, the lightest run. Posts per profile is then ignoredOn
๐Ÿ’Ž Full post details (postDetails)On = likes, comments count, exact time, video link, music, tagged users, collaborators, location and top comments for every post. Off = a lighter run, with caption, hashtags, media link and an approximate timeOn

The defaults (10 posts per profile with full details) are a good first test with 1 or 2 profiles. They give you the full analytics, including the engagement rate. For lighter runs, see How to keep the cost low.

Proxy (proxyConfiguration) is optional, so leave it as it is. A proxy is another route to the internet; the Actor chooses its connection on its own and uses Apify Proxy when it needs one.

Here's an example that collects one profile with its 10 latest posts and full details:

{
"urls": ["natgeo"],
"maxPosts": 10,
"includePosts": true,
"postDetails": true
}

See the input tab for a full description of all fields.

Use usernames, @handles or links to a profile page. You can mix them in one list.

  • โœ… Good: natgeo, @nike, https://www.instagram.com/nike/
  • โŒ Bad: https://www.instagram.com/p/DehZj9wggt0/ (a post link, not a profile)

โš ๏ธ Links to posts, reels, stories or the explore page don't name a profile, so they are ignored and the log shows an input note.

Posts per profile: what does 0 mean?

0 means every post, up to 2,000 per profile. It does not mean "no posts". A 2,000-post profile with full details is far more work than the default 10 posts, so it uses more platform usage.

  • โœ… Good: 10 for a first look at recent activity
  • โŒ Bad: 0 when you only want profile details

โš ๏ธ Values above 2,000 are treated as 2,000. To get profile details only, switch off Collect latest posts.


โฌ†๏ธ Output

Your results are saved in three tables. You can see all of them in the Output tab of the run while it is going:

TableWhat's in itBilled?
๐Ÿ‘ค ProfilesOne row per profile with all the fields above. Contact & links and Analytics in the Output tab show the same rows with fewer columnsYes, per saved profile row
๐Ÿ—‚๏ธ PostsOne row per collected post, with the profile's username, name and linkNo
๐Ÿ’ฌ Top commentsOne row per top comment, with the post link and captionNo

The Output tab also has a Run summary: the run totals (profiles requested, saved, billed, failed and skipped, posts and top comments saved) and the status of every profile.

Instagram profile data download (Excel, CSV, JSON)

Each table is saved as a dataset, which is Apify's name for a stored results table. To download one:

  1. In Apify Console, go to Storage โ†’ Datasets.
  2. Open the dataset of your run. The Profiles table is the run's default dataset; the Posts and Top comments tables are its two other datasets.
  3. Click Export, choose Excel, CSV, JSON, XML or HTML, and pick only the fields you need if you like.

The run summary is saved as a record named SUMMARY in Storage โ†’ Key-value stores.

What do the row statuses mean?

  • Saved: a full profile row (with posts and analytics when they are on). Billed.
  • Saved with notes: the profile was saved, but something limited it. For example, a private account has no posts; when Collect latest posts is on, notes says so. Billed.
  • Failed: the profile could not be collected, for example because it doesn't exist. You get a row with username, inputUrl and error. Not billed.
  • Skipped: the run stopped before this profile. If Instagram kept refusing requests, the profile gets a row with error. If your maximum charge limit was reached, it gets no row. Not billed.

JSON example

Results for the input example above (shortened: only some analytics fields and one post are shown; numbers change over time). "engagementRatePct": 0.038 means an engagement rate of 0.038%.

{
"id": "787132",
"username": "natgeo",
"fullName": "National Geographic",
"url": "https://www.instagram.com/natgeo/",
"inputUrl": "natgeo",
"biography": "Step into wonder and find your inner explorer with National Geographic",
"bioHashtags": [],
"bioMentions": [],
"externalUrl": "http://visitstore.bio/natgeo",
"externalUrls": [{ "title": null, "url": "http://visitstore.bio/natgeo", "domain": "visitstore.bio" }],
"followersCount": 268354129,
"followsCount": 195,
"postsCount": 32000,
"postsCountApprox": true,
"private": false,
"verified": true,
"hasReels": true,
"contact": { "emails": [], "phones": [], "linkDomains": ["visitstore.bio"] },
"analytics": {
"postsAnalyzed": 10,
"avgLikes": 101304.4,
"engagementRatePct": 0.038
},
"latestPosts": [
{
"shortCode": "DehZj9wggt0",
"url": "https://www.instagram.com/p/DehZj9wggt0/",
"mediaType": "GraphVideo",
"isReel": true,
"caption": "Keeping up with a pack of hunting wolves...",
"hashtags": ["wolvesupclose"],
"likesCount": 47421,
"commentsCount": 337,
"timestamp": "2026-10-15T19:00:02Z",
"music": { "title": "Original audio", "artist": "natgeo" },
"tagged_users": [{ "username": "natgeoanimals", "is_verified": true }]
}
],
"scrapedAt": "2026-10-17T18:57:36Z"
}

๐Ÿ’ก Tips and advanced usage

How many results can you scrape with Instagram Profile Scraper?

The Actor itself doesn't set a limit on the number of profiles per run; your maximum charge limit and your Apify credit do. Posts are limited to 2,000 per profile. Very long lists take longer, and if Instagram keeps refusing requests during a run, the run stops early and keeps what it saved. Start with a small batch, check the result and the cost, then run larger lists.

How to scrape Instagram posts from a profile

Set Posts per profile to the number you need (or 0 for every post up to 2,000) and keep Full post details on. Each post is saved in the profile row and as its own row in the Posts table, and its top comments go to the Top comments table.

Known issues

  • Some posts can have detailsMissing: true when Instagram doesn't return their details. The post keeps its basic fields.
  • When a profile row would be too large to save as one row, latestPosts is shortened and a note is added. Every post is still in the Posts table.
  • Instagram changes its pages from time to time. If results look wrong, open an issue (see Support and feedback).

๐Ÿ”Œ Instagram Profile Scraper integrations and API

Can I use it as an Instagram profile data API?

Yes. Every run can be started and read through the Instagram Profile Scraper API on Apify: you send usernames and get JSON rows back. See the Apify API docs and the API tab for ready-to-use code. For Node.js use the apify-client NPM package, and for Python the apify-client PyPI package.

Instagram Profile Scraper Python example

This starts a run with the input example above and prints each profile's username and follower count:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("insights_data/instagram-profile-scraper").call(run_input={
"urls": ["natgeo"],
"maxPosts": 10,
"includePosts": True,
"postDetails": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["username"], item.get("followersCount"))

Can I call the Instagram scraper API from other languages?

Yes. Besides the Node.js and Python clients, you can call the Apify API over plain HTTP from any language. The API tab shows the request for each case.

Can I integrate Instagram Profile Scraper with other apps?

Yes. Connect it with almost any cloud service through Apify integrations: Make, Zapier, Slack, Google Sheets, Google Drive, Airbyte, GitHub, LangChain and more. Use webhooks to trigger an action when a run finishes.

Can I schedule an Instagram profile data extractor to run every week?

Yes. Create a schedule in Apify Console for your list of accounts, for example every Monday, and send the Profiles table to Google Sheets through an integration. That gives you followers and engagement week by week.

Can I use Instagram Profile Scraper with AI agents (MCP)?

Yes. Connect it to Claude and other AI assistants through the Apify MCP server. Open the MCP tab for setup steps.


๐Ÿงฉ Other social media scrapers

These Actors from the same developer pair well with this Instagram data scraper when your research covers more platforms:

  • ๐Ÿ“˜ Facebook Post Scraper: public Facebook posts from pages, profiles, groups and post links, with text, date, author, reactions by type, comments with replies, shares, photos, videos and views.
  • ๐Ÿ“ฑ TikTok Profile Scraper: videos, reposts, stories and playlists of a TikTok profile with views, likes, comments, shares, music, hashtags and author stats.
  • ๐Ÿ’ฌ TikTok Comments & Replies Scraper: TikTok comments and replies from videos, photo posts and whole profiles, with likes, reply counts, dates and commenter details.
  • ๐Ÿ‘” LinkedIn Profile Extractor & Enricher (No Login Required): public LinkedIn profiles with name, headline, location, about, followers, current role, experience, education and skills.

โ“ FAQ

Web scraping is generally legal if you extract publicly available data. However, you should respect personal data (for example under GDPR) and intellectual property, and take Instagram's Terms of Use into account. Before you use any Instagram scraper, check what your use case allows. This is not legal advice. The Apify blog has a guide to the legality of web scraping.

Can I use an Instagram user data scraper under GDPR?

Only with care. Names, bios, emails and phone numbers of people are personal data. Collect them only when you have a legitimate reason, keep only what you need, and follow the rules for contacting people in your country.

How does Instagram Profile Scraper work?

It opens each public profile page without logging in and reads the profile details. If posts are on, it reads the latest posts and, with full details on, each post's details and top comments. It then computes the analytics from those posts and saves one row per profile, plus the post and comment rows.

Instagram scraper no login: do I need an account?

No. You don't need an Instagram account, password, cookies or an Instagram profile API key. The Actor reads only data that any visitor can see.

Does this Instagram profile extractor need a browser extension?

No. It runs in the cloud on Apify, so you don't install anything, and your own Instagram account is never used.

Can it scrape private Instagram profiles?

Only partly. It is an Instagram public profile scraper, so posts are read from public accounts only. For a private account you still get the public profile details (name, bio, counts, picture link). When Collect latest posts is on, notes also says that the posts are not visible.

Can I use it as an Instagram email scraper?

Yes, for emails that people write in their bio. Every saved profile row has a contact object with the emails found in the bio text, plus the domains of the bio links. Contact buttons on business profiles are not read, so a profile without an email in its bio has an empty list.

Is it an Instagram phone number extractor too?

Yes, in the same way: phone numbers written in the bio are saved in contact.phones.

What should I know before using it as an Instagram leads scraper?

Expect contact details only where people wrote them in their bio, so many rows will have empty emails and phones. Keep personal data rules in mind (see the GDPR question above).

Can I use it as an Instagram bio scraper only?

Yes. Switch off Collect latest posts, run your profiles, and open the Contact & links table in the Output tab. It shows the bio, emails, phones, link domains, every bio link, bio hashtags and mentions.

Can I use it as an Instagram followers count scraper?

Yes. Switch off Collect latest posts. Each saved row still has followers, following and posts count, and the run does the least work per profile.

Is there an Instagram profile post scraper mode?

There is no separate mode. Set Posts per profile and keep Full post details on: every collected post gets its own row in the Posts table, with the profile's username, name and link.

Does it work as an Instagram profile picture scraper?

Partly. Every saved profile row has the profile picture link in profilePicUrl. The Actor saves the link, not the image file.

How is the Instagram engagement rate calculated?

It is the average of likes plus comments per collected post, divided by the follower count, times 100. The result in analytics.engagementRatePct is already a percentage: 0.038 means 0.038%, and 2.5 means 2.5%. It needs Full post details on, because likes and comments counts come from the post details.

How many accounts can an Instagram account scraper handle in one run?

The Actor doesn't set a limit of its own; your maximum charge limit and Apify credit decide. Duplicates are removed, and each profile is saved as soon as it is done. For long lists, start with a small batch first (see the Tips section).

Why use an Instagram profile info scraper?

It saves you from copying profile details by hand, and it gives the same columns for every account. Common uses:

  • Bulk Instagram engagement rate checker: add a list of creators and compare their engagement rate side by side in the Analytics table.
  • Creator shortlists: an Instagram influencer scraper run over your candidates gives followers, posts per week and top posts in one table.
  • Competitor tracking: schedule weekly runs and watch followers, posts per week and top posts.

How to scrape Instagram data without coding?

Follow the five steps in the tutorial above: create a free Apify account, paste the profiles, click Start and export the results. This Instagram profile scraper tool needs no code, and the same run can be scheduled to repeat.

Why am I getting fewer results than expected?

  • Private accounts give profile details but no posts.
  • Profiles that don't exist get a row with error instead of data.
  • Post or reel links are not profile links, so they are ignored. Check the log for input notes.
  • Your maximum charge limit was reached, so the run stopped early.
  • Instagram kept refusing requests, so the run stopped early. The status message says so. Try again later.
  • Instagram returned no more posts for a profile, or the profile has fewer posts than you asked for. You get at most 2,000 posts per profile.

A run that stops early still has platform usage for the work it did, but failed and skipped profiles are not billed as results. To retry them, check the Run summary for their status and start a new run with only those usernames.

Why is the posts count rounded for some profiles?

Instagram shows the post count of some large accounts rounded (for example 32K). Those rows have postsCountApprox: true.


๐Ÿ™‹ Support and feedback

Found a bug or have a feature request? Please create an issue on the Issues tab. Your feedback helps us improve Instagram Profile Scraper.

Need a custom solution or more data? Contact us at hello.insights.data@gmail.com.

Built and maintained by Insights Data.