Instagram Profile Scraper
Pricing
$18.99/month + usage
Instagram Profile Scraper
Extract public Instagram profile data quickly and efficiently. The Instagram Profile Scraper actor collects usernames, bios, follower counts, post stats, and more. Perfect for research, analytics, or influencer discovery. Simple to use, fast, and reliable for automation workflows.
Pricing
$18.99/month + usage
Rating
5.0
(1)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
104
Total users
0
Monthly active users
12 days ago
Last modified
Categories
Share
Instagram Profile Scraper — Followers, Bio and Post Data
Instagram Profile Scraper pulls public Instagram profile data — biography, follower and following counts, verification and business-account status, and the latest posts — for any username or profile URL you provide. Every profile comes back as clean, structured JSON with no HTML to parse, captured by a real headless browser that intercepts Instagram's own internal API response. Add your usernames, hit Start, and watch results land in your dataset as each profile finishes.
What is Instagram Profile Scraper?
Instagram Profile Scraper is an Apify Actor that takes an Instagram profile URL or username and returns that account's public data — bio, follower/following counts, verification and business status, and recent posts — as a structured JSON record. It drives a real headless Chromium browser that intercepts Instagram's own internal web_profile_info API response, so no Instagram login, session cookie, or API key is used anywhere in the Actor. It's built for developers, growth marketers, and researchers who need Instagram profile data without writing and maintaining their own browser-automation scraper.
What Instagram profile data is publicly available to scrape?
Instagram shows a public profile's bio, stats, and recent posts without an account; full follower/following lists, private content, stories, and DMs sit behind a login wall.
| Data Category | Publicly Available | Restricted behind login wall |
|---|---|---|
| Username, full name, biography | Yes | — |
| Follower and following counts | Yes | Full follower/following list |
| Verification and business-account status | Yes | — |
| Recent public posts (caption, images, engagement) | Yes | Private-account posts |
| Related/suggested profiles | Yes | — |
| IGTV video list | Yes | — |
| Stories and highlights | No | Story/highlight media |
| Direct messages | No | Always requires login |
Instagram Profile Scraper only returns publicly visible data — what any visitor sees. Nothing behind a login wall.
What data can I extract with Instagram Profile Scraper?
Instagram Profile Scraper returns identity details, account statistics, and recent content for every public profile you give it.
| Field Name | Description |
|---|---|
username | The account's Instagram handle |
fullName | Display name shown on the profile |
biography | Bio/about text on the profile |
externalUrl | Primary link-in-bio URL |
externalUrls | Full list of bio links (multi-link bio services) |
externalUrlShimmed | Instagram-wrapped tracking version of the bio link |
profilePicUrl | Standard-resolution profile photo URL |
profilePicUrlHD | High-resolution profile photo URL |
businessCategoryName | Business category label, for business accounts |
followersCount | Number of followers |
followsCount | Number of accounts followed |
postsCount | Number of posts |
igtvVideoCount | Number of IGTV videos |
highlightReelCount | Number of story highlight reels |
verified | Whether the account has a verified badge |
isBusinessAccount | Whether the account is set up as a business/professional account |
private | Whether the account is private |
joinedRecently | Whether Instagram flags the account as recently joined |
hasChannel | Whether the account has an associated broadcast channel |
latestPosts | Array of the profile's latest posts — caption, hashtags, mentions, likes, comments, media, timestamp |
latestIgtvVideos | Array of the profile's latest IGTV videos — id, short code, cover image, timestamp |
relatedProfiles | Array of accounts Instagram surfaces as related/suggested |
about | Optional joinedDate and country, only when includeAboutSection is enabled and Instagram exposes them |
Identity and descriptive fields
username, fullName, biography, externalUrl, externalUrls, externalUrlShimmed, profilePicUrl, profilePicUrlHD, businessCategoryName — everything that identifies the account and how it presents itself.
Quantitative and status fields
followersCount, followsCount, postsCount, igtvVideoCount, highlightReelCount, verified, isBusinessAccount, private, joinedRecently, hasChannel — the counts, flags, and badges attached to the account.
Posts, videos and related accounts
latestPosts (with nested caption, hashtags, mentions, likes, comments, images, tagged users, and child posts for carousels), latestIgtvVideos, relatedProfiles, and the optional about object.
🤖 Add-on: Need additional Instagram data?
Need the people behind the follower count, not just the total? Pair this scraper with ../instagram-followers-scraper-with-bio-contact-enrichment for full follower lists with optional bio and public contact enrichment, or ../Instagram-Related-Person-Scraper to map the accounts Instagram surfaces as related to a target profile. Want the story content this Actor doesn't cover? ../Instagram-Highlights-Scraper pulls highlight titles and cover images for any public profile.
How does Instagram Profile Scraper differ from the official Instagram API?
Instagram's official Graph API is built around accounts and Pages you manage, not arbitrary profile lookups: it requires a Business/Creator account linked to a Facebook Page, plus Meta App Review, before querying beyond your own connected accounts. Instagram Profile Scraper works on any public profile URL or username directly, with no account, app registration, or review process.
| Feature | Instagram Graph API | Instagram Profile Scraper |
|---|---|---|
| Setup | Facebook Page + Business/Creator account link, plus Meta App Review | Paste a profile URL or username and run |
| Accessible profiles | Your own connected account, plus limited Business Discovery lookups on other Business/Creator accounts | Any public Instagram profile, personal or business |
| Personal (non-business) accounts | Not accessible | Fully accessible if public |
| Credentials required | Facebook Developer app, access tokens, permission grants | None beyond an Apify account to run the Actor |
| Output format | Raw Graph API JSON per Meta's schema | Normalized JSON dataset row, same field names on every run |
| Latest posts | Limited to media on accounts you manage | Latest posts returned for any public profile scraped |
Use the Graph API if you manage the account and only need your own Business/Creator data inside a Meta-approved app. Use Instagram Profile Scraper for public profile data — yours or anyone else's — without building a Meta app integration.
How to use Instagram Profile Scraper
Instagram Profile Scraper runs entirely inside Apify — there's no separate signup or API key needed to start a run from the Console.
- Open Instagram Profile Scraper's Apify Store listing and click Start, or add it to a saved task.
- Add one or more Instagram profile URLs, usernames, or
@handlestostartUrls— the only required input. - Optionally enable
includeAboutSectionto also pulljoinedDateandcountrywhen Instagram's response exposes them. - Optionally supply your own
proxyConfiguration; leave it unset to use the default residential proxy. - Start the run and open the Dataset tab — each profile appears as soon as it's scraped. Export as JSON, CSV, or Excel.
How to scale to bulk Instagram profile extraction
startUrls accepts an array, so one run can cover many profiles — add as many usernames or URLs as you need. The Actor works through them one at a time within a single run rather than in parallel, so total run time scales with how many profiles you list; for very large lists, split the work across a few parallel runs if you need faster turnaround.
What can you do with Instagram profile data?
- An influencer marketing manager vetting creators uses
followersCount,verified, andisBusinessAccountto shortlist accounts before reaching out for a partnership. - A growth marketer building a lead list uses
biographyandexternalUrlto pull contact links, andbusinessCategoryNameto filter for a specific industry. - A competitive analyst benchmarking brand accounts uses
postsCountandfollowersCountalongside thelikesCountandcommentsCountinsidelatestPoststo compare posting cadence and audience response across competitors. - A social researcher mapping community adjacency uses
relatedProfilesto see which other accounts Instagram surfaces next to a target profile. - An AI engineer building a creator-recommendation RAG assistant feeds
biographyand the caption/hashtag fields insidelatestPostsin as typed JSON context, so the assistant can answer prompts like "find me a travel photographer with over 100k followers" without scraping or parsing HTML itself.
Because output is already typed JSON, any of these use cases can run inside an agent pipeline without extra parsing.
How does Instagram Profile Scraper handle rate limits and blocking?
Instagram Profile Scraper defaults to a residential proxy with automatic IP rotation, which is what Instagram's profile pages need for reliable, repeated access. If a request times out or errors, the Actor rotates to a fresh proxy IP and retries, up to 3 attempts per profile with a short delay between tries. You can supply your own Apify proxy groups or custom proxy URLs in proxyConfiguration, and the Actor uses them instead of the residential default. There's no CAPTCHA-solving step — reliability here comes from the residential IP pool and retry/rotation, not from bypassing a challenge. If a profile still fails after all retries — a timeout, a non-200 response, or a missing user in the response — the Actor logs the failure and moves on to the next username rather than aborting the whole run, so one blocked or invalid profile doesn't cost you the rest of your batch.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
startUrls | Yes | array (string list) | Instagram profile URLs or usernames to scrape. Accepts full URLs, bare usernames, or @username. | ["https://www.instagram.com/humansofny/", "natgeo"] |
includeAboutSection | No | boolean | When true, adds an about object with joinedDate and country, when Instagram's response exposes them. Default false. | true |
proxyConfiguration | No | object | Apify Proxy configuration. Leave unset to use the default residential proxy with automatic IP rotation. | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
Example input
{"startUrls": ["https://www.instagram.com/humansofny/","natgeo","@mileycyrus"],"includeAboutSection": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
⬆️ Output
Every scraped profile is pushed as one typed dataset row (charged event row_result) as soon as it's scraped — you don't wait for the whole run to finish to see data. Only successfully scraped profiles are written to the dataset; a profile that fails after all retries is logged as an error but never pushed, so there are no uncharged placeholder or error rows to filter out of your results. Export as JSON, CSV, Excel, or any other format Apify's dataset export supports.
Example output
{"inputUrl": "https://www.instagram.com/humansofny","url": "https://www.instagram.com/humansofny","id": "242598499","username": "humansofny","fullName": "Humans of New York","biography": "New York City, one story at a time.","externalUrls": [{ "title": "Book", "url": "https://bit.ly/dearnewyorkbook", "link_type": "external" }],"externalUrl": "https://bit.ly/dearnewyorkbook","externalUrlShimmed": "https://l.instagram.com/?u=https%3A%2F%2Fbit.ly%2Fdearnewyorkbook","followersCount": 12802590,"followsCount": 673,"hasChannel": false,"highlightReelCount": 3,"isBusinessAccount": false,"joinedRecently": false,"businessCategoryName": null,"private": false,"verified": true,"profilePicUrl": "https://scontent.cdninstagram.com/v/profile.jpg","profilePicUrlHD": "https://scontent.cdninstagram.com/v/profile_hd.jpg","igtvVideoCount": 0,"postsCount": 5839,"about": {"joinedDate": "2011-05-14T00:00:00.000Z","country": "United States"},"relatedProfiles": [],"latestIgtvVideos": [],"latestPosts": [{"id": "3742534382104984578","type": "Sidecar","shortCode": "DPwJzEVDbwC","caption": "A few years ago I received a DM...","hashtags": [],"mentions": ["zohrankmamdani"],"url": "https://www.instagram.com/p/DPwJzEVDbwC/","commentsCount": 3841,"dimensionsHeight": 1350,"dimensionsWidth": 1080,"displayUrl": "https://scontent.cdninstagram.com/v/post.jpg","alt": null,"likesCount": 254147,"timestamp": "2025-10-13T20:14:46.000Z","ownerUsername": "humansofny","ownerId": "242598499","images": ["https://scontent.cdninstagram.com/v/post.jpg"],"childPosts": [],"taggedUsers": []}]}
How does it work?
Instagram Profile Scraper launches a real headless Chromium browser through Playwright, navigates to each profile's public page, and listens for the web_profile_info response that Instagram's own frontend fires when the page loads — the same data Instagram's app uses to render the profile. Because it reads Instagram's internal API payload instead of parsing rendered HTML, the Actor doesn't depend on visual page layout and keeps returning the same field names even as Instagram redesigns its profile page. Requests go through a residential proxy with automatic IP rotation on retry, and no login or session cookie is ever used — everything returned is what any logged-out visitor could see. The JSON is normalized into a stable schema before it's pushed to your dataset.
Integrations
Instagram Profile Scraper runs on Apify, so it works anywhere you can call an HTTP API or an Apify client library — no proprietary SDK required.
Calling Instagram Profile Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("scraper-engine/instagram-profile-scraper").call(run_input={"startUrls": ["https://www.instagram.com/humansofny/"],"includeAboutSection": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["username"], item["followersCount"])
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request to the Apify API.
MCP integration for AI agents
Instagram Profile Scraper is reachable through Apify's Actors MCP Server, which exposes Actors on Apify Store as callable tools for MCP-compatible clients such as Claude Desktop and Claude Code. Register it by connecting from this Actor's page in Apify Console, or by running npx @apify/actors-mcp-server configured with this Actor's store ID.
No-code tools (n8n, Make, LangChain)
In n8n, use the HTTP Request node (or the community Apify node) pointed at this Actor's run endpoint, with your Apify API token in the Authorization header. In Make, use the Apify app's "Run Actor and get dataset items" module and map startUrls from earlier scenario steps. In LangChain, call the same Apify API endpoint from a custom Tool, or load results with the community Apify dataset loader, so an agent can look up Instagram profiles mid-conversation.
Is it legal to scrape Instagram profiles?
Scraping publicly available Instagram profile data is generally lawful, since Instagram Profile Scraper only returns what any visitor can already see on a public profile page without logging in — no private accounts, no DMs, nothing behind a login wall. Because profile data (biography, follower counts, full name, profile photo) can qualify as personal data about an identifiable individual, storing or reusing it at scale falls under regimes like GDPR and CCPA — you need a lawful basis for collecting and retaining it, and should honor deletion or access requests where applicable. Instagram's own Terms of Service also restrict automated access, separately from data-protection law. Consult legal counsel if your use case involves bulk storage or reuse of personal data, especially across the EU/UK or California.
Frequently asked questions
What Instagram profile fields does Instagram Profile Scraper return?
It returns username, fullName, biography, followersCount, followsCount, and postsCount for every profile, along with verified, isBusinessAccount, latestPosts, relatedProfiles, and latestIgtvVideos. See the full data fields table above for every key.
Does Instagram Profile Scraper require an Instagram account or login?
No. It reads only Instagram's logged-out public web_profile_info response — there's no username/password or session-cookie field anywhere in the input, and no login step in the Actor.
How many profiles can I extract in one run?
startUrls accepts as many profile URLs or usernames as you add — there's no fixed cap in the input schema. The Actor processes them one at a time within the run, so total run time scales with how many profiles you list.
What happens if a profile is private or doesn't exist?
If the profile doesn't exist, or Instagram's response comes back with a non-200 status or no user data after 3 retries, the Actor logs the failure and skips it — no row is pushed, and the charged row_result event only fires for profiles that succeed. A private profile that does resolve is still returned with its public metadata and private set to true, but latestPosts will typically come back empty since Instagram doesn't expose an account's media to logged-out visitors it doesn't follow.
Can I scrape multiple Instagram profiles at once?
Yes. startUrls is an array — add multiple URLs, usernames, or handles, and every one is scraped and pushed as its own dataset row in the same run.
Does Instagram Profile Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes. It's callable as a plain HTTP endpoint through the Apify API from any agent framework, and it's also reachable through Apify's Actors MCP Server for MCP-compatible clients like Claude Desktop and Claude Code.
Does the default dataset view show every field the Actor returns?
No. The default dataset view table shows 11 summary columns — username, fullName, biography, followersCount, followsCount, postsCount, verified, isBusinessAccount, url, profilePicUrl, externalUrl — but every pushed row actually contains the full record, including about, relatedProfiles, latestIgtvVideos, and latestPosts. Switch to the JSON or CSV export, or open a row directly, to see every field.
Does Instagram Profile Scraper return data in a format LLMs can use directly?
Yes. Output is typed, normalized JSON with consistent field names across every run — no HTML, no CSS selectors to write. Pass it straight into an LLM prompt, index it into a vector store, or feed it to an agent tool.
What happens when Instagram changes its layout or anti-bot system?
The Actor targets Instagram's internal web_profile_info API response rather than the rendered page, so it's less exposed to visual redesigns, and it's maintained to keep the output schema stable going forward. No specific update turnaround is guaranteed.
Can I use Instagram Profile Scraper without managing proxies or browser infrastructure?
Yes. The Actor runs its own headless Chromium browser and defaults to a residential proxy with automatic IP rotation on retry — you don't need to run a browser or supply proxies yourself unless you want to route through your own Apify Proxy groups.
Which Instagram profile fields work best for AI training data and RAG indexing?
For RAG, index biography and the caption text inside latestPosts — the highest-information free-text fields. For structured training features, followersCount, followsCount, postsCount, verified, and isBusinessAccount return as consistently typed numbers and booleans across every profile.
Related scrapers
| Scraper Name | What it extracts |
|---|---|
| Instagram Followers Scraper With Bio Contact Enrichment | Full follower lists, optionally enriched with bio and contact info |
| Instagram Related Person Scraper | Related/suggested profiles for network mapping |
| Instagram Highlights Scraper | Story highlight titles and cover images |
| Instagram Mentions Scraper — Inbound Tagged Posts | Posts where others tag or mention a handle |
| Instagram Comments Scraper With Lead Enrichment | Comment threads with lead-intent flags |
Your feedback
Found a bug or missing a field? Let us know so we can take a look — feedback like this is what keeps this Actor accurate as Instagram's site changes.