Instagram Public Contact Finder avatar

Instagram Public Contact Finder

Pricing

from $3.20 / 1,000 completed profile reports

Go to Apify Store
Instagram Public Contact Finder

Instagram Public Contact Finder

Find publicly listed email, phone, and WhatsApp contact details from Instagram profiles and up to two linked pages. Every deduplicated contact includes its source URL, extraction method, verification status, and page-scan outcome.

Pricing

from $3.20 / 1,000 completed profile reports

Rating

0.0

(0)

Developer

Data Slayer

Data Slayer

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

20 hours ago

Last modified

Share

Turn Instagram profiles into evidence-backed public contact reports. Find publicly listed email, phone, and WhatsApp details, optionally scan up to two linked pages, and keep the exact source behind every result.

Watch the demo

YouTube video coming soon.

What you get

Each input profile produces one report with:

  • public email and phone fields exposed on the Instagram profile;
  • email, labeled phone, and WhatsApp details found in the biography;
  • optional contacts found on the profile's bio destination and one relevant child page;
  • deduplicated contacts with every source URL retained;
  • an extraction method for each piece of evidence;
  • linked-page scan statuses, byte counts, and final URLs;
  • a clear contacts_found, no_public_contacts_found, or failed-profile outcome.

This Actor finds publicly listed contact evidence. It does not test mailbox deliverability, guarantee that an address is current, or describe a discovered email as verified.

Common uses

  • add contact evidence to a curated creator or brand shortlist;
  • prepare partnership, PR, recruiting, or sales research;
  • separate profiles with public contact paths from profiles with no discoverable contact;
  • audit where an existing lead's email or phone number was publicly listed;
  • export source-backed contact reports to a CRM or spreadsheet.

Input

KeyTypeRequiredDefaultAllowed rangePurpose
profilesstring[]YesNone; the form prefill is patagonia1–50 items on paid plans; Free-plan cap: 5. Each item is a username, @username, or instagram.com/<username> profile URL.Profiles to turn into contact reports. Duplicates are processed once.
scanLinkedPagesbooleanNotruetrue or falseWhen enabled, scan the public bio destination and at most one relevant contact/about child page.

Validation is atomic: an empty list, more than 50 items, an invalid username, a non-profile Instagram URL, a non-Instagram URL, URL credentials, or an unknown input key fails before profile processing begins. Usernames must be 1–30 letters, numbers, periods, or underscores after normalization. Matching inputs are deduplicated case-insensitively while preserving the first position.

Example:

{
"profiles": [
"patagonia",
"https://www.instagram.com/example_creator/"
],
"scanLinkedPages": true
}

Output

The primary output is one dataset row per normalized unique profile, in input order. A row with status: completed is one billable completed profile report. A row with status: failed documents an unavailable profile and is not billed as a completed report.

Profile report fields

KeyTypeNullableMeaning / unit
profileInputstringNoFirst submitted value that normalized to this profile.
usernamestringNoNormalized Instagram username without @.
profileUrlstringNoCanonical Instagram profile URL.
displayNamestringYesPublic display name when available.
biographystringYesPublic biography when available.
isPrivatebooleanYesPublic privacy state when available.
isVerifiedbooleanYesInstagram badge state when available; this is not email verification.
externalUrlstringYesPublic bio destination selected for bounded scanning.
statusstring enumNocompleted or failed.
outcomestring enumNocontacts_found, no_public_contacts_found, profile_not_found, or profile_temporarily_unavailable.
contactsobject[]NoDeduplicated public contacts with evidence sources.
contactCountintegerNoNumber of deduplicated contacts.
emailCountintegerNoNumber of deduplicated email contacts.
phoneCountintegerNoNumber of deduplicated phone contacts.
whatsappCountintegerNoNumber of deduplicated WhatsApp contacts.
emailsstring[]NoNormalized email values for CSV and automation use.
phonesstring[]NoNormalized phone values; international + format is preserved when evidence supports it.
whatsappstring[]NoNormalized public WhatsApp links or numbers.
scanRequestedbooleanNoWhether linked-page scanning was requested.
pagesAttemptedintegerNoNumber of public linked pages attempted, from 0 to 2.
pagesFetchedintegerNoNumber of attempted pages successfully read as HTML or plain text.
scanBytesReadintegerNoTotal linked-page response bytes read, capped at 2 MiB per profile.
pageScansobject[]NoEvidence and status for each attempted linked page.
errorCodestringYesStable functional code for failed profiles; never a raw response or exception.
errorMessagestringYesCustomer-safe failed-profile explanation.
errorRetryablebooleanYesWhether retrying later may succeed.
processedAtstringNoISO-8601 UTC time when this row was finalized.

Contact fields

KeyTypeNullableMeaning
typestring enumNoemail, phone, or whatsapp.
valuestringNoCustomer-facing representative value.
normalizedValuestringNoDeterministic deduplication/export value.
isPubliclyListedbooleanNoAlways true for returned contacts.
verificationStatusstring enumNonot_deliverability_verified for email; not_applicable otherwise.
sourcesobject[]NoOne or more public evidence locations.

Each sources item contains url and extractionMethod. Allowed methods are instagram_public_email_field, instagram_public_phone_field, instagram_biography_text, linked_page_mailto, linked_page_tel, linked_page_whatsapp, and linked_page_text.

Linked-page scan fields

KeyTypeNullableMeaning / unit
requestedUrlstringNoPublic destination selected for the attempt.
finalUrlstringYesFinal public URL after allowed redirects.
statusstring enumNofetched, blocked_by_policy, timeout, too_large, unsupported_content, or http_error.
httpStatusintegerYesPublic destination HTTP status when a response was received.
contentTypestringYesPublic destination content type when available.
bytesReadintegerNoResponse bytes read for this page, capped at 1 MiB.
contactsFoundintegerNoDeduplicated report contacts with evidence on this page.

Illustrative JSON

{
"profileInput": "example_creator",
"username": "example_creator",
"profileUrl": "https://www.instagram.com/example_creator/",
"displayName": "Example Creator",
"biography": "Partnership inquiries and new work.",
"isPrivate": false,
"isVerified": false,
"externalUrl": "https://example.com/",
"status": "completed",
"outcome": "contacts_found",
"contacts": [
{
"type": "email",
"value": "hello@example.com",
"normalizedValue": "hello@example.com",
"isPubliclyListed": true,
"verificationStatus": "not_deliverability_verified",
"sources": [
{
"url": "https://www.instagram.com/example_creator/",
"extractionMethod": "instagram_public_email_field"
},
{
"url": "https://example.com/contact",
"extractionMethod": "linked_page_mailto"
}
]
},
{
"type": "phone",
"value": "+1 202 555 0147",
"normalizedValue": "+12025550147",
"isPubliclyListed": true,
"verificationStatus": "not_applicable",
"sources": [
{
"url": "https://example.com/contact",
"extractionMethod": "linked_page_tel"
}
]
}
],
"contactCount": 2,
"emailCount": 1,
"phoneCount": 1,
"whatsappCount": 0,
"emails": ["hello@example.com"],
"phones": ["+12025550147"],
"whatsapp": [],
"scanRequested": true,
"pagesAttempted": 2,
"pagesFetched": 2,
"scanBytesRead": 27648,
"pageScans": [
{
"requestedUrl": "https://example.com/",
"finalUrl": "https://example.com/",
"status": "fetched",
"httpStatus": 200,
"contentType": "text/html",
"bytesRead": 18432,
"contactsFound": 0
},
{
"requestedUrl": "https://example.com/contact",
"finalUrl": "https://example.com/contact",
"status": "fetched",
"httpStatus": 200,
"contentType": "text/html",
"bytesRead": 9216,
"contactsFound": 2
}
],
"errorCode": null,
"errorMessage": null,
"errorRetryable": null,
"processedAt": "2026-09-20T12:00:00Z"
}

The example above is illustrative and validates the implemented schema; it is not presented as an observed Store run.

Overview CSV

The overview view keeps one row per profile and flattens the most useful automation fields. Detailed contact sources and page attempts remain available in JSON.

profileInput,username,profileUrl,displayName,status,outcome,contactCount,emailCount,phoneCount,whatsappCount,emails,phones,whatsapp,scanRequested,pagesAttempted,pagesFetched,scanBytesRead,errorCode,processedAt
example_creator,example_creator,https://www.instagram.com/example_creator/,Example Creator,completed,contacts_found,2,1,1,0,"[""hello@example.com""]","[""+12025550147""]",[],true,2,2,27648,,2026-09-20T12:00:00Z

Run summary

The default key-value OUTPUT record contains status (succeeded, partial, or failed), inputProfiles, uniqueProfiles, completedReports, failedReports, chargeableReports, profilesWithContacts, profilesWithoutContacts, contactsFound, pagesAttempted, pagesFetched, bytesRead, startedAt, and finishedAt. No secondary dataset or binary download is included in the first release.

For a completed no-contact profile, status is completed, outcome is no_public_contacts_found, contact arrays are empty, counts are zero, page evidence is retained, and the report is billable. A profile that cannot be resolved returns a failed row with profile_not_found or profile_temporarily_unavailable, empty contacts, a stable safe error, and no completed-report charge. A linked-page failure does not fail an otherwise retrieved profile: the page status records the limitation and any profile-level contacts remain in the completed report. Mixed batches produce a partial run summary.

How linked-page scanning is bounded

The first release scans no more than two pages per profile:

  1. the public destination linked from the profile;
  2. at most one relevant contact/about child page selected from that destination.

Each page is limited to public HTTP/HTTPS HTML or plain text, 1 MiB, three redirects, a five-second connection timeout, and an eight-second read timeout. Loopback, private, link-local, multicast, reserved, unspecified, and credential-bearing destinations are blocked before each request and redirect. The Actor does not log in, submit forms, retain cookies, download binary files, or bypass access controls.

If a page is blocked, slow, oversized, unavailable, or an unsupported content type, the report keeps any Instagram-level contacts and records the page outcome instead of inventing missing data.

Contact interpretation

  • isPubliclyListed: true means the value appeared on the public profile or an allowed public linked page.
  • verificationStatus: not_deliverability_verified means the Actor did not test whether an email mailbox can currently receive messages.
  • Multiple observations of the same normalized value are merged into one contact with multiple sources.
  • Phone extraction is limited to explicit tel: links, WhatsApp links, labeled phone text, and clear international formats to reduce false positives.

Pricing

The Actor charges once when a run starts and once per completed profile report. Linked-page scanning is included. A successfully completed report with zero discovered contacts is still charged because the profile and requested pages were examined and the no-contact outcome is delivered. A profile that cannot be retrieved after bounded retry is not charged as a completed report.

TierPer completed reportPer 1,000 completed reportsOne-time Actor start
Free$0.00500$5.00$0.002
Bronze$0.00400$4.00$0.002
Silver$0.00360$3.60$0.002
Gold$0.00320$3.20$0.002
Platinum$0.00320$3.20$0.002
Diamond$0.00320$3.20$0.002

Free-plan runs are capped at five profiles per run. Paid-plan runs accept up to 50 profiles.

Limitations and responsible use

  • Only public profile fields and publicly accessible linked pages are examined.
  • Private, restricted, removed, or temporarily unavailable profiles can return a failed report.
  • Websites can block automated requests, require JavaScript, or omit contact details from their initial HTML.
  • A public address may be stale, role-based, or unsuitable for unsolicited messages.
  • Results are not legal advice or permission to contact someone. Follow applicable privacy, marketing, and platform rules.
  • Coverage and contact-bearing yield vary by account type, niche, geography, and how profiles publish their contact information.