Social Profile Finder
Find public social profiles from a name, company, domain, email or @handle. Seven networks, with handle, display name and a confidence score.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
queries,networks,minConfidence(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0009 per profile found = $0.9 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Profile found | One confirmed public social profile delivered to your dataset: the network, the profile URL, the handle, the display name on the account, follower count and verification badge where the network publishes them, plus a 0-0.99 match confidence and the named evidence behind it. Profiles below your confidence threshold, sample rows, diagnostic rows and duplicates already returned in the same run are never charged. | $0.0009 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-16, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
queries | One entry per line. Each can be a person or company name, a website domain, an email address, an @handle, or a link to a profile you already have. Up to 50 per run. When you have more than one clue about the same subject, pass an object instead - {"name":"Patagonia","domain":"patagonia.com"} - and the extra evidence raises the confidence of every match. | array |
networks | Leave empty to check all seven. Dropping the ones you do not need makes each lookup faster, and a network that is not checked is never charged for. | array |
minConfidence | Profiles scoring below this are never written and never charged. Same 0 to 0.99 scale as the matchConfidence field in the output. Default 0.65, which is deliberately strict - a handle that merely exists and merely echoes the name back is not reported. Lower it to about 0.5 to review weak matches yourself, or raise it to 0.8 for self-declared and badge-verified profiles only. | number |
maxProfilesPerNetwork | How many profiles to keep per network for each lookup. Default 1, the highest-scoring one. Raise it to 2 or 3 for brands that legitimately run several accounts on the same network. | integer |
maxHandleVariants | How many handle spellings to try when all you have is a name - janedoe, jane.doe, jane_doe and so on. Default 3, maximum 5. More variants means more coverage and more requests. | integer |
checkWebsite | Read the website for the profiles it links to. This is the single strongest signal available, so leave it on unless you only ever pass bare handles. Default on. | boolean |
maxItems | Total profiles to return across every lookup in the run. Default 50, hard ceiling 2,000. Keep it low while you are testing - you pay per profile. | integer |
proxyUrls | Leave this empty for a normal run. Fill it in only if you want the traffic to leave through proxy servers you already pay for, one URL per line, in the form http://user:pass@host:port. | array |
What you get
A structured dataset — each result includes fields like:
querysubjectsubjectDomainnetworknetworkLabelprofileUrlhandledisplayNamematchConfidenceconfidenceLabelmatchEvidencesourcefollowersExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
1 ready-to-run use cases
Social Profile Finder by Brand or Name
Find social media profiles for a brand or person from a domain or name. Results carry a confidence score you can filter on.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Social Profile Finder: a name, domain or email in, the matching social profiles out
Give it a person, a company, a website, an email address or an @handle. It comes back with the public profiles that belong to it across X, Instagram, LinkedIn, Facebook, TikTok, YouTube and GitHub, one row each, with the handle, the display name and a score.
The thing to understand before you judge the results: no public directory maps a person to their handles. This is a search that gathers evidence and scores it, not a lookup in a table. Give it a domain and it does well, because a company's own site links to its accounts. Give it a common name and nothing else, and most networks will not produce a match that clears the bar.
| Input | Names, domains, emails, @handles, or profile links |
| Output | One row per profile found, with a confidence score |
| Ceiling | 50 lookups and 2,000 profiles per run |
| Account needed | None |
| Price | $0.90 per 1,000 profiles found |
🔗 What Social Profile Finder does
For each thing you look up it gathers evidence from several directions at once. It reads the subject's own website for the accounts it links to, which is the strongest signal there is. It tries handle spellings on each network and checks what answers. It reads what a profile says about itself, including the site it links back to and whether the network has verified it.
All of that turns into matchConfidence, a number between 0.05 and 0.99, and the row is only written if it beats minConfidence. The default of 0.65 is deliberately strict. A handle that merely exists and merely echoes the name back does not get reported.
When you have more than one clue about the same subject, pass an object rather than a line of text: {"name": "Patagonia", "domain": "patagonia.com"}. The extra evidence raises the score on every match it finds.
📥 What you give it
{
"queries": ["patagonia.com", "Marques Brownlee", "@MrBeast"],
"networks": ["x", "instagram", "youtube"],
"minConfidence": 0.65,
"maxItems": 50
}
| Field | Default | What it is |
|---|---|---|
queries | none | One subject per line. Name, domain, email, @handle, or a profile link. Up to 50. |
networks | all seven | Pick the ones you care about. A network you do not check is never charged for. |
minConfidence | 0.65 | Below this a profile is never written and never billed. Drop to about 0.5 to review weak matches yourself, raise to 0.8 for verified accounts only. |
maxProfilesPerNetwork | 1 | Keeps the best-scoring account per network. Raise to 2 or 3 for brands that run several. |
maxHandleVariants | 3 | Spellings tried when all you have is a name: janedoe, jane.doe, jane_doe. Up to 5. |
checkWebsite | true | Reads the subject's own site for links. Leave it on unless you only ever pass bare handles. |
maxItems | 50 | Profiles across the whole run. Up to 2,000. This is your spend cap. |
proxyUrls | none | Your own servers, one URL per line, if you want the traffic to leave through them. |
Run it with the input empty and you get a free sample row showing the shape, with nothing looked up.
📤 What you get back
A real row from a real run:
{
"ok": true,
"charged": true,
"recordType": "profile",
"query": "patagonia.com",
"subject": "patagonia",
"subjectDomain": "patagonia.com",
"network": "x",
"networkLabel": "X (Twitter)",
"profileUrl": "https://x.com/patagonia",
"handle": "patagonia",
"displayName": "Patagonia",
"matchConfidence": 0.99,
"confidenceLabel": "high",
"matchEvidence": "verified-on-network | linked-from-own-website | structured-data-sameas | display-name-matches | links-back-to-domain | platform-verified-badge | established-audience",
"source": "website-link",
"followers": 536292,
"platformVerified": true,
"bio": "We're in business to save our home planet.",
"profileWebsite": "http://patagonia.com/",
"verifiedLive": true,
"scrapedAt": "2026-09-21T13:01:48.062Z"
}
| Field | What it is |
|---|---|
query | The line you typed. subject is what was actually scored against. |
matchConfidence | 0.05 to 0.99. confidenceLabel is the same thing as high, medium or low. |
matchEvidence | Every signal that fed the score, pipe separated. This is how you audit a match. |
source | How it was found: website-link, handle-probe or cross-link. |
verifiedLive | false when the account was only seen as a link on the subject's site and not confirmed on the network itself. |
platformVerified | The network's own badge, where the network shows one. |
handle | Spelled the way the network spells it, which is not always how you typed it. |
displayName is null when the network did not give one back. Nothing is guessed to fill a gap.
🧾 Reading the output
Three kinds of row land in the dataset, and only the first kind is billed.
| Row | How to spot it | Charged |
|---|---|---|
| A profile | recordType: "profile" and a profileUrl | yes |
| The sample row | _sample: true, from an empty run | no |
| A diagnostic | ok: false and an errorCode | no |
The charged flag marks a row as a real result rather than a sample or a diagnostic. Filter on recordType == "profile" and you have your profiles.
| Code | What it means |
|---|---|
NO_RESULTS | Nothing cleared the threshold for that subject, or its website could not be read. The row carries what was tried. |
TIME_BUDGET | The run hit its time limit before reaching that subject. |
NETWORK | That subject failed outright. The others in the run are unaffected. |
PROXY_INPUT_ADJUSTED | Something in proxyUrls was not usable and the run went on without it. |
CHARGE_ERROR | Billing did not confirm for a row. Tell us if you see one. |
A useful detail the default table hides: verifiedLive and platformVerified are not columns in the overview view, so an unconfirmed match looks the same as a badge-verified one until you open the JSON.
▶️ How to run it
1. Open Social Profile Finder and click Try for free. 2. Put your subjects into Who or what to look up, one per line. 3. Optional: pick the Networks you actually want. Fewer networks means faster lookups. 4. Set Maximum profiles. Start at 20 while you see how your subjects score. 5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the API.
💰 How much does it cost?
$0.90 per 1,000 profiles found, which is $0.0009 each. Flat on every Apify plan, no volume tiers.
You pay for profiles written to the dataset. A subject that finds nothing produces no profile rows, and neither do the sample row, the diagnostic rows, or a network you chose not to check. minConfidence is the cheapest control you have: raise it and weak matches are dropped before they are ever written.
One thing to plan around. There is no cross-checking between lookups in a run, so if patagonia.com and @patagonia both resolve to the same X account, that is two rows and two charges. Put one line per subject, not several spellings of the same one.
💡 What people use it for
- Filling in the social columns on a list of companies you already have domains for.
- Checking whether an account claiming to be a brand actually links back to that brand's site.
- Finding a creator's other accounts when you only have the one you already follow.
- Enriching inbound sign-ups, where a work email and a company name are all you get.
🚧 What it does not do
- Seven networks. X, Instagram, LinkedIn, Facebook, TikTok, YouTube and GitHub. Nothing else.
- A bare name rarely clears the bar. Without a domain, a badge, a real audience or a link back,
most name-only subjects score under 0.65 and come back as NO_RESULTS.
- It does not merge duplicate lookups. Two lines pointing at the same account produce two rows.
- Instagram is the thinnest of the seven, and LinkedIn member profiles are best effort. Company
pages do better than people.
- Private, suspended and deleted accounts read as absent. The actor reports what it could
confirm, and never turns "could not check" into a match.
- Role mailboxes give it nothing to work with.
info@orpress@has no personal handle in it,
so the lookup falls back to the domain.
- No posts, no followers list, no contact details. It finds the profile. To read what is on it,
use the scrapers linked below.
🧭 Which social actor do you need?
| If you want | Use |
|---|---|
| Profiles that belong to a person, brand or domain | This one |
| Full Instagram profile data from a handle you already have | Instagram Profile Scraper |
| Public LinkedIn posts matching a keyword | LinkedIn Post Search Scraper |
| Titles, captions and hashtags written for a video | Social Metadata Generator |
| To post a video to several networks from your AI client | Social Media Uploader Pro |
❓ Questions people ask
What confidence should I trust? Anything at 0.8 or above is normally a confirmed account. Between 0.65 and 0.8, read matchEvidence before you act on it. Below that you have told the actor to show you guesses.
Why did my well-known person come back empty? Because the evidence was thin, not because the account does not exist. Add their domain or a handle you already know and run it again.
Can I look up 500 people? Not in one run. 50 lookups is the cap. Split the list and run it a few times, or schedule it.
Does it need logins for the networks? No. Nothing to paste and nothing that expires.
Is this legal? It reads public profile pages, the same ones anyone can open. Results are personal data, which GDPR and similar laws cover, so have a reason for holding them. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the exact line you looked up and the run ID, and the evidence in the log usually explains the score.