Blog/Social data
11 min read

Social Searcher by API: One Username, Six Platforms, Six Schemas

One handle through one endpoint on six platforms. The identity field changed name three times and one platform returned a profile that was not the brand.

Social Searcher by API: One Username, Six Platforms, Six Schemas

Copy this line to your agent to check one handle across platforms.

set up https://monid.ai/SKILL.md and use ploid /socials once per platform for the same identifier

On 2026-09-21 we sent one username through one endpoint against six social platforms. Six profiles came back, in six different field shapes, and one of them was not the company at all. The thing that actually proved which four were the same brand was not the handle, it was a sentence of biography text repeated character for character. This guide runs through Monid, the OpenRouter for agent tools.

What does a social searcher actually do?

It asks the same question on several platforms at once: does an account with this name exist here, and what does it say about itself. That is a narrower job than it sounds, and confusing it with a wider one is where most of these tools disappoint.

The three jobs hiding behind one phrase

Availability. Is this handle taken on each platform. This is what handle-checker sites do and it is genuinely one lookup per platform.

Identity. Are the accounts at this handle the same entity. This is not answerable from the handle and it is the interesting half. The measurement below shows why.

Content. What has this account posted. A different product again, per platform, and usually paginated.

What one endpoint can cover

The ploid/socials platform enum has eight values: LinkedIn, X, Instagram, TikTok, YouTube, GitHub, Reddit and Facebook. One call per platform, same two parameters each time, and you assemble the cross-platform view yourself.

What it cannot cover

Snapchat, which is in the search demand for this topic and not in that enum. Mastodon, Threads, Telegram and Discord are also absent. If your job needs those, one endpoint is not your answer and the honest thing is to say so before you build.

📖 See also TikTok Profile Viewer and Account Finder: What an API Returns

Why did one endpoint return six different schemas?

Because each platform models a profile its own way and the endpoint passes that through rather than flattening it.

The six responses

Handle patagonia, one call per platform, 2026-09-21:

PlatformWall clockFieldsIdentity keyName keyBio key
GitHub2,629 ms15usernamenamebio
Instagram7,361 ms12handledisplayNamebio
YouTube9,839 ms15handle plus channelIdnamedescription
X11,701 ms11handledisplayNamebio
TikTok15,796 ms11handledisplayNamebio
Reddit18,165 ms15usernamedisplayNamebio

Three field names for one concept

The identity key is handle on four platforms and username on two. The display name is displayName on four and name on two. The biography is bio on five and description on YouTube. One endpoint, one parameter set, three separate naming collisions to normalise.

Write the mapping table before the first call. A reader that expects handle gets undefined on GitHub and Reddit, silently, and produces rows with no identity. That is the same silent-failure shape as the nested follower count in the Instagram guide, and it fails the same way: no exception, just empty fields.

The nulls are platform-specific too

X returned avatarUrl, followers and following all null while filling in location, website and isVerified. Instagram filled the follower fields. So "this platform has no follower data" and "this account has no followers" look identical unless you know which platform you are reading.

And the extras are where the value is

Each platform contributes something no other one can. Instagram adds postCount, isPrivate and category. TikTok adds likes and repostInterests. YouTube adds subscriberCount, viewCount and topics. GitHub adds publicRepos, totalStars, topLanguages and isHireable. Reddit adds a karma split, topSubreddits and accountAge. Flatten too aggressively and you throw away the reason to query more than one platform.

How do you search one username across platforms?

One call per platform, then a reconciliation step you write yourself.

For agents

Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:

set up https://monid.ai/SKILL.md

It learns the whole discover, inspect, run workflow itself. More in the agent quickstart.

For humans

npm install -g @monid-ai/cli
monid keys add -k <your-api-key> -l main

Step 1. Fan out

The endpoints. ploid/socials, per result, takes platform from the eight-value enum and identifier as a handle, vanity slug or full profile URL.

for p in instagram tiktok x youtube github reddit; do
  monid run -p ploid -e /socials --query "{\"platform\":\"$p\",\"identifier\":\"patagonia\"}"
done

Pace it by the slowest. Our calls ran from 2.6 to 18.2 seconds, a factor of seven on one endpoint. Run them concurrently and the sweep costs you the slowest platform rather than the sum.

Step 2. Normalise the three colliding keys

def identity(p):  return p.get("handle") or p.get("username")
def display(p):   return p.get("displayName") or p.get("name")
def bio(p):       return p.get("bio") or p.get("description") or ""

Three lines that prevent every silent empty row.

Step 3. Reconcile, do not assume

Compare the normalised bios, not the handles. The next section is why, and it is the step most of these tools skip.

Step 4. Go deeper only where it matters

Once you know which platforms hold the real account, the per-platform endpoints give you far more: profile detail and stats on TikTok, 69 fields on Instagram, pages and public figures on Facebook.

Give this to your agent

$Set up https://monid.ai/SKILL.md, and then use Monid to check this handle on instagram, tiktok, x, youtube, github and reddit, normalise the identity and bio fields, then tell me which platforms share the same bio text and flag any profile whose bio is empty as unconfirmed.

📖 See also An Email In, a Full Person Profile Out

How do you tell a real match from a matching handle?

By the biography text, which on our run separated four confirmed accounts from one probable and one that was somebody else entirely.

What the bios said

instagram  "We're in business to save our home planet."
tiktok     "We're in business to save our home planet."
x          "We're in business to save our home planet."
reddit     "We're in business to save our home planet."
youtube    "Patagonia is in business to save our home planet. On that purpose…"
github     ""

Four platforms returned the identical string, character for character. That is a brand pushing one bio to every channel, and it is about as strong a cross-platform identity signal as exists in public data. YouTube returned a longer variant of the same sentence, which is consistent but not proof on its own. GitHub returned nothing.

The GitHub account

{ "username": "patagonia", "name": null, "bio": null, "company": null,
  "location": null, "blog": null, "publicRepos": 1, "followers": 1,
  "totalStars": 0, "topLanguages": [], "topRepos": [] }

A real account, at the handle we asked for, with one repository and one follower. It is not a clothing company with four thousand employees. The endpoint did its job correctly and returned the profile that occupies that handle.

This is the failure mode of every handle-based tool. A handle-availability check reports six hits and calls it a cross-platform presence. Six hits with one empty bio and a single repository is five accounts and a coincidence.

The rules that follow

Treat handle existence as a candidate, never a match. Promote it only on corroborating content.

Score on the bio, the website field and the display name together. Any one of them can be absent on a platform that simply does not carry it.

Watch for case normalisation. We sent lowercase and Reddit returned Patagonia with a capital. Join on a case-folded key or you will create two entities for one account.

Read the verification flag with the counts, not instead of them. Reddit reported isVerified: true on an account with 430 total karma, 406 of it from posts. Verified means the platform confirmed who they are, not that anybody is listening.

Which endpoint should I use for which job?

EndpointWhat it doesInputOutputBest forBilling
ploid/socialsOne profile on one of 8 platformsplatform, identifier11 to 15 fields, platform-shapedThe cross-platform sweepPer result
tikhub TikTok profileOne TikTok account in depthuniqueId40 fields, two stats objectsAfter the sweep, on TikTokPer call
tikhub Instagram by usernameOne Instagram account in depthusername69 fields, wrapped countsAfter the sweep, on InstagramPer call
apify/apify/facebook-pages-scraperPublic page or public figurestartUrls29 fields including ads statusAfter the sweep, on FacebookPer result
tikhub Instagram searchFind users, hashtags, placesQueryMatching usersWhen you have no handle yetPer call

Every row was verified with monid inspect on 2026-09-21. The table gives billing shape rather than figures, because shape drives design and current numbers live on monid.ai/tools.

The first row is the sweep and the rest are the follow-ups. Running the deep endpoints on all six platforms before you know which three are real is how a cheap job becomes an expensive one.

When can no API answer this?

Four cases.

The platform is not on the list. Snapchat is the biggest one for this topic: it carries real search demand and it is not in the enum. Nor are Mastodon, Threads, Telegram or Discord. No amount of per-call spend adds a platform that is not there.

The account is private. A private account returns its identity fields and nothing else, on every platform that has the concept. That is the platform enforcing a setting, not a gap in coverage, and the flags exist so you can skip those rows rather than retry them.

You want to know who is behind two accounts. Matching a brand's channels is fair game from public bios. Deciding that two pseudonymous personal accounts are one human is a different activity, it is not reliable from this data, and it is not something we will help build.

The handle is the only signal. If every platform returns an empty bio and no website, you have availability data and nothing else. Report it as availability. The measurement above is the argument for never dressing that up as identity.

And the disclosure: this is Monid's blog and we resell the endpoints here. The advice is to run the cheap sweep, throw out the platforms whose content does not corroborate, and only then pay for the deep per-platform calls, which is a recommendation to make fewer of the more expensive requests.

Conclusion

A social searcher is one lookup per platform plus a reconciliation step, and the reconciliation is the part that decides whether the output is worth anything. On 2026-09-21 one handle returned six profiles through one endpoint in six different field shapes, with the identity key changing name twice and the biography key changing once. Four of the six carried the same sentence of bio text and were plainly the same brand. One was a GitHub account with one repository and one follower that had nothing to do with it.

What matters more than the platform count is what you match on. Handles are cheap and collide; a bio string repeated character for character across four platforms is evidence. Normalise the three colliding key names before your first call, fan the requests out concurrently because the slowest platform took seven times the fastest, and treat a verified flag next to 430 karma as a statement about identity rather than about reach.

Free next step: run monid inspect -p ploid -e /socials and read the platform enum before you promise anyone a cross-platform search. The list is eight long and the gap in it is probably the platform your users will ask about first. Start at monid.ai.

FAQ

Can you search Snapchat usernames through this?

No. The platform enum has eight values, LinkedIn, X, Instagram, TikTok, YouTube, GitHub, Reddit and Facebook, and Snapchat is not among them. We are stating that plainly because Snapchat username search is a real part of the demand for this topic and implying coverage would be the easy thing to do. Mastodon, Threads, Telegram and Discord are also absent. If a specific platform is central to your product, verify it appears in the enum before designing around a single endpoint, because no pricing tier adds a platform the provider does not cover.

How do you avoid false matches from handle squatting?

Never promote a handle hit to an identity match without corroborating content. Our GitHub result is the clean example: a real account at the right handle with a null name, a null bio, one repository and one follower, which is a squatted or unrelated personal account rather than a company with four thousand employees. Score each candidate on the bio text, the website field and the display name together, require at least one substantive match, and mark empty-bio hits as availability rather than identity. Also fold case before joining, since one platform returned a capitalised handle for the lowercase one we sent.

Do you pay once or once per platform?

Once per platform, because each is a separate call. A six-platform sweep is six charges and an eight-platform sweep is eight. That is the argument for doing the sweep on the cheap endpoint and reserving the deeper per-platform endpoints for the platforms that survived reconciliation, rather than pulling forty fields from a platform you are about to discard. Run the sweep concurrently as well: our slowest platform took 18.2 seconds and the fastest 2.6, so sequential execution costs you the sum instead of the maximum.

What comes back for a private or deleted account?

A private account returns its identity fields with the private flag set and no content, which is the platform enforcing a user's setting rather than a coverage gap. A deleted or never-created handle returns nothing at all, and that absence is itself useful: it is the availability answer. The distinction worth encoding is between three states, not two: exists and readable, exists and restricted, and does not exist. Collapsing the middle state into either neighbour is how cross-platform datasets end up claiming a brand has no presence somewhere it simply keeps private.

Last updated September 2026.

social searcherusername searchinstant username searchsocial profilecross platform social search