Social Media Profile Finder - Handles, Links & Follower Counts
Pricing
from $2.92 / 1,000 profile founds
Social Media Profile Finder - Handles, Links & Follower Counts
For lead and influencer research: a name, brand or company domain comes back as the TikTok, YouTube, Twitch, Telegram, Bluesky, Snapchat, GitHub and Discord accounts behind it, with the follower count and the evidence for each match. All 8 answered on 2026-09-23; 5 give an exact count.
Pricing
from $2.92 / 1,000 profile founds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
For lead and influencer research: give a name, a brand or a company domain and get back the TikTok, YouTube, Twitch, Telegram, Bluesky, Snapchat, GitHub and Discord accounts behind it, each row carrying the follower, subscriber or member count read from the platform itself and the evidence the match rests on. Measured on 2026-09-23 from Apify's datacenter connection: all 8 platforms answered on two reads out of two, and 5 of them publish an exact count. You stop opening eight tabs per prospect, and you stop pasting handles into a second tool to get the numbers.
Export as JSON, CSV or Excel.
Unofficial. Public data only.
Input
| Field | What it does |
|---|---|
names | One person, brand or company name per line. Each one is searched on the web and turned into a handle that is opened on every platform you picked. |
domains | One website per line. The site's own pages are read for the social links published there, and the domain's label is used as the name to match against. |
platforms | Which of the eight to search. Leave empty for all eight; every row says which were searched. |
searchTheWeb | On by default. Off skips the web search and relies on the handles built from the name and, for websites, on the links published on the site. |
includeWeakMatches | Off by default. On also returns profiles that rest on one piece of evidence, marked confidence: low. They are charged like any other row. |
country | Two-letter country code the web search runs from (us when left empty). Profile pages are read the same way whatever you pick. |
maxResults | The run stops once this many charged rows have been returned; a free row says what was left out. |
maxPagesPerWebsite | How many pages of each website to open: the home page, then the contact, about, imprint or press pages it links to. |
What you get
One row per confirmed profile:
| Column | What it is |
|---|---|
query, queryType | what you asked for, and whether it was a name or a website |
platform, platformName | tiktok, youtube, twitch, telegram, bluesky, snapchat, github, discord |
handle, profileUrl | the handle as the platform spells it, and the link |
displayName | the name the platform itself shows for that account |
followers, followersLabel | the audience number, and what that platform calls it (followers / subscribers / members) |
followersAreRounded | false only where the platform publishes the real figure (see the table below) |
followersAsShown | the number as the page prints it, where the page prints one |
secondaryCount, secondaryCountLabel | likes, total views, following, or members online, depending on the platform |
postCount, postCountLabel | videos, posts or public repositories, where the platform publishes it |
isVerifiedOnPlatform, accountType | where the platform states them; null where it does not |
confidence, matchScore, matchReasons | why this account is the one you asked for (below) |
foundVia, evidenceUrl, evidencePageTitle | where it was found: a link on your website, a search result, or the handle built from the name |
searchResultPosition, searchUrl | for a profile taken from web search: its position on the results page, and the search that was run |
source, status, scrapedAt, profileCheckedAt | the Actor name, ok for a returned profile, and when the row and the profile were read |
queryInput, platformsSearched, searchCountry | the entry exactly as you typed it, the platforms this run searched, and the country the search ran from |
note | on free rows only: why nothing was returned |
Entries where nothing could be confirmed, platforms that answered with a bot check, pages a site's robots.txt keeps this Actor out of, and unusable input come back as free rows that say why. They are not charged.
Output
A profile found by opening the handle built from the name, on a platform that publishes the real figure:
{"source": "social-media-profile-finder","scrapedAt": "2026-09-25T09:00:00.000Z","query": "Duolingo","queryType": "name","queryInput": "Duolingo","platformsSearched": "tiktok","searchCountry": "us","status": "ok","platform": "tiktok","platformName": "TikTok","handle": "duolingo","profileUrl": "https://www.tiktok.com/@duolingo","displayName": "Duolingo","followers": 18085172,"followersLabel": "followers","followersAreRounded": false,"followersAsShown": null,"secondaryCount": 500318959,"secondaryCountLabel": "likes","postCount": 1184,"postCountLabel": "videos","isVerifiedOnPlatform": true,"accountType": null,"confidence": "high","matchScore": 4,"matchReasons": ["the handle on the platform is exactly what you asked for","the name the platform itself shows is exactly what you asked for"],"foundVia": "handle-guess","evidenceUrl": null,"evidencePageTitle": null,"searchResultPosition": null,"searchUrl": null,"profileCheckedAt": "2026-09-25T09:00:00.000Z"}
Rows that are not charged, and what each one means:
status | What happened |
|---|---|
no-profile-found | every candidate handle for that entry was opened and none could be confirmed |
search-unavailable | the web search could not be confirmed as the answer to your query, so nothing was taken from it |
platform-unavailable | that platform answered with a bot check, refused the request, or the page could not be read; also used when a profile exists but publishes no count |
website-unreadable | a page of your website could not be read, or robots.txt keeps this Actor out of it |
invalid-input | an entry could not be used, with the reason |
duplicate | the same entry appeared twice in one run and was used once |
not-checked | entries or profiles left out because maxResults was reached, or beyond the 200-entry limit |
budget-reached | the run hit the maximum total charge you set for it |
platforms-not-covered | the one row every run ends with, naming which platforms were searched and which are not covered |
How a profile is matched — and why some are not returned
Finding a handle that looks like the name is easy; being sure it is the right account is the hard part. Every returned profile is opened and read, and the match is scored from what the platform itself shows:
| Evidence | Points |
|---|---|
| the link is published on the website you gave | +3 |
| the handle on the platform is exactly the name you asked for | +2 |
| the same, but the platform shows no name at all for the account | +1 |
| the name the platform shows is exactly the name you asked for | +2 |
| the name the platform shows contains every word you asked for | +1 |
| the profile came up in the search results for your query | +1 |
| the name the platform shows says unofficial, parody or fan page | −1 |
| the name the platform shows shares no word with your query | −2 |
confidence is high at 3 points or more, medium at 2, low at 1. Rows scoring 0 or less are never returned or charged, and low rows are held back unless you switch on Include weak matches. matchReasons spells out every point in plain English, so you can disagree with the score without re-running anything.
When the platform itself says the account is not the real one, that counts against it. A display name containing unofficial, parody, fan page, fan club or fake costs a point, which is enough to push a bare handle match down to low and out of your results: discord.gg/duolingo calls itself "Unofficial Duolingo", and on 2026-09-23 it was being returned as a medium match until this rule was added. The word only counts when it is not part of what you asked for, so a company genuinely called Fanatics is not punished for it.
confidence still measures the evidence, not officialness. A fan channel that took the brand's exact name and says nothing about it scores like the brand's own account, because from the outside the two are identical. Where a platform publishes a verified badge — Telegram and Discord do — isVerifiedOnPlatform carries it, and displayName next to the follower count usually settles it at a glance: in that same run, t.me/duolingo came back as "DUOLINGO 💚" with 9,915 subscribers and isVerifiedOnPlatform: false, against Duolingo's own 18,087,039 on TikTok. This Actor hands you those facts; it does not decide for you which account a brand endorses.
This is deliberately strict, and the strictness is measured rather than guessed. In a run on 2026-09-23 for "MrBeast" and "Duolingo", every account that really belonged to them carried a display name on the platform; the three candidates where the platform showed no name at all — a GitHub account with 9 followers, and two Bluesky accounts with 219 and 84 — were all someone else holding the handle. So a bare handle match with no name behind it is worth one point, not two, and stays out of your results unless you ask for weak matches. Equally, github.com/nike existing does not make it Nike's account: a handle that matches while the display name has nothing in common with your query is scored down, not up.
A profile is returned once, even when three different routes found it. The identity used for that is the one the platform itself publishes — a YouTube channel ID, a Bluesky DID, a Discord server ID — not the text you typed or the handle this Actor guessed. Without it you would pay twice for one account: youtube.com/channel/UCX6OQ3… from a search result and youtube.com/@mrbeast from the name are the same channel, and discord.gg/mrbeast and discord.gg/MrBeast are the same server. When routes agree, their evidence is added together and the row's score goes up.
Platforms, and what their numbers really are
| Platform | What is read | Number | Exact? |
|---|---|---|---|
| TikTok | tiktok.com/@handle | followers | exact |
| Twitch | twitch.tv/handle | followers | exact |
| Telegram | t.me/handle | subscribers or members (the label is in the row) | exact |
| Bluesky | the public AT Protocol profile API | followers | exact |
| GitHub | the official public REST API | followers | exact |
| YouTube | the channel's About panel | subscribers | rounded by YouTube to three significant figures (518M subscribers) |
| Snapchat | snapchat.com/@handle | subscribers | rounded to the nearest hundred by Snapchat; a profile showing 0 is not publishing a number, so this Actor returns no count rather than "0 subscribers" |
| Discord | the public invite endpoint | members, plus members online | Discord itself calls these approximate |
followersAreRounded says which of the two a given row is. Nothing here is estimated by this Actor: a number is either read from the page or left empty.
Instagram, Facebook, LinkedIn, X/Twitter and Threads are not covered. Measured on 2026-09-23: Instagram's profile endpoint answers a datacenter connection with HTTP 429, and a Threads profile page carries no follower number at all. Rather than work around a block or guess a number, this Actor leaves those platforms out and says so in a free row on every run. If those two are what you need, this is not the right Actor for you.
How accounts are found
Three routes, and every row says which one (or ones) found it:
website-link— for an entry in Company websites, the site's own pages are read (home page first, then the contact, about, imprint or press pages it links to) and the social links published there are taken. A link the company publishes itself is the strongest single piece of evidence there is, but it is not proof on its own: company sites also link to partners, to staff and to the Discord of a tool they use, so a linked account whose name has nothing in common with the company is scored down, not up.bing-result— the first page of Bing results for your query is read and any profile URL on it is taken. Only the first page: paging does not work on this endpoint and returns the same ten results.handle-guess— the handle built from the name (Mr. Beast→mrbeast,@mrbeaston YouTube,mrbeast.bsky.socialon Bluesky) is opened on every platform you picked. This is what finds accounts no search engine puts on the first page.
For an entry in Company websites, the name used for matching is the domain's own label — duolingo.com becomes duolingo — while the query column keeps the domain exactly as you typed it.
Every candidate from all three routes is opened and read before anything is returned, so a dead handle or a 404 never becomes a row.
One thing worth knowing about web search
Bing answers some automated visitors with the results of a completely different query, on a page whose title and search box still show your words. A results page is therefore used only when the search engine highlighted enough of your words inside the results themselves; pages that fail that check are discarded and a free row says so, and the handle-based checks still run. On top of that, anything taken from a search result still has to match the name the platform shows before it can be returned, so a wrong results page produces no rows rather than wrong rows.
Rules this Actor follows
- robots.txt is read for every website you hand it, before any of its pages are opened. Pages it disallows are not opened; a free row says so instead, and a site whose robots.txt answers with a server error is treated as disallowed outright.
- Every platform endpoint here was checked against that platform's own robots.txt before it was added. Twitch's GraphQL endpoint disallows everything, so this Actor reads the public channel page instead; Discord allows
/api/v*/invitebut not the rest of/api/, so the invite endpoint is the only Discord window it uses. One exception, stated plainly: the optional web-search step readsbing.com/search, which Bing's robots.txt disallows and which every Bing scraper on this store reads. Turning Also use web search off skips it entirely, and the rest of the Actor works without it. - Bot checks, HTTP 403 and HTTP 429 are never worked around. They are reported as "this platform could not be checked", which is not the same thing as "this account does not exist".
- No personal data. Rows carry public account links, public counts and the display name the platform publishes. Bios, avatars, locations, e-mail addresses and phone numbers are not collected or returned.
- Nothing is guessed. A number is read or it is
null. An account is confirmed or it is a free row. - No login, no cookies, no accounts of ours anywhere in the chain.
Pricing
Pay per profile returned. Free rows — the ones explaining why something was not returned — are not charged, and neither are candidate handles that turned out not to exist. A run that finds nothing costs nothing.
Limits and honest caveats
- Up to 200 entries per run across Names and Company websites. Split longer lists across runs; a free row tells you when something was left out.
- GitHub's public API allows 60 requests an hour without a token, which is one request per entry. Past that, GitHub answers with a rate-limit error and those entries come back as free
platform-unavailablerows naming the limit — not as "no account". The other seven platforms have no published per-hour quota, and requests are spaced out to stay off them. - A profile is charged once per run, even if you list the same company both by name and by website: the second time it is recognised by the identity the platform publishes and comes back as a free
duplicaterow naming the entry it was returned for. - The handle is built from Latin letters and digits, so a name written only in another script cannot produce one; the web-search and website routes still work for those.
- Bing paging does not work, so only the first ten organic results are read.
- Platform pages change. Every parser here is pinned to a captured copy of the real page in the test suite, so a change shows up as a free "could not be read" row rather than as a wrong number.
- A brand with no presence on these eight platforms comes back with a free row and no charge. That is the honest answer, not a failure.