The username "ivanpetrov" exists on thousands of sites, and nearly everywhere it is a different person. A scanner answers honestly: the account exists. The analyst's question is different: is it the same person? Put everything found into one profile and you get someone with three cities, five jobs and other people's photos. That profile is worse than none: it lies with confidence.
Step 1. A confidence score for every account
Oracul scores every account it finds. A name match weighs most, a mismatch is a heavy minus: "Igor Varga" for the subject "Andrey Sokolov" is another person even with the same username. Confirmation by several engines, a filled profile and a strong site such as GitHub or Keybase add points. Each recursion round takes one away: an account found from a name permutation is weaker than one found from the username itself.
- 3 points or more: high confidence
- 1–2: medium
- −2 to 0: low, not in the profile
- −3 and below: a different person
Step 2. Names with transliteration
One person signs as "Андрей", "Andrey", "Andrei" and "André". Oracul brings spellings to one form before comparing. Brands and site titles are not names.
If only the first name fits and the surname is someone else's, it is another person. A username that is just a first name ("andrei", "alex") proves nothing on its own: such accounts count only with the subject's full name on them.
Step 3. Shared usernames
When one username belongs to two or more people with different names, it is marked shared. Its accounts without the subject's name stop proving anything, otherwise the neighbours' data would leak into the profile.
Step 4. Faces on avatars
A name can match by chance; a face hardly ever does. Oracul finds faces on avatars and compares them with local models (OpenCV YuNet and SFace). Photos never leave the server. Accounts with one face form a "person" group.
- Same face as the reference: accepted, even without a name.
- Another face in a later search round: rejected.
- No reference and different faces in later rounds: they cannot be attributed and are rejected.
Step 5. The graph and the analyst's marks
Every link keeps where it came from: this email came from that username's GitHub commits, this username from a Telegram channel description. The analyst sees the graph and can mark an account "not them". The account goes, and so does everything found only through it: the whole branch is cut. "This is them" makes the account the reference, and its face becomes the sample.
The result
Only accepted accounts go into the profile; the passport, timeline and portrait are built from them. Rejected ones stay in the report as a separate list with the reason: namesake, someone else's name, another face, shared username. Every decision is visible and can be revisited: the raw scan result never changes.