Username Lookup Across 400+ Social Platforms
Check a username or nickname against 400+ social, gaming, professional and messaging platforms and get back the public profiles confirmed to exist for it.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | lookup returns found profiles (plus blocked/unknown checks), availability returns one row per platform with available/taken/unknown, and name_search generates handle candidates from a full name. |
usernames | array | optional | Handles to check. Accepts plain handles, @handles and profile URLs. Required for lookup and availability. Maximum 50 per run (10 when extended coverage is active). |
names | array | optional | Full names for name_search. The actor builds up to 10 handle candidates per name, checks them, and scores the matches. Maximum 50 per run. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | lookup returns found profiles (plus blocked/unknown checks), availability returns one row per platform with available/taken/unknown, and name_search generates handle candidates from a full name. |
usernames | array | optional | Handles to check. Accepts plain handles, @handles and profile URLs. Required for lookup and availability. Maximum 50 per run (10 when extended coverage is active). |
names | array | optional | Full names for name_search. The actor builds up to 10 handle candidates per name, checks them, and scores the matches. Maximum 50 per run. |
coverage | string | optional | verified uses the 29 platforms that passed a known-handle plus random-handle gate. extended adds 400+ best-effort platforms at low confidence. |
platforms | array | optional | Limit the run to specific platforms. Leave empty to use all verified platforms, or all verified + extended platforms when coverage=extended. Extended-only platform names are rejected when coverage=verified. |
maxConcurrency | integer | optional | Concurrent checks. The default of 12 is the validated safe value for the verified set; per-host requests are limited further. |
maxResults | integer | optional | Maximum profile/check rows to emit. The summary row is always emitted and is not counted. |
proxyConfiguration | object | optional | The actor works without a proxy. Supply one only if you want requests routed through your own Apify proxy configuration. |
Download the published input schema
View complete JSON
{
"description": "Look up handles on 29 verified platforms, check availability, or turn full names into handle candidates.",
"properties": {
"coverage": {
"default": "verified",
"description": "verified uses the 29 platforms that passed a known-handle plus random-handle gate. extended adds 400+ best-effort platforms at low confidence.",
"editor": "select",
"enum": [
"verified",
"extended"
],
"enumTitles": [
"Verified (29 platforms, high accuracy)",
"Extended (400+ platforms, best effort)"
],
"prefill": "verified",
"sectionCaption": "Coverage & Platforms",
"sectionDescription": "Verified platforms carry hard status or content-signature rules. Extended platforms are labelled low confidence and never mixed silently with verified results.",
"title": "Coverage",
"type": "string"
},
"maxConcurrency": {
"default": 12,
"description": "Concurrent checks. The default of 12 is the validated safe value for the verified set; per-host requests are limited further.",
"maximum": 12,
"minimum": 1,
"prefill": 12,
"sectionCaption": "Limits",
"sectionDescription": "Caps protect both the target platforms and your run time.",
"title": "Max concurrency",
"type": "integer"
},
"maxResults": {
"default": 500,
"description": "Maximum profile/check rows to emit. The summary row is always emitted and is not counted.",
"maximum": 5000,
"minimum": 1,
"prefill": 10,
"title": "Max results",
"type": "integer"
},
"mode": {
"default": "lookup",
"description": "lookup returns found profiles (plus blocked/unknown checks), availability returns one row per platform with available/taken/unknown, and name_search generates handle candidates from a full name.",
"editor": "select",
"enum": [
"lookup",
"availability",
"name_search"
],
"enumTitles": [
"Lookup handles",
"Check availability",
"Search by full name"
],
"prefill": "lookup",
"sectionCaption": "Search Settings",
"sectionDescription": "Choose what to check. lookup and availability read `usernames`; name_search reads `names`.",
"title": "Mode",
"type": "string"
},
"names": {
"description": "Full names for name_search. The actor builds up to 10 handle candidates per name, checks them, and scores the matches. Maximum 50 per run.",
"editor": "stringList",
"items": {
"type": "string"
},
"title": "Full names (name_search)",
"type": "array"
},
"platforms": {
"description": "Limit the run to specific platforms. Leave empty to use all verified platforms, or all verified + extended platforms when coverage=extended. Extended-only platform names are rejected when coverage=verified.",
"editor": "select",
"items": {
"enum": [
"GitHub",
"GitLab",
"YouTube",
"TikTok",
"Instagram",
"Pinterest",
"Twitch",
"X/Twitter",
"Medium",
"SoundCloud",
"Steam",
"Snapchat",
"Bluesky",
"Mastodon.social",
"Threads",
"Dribbble",
"Behance",
"Vimeo",
"Keybase",
"Substack",
"Flickr",
"HackerNews",
"Dev.to",
"HuggingFace",
"Chess.com",
"Lichess",
"Goodreads",
"Patreon",
"About.me",
"1337x",
"2Dimensions",
"7Cups",
"9GAG",
"Academia.edu",
"addons.wago.io",
"Airbit",
"Airliners",
"akniga",
"Anilist",
"AniWorld",
"Aparat",
"Apple Developer",
"Apple Discussions",
"Archive of Our Own",
"Archive.org",
"Arduino Forum",
"ArtStation",
"Asciinema",
"Ask Fedora",
"Atcoder",
"Audiojungle",
"authorSTREAM",
"Autofrage",
"Avizo",
"AWS Skills Profile",
"babyblogRU",
"Bandcamp",
"Bazar.cz",
"Bezuzyteczna",
"BiggerPockets",
"BioHacking",
"BitBucket",
"Bitwarden Forum",
"Blipfoto",
"Blitz Tactics",
"Blogger",
"BoardGameGeek",
"Bookcrossing",
"BOOTH",
"BraveCommunity",
"BreachSta.rs Forum",
"BugCrowd",
"BuyMeACoffee",
"BuzzFeed",
"Caddy Community",
"Car Talk Community",
"Carbonmade",
"Career.habr",
"Carrd",
"CashApp",
"Cfx.re Forum",
"CGTrader",
"Championat",
"Chaos",
"chaos.social",
"Chatujme.cz",
"Choice Community",
"Chollometro",
"Clapper",
"CloudflareCommunity",
"Clozemaster",
"Clubhouse",
"CNET",
"Code Snippet Wiki",
"Codecademy",
"Codechef",
"Codeforces",
"Codepen",
"Coders Rank",
"Coderwall",
"CodeSandbox",
"Codewars",
"Codolio",
"Coinvote",
"ColourLovers",
"Contently",
"Coroflot",
"couchsurfing",
"Cplusplus",
"Cracked",
"Cracked Forum",
"Credly",
"Crevado",
"Crowdin",
"CryptoHack",
"Cryptomator Forum",
"CSSBattle",
"CTAN",
"Cults3D",
"CurseForge",
"CyberDefenders",
"d3RU",
"dailykos",
"datingRU",
"dcinside",
"Dealabs",
"DeviantArt",
"devRant",
"DigitalSpy",
"Discogs",
"Discord.bio",
"Discuss.Elastic.co",
"Disqus",
"DMOJ",
"Docker Hub",
"drive2",
"Duolingo",
"eGPU",
"eintracht",
"Eintracht Frankfurt Forum",
"Empretienda AR",
"Envato Forum",
"exophase",
"Exposure",
"EyeEm",
"Fandom",
"Fanpop",
"Finanzfrage",
"fixya",
"fl",
"Flightradar24",
"Flipboard",
"Football",
"FortniteTracker",
"Forum Ophilia",
"forum_guns",
"Fosstodon",
"Framapiaf",
"freecodecamp",
"Freelancer",
"Freesound",
"GaiaOnline",
"GameFAQs",
"Gamespot",
"GeeksforGeeks",
"Genius (Artists)",
"Genius (Users)",
"geocaching",
"Gesundheitsfrage",
"GetMyUni",
"Giant Bomb",
"Giphy",
"GitBook",
"Gitea",
"Gitee",
"GNOME VCS",
"Google Play",
"Gradle",
"Grailed",
"Gravatar",
"Gumroad",
"Gutefrage",
"habr",
"Hackaday",
"HackenProof (Hackers)",
"HackerEarth",
"HackerOne",
"HackerRank",
"HackerSploit",
"HackMD",
"hackster",
"HackTheBox",
"Harvard Scholar",
"Hashnode",
"Hive Blog",
"Holopin",
"HotUKdeals",
"Houzz",
"HubPages",
"Hubski",
"HudsonRock",
"hunting",
"Icons8 Community",
"IFTTT",
"Ifunny",
"igromania",
"ImgUp.cz",
"Imgur",
"imood",
"Instapaper",
"Instructables",
"interpals",
"Intigriti",
"Ionic Forum",
"IRC-Galleria",
"irecommend",
"Issuu",
"Itch.io",
"Itemfix",
"jbzd.com.pl",
"Jellyfin Weblate",
"jeuxvideo",
"Jimdo",
"Joplin Forum",
"Jupyter Community Forum",
"Kaggle",
"kaskus",
"Kick",
"Kik",
"Kongregate",
"kwork",
"Laracast",
"Launchpad",
"leasehackr",
"LeetCode",
"LemmyWorld",
"LessWrong",
"LibraryThing",
"LinuxFR.org",
"Listed",
"LiveJournal",
"livelib",
"Lobsters",
"LOR",
"LottieFiles",
"Mamot",
"mastodon.cloud",
"mastodon.xyz",
"Memrise",
"mercadolivre",
"minds",
"Minecraft",
"MixCloud",
"MMORPG Forum",
"moikrug",
"Monkeytype",
"Motorradfrage",
"mstdn.io",
"mstdn.social",
"MuseScore",
"MyAnimeList",
"Mydealz",
"Mydramalist",
"MyMiniFactory",
"Myspace",
"n8n Community",
"nairaland.com",
"namuwiki",
"NationStates Nation",
"NationStates Region",
"Naver",
"Needrom",
"Newgrounds",
"Nextcloud Forum",
"NICommunityForum",
"Nightbot",
"Ninja Kiwi",
"NintendoLife",
"NitroType",
"nnRU",
"NotABug.org",
"note",
"Nothing Community",
"Nyaa.si",
"ObservableHQ",
"omg.lol",
"Open Collective",
"OpenGameArt",
"opennet",
"Opensource",
"OpenStreetMap",
"Outgress",
"Packagist",
"Pastebin",
"Patched",
"PCGamer",
"PentesterLab",
"Pepperdeals",
"PepperealsUS",
"PepperNL",
"PepperPL",
"phpRU",
"pikabu",
"Pinkbike",
"pixelfed.social",
"Platzi",
"PlayStore",
"Playstrategy",
"Plurk",
"PocketStars",
"Pokemon Showdown",
"Polarsteps",
"Polygon",
"Polymart",
"pr0gramm",
"Preisjaeger",
"prog.hu",
"programming.dev",
"Promodescuentos",
"PromoDJ",
"Pronouns.page",
"PSNProfiles.com",
"Pychess",
"Python.org Discussions",
"Rajce.net",
"Rarible",
"Rate Your Music",
"Rclone Forum",
"Realmeye",
"Redbubble",
"Reisefrage",
"Replit.com",
"ResearchGate",
"ReverbNation",
"Roblox",
"RocketTube",
"Ruby Forums",
"RubyGems",
"RuneScape",
"satsisRU",
"Sbazar.cz",
"Scratch",
"Scribd",
"SEOForum",
"sessionize",
"Shelf",
"ShitpostBot5000",
"Signal",
"Sketchfab",
"Slack",
"Slant",
"Slashdot",
"Slides",
"SlideShare",
"SmugMug",
"Smule",
"social.tchncs.de",
"SOOP",
"SourceForge",
"SoylentNews",
"SpaceHey",
"SpeakerDeck",
"Speedrun.com",
"Spells8",
"spletnik",
"Splice",
"Splits.io",
"Sporcle",
"Sportlerfrage",
"SportsRU",
"Star Citizen",
"Status Cafe",
"Steam Community (Group)",
"Steam Community (User)",
"Strava",
"SublimeForum",
"svidbook",
"SWAPD",
"Tellonym.me",
"Tenor",
"Terraria Forums",
"TETR.IO",
"ThemeForest",
"TheMovieDB",
"Tiendanube",
"tistory",
"Topcoder",
"Topmate",
"toster",
"TradingView",
"TRAKTRAIN",
"TrashboxRU",
"Trawelling",
"Trello",
"Trovo",
"TryHackMe",
"Tuna",
"Tweakers",
"Typeracer",
"uid",
"Ultimate-Guitar",
"Unsplash",
"Valorant Forums",
"Velog",
"Velomania",
"Venmo",
"Vero",
"VirusTotal",
"Vjudge",
"VLR",
"VSCO",
"Wakatime",
"Warframe Market",
"Warrior Forum",
"Wattpad",
"Weblate",
"WebNode",
"Weebly",
"WICG Forum",
"Wikidot",
"Wikipedia",
"Windy",
"Wix",
"WolframalphaForum",
"Wordnik",
"WordPress",
"WordPressOrg",
"Wowhead",
"write.as",
"Wykop",
"Xbox Gamertag",
"YandexMusic",
"YouNow",
"YouPic",
"znanylekarz.pl"
],
"type": "string"
},
"prefill": [
"GitHub",
"YouTube",
"TikTok",
"Pinterest",
"X/Twitter",
"Bluesky",
"Steam"
],
"title": "Platforms (optional)",
"type": "array"
},
"proxyConfiguration": {
"description": "The actor works without a proxy. Supply one only if you want requests routed through your own Apify proxy configuration.",
"editor": "proxy",
"title": "Proxy configuration (optional)",
"type": "object"
},
"usernames": {
"description": "Handles to check. Accepts plain handles, @handles and profile URLs. Required for lookup and availability. Maximum 50 per run (10 when extended coverage is active).",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [
"torvalds"
],
"title": "Usernames / handles",
"type": "array"
}
},
"required": [
"mode"
],
"schemaVersion": 1,
"title": "Social Media Finder Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
profiles | string | optional | Dataset containing profile/check rows and the run summary. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "One record per username/platform check with existence status, confidence, evidence, HTTP status and optional profile metadata, plus a run summary record.",
"properties": {
"profiles": {
"description": "Dataset containing profile/check rows and the run summary.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Username checks and profiles",
"type": "string"
}
},
"title": "Verified Username Lookup Across Social Platforms Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"title": "Username Checks & Profiles",
"views": {
"overview": {
"display": {
"component": "table",
"properties": {
"availability": {
"format": "text",
"label": "Availability"
},
"confidence": {
"format": "text",
"label": "Confidence"
},
"displayName": {
"format": "text",
"label": "Display Name"
},
"evidence": {
"format": "text",
"label": "Evidence"
},
"exists": {
"format": "text",
"label": "Exists"
},
"httpStatus": {
"format": "number",
"label": "HTTP"
},
"matchScore": {
"format": "number",
"label": "Match"
},
"platform": {
"format": "text",
"label": "Platform"
},
"query": {
"format": "text",
"label": "Query"
},
"recordType": {
"format": "text",
"label": "Type"
},
"status": {
"format": "text",
"label": "Status"
},
"url": {
"format": "link",
"label": "Profile URL"
}
}
},
"title": "Checks & Profiles",
"transformation": {
"fields": [
"recordType",
"query",
"platform",
"url",
"exists",
"status",
"availability",
"confidence",
"evidence",
"httpStatus",
"displayName",
"matchScore"
]
}
},
"summary": {
"display": {
"component": "table",
"properties": {
"coverage": {
"format": "text",
"label": "Coverage"
},
"durationSecs": {
"format": "number",
"label": "Seconds"
},
"mode": {
"format": "text",
"label": "Mode"
},
"notFound": {
"format": "number",
"label": "Not Found"
},
"platformsChecked": {
"format": "number",
"label": "Platforms"
},
"profilesFound": {
"format": "number",
"label": "Found"
},
"queriesChecked": {
"format": "number",
"label": "Queries"
},
"recordType": {
"format": "text",
"label": "Type"
},
"rows": {
"format": "number",
"label": "Rows"
},
"status": {
"format": "text",
"label": "Status"
},
"unknown": {
"format": "number",
"label": "Unknown"
}
}
},
"title": "Run Summary",
"transformation": {
"fields": [
"recordType",
"mode",
"coverage",
"status",
"queriesChecked",
"platformsChecked",
"profilesFound",
"notFound",
"unknown",
"rows",
"durationSecs"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Verified Username Lookup Across Social Platforms
Most username checkers answer one question with one bit: "found" or "not found". That bit is often wrong, because a login wall, a Cloudflare challenge, an empty app shell and a soft-404 all return HTTP 200. This actor answers the question honestly: it checks a handle against 29 platforms that passed a known-handle plus random-handle validation gate, and it labels every answer with status, confidence and evidence. When a platform blocks, logs out or returns an ambiguous page, the row says unknown instead of pretending the handle is free.
What it does
- Lookup: check one or many handles,
@handlesor profile URLs. Found profiles are returned with the canonical profile URL, HTTP status, confidence and an evidence label. Blocked or ambiguous checks are returned asunknown. - Availability: get one row per platform with
availability=available,takenorunknown. This is the mode to use before choosing a new handle. - Name search: turn a full name into up to 10 handle candidates (
johnsmith,john.smith,john_smith,john-smith,jsmith, ...), check each candidate, and score matches using the number of platforms found plus display-name similarity. - Verified coverage: 29 platforms with hard status or positive content-signature rules, validated against real control handles and cryptographic random handles with zero false positives in the discovery run.
- Extended coverage: an optional 400+ platform catalogue. Extended rows are always
confidence: low, use a best-effort status check, and never contaminate the verified result set silently. - No cookies, accounts or API keys. All checks are direct requests to public profile URLs or public JSON/oEmbed/XML/RSS endpoints.
Why the status matters
| Status | Meaning |
|---|---|
found |
The platform returned a hard positive signal: 200 with a profile signature, JSON profile, oEmbed payload, RSS feed or XML profile. |
not_found |
The platform returned a hard negative: 404/410, JSON 404/400, oEmbed 400, "no such user", or an explicit not-found body. |
unknown |
The platform blocked us, returned a challenge/login page, rate-limited, timed out, or answered with a page that cannot prove either existence or absence. exists is omitted. |
An unknown row is not proof that the handle is available. It means the actor could not check that platform reliably at that moment. Re-run later, lower concurrency, or check that platform manually.
Output fields
Each profile/check row contains:
recordType—profileorsummaryquery— the handle or full name you asked forusername— the checked handle (the candidate handle in name search)platform,platformId,categoryurl— the canonical profile URLexists—truefor found,falsefor a hard not-found; omitted forunknownavailability—taken,availableorunknownin availability modestatus—found,not_foundorunknownstatusReason— present forunknownrows, e.g.cloudflare_challenge,login_wall,rate_limited,timeout,soft_404confidence—high,mediumorlowevidence— how the verdict was reached, e.g.http_200,json_200,oembed_author,embed_followers,rss_200,xml_profilehttpStatus,responseTimeMsdisplayName,bio,avatarUrl— when the platform exposes themcandidate,matchScore— name-search rows only
Every run also emits one summary record with counts (profilesFound, notFound, unknown, available, taken), queriesChecked, platformsChecked, rows, durationSecs, status and any ignored platform names.
Empty fields are omitted everywhere. There are no null, "", [] or {} values in the dataset.
Inputs
| Field | Type | Default | Notes |
|---|---|---|---|
mode |
select | lookup |
lookup, availability or name_search. |
usernames |
array | — | Handles, @handles or profile URLs. Required for lookup/availability. |
names |
array | — | Full names for name search. |
coverage |
select | verified |
verified (29 platforms) or extended (400+ best-effort platforms). |
platforms |
multi-select | — | Leave empty for all platforms in the chosen coverage. |
maxConcurrency |
integer | 12 |
1–12. The discovery run validated 12 as the safe default. |
maxResults |
integer | 500 |
1–5,000 profile/check rows. The summary is extra. |
proxyConfiguration |
object | — | Optional. The actor works with no proxy. |
Caps: 50 queries per run (10 when extended coverage is active), 10 name candidates per name, 5,000 rows. Duplicate queries, candidates and platform checks are de-duplicated before any request is made.
Example: lookup one handle on the verified set
{
"mode": "lookup",
"usernames": ["torvalds"],
"coverage": "verified",
"maxResults": 50
}
Example: check whether a handle is free
{
"mode": "availability",
"usernames": ["mynewbrand"],
"platforms": ["GitHub", "YouTube", "TikTok", "Instagram", "Pinterest", "X/Twitter", "Bluesky"],
"maxResults": 50
}
Example: find profiles from a full name
{
"mode": "name_search",
"names": ["Linus Torvalds"],
"platforms": ["GitHub", "Bluesky", "Mastodon.social"],
"maxResults": 100
}
Coverage tiers
Verified (29): GitHub, GitLab, YouTube, TikTok, Instagram, Pinterest, Twitch, X/Twitter, Medium, SoundCloud, Steam, Snapchat, Bluesky, Mastodon.social, Threads, Dribbble, Behance, Vimeo, Keybase, Substack, Flickr, HackerNews, Dev.to, HuggingFace, Chess.com, Lichess, Goodreads, Patreon, About.me.
These platforms were tested with real control handles and three cryptographic random handles each. The validated set returned 71/74 control handles found (96%), 0/87 random handles found (0% false positives) and only 4 unknown results. One username across all 29 took about 3.8 seconds at 12-way concurrency.
Extended (400+): pulled from the public Sherlock site catalogue after removing known soft-404 traps, login-walled platforms, dead domains and adult sites. Extended checks use a status-only rule and are always confidence: low. Treat them as leads, not proof.
What is deliberately excluded
Reddit, LinkedIn, Facebook, Telegram, VK, npm, Letterboxd, Untappd, Rumble, Linktree, Ko-fi, ProductHunt, Quora, AllMyLinks, BabyRu, Tumblr, Codeberg and osu! were blocked, login-walled or timed out during discovery. PyPI, Last.fm, Trakt, eBay, Odysee, Dailymotion, Spotify and F3.cool return 200 for random handles and are excluded from the verified set. If a platform becomes reliably checkable without cookies, it can be added to a future verified registry.
FAQ
Do I need cookies, an account or an API key? No. The actor uses only public pages and public JSON/oEmbed/XML/RSS endpoints. It never asks for platform credentials.
Do I need a proxy? No. The verified set works without one. You can attach an Apify proxy configuration if you want requests routed through it, but it is not required.
Why is a platform unknown instead of not_found?
Because the platform blocked the request, showed a challenge/login page, rate-limited, timed out, or returned a page that proves nothing. The actor refuses to turn that into a false "available" answer.
Why does a live profile sometimes belong to a different person?
A handle is not an identity. The same handle can be registered by someone else on another platform. displayName and bio are provided to help you disambiguate, but you should verify identity yourself.
How does name search score matches? Each candidate is checked on the selected platforms. The score combines the share of platforms where the candidate exists (60%) with the best display-name token overlap against the searched name (40%). A candidate with no found profiles is not emitted.
What happens when nothing is found?
The run succeeds and emits a summary row with status: no_results. It does not fail the run.
How are retries handled?
HTTP 419, 429, 5xx and timeouts are retried twice with exponential backoff and jitter. A failed check after retries becomes unknown, never not_found.
Is this affiliated with the platforms? No. This is an independent actor that checks publicly accessible profile pages.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build dMVnzw4obP65tSF3V. Documentation is regenerated from the default published build; private drafts are not included.