Instagram Profile Scraper avatar

Instagram Profile Scraper

Pricing

from $2.00 / 1,000 post scrapeds

Go to Apify Store
Instagram Profile Scraper

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

herus13

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

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

EventPrice
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

FieldTypeRequiredDefaultWhat it does
targetsarrayyes—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_postsintegerno12How 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_modestringno"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.
proxyUrlsarrayno—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

  1. Open the actor on Apify Console.
  2. Put your usernames, @handles, profile URLs or post URLs into Profiles or URLs.
  3. Set Max Posts — 12 by default, 0 for profile metadata only.
  4. 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. post mode flattens everything into one wide row per post; profile mode keeps one record per profile with its posts nested.
  • You only pay for what arrives. Missing and unreadable profiles cost nothing, and the partial and posts_collected fields 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.