Instagram Profile Scraper + Account Privacy Checker avatar

Instagram Profile Scraper + Account Privacy Checker

Pricing

Pay per usage

Go to Apify Store
Instagram Profile Scraper + Account Privacy Checker

Instagram Profile Scraper + Account Privacy Checker

Instagram Profile Scraper extracts data from any public Instagram profile, including username, bio, followers, following, posts, profile picture, and engagement insights. Ideal for influencer research, competitor analysis, marketing, and automating structured Instagram profile data collection

Pricing

Pay per usage

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

10

Total users

2

Monthly active users

2 days ago

Last modified

Share

Instagram Scraper — Account Status, Privacy and Full Profile Data

Instagram Profile Scraper + Account Privacy Checker bulk-checks the status and classification of many Instagram accounts at once — active, private, not found, or unavailable — plus account-type classification (personal/business/creator), verification and privacy flags, and full public profile data for every reachable account. A free run-summary row totals every status at the end. It's built for list-cleaning before an outreach campaign, agencies auditing a bulk prospect list, and anyone who needs to know which accounts on a list are actually still live and public.

What is Instagram Profile Scraper + Account Privacy Checker?

Instagram Profile Scraper + Account Privacy Checker is an Apify Actor that checks a bulk list of Instagram usernames or profile URLs and returns a definitive status for each — including accounts that don't exist or are private, which many profile scrapers simply drop. An Instagram sessionId cookie is optional; profile detail data is login-walled logged-out, but active-vs-not-found detection still works without one. Key capabilities:

  • Bulk-check as many accounts as you like in a single run
  • Get a definitive accountStatus: active, private, not_found, or unavailable — never silently dropped
  • Classify account type (personal/business/creator), verification badge, and business category
  • Get full public profile data (bio, followers, following, posts, external link) for every reachable account
  • Optionally include the account's join date and country from Instagram's "About this account" panel
  • Filter output to a specific status or verified-only accounts
  • A free, uncharged run-summary row with counts per status at the end of every run

What data can I extract with Instagram Profile Scraper + Account Privacy Checker?

FieldExample ValueUse Case
accountStatus"active"The core status check — active, private, not_found, or unavailable
isPrivate / isVerifiedfalse / trueQuick boolean flags for filtering
accountType / businessCategory"business" / "Media/News Company"Classify what kind of account this is
username / fullName / biography"natgeo" / "National Geographic" / "..."Core profile identity fields
followersCount / followsCount / postsCount280000000 / 145 / 24000Reach metrics for reachable accounts
externalUrl / profilePicUrl"https://natgeo.com" / CDN image URLContact link and visual reference
totalChecked / activeCount / privateCount / notFoundCount / unavailableCount50 / 42 / 5 / 2 / 1Run-wide status breakdown (summary row only)
verifiedCount / businessCount / returnedCount18 / 30 / 47Additional run-wide roll-ups (summary row only)

Definitive status detection — never silently dropped

accountStatus is a genuine, verified classification, not a best-effort guess: the Actor checks Instagram's own web_profile_info endpoint for a definitive 404 (mapped to not_found), detects private-account response shapes (mapped to private), and falls back to unavailable only when the response is a login wall or non-200 for a reason other than a confirmed not-found — reported honestly rather than misclassified as active. Every checked account gets a row even when it can't be fully resolved; base profile fields are returned as null/defaults for not_found/unavailable rows rather than the row being dropped, so a bulk list always comes back with the same number of rows as accounts checked (before any statusFilter is applied).

Optional About-section and full profile data

When includeAboutSection is on, the Actor also extracts the account's join date and country from Instagram's own "About this account" transparency panel, when Instagram provides it. Full public profile data (bio, external links, follower/following/post counts, highlight reel count, business category) is returned for every account that resolves as active. A valid sessionId unlocks the full profile detail payload; without one, the Actor still correctly distinguishes active/private/not-found accounts, but detail fields on some accounts may be limited by Instagram's logged-out data wall.

Why not build this yourself?

Instagram's Graph API only exposes a Business/Creator account's own profile data to that account's own access token — it has no endpoint for bulk-checking arbitrary third-party accounts' existence or privacy status. Building an equivalent tool yourself means correctly distinguishing a genuine 404 from a private-account response shape from a login-wall response (three very different signals that a naive scraper conflates), and handling each without either crashing the run or silently dropping accounts that don't resolve cleanly. All of that is already implemented in this Actor's source.

How to use data extracted from Instagram?

List cleaning before outreach campaigns

Run a purchased or scraped contact list through profiles with statusFilter: "active" before a campaign to strip out accounts that no longer exist or have gone private, avoiding wasted outreach effort on dead leads.

Agencies auditing bulk prospect lists

Agencies vetting a large prospect list for a client can use onlyVerified combined with accountType/businessCategory to isolate only verified business accounts in the target niche before handing off a shortlist.

Market and account-health research

Track activeCount/privateCount/notFoundCount from the summary row across repeated runs of the same list over time to measure how a category's accounts churn (go private, get deleted, or stay active).

AI agents and automated pipelines

An agent can call this Actor to validate a batch of usernames before triggering a downstream enrichment or outreach workflow, filtering on accountStatus to skip dead or private accounts automatically.

🔼 Input sample

ParameterRequiredTypeDescriptionExample Value
profilesNoarrayUsernames, full URLs, or @handles to bulk-check["natgeo", "instagram", "this_account_does_not_exist_zzz999"]
statusFilterNostring (enum)all (default), active, private, or not_found"active"
onlyVerifiedNobooleanKeep only verified accounts, applied on top of statusFilterfalse (default)
includeAboutSectionNobooleanExtract join date and country from the About panel when availablefalse (default)
sessionIdNostring (secret)Instagram sessionid cookie; unlocks full profile detail data"(your session cookie)"
proxyConfigurationNoobjectProxy config; defaults to residential with automatic retries{"useApifyProxy": true}
{
"profiles": ["natgeo", "nike", "this_account_does_not_exist_zzz999"],
"statusFilter": "all",
"onlyVerified": false,
"includeAboutSection": true
}

Common pitfall: the run summary always counts every checked account regardless of statusFilter — if statusFilter is set to "active", the individual output rows will only show active accounts, but totalChecked/notFoundCount/etc. in the summary row still reflect the full original list.

🔽 Output sample

Output is typed, normalized JSON — one row per checked account, plus one free run-summary row at the end (exportable as JSON, CSV, or Excel).

{
"rowType": "account",
"accountStatus": "active",
"isPrivate": false,
"isVerified": true,
"accountType": "business",
"businessCategory": "Media/News Company",
"username": "natgeo",
"fullName": "National Geographic",
"biography": "Experience the world through the eyes of National Geographic photographers.",
"followersCount": 280000000,
"followsCount": 145,
"postsCount": 24000,
"verified": true,
"isBusinessAccount": true,
"url": "https://www.instagram.com/natgeo",
"profilePicUrl": "https://scontent.cdninstagram.com/...",
"externalUrl": "https://natgeo.com"
}

The default view surfaces 25 fields including the summary-only roll-up columns; the row-building function also writes additional fields not in the default view — id, externalUrls (bio link list), externalUrlShimmed, hasChannel, highlightReelCount, joinedRecently, profilePicUrlHD, igtvVideoCount, relatedProfiles, latestIgtvVideos, latestPosts, and (when includeAboutSection is on) an about object with joinedDate/country — all still written to every row and available via the API or a custom dataset view.

How do you filter and target specific accounts?

statusFilter is the primary filter here — all, active, private, or not_found — letting you keep only the account state you care about in the individual output rows (the summary row always reflects the full checked list regardless). onlyVerified layers a quality threshold on top, keeping only blue-badge accounts. There's no category or location query since this is a direct bulk-lookup tool: scope is simply whichever accounts you list in profiles.

{ "profiles": ["nike", "adidas", "puma"], "statusFilter": "active", "onlyVerified": true }
{ "profiles": ["prospect1", "prospect2", "prospect3"], "statusFilter": "not_found" }
{ "profiles": ["natgeo"], "includeAboutSection": true, "sessionId": "(your session cookie)" }

▶️ Want to try other Instagram scrapers?

Scraper NameWhat it extracts
Instagram Followers Count ScraperFollower/following/post counts and bio data, single-purpose lookup
Instagram Related Person Scraper With Profile EnrichmentRelated/lookalike networks for a given account
Instagram Followers: With Bot Profile checkerFollower/following lists with quality/authenticity scoring
Instagram Highlights Scraper With Profile AnalyticsStory Highlight extraction with per-profile analytics
LinkedIn Company About Scraper With Firmographic EnrichmentComparable company-verification data for LinkedIn
Facebook Group Profile ScraperComparable profile-snapshot lookup for Facebook groups

How to extract Instagram data programmatically

Every run is a standard Apify Actor call — one API request with your token, JSON input, JSON results back.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run_input = {
"profiles": ["natgeo", "nike", "dead_account_example"],
"statusFilter": "all",
}
run = client.actor("<YOUR_USERNAME>/instagram-profile-scraper-account-privacy-checker").call(run_input=run_input)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("rowType") != "summary":
print(row["username"], row["accountStatus"])

Export to spreadsheets or CRM

Export the dataset directly as CSV or Excel, then map username/url to your CRM's contact fields and accountStatus/accountType to a list-hygiene column for filtering before an outreach campaign.

Full name, biography, and follower counts for individual accounts are personal data, so GDPR and CCPA obligations apply to storing and using this data. Public Instagram profile status (active/private/not found) and business-account data are visible to any logged-out visitor checking a profile manually, but downstream storage of individual creators' profile content should follow applicable data-protection rules. Consult legal counsel for commercial applications involving bulk storage of personal data.

❓ FAQ

How does the Actor tell a private account apart from a deleted one?

It checks Instagram's own response shape directly — a genuine HTTP 404 or explicit not-found page maps to not_found, while a private-account response shape (data exists but content is gated) maps to private. These are two structurally different signals, not a single "can't access" bucket.

Are not_found or private accounts dropped from the output?

No — every checked account gets a row (before any statusFilter is applied), with base profile fields honestly returned as null/defaults rather than the row being silently dropped. This is what makes it a genuine bulk-status checker rather than a scraper that quietly skips accounts it can't reach.

Does the run summary row cost extra?

No — the single run-summary row is pushed uncharged. Only individual account rows are billed under row_result.

Do I need an Instagram account to use this?

No, but a sessionId unlocks fuller profile detail data — the Actor still correctly detects active/private/not-found status without one.

How many accounts can I check per run?

There's no fixed cap in the input schema — add as many accounts as needed to the profiles list.

Does Instagram Profile Scraper + Account Privacy Checker work with Claude, ChatGPT, and AI agent frameworks?

It has no dedicated MCP server registration in this Actor's current setup, but it is callable as a standard Apify API endpoint by any agent framework that can make an authenticated HTTP request and parse JSON.

How does this compare to other Instagram profile-checking scrapers?

No independently verifiable competitor listing could be confirmed at the time of writing, so no specific comparison is made here. This Actor's distinguishing feature is the definitive four-way status classification (active/private/not_found/unavailable) rather than simply failing or returning nothing for unreachable accounts.

What does the About-section data actually include?

Only what Instagram itself displays in its public "About this account" transparency panel — join date and country — and only when Instagram provides that panel for the account, per includeAboutSection.

Conclusion

Instagram Profile Scraper + Account Privacy Checker turns a bulk account list into a definitive status report — active, private, not found, or unavailable, honestly classified and never silently dropped, plus full profile data for every reachable account. It's built for list-cleaning, agency audits, and pipelines that need to know exactly which accounts on a list are still real before spending outreach effort on them. Start a run with your account list to get status and profile data back in one pass.