You have a name but no username: find public profiles on 3000+ sites with one API call
Most profile lookups start from a handle. In practice you often start from a name: a lead list, a candidate, a counterparty in a due diligence file. Nobody gives you the username.
I built an Apify Actor around the open-source Maigret engine (MIT) that closes that gap. You send a name, it builds the usernames a real person would plausibly have picked, ranks them, and checks each one against the full Maigret site catalogue.
What happens to a name
Give it "John Smith" and it tries candidates such as johnsmith, john.smith, john_smith and smithjohn, best guess first. Each candidate is checked against 3000+ sites. You get one row per confirmed public profile.
Input
- names: up to 10 names per run
- maxPermutations: how many username candidates to build per name (default 6)
- siteScope: top300, top500 or all3000
- minConfidence: drop weak matches, useful for common names
- monitorMode: on a schedule, return only what changed since the last run
{
"names": ["John Smith"],
"maxPermutations": 6,
"siteScope": "top500",
"minConfidence": 0.5
}
Output
Every row carries a rowType, so filtering is one expression. A profile-found row looks like this:
{
"rowType": "profile-found",
"name": "John Smith",
"username": "john.smith",
"site": "GitHub",
"url": "https://github.com/john.smith",
"category": "Developer",
"confidence": 1.0
}
Confidence is about the person, not the account
A match only tells you that a username exists on a site. The confidence score tries to answer a different question: how likely is it that this handle belongs to the person you named. A username that contains every part of the name scores high. A bare first name scores low, because thousands of unrelated people use it.
Treat the result as a lead to verify, not as proof of identity.
Where it fits
- sales and recruiting: find the public GitHub, X or Medium presence of a name on a list
- due diligence: a first pass before manual review
- monitoring: a weekly schedule that reports only new or changed profiles
By default the rows hold account-existence evidence only. Profile fields such as bio or location are opt-in. The Actor only reads publicly reachable pages and never logs in. Use it where you have a lawful basis, and follow the laws that apply to you, including GDPR and similar rules.
The Actor: Social Media Finder by Name on Apify
I build these Actors at Ntriq (Korea). If you want another output field, tell me in the comments.
Search one username across 3000+ sites with an API call (Maigret, hosted)
Checking a username across thousands of sites usually means running Maigret locally: install it, let it walk the site list, then clean up the console output. I wrapped the open-source Maigret engine (MIT) as an Apify Actor so the same search runs as an API call and comes back as structured rows.
What you send
The input is small. The fields you will actually touch:
- usernames: an array, so a whole investigation list goes in one run
- topSites: limit the search to the top N sites (0 means all 3000+, which is slower)
- tags / excludeTags: e.g. coding,video to stay on developer and video sites
- sites: a fixed list like GitHub,Twitter,Instagram when you only care about a few
- noRecursion: skip the follow-up search on extra usernames Maigret discovers
{
"usernames": ["some_handle", "another_handle"],
"topSites": 500,
"tags": "coding,social"
}
What comes back
One row per site where the handle is registered, each with the site name, a direct profile URL and the status. By default the rows hold account-existence evidence only. Turn on extractProfileFields if you also need public profile fields such as name, bio or location. printNotFound adds the misses too, which helps when you have to show what was checked.
Because it is a dataset, you can pull it as JSON or CSV from the API and filter in code instead of grepping a console dump.
Why 3000+ sites matter
Most handle checkers cover a few hundred popular sites. The value of a bigger list is the long tail: forums, gaming, dating and developer sites where people reuse a handle and forget about it. That is where impersonation and fraud checks usually find the extra account.
Where it fits
- brand-handle checks before you name a product
- due diligence on a counterparty's public handle
- the first pass of an OSINT workflow before manual review
Use it only for public profile lookups on subjects you have a legitimate reason to check, and follow the laws that apply to you.
The Actor: Maigret username search on Apify
I build these Actors at Ntriq (Korea). If you want an output field added, say so in the comments.
Shoutout to @Sox0j for being awesome!
#osint #blueteam #redteam #AISecurity
soxoj/awesome-osint-mcp-servers
16 views
Also check out this awesome counter-OSINT guide by @Sox0j
soxoj/counter-osint-guide-en
8 likes · 1 repost · 869 views
Check out Marple here to automate the whole process: soxoj/marple
18 views
Telegram Bot Dumper
Forensic CLI and web tool that dumps chat histories, media, user info, and profiles from a Telegram bot token for OSINT and security assessments.
soxoj/telegram-bot-dumper t.co
30 likes · 3 reposts · 1,514 views
Mentions
You have a name but no username: find public profiles on 3000+ sites with one API call Most profile lookups start from a handle. In practice you often start from a name: a lead list, a candidate, a counterparty in a due diligence file. Nobody gives you the username. I built an Apify Actor around the open-source Maigret engine (MIT) that closes that gap. You send a name, it builds the usernames a real person would plausibly have picked, ranks them, and checks each one against the full Maigret site catalogue. What happens to a name Give it "John Smith" and it tries candidates such as johnsmith, john.smith, john_smith and smithjohn, best guess first. Each candidate is checked against 3000+ sites. You get one row per confirmed public profile. Input - names: up to 10 names per run - maxPermutations: how many username candidates to build per name (default 6) - siteScope: top300, top500 or all3000 - minConfidence: drop weak matches, useful for common names - monitorMode: on a schedule, return only what changed since the last run { "names": ["John Smith"], "maxPermutations": 6, "siteScope": "top500", "minConfidence": 0.5 } Output Every row carries a rowType, so filtering is one expression. A profile-found row looks like this: { "rowType": "profile-found", "name": "John Smith", "username": "john.smith", "site": "GitHub", "url": "https://github.com/john.smith", "category": "Developer", "confidence": 1.0 } Confidence is about the person, not the account A match only tells you that a username exists on a site. The confidence score tries to answer a different question: how likely is it that this handle belongs to the person you named. A username that contains every part of the name scores high. A bare first name scores low, because thousands of unrelated people use it. Treat the result as a lead to verify, not as proof of identity. Where it fits - sales and recruiting: find the public GitHub, X or Medium presence of a name on a list - due diligence: a first pass before manual review - monitoring: a weekly schedule that reports only new or changed profiles By default the rows hold account-existence evidence only. Profile fields such as bio or location are opt-in. The Actor only reads publicly reachable pages and never logs in. Use it where you have a lawful basis, and follow the laws that apply to you, including GDPR and similar rules. The Actor: Social Media Finder by Name on Apify I build these Actors at Ntriq (Korea). If you want another output field, tell me in the comments.
Search one username across 3000+ sites with an API call (Maigret, hosted) Checking a username across thousands of sites usually means running Maigret locally: install it, let it walk the site list, then clean up the console output. I wrapped the open-source Maigret engine (MIT) as an Apify Actor so the same search runs as an API call and comes back as structured rows. What you send The input is small. The fields you will actually touch: - usernames: an array, so a whole investigation list goes in one run - topSites: limit the search to the top N sites (0 means all 3000+, which is slower) - tags / excludeTags: e.g. coding,video to stay on developer and video sites - sites: a fixed list like GitHub,Twitter,Instagram when you only care about a few - noRecursion: skip the follow-up search on extra usernames Maigret discovers { "usernames": ["some_handle", "another_handle"], "topSites": 500, "tags": "coding,social" } What comes back One row per site where the handle is registered, each with the site name, a direct profile URL and the status. By default the rows hold account-existence evidence only. Turn on extractProfileFields if you also need public profile fields such as name, bio or location. printNotFound adds the misses too, which helps when you have to show what was checked. Because it is a dataset, you can pull it as JSON or CSV from the API and filter in code instead of grepping a console dump. Why 3000+ sites matter Most handle checkers cover a few hundred popular sites. The value of a bigger list is the long tail: forums, gaming, dating and developer sites where people reuse a handle and forget about it. That is where impersonation and fraud checks usually find the extra account. Where it fits - brand-handle checks before you name a product - due diligence on a counterparty's public handle - the first pass of an OSINT workflow before manual review Use it only for public profile lookups on subjects you have a legitimate reason to check, and follow the laws that apply to you. The Actor: Maigret username search on Apify I build these Actors at Ntriq (Korea). If you want an output field added, say so in the comments.
Shoutout to @Sox0j for being awesome! #osint #blueteam #redteam #AISecurity soxoj/awesome-osint-mcp-servers
Also check out this awesome counter-OSINT guide by @Sox0j soxoj/counter-osint-guide-en
Check out Marple here to automate the whole process: soxoj/marple
Telegram Bot Dumper Forensic CLI and web tool that dumps chat histories, media, user info, and profiles from a Telegram bot token for OSINT and security assessments. soxoj/telegram-bot-dumper t.co