๐Ÿ“ธ Instagram Profile Scraper Pro avatar

๐Ÿ“ธ Instagram Profile Scraper Pro

Pricing

$24.99/month + usage

Go to Apify Store
๐Ÿ“ธ Instagram Profile Scraper Pro

๐Ÿ“ธ Instagram Profile Scraper Pro

Scrape detailed Instagram profiles with the Instagram Profile Scraper. Retrieve usernames, full names, bios, follower counts, following counts, posts, and engagement stats. Ideal for influencer research, audience analysis, and social media insights. Fast, accurate, and scalable for bulk scraping.

Pricing

$24.99/month + usage

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

0

Bookmarked

55

Total users

4

Monthly active users

3 days ago

Last modified

Share

Instagram Profile Scraper โ€” Extract Profiles by URL or Keyword

Instagram Profile Scraper Pro pulls structured data from public Instagram profiles โ€” stats, biography, external links, embedded posts, related accounts โ€” starting from either a known handle/URL or a keyword you don't have a handle for yet. Every response comes back as typed JSON, ready to pass directly to an LLM, index into a vector store, or feed a monitoring pipeline. Optional child rows expand a profile into its extra posts, reels, story highlights, and a followers/following sample, all tagged and mirrored to a per-run dataset. Values Instagram doesn't return are emitted as null, never guessed.

What is Instagram Profile Scraper Pro?

Instagram Profile Scraper Pro is a pay-per-event Apify Actor that queries Instagram's public web_profile_info endpoint (with an automatic Playwright browser fallback) to return one structured row per profile, plus optional child rows for that profile's extra posts, reels, highlights, and followers/following. It accepts two independent query surfaces โ€” a list of profile URLs/usernames (startUrls) or a list of keywords to discover profiles by (searchKeywords) โ€” and both can run in the same job. No Instagram account is required for the base profile scrape; a throwaway account's sessionId cookie is only needed to unlock auth-gated data (keyword search, reels, highlights, followers/following).

Key capabilities:

  • Scrape by URL, instagram.com/username, or bare @username โ€” startUrls accepts any of the three forms, and post/reel URLs are rejected with a clear error row rather than silently mis-parsed.
  • Discover profiles by keyword โ€” searchKeywords runs Instagram's top-search and scrapes every matching profile, up to maxProfilesPerKeyword each.
  • HTTP-first fetch with browser fallback โ€” every profile row records which path served it (fetchPath = http or browser), so you can see when Instagram forced the slower path.
  • Opt-in child data โ€” extra posts, reels, highlights, and a followers/following sample, each as its own tagged dataset row.
  • Honest nulls โ€” a field Instagram doesn't return for a given profile is null, never a fabricated 0 or false.
  • Proxy control โ€” proxyConfiguration is honored for every request (HTTP and browser), with an Apify RESIDENTIAL default.

What data can you get with Instagram Profile Scraper Pro?

The Actor returns seven row types in one dataset, distinguished by the type field: profile, post, reel, highlight, follower, following, and error.

Result TypeExtracted FieldsPrimary Use Case
Profile (type=profile)username, fullName, biography, followersCount, followsCount, postsCount, verified, private, isBusinessAccount, businessCategoryName, profilePicUrl, profilePicUrlHD, externalUrl, externalUrls, fbid, highlightReelCount, igtvVideoCount, hasChannel, joinedRecently, relatedProfiles, latestPosts (embedded), latestIgtvVideos, fetchPath, scrapedAtAccount vetting, lead enrichment, growth tracking
Extra post (type=post)shortCode, url, caption, hashtags, mentions, likesCount, commentsCount, videoViewCount, isVideo, displayUrl, videoUrl, timestamp, ownerUsername, ownerIdContent and posting-cadence analysis beyond the embedded 12
Reel (type=reel)same shape as a post row, from the clips endpointShort-form video performance tracking
Highlight (type=highlight)title, mediaCount, coverUrl, createdAtStory-highlight inventory for a profile
Follower / following (type=follower / type=following)username, fullName, verified, private, profilePicUrl, urlAudience sampling, network mapping
Error (type=error)inputUrl, error, fetchPath (when applicable)Diagnosing rejected inputs or failed fetches โ€” not charged

Billing: the Actor runs on Apify's pay-per-event pricing with a single charged event, row_result, billed once for every profile, post, reel, highlight, follower, and following row it emits. type=error rows โ€” rejected inputs and failed fetches โ€” are pushed to the dataset without a charged event and cost nothing.

Dual-entry discovery: URL and keyword in one Actor

This is the Actor's differentiator versus dedicated single-purpose profile scrapers: startUrls and searchKeywords both feed the same run, and results from both land in the same dataset with the same profile row shape. You don't need to pre-resolve a niche to a list of handles โ€” supply "fitness coach" in searchKeywords and the Actor turns Instagram's top-search results into fully-scraped profile rows itself. Apify's own Instagram Profile Scraper README instead tells users to first run a separate Actor โ€” Instagram Search Scraper โ€” and feed its output back in as URLs, as observed on the Apify Store on 2026-07-26.

{
"type": "profile",
"username": "fitnesscoach_amy",
"fullName": "Amy โ€” Online Fitness Coach",
"followersCount": 48210,
"isBusinessAccount": true,
"verified": false
}

Every profile row already carries latestPosts (the ~12 most recent posts from the same web_profile_info payload โ€” caption, hashtags, mentions, likes, comments, timestamp, images, tagged users), relatedProfiles (Instagram's "similar accounts" list), and latestIgtvVideos. None of this costs an extra request or an extra charged event โ€” it's parsed out of the same payload used to build the profile row, so a single row_result charge gets you the profile plus its most recent content in one shot.

Why not build this yourself?

Instagram's public web_profile_info and private v1 endpoints (feed pagination, clips, friendships, highlights tray, top-search) are undocumented, unversioned, and gated in ways that shift by endpoint โ€” the search endpoint alone returns HTTP 401 for anonymous requests, while reels return HTTP 403, and both need a full authenticated context reconstructed from a raw sessionid cookie (ds_user_id plus a CSRF double-submit csrftoken/x-csrftoken pair). Building and maintaining that request surface means tracking every endpoint's response shape independently, handling rate-limiting with retries, and standing up a browser-based fallback for when the direct HTTP path gets blocked โ€” plus a residential proxy pool, since datacenter IPs are commonly blocked on Instagram. This Actor already does all of that: three HTTP retries before falling back to a Playwright Chromium session that intercepts the same web_profile_info XHR, with your chosen proxy honored on both paths.

What is the difference between an Instagram profile scraper and a keyword-based profile finder?

A profile scraper takes a handle or URL you already have and returns that one account's data โ€” it assumes you know who you're looking for. A keyword-based profile finder does the opposite: you supply a topic or niche, and it locates the accounts for you, before any scraping happens. The distinction matters because most real research and outreach workflows start with a niche, not a name โ€” "fitness coaches," not a specific handle.

Instagram Profile Scraper Pro does both, and returns them through the same type=profile row shape. Feed startUrls when you already have handles or URLs; feed searchKeywords when you only have a topic โ€” the Actor runs Instagram's top-search internally and scrapes every match, up to maxProfilesPerKeyword per keyword. The one condition to know: Instagram gates its top-search endpoint for anonymous requests (HTTP 401), so searchKeywords only returns results when a sessionId is supplied; startUrls works anonymously.

How to scrape Instagram with Instagram Profile Scraper Pro?

  1. Open Instagram Profile Scraper Pro on its Apify Store listing and click Try for free (or Start) to open the input form.
  2. Enter your targets: add one or more entries to startUrls (a full URL, instagram.com/username, or bare username/@username), or add topics to searchKeywords to discover profiles instead.
  3. Set the query controls you need: maxItems to cap total profile rows, maxPosts/maxReels to pull content beyond the embedded 12, includeHighlights/includeFollowers/includeFollowing to opt into those child rows, and a sessionId if any of the auth-gated options are enabled.
  4. Click Start and let the run finish โ€” the log reports each profile's fetch path (http or browser) and row counts per child type as it goes.
  5. Open the Storage tab and download results as JSON or CSV, or pull them with the Apify API.

A real run input, in the Actor's own parameter names:

{
"startUrls": ["nasa"],
"searchKeywords": ["fitness coach"],
"maxProfilesPerKeyword": 5,
"maxPosts": 20,
"includeHighlights": true,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

How to run multiple queries in one job

Both startUrls and searchKeywords accept arrays, so a single run can mix any number of known handles with any number of discovery keywords โ€” duplicate usernames (case-insensitive) are automatically deduplicated before scraping starts. Targets are processed one at a time in the order they're resolved; the Actor does not run profiles concurrently, so a larger batch takes proportionally longer. Use maxItems to cap how many profile rows a single run produces regardless of how many targets were resolved.

โฌ‡๏ธ Input

All 12 input fields are optional โ€” there is no required parameter, though a run needs at least one entry in startUrls or searchKeywords to produce results.

ParameterRequiredTypeDescriptionExample Value
startUrlsNoarrayProfiles to scrape. Accepts a full URL, instagram.com/username, or a bare/@-prefixed username. Post/reel URLs are rejected with an error row โ€” they are not profiles.["nasa", "https://www.instagram.com/natgeo/"]
searchKeywordsNoarrayFind profiles by keyword via Instagram's top-search. Requires sessionId โ€” the search endpoint returns HTTP 401 for anonymous requests.["fitness coach"]
maxProfilesPerKeywordNointegerCap on discovered profiles scraped per keyword. Default 10, minimum 1.10
maxItemsNointegerCap on the number of PROFILE rows scraped; 0 = unlimited. Child rows do not count toward this cap. Default 0.50
maxPostsNointegerExtra posts fetched beyond the ~12 embedded in the profile row, via feed pagination. Works anonymously. 0 = disabled. Default 0.30
maxReelsNointegerReels fetched via the clips endpoint. Requires sessionId (returns HTTP 403 anonymously). 0 = disabled. Default 0.10
includeHighlightsNobooleanFetch the profile's story-highlights list. Anonymous requests receive an empty tray โ€” requires sessionId. Default false.true
includeFollowersNobooleanFetch a sample of followers as child rows. High block risk without a sessionId. Default false.false
includeFollowingNobooleanFetch a sample of accounts the profile follows as child rows. High block risk without a sessionId. Default false.false
maxFollowersPerProfileNointegerCap on follower/following rows fetched per profile. Default 50, minimum 1.50
sessionIdNostring (secret)Instagram sessionid cookie value. Only needed to unlock auth-gated data (keyword search, reels, highlights, followers/following). Leave empty for anonymous scraping."58223โ€ฆ%3Aโ€ฆ"
proxyConfigurationNoobjectProxy used for every request (HTTP and browser fallback). Honored as configured; RESIDENTIAL is recommended, datacenter proxies are commonly blocked by Instagram.{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
{
"startUrls": ["https://www.instagram.com/nasa/", "natgeo"],
"searchKeywords": [],
"maxProfilesPerKeyword": 10,
"maxItems": 0,
"maxPosts": 20,
"maxReels": 0,
"includeHighlights": false,
"includeFollowers": false,
"includeFollowing": false,
"maxFollowersPerProfile": 50,
"sessionId": "",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Common pitfall: enabling includeFollowers, includeFollowing, maxReels, or searchKeywords without a sessionId doesn't error โ€” the Actor logs the exact HTTP status Instagram returned and simply emits zero rows for that feature, because those endpoints are auth-gated. If a run finishes with profile rows but no child rows for a feature you enabled, check the run log for the reported status before assuming the Actor is broken.

โฌ†๏ธ Output

Every item is written to the default dataset as typed, normalized JSON with a consistent schema per type. Export it from the Storage tab as JSON, CSV, XML, or Excel, or pull it programmatically through the Apify API. Child rows (post, reel, highlight, follower, following) are additionally mirrored to a per-run named dataset, instagram-profile-items-<runId>, so they can be fetched separately from the default dataset.

Scraped results

[
{
"type": "profile",
"isChild": false,
"parentUsername": null,
"inputUrl": "https://www.instagram.com/nasa",
"url": "https://www.instagram.com/nasa",
"id": "528817151",
"username": "nasa",
"fullName": "NASA",
"biography": "Exploring the universe and our home planet.",
"externalUrls": [{ "title": "NASA+", "url": "https://plus.nasa.gov", "link_type": "external" }],
"externalUrl": "https://www.nasa.gov/",
"externalUrlShimmed": "https://l.instagram.com/?u=https%3A%2F%2Fwww.nasa.gov%2F",
"followersCount": 96323377,
"followsCount": 80,
"hasChannel": false,
"highlightReelCount": 7,
"isBusinessAccount": true,
"joinedRecently": false,
"businessCategoryName": "Government Agencies",
"private": false,
"verified": true,
"profilePicUrl": "https://scontent.cdninstagram.com/โ€ฆprofile.jpg",
"profilePicUrlHD": "https://scontent.cdninstagram.com/โ€ฆprofile_hd.jpg",
"igtvVideoCount": 171,
"postsCount": 4519,
"fbid": "17841401234567890",
"relatedProfiles": [
{ "id": "953293389", "full_name": "International Space Station", "is_private": false, "is_verified": true, "username": "iss" }
],
"latestIgtvVideos": [
{ "id": "3073651751604454027", "shortCode": "CqnzfuxpAKL", "displayUrl": "https://โ€ฆigtv.jpg", "dimensions": { "height": 1920, "width": 1080 }, "timestamp": "2023-04-04T17:04:37.000Z" }
],
"latestPosts": [
{
"id": "3697661021377407101",
"type": "Sidecar",
"shortCode": "DNQuxufAih9",
"caption": "Under the sea. #NASA #Hubble #Nebula",
"hashtags": ["NASA", "Hubble", "Nebula"],
"mentions": ["NASAHubble"],
"url": "https://www.instagram.com/p/DNQuxufAih9/",
"commentsCount": 1882,
"likesCount": 601022,
"isVideo": false,
"timestamp": "2025-08-12T16:19:28.000Z",
"ownerUsername": "nasa",
"ownerId": "528817151",
"images": ["https://โ€ฆ1.jpg", "https://โ€ฆ2.jpg"],
"childPosts": [],
"taggedUsers": []
}
],
"fetchPath": "http",
"scrapedAt": "2026-07-26T09:12:04.000Z"
},
{
"type": "post",
"isChild": true,
"parentUsername": "nasa",
"id": "3673013061754164654",
"shortCode": "DL5KetROhWu",
"url": "https://www.instagram.com/p/DL5KetROhWu/",
"caption": "Astronaut Zena Cardman prepares for spaceflight.",
"hashtags": ["NASA", "Astronaut"],
"mentions": ["NASAJohnson"],
"likesCount": 174591,
"commentsCount": 521,
"videoViewCount": null,
"isVideo": false,
"displayUrl": "https://โ€ฆpost.jpg",
"videoUrl": null,
"timestamp": "2025-07-09T16:08:25.000Z",
"ownerId": "528817151",
"ownerUsername": "nasa",
"scrapedAt": "2026-07-26T09:12:11.000Z"
},
{
"type": "highlight",
"isChild": true,
"parentUsername": "nasa",
"id": "17904125057128432",
"title": "Artemis",
"mediaCount": 12,
"coverUrl": "https://โ€ฆhighlight-cover.jpg",
"createdAt": "2023-01-05T00:00:00.000Z",
"scrapedAt": "2026-07-26T09:12:14.000Z"
}
]

How can I use the data extracted with Instagram Profile Scraper Pro?

  • Social media marketers and agencies: scrape a client's or prospect's profile plus latestPosts to audit posting cadence, bio links, and business-category positioning before a pitch, without opening Instagram manually for each account.
  • AI engineers and LLM developers: the Actor issues a query โ€” a handle or a keyword โ€” and returns structured JSON that can be passed straight into an agent as grounded context, no HTML parsing required on your end.
  • Market researchers and competitive intelligence teams: run searchKeywords against a niche term to build a list of active accounts, then track followersCount and postsCount across runs to see who's actually growing versus who's dormant.
  • Influencer and brand-partnership scouts: use searchKeywords to surface creators in a niche who don't already appear on your radar, then pull relatedProfiles from each hit to expand outward into adjacent accounts.

How do you monitor Instagram profile growth over time?

Growth monitoring means running the same set of targets on a schedule and comparing each profile's numeric fields against its previous scrape to see what actually changed. The fields worth diffing between runs are followersCount, followsCount, and postsCount on each type=profile row โ€” a rising postsCount between two runs tells you new content was published even before you look at the post rows themselves. If maxPosts or maxReels is enabled, compare the set of shortCode values in the new run's post/reel rows against the previous run's to identify exactly which pieces of content are new, using each row's timestamp to confirm posting date.

A practical loop: schedule this Actor to run daily or weekly against a fixed startUrls list (Apify's built-in Schedules feature can trigger a run on a cron-style interval without any code), store each run's dataset externally by scrapedAt, and alert when followersCount moves by more than whatever threshold matters to your use case, or when a new shortCode appears in the post/reel rows. Because child rows are also written to the per-run dataset instagram-profile-items-<runId>, you can pull just the new content for a run without re-downloading the full profile payload each time.

Integrate Instagram Profile Scraper Pro and automate your workflow

Instagram Profile Scraper Pro works with any language or tool that can send an HTTP request.

REST API with Python

import requests
TOKEN = "<YOUR_APIFY_API_TOKEN>"
ACTOR = "instagram-profile-scraper-pro" # actor.json "name" โ€” prefix with your Apify username, e.g. "you~instagram-profile-scraper-pro"
url = f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items"
run_input = {
"startUrls": ["nasa"],
"maxPosts": 20,
"proxyConfiguration": {"useApifyProxy": True, "apifyProxyGroups": ["RESIDENTIAL"]},
}
resp = requests.post(url, params={"token": TOKEN}, json=run_input, timeout=300)
items = resp.json()
profiles = [row for row in items if row["type"] == "profile"]
print(f"{len(profiles)} profile row(s), {len(items)} total row(s)")

MCP for query-grounded AI agents

Every Actor published on Apify Store exposes an MCP (Model Context Protocol) endpoint on its API > MCP tab in Apify Console, with the exact Server-Sent Events URL and connection details for this specific Actor. Once connected, a compatible client โ€” Claude Desktop, LibreChat, or a custom MCP client โ€” can call the Actor as a tool: the agent sends a username, URL, or keyword, receives the structured profile JSON back, and answers the user's question grounded in that live data instead of training-data recall.

Scheduled monitoring and delivery

Apify's platform-level Schedules let you trigger this Actor on a recurring cron interval without writing code, and platform webhooks can fire an HTTP call to your own endpoint whenever a run succeeds or fails โ€” neither is specific to this Actor, both are standard Apify Console features available to any Actor you run.

Yes โ€” scraping data that is publicly visible on Instagram without logging in is generally lawful in the United States; this Actor's anonymous path returns only what any logged-out visitor can already see on a public profile page. In hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir., first decided 2019, reaffirmed on remand 2022), the court held that scraping publicly accessible web data does not violate the U.S. Computer Fraud and Abuse Act. That said, profile data such as names, bios, and photos can constitute personal data under the EU/UK GDPR and under U.S. state laws like the CCPA, so how you store and use it โ€” not whether you can technically collect it โ€” is where compliance obligations attach. Scraping for AI training and scraping for operational monitoring carry different risk profiles under these frameworks. Consult your legal team for commercial use cases involving bulk data storage.

Frequently asked questions

Do I need to log in to Instagram to use this scraper?

No. Scraping profiles via startUrls, and pulling extra posts via maxPosts, both work anonymously through Instagram's public web_profile_info and feed endpoints. A sessionId cookie is only required to unlock searchKeywords (keyword discovery), maxReels, includeHighlights, includeFollowers, and includeFollowing โ€” Instagram gates those specific endpoints for logged-out requests.

Which optional data can I add to each profile?

Four independent toggles: maxPosts (extra posts beyond the embedded ~12), maxReels (short-form video via the clips endpoint), includeHighlights (the story-highlights tray), and includeFollowers/includeFollowing (a sample of the profile's network, capped by maxFollowersPerProfile). Each is off by default (0 or false) and can be combined in any run.

How does Instagram Profile Scraper Pro handle Instagram's anti-bot measures?

It fetches through your configured proxy (RESIDENTIAL by default) and retries the direct HTTP call up to three times before automatically falling back to a headless Playwright Chromium session that intercepts the same web_profile_info response in-browser. Every profile row records which path actually served it in fetchPath (http or browser), so a run's mix of paths tells you how much resistance Instagram put up.

Does Instagram Profile Scraper Pro find profiles by keyword?

Yes โ€” set searchKeywords and the Actor runs Instagram's top-search for each term, scraping up to maxProfilesPerKeyword matching profiles per keyword (default 10) and returning them as ordinary type=profile rows. This requires a sessionId; Instagram's search endpoint returns HTTP 401 for anonymous requests.

How many results does Instagram Profile Scraper Pro return per query?

Total profile rows are capped by maxItems (0 = unlimited). Per-keyword discovery is capped by maxProfilesPerKeyword (default 10). Child rows are capped independently: maxPosts and maxReels for extra content, maxFollowersPerProfile for followers/following samples โ€” none of these count against maxItems, which tracks profile rows only.

hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir., 2019, reaffirmed 2022) established that accessing publicly available web data does not violate the CFAA. It concerned LinkedIn, not Instagram, but the underlying principle โ€” that data a platform makes visible to logged-out visitors is not "unauthorized access" โ€” is the precedent most often cited for public-profile scraping generally.

How do I use Instagram Profile Scraper Pro to monitor profile growth over time?

Schedule a run against the same startUrls list on a recurring interval using Apify's Schedules feature, then compare followersCount, followsCount, and postsCount on each profile row against the previous run's values for that username. A jump in postsCount or a new shortCode in the post/reel child rows tells you new content shipped between runs.

Does Instagram Profile Scraper Pro work with Claude, ChatGPT, and AI agent frameworks?

Yes on both counts. It's callable as a plain HTTP endpoint through the Apify API by any agent framework capable of making a request, and it's also reachable via MCP through the Actor's API > MCP tab in Apify Console, so a compatible MCP client can call it as a registered tool.

How does Instagram Profile Scraper Pro compare to other Instagram scrapers?

Against the top competing profile scrapers on the Apify Store (as observed on 2026-07-26): Apify's own Instagram Profile Scraper returns a comparably broad profile field set and reports over 166,000 users and 93 million+ runs, but requires a separate Actor (Instagram Search Scraper) for keyword-based discovery and separate Actors for reels, highlights, and followers. Coderx's Instagram Profile Scraper (Bio & Posts) covers profile and embedded-post fields only, with no keyword discovery, reels, highlights, or followers/following, and caps free-tier usage at 20 profiles/day per its own listing. Instagram Profile Scraper Pro is the only one of the three that combines URL/username input, keyword discovery, and all four child-data types (posts, reels, highlights, followers/following) in a single Actor and a single dataset schema.

Can I use Instagram Profile Scraper Pro without managing proxies or Instagram credentials?

Yes for the base scrape โ€” the Actor defaults to an Apify RESIDENTIAL proxy if you don't configure one, and anonymous profile scraping via startUrls needs no Instagram account. You only need to supply your own throwaway account's sessionId cookie if you want the auth-gated features: keyword search, reels, highlights, or followers/following.

What happens if I submit a post or reel URL instead of a profile?

It's rejected, not silently mis-scraped. The Actor recognizes reserved path segments (/p/, /reel/, /reels/, /tv/, /stories/, and others) and, for any input matching one, emits an uncharged type=error row with the offending inputUrl and a message explaining it isn't a profile, instead of attempting to scrape it as one.

๐Ÿ’ฌ Your feedback

Found a bug or missing a field? We want to know โ€” open an issue on this Actor's Issues tab in Apify Console, or reach out through the Actor's Apify Store page. Reports like this are what keep the field coverage and endpoint handling current as Instagram's front end changes.