Instagram Profile Scraper
Pricing
from $2.00 / 1,000 post scrapeds
Instagram Profile Scraper
Extract public Instagram profiles from usernames, @handles, profile URLs or post URLs: full_name, biography, followers, following, posts_count, verified and business flags, category, external_url, and recent posts with likes and comments. Export JSON, CSV or Excel.
Pricing
from $2.00 / 1,000 post scrapeds
Rating
0.0
(0)
Developer
herus13
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
The Instagram Profile Scraper extracts public Instagram profiles from a username, an @handle, a profile URL or a post URL. Each run returns the full name, biography, follower and following counts, post count, account type, verified and business flags, category where shown, every bio link and profile picture — plus recent posts with captions, likes, comments and exact posting times.
What you get
One row per post with the profile repeated on it (output_mode: post), or one row per profile with the posts nested (output_mode: profile).
{"username": "nike","full_name": "Nike","biography": "Just Do It.","followers": 291626051,"following": 264,"posts_count": 1668,"posts_count_approx": false,"account_type": "business","account_type_code": 2,"is_verified": true,"is_private": false,"is_business": true,"category": null,"external_url": "http://empli.fi/nike","bio_links": [{"url": "http://empli.fi/nike", "title": "", "link_type": "external"}],"pronouns": [],"is_memorialized": false,"has_any_clips": true,"latest_reel_media": "2026-06-18T21:04:11Z","graph_id": "17841400000000000","profile_pic_url": "https://instagram.fbaq6-1.fna.fbcdn.net/v/...","user_id": "13460080","posts_collected": 12,"partial": false,"post_shortcode": "Dbdo4gTupuE","post_url": "https://www.instagram.com/p/Dbdo4gTupuE/","post_caption": "The game looks different from here.","post_likes": 175374,"post_comments": 1148,"post_taken_at": "2026-07-31T16:00:05+00:00","post_product_type": "clips","post_media_type": 2,"post_is_pinned": false,"post_is_paid_partnership": false,"post_usertags": ["a_tagged_account"],"post_coauthors": [],"post_location": null,"post_display_url": "https://instagram.fxyz1-1.fna.fbcdn.net/v/...","scraped_at": "2026-06-19T08:30:00+00:00","_meta": {"author": "https://apify.com/herus13", "status": "ok", "message": null}}
_meta is run metadata, not scraped data. A target that fails appears as a row with only _meta (status failed, the reason in message); those rows are never charged.
What a signed-out visitor can see decides a few fields. account_type is personal, business or creator, mapped from Instagram's own long-standing account numbering (1, 2, 3); account_type_code is that raw number exactly as Instagram sends it, kept even when it is one the mapping does not know, so you can apply your own; is_business is true for business accounts only, so a creator reads false there and creator in account_type. category is filled only where Instagram shows it signed out, often for creators and rarely for businesses, and is otherwise null. posts_count is exact below 10,000 and rounded above it (32K becomes 32000), with posts_count_approx: true marking the rounded ones. Any of these is null when Instagram did not answer for it, never a guess. external_url is the first of bio_links.
Changed on 2026-09-24: post_typename for posts found by username is now GraphImage, GraphVideo or GraphSidecar, the same values a direct post URL gives (it was XIGPolarisImageMedia, XIGPolarisVideoMedia or XIGPolarisCarouselMedia). is_business can now be null when the account type could not be read; it used to default to false.
Export the dataset as JSON, CSV or Excel, or read it from the Apify API.
What it costs
| Event | Price |
|---|---|
Actor Start (apify-actor-start) | $0.005 |
Profile scraped (profile-scraped) | $0.008 |
Post scraped (post-scraped) | $0.002 |
You pay per profile and per post delivered, not for time. A single profile with metadata only costs about $0.01; a hundred influencers with twelve recent posts each costs about $3.21, and a thousand profiles with metadata only about $8.01. The residential proxy is included in those prices.
Profiles that do not exist, or that could not be read, are never charged and appear only as a _meta row naming it and why; the run log also names each one and ends with a line counting how many targets returned data. A private account is charged once, because its public metadata is still returned.
Input
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
targets | array | yes | — | The Instagram profiles to scrape, one per entry. Each entry can be a username (nike), an @handle (@nike), a profile URL (https://instagram.com/nike/), a post URL (https://instagram.com/p/ABC123/) or the bare id from a post URL (DddlDOVRGLj) — the last two return the profile that owns that post. Mix the forms freely in one run. Required. |
max_posts | integer | no | 12 | How many recent posts to return for each profile, from 0 to 500. Default 12. Set 0 to return profile metadata only, which is the cheapest run because no post is charged. A profile whose post list came back short is marked partial: true in the dataset row, and posts_collected says how many arrived. |
output_mode | string | no | "post" | The shape of the dataset rows. Default post. Choose post for one row per post with the profile fields repeated on every row, which reads cleanly as CSV or Excel; a profile with no posts still gets a single metadata row. Choose profile for one row per profile with its posts nested in a JSON array, which suits JSON pipelines. |
proxyUrls | array | no | — | Leave empty and the run uses the residential proxy that comes included in the price of the run. To route the run through your own provider instead, add one gateway URL per entry, for example http://user:pass@host:port. Any provider that issues URLs works. When set, only the URLs you give are used. |
How to run it
- Open the actor on Apify Console.
- Put your usernames, @handles, profile URLs or post URLs into Profiles or URLs.
- Set Max Posts —
12by default,0for profile metadata only. - Run. Export JSON, CSV or Excel from the dataset.
{"targets": ["nike", "@zara", "https://instagram.com/p/Dbdo4gTupuE/"],"max_posts": 12,"output_mode": "post"}
Minimal input:
{"targets": ["nike"]}
Available as the MCP tool herus13--instagram-profile-scraper on mcp.apify.com and through the Apify API; send the same JSON.
Why this scraper
- One field for every way you hold a profile. Usernames, @handles, profile links and even a link to a single post all resolve to the profile, so you can paste a list exactly as you collected it.
- Nothing to sign in with. No Instagram account and no cookie are needed, so nothing of yours is exposed to the run.
- A spreadsheet or a pipeline, your choice.
postmode flattens everything into one wide row per post;profilemode keeps one record per profile with its posts nested. - You only pay for what arrives. Missing and unreadable profiles cost nothing, and the
partialandposts_collectedfields tell you exactly how complete each row is. - Residential proxy included in the price of the run, with your own gateway URLs accepted when you prefer them.
Use cases
- Influencer discovery and vetting — follower and following counts, post count, verified and business flags, category and external link in one record, so a candidate list can be filtered before anyone opens Instagram. Recent posts come along, so engagement can be sanity-checked against audience size in the same pass.
- Lead generation from business profiles — business accounts expose a category and an external link, which is usually the company website and the start of a contact trail.
- Competitor and brand tracking — run the same handle set on a schedule and watch follower growth and changes to the bio or the link in it, which often move right before a campaign or a launch.
- Social analytics enrichment — attach profile context to data you already hold: which of your mentioners are verified, how large their audience is, what category they work in.
- Creator marketplace listings — keep a catalogue of creator profiles fresh with picture, bio, category and counts refreshed on a schedule.
FAQ
Do I need an Instagram account? No. The actor returns only what a public profile shows to anyone, so there is nothing to sign in with and no private content is ever returned.
Can I scrape private profiles? Only their public metadata — name, follower count, biography, category and picture. Their posts are not public, so the profile row arrives without posts and is charged as one profile.
How many recent posts can I get? Up to 500 per profile. On very large back-catalogues a run may return fewer than you asked for; those rows carry partial: true and posts_collected, so the shortfall is visible rather than silent.
Am I charged for profiles that don't exist? No. Missing, blocked and unreadable profiles are never charged and get only a _meta row; the run log names them. A private account is charged, because its metadata is delivered.
Is a proxy included? A residential proxy is included in the price of the run. To use your own, paste gateway URLs into Your own proxy URLs.
Is scraping Instagram legal? This actor collects only publicly available profile data. You are responsible for complying with Instagram's terms and applicable laws, and for not collecting personal data without a lawful basis.
Related actors
- Instagram Post Scraper — posts from a profile, a hashtag or a location, with captions, likes, comments and media URLs.
- Instagram Comment Scraper — comments on any public post, with author, text, likes and replies.
- Google Maps Scraper — business leads with emails, phone numbers, reviews and social links.
- LinkedIn Profile Scraper — LinkedIn profiles with structured fields, full experience history and optional contact enrichment.