Как это работает
Как работает Oracul
Скан берёт ник, email или телефон, ищет аккаунты на тысячах сайтов, рекурсивно идёт по найденным связям, отсеивает однофамильцев и чужие профили и собирает паспорт, хронологию и сигналы риска. Всё — по открытым источникам, без входа в чужие аккаунты и без писем цели.
Схема: из чего собран скан
Восемь слоёв снизу вверх. Каждый следующий опирается на предыдущий. Нажмите на слой — покажу, что в нём происходит.
Очередь и запуск
POST /v1/scans или кнопка «Новый скан». Скан встаёт в очередь API.
POST /v1/scans · ник + email + имя✓лимит тарифа исчерпан → 429✕перезапуск API → скан вернулся в очередь✓
Конвейер одного скана
- 1Входник · email · телефон + имя и цель
- 2Движки~5800 сайтов, 3 сканера + API
- 3Связиновые ники и email → следующий круг
- 4Судьяимя, лица, общие ники, отметки
- 5Профильпаспорт, граф, хронология
- 6Сигналыфлаги для антифрода/KYC
- 7Выдачаконсоль · PDF · HTML · API
Шаги по порядку
Запуск и очередь
POST /v1/scans или кнопка «Новый скан». Скан встаёт в очередь API.
- Семена: ники, email, телефоны (можно несколько сразу) + имя и фамилия цели, должность и цель проверки.
- Тариф задаёт границы: глубина рекурсии (free — 1, pro — 2, business/enterprise — 3), полный режим, утечки, вебхуки, лимит запросов в минуту.
- Каждый скан — отдельный процесс движка с таймаутом 45 минут.
- Скан, прерванный перезапуском API, возвращается в очередь сам. Отмена снимает процесс движка.
- Прогресс — последняя строка движка, её видно в консоли и в GET /v1/scans/{id}.
Движки: где ищем
На каждый идентификатор параллельно запускаются сканеры и свои обогатители.
- user-scanner — ник и email на ~2700 сайтах, есть ли аккаунт.
- maigret — ~3000 сайтов, вытаскивает данные профиля: имя, город, био, ссылки, аватар, связанные id.
- holehe — на каких ~120 сервисах зарегистрирован email, без запуска восстановления пароля.
- GitHub: профиль, email из коммитов, поиск коммитов по email. GitLab: публичный email. Keybase: пруфы → другие ники. Gravatar: привязанные аккаунты.
- XposedOrNot — утечки по email (только на платных тарифах). phonenumbers — разбор телефона офлайн: страна, оператор, тип (мобильный / VoIP).
- Быстрый режим — верхние сайты и короче таймауты; полный — все базы сканеров.
Рекурсия: связанные ники и email
Из каждого «своего» аккаунта достаём новые точки входа и сканируем их следующим кругом.
- Источники связей: поля профиля, ссылки в био и на сайт, id из maigret, пруфы Keybase, аккаунты Gravatar, авторы коммитов.
- Связь берётся только из аккаунта, где имя совпало с целью или источник сильный, — чужие профили не разводят граф.
- Перестановки имени (pavel.belov, pbelov, belovpavel…) сначала прощупываются быстрым проходом; в полный скан идут только те, где нашлись аккаунты с тем же именем.
- Лимиты: глубина по тарифу (1–3 круга), до 14 идентификаторов на скан, до 8 перестановок.
- Каждая связь хранит, откуда пришла (via) и почему — это граф в отчёте.
Уверенность в каждом аккаунте
Движок ставит баллы, по ним — уровень. Подробнее в таблице ниже.
- Совпадение имени даёт больше всего, несовпадение — сильный минус.
- Чем дальше круг рекурсии, тем ниже балл: аккаунт по перестановке имени слабее найденного по самому нику.
- Сильные площадки (GitHub, Keybase, Gravatar и подобные) дают плюс — там аккаунты чаще настоящие.
Судья: отсев однофамильцев и чужих
Поверх результата движка Oracul пересматривает каждый аккаунт. Файл результата не меняется — можно пересчитать заново.
- Имя с транслитерацией: Андрей = Andrey = Andrei = André, Печенев = Pechenev = Petchenev. Бренды и заголовки сайтов не считаются именем.
- Совпало только имя, а фамилия чужая («Andrei Lisnic» при цели «Андрей Печенев») — другой человек.
- Общий ник: если под одним ником несколько разных людей, его аккаунты без имени цели ничего не доказывают.
- Лица: на аватарах ищем лица и сравниваем (локальные модели YuNet + SFace, порог сходства 0,5). Лицо как у эталона — аккаунт принят; другое лицо в дальнем круге — отклонён.
- Отметки пользователя: «это он» делает аккаунт эталоном (и его лицо — образцом), «не он» убирает аккаунт и всё, что найдено только через него.
- Зоны интересов: если у дальних аккаунтов разные лица, но интересы совпадают с исходными, — не выбрасываем.
Профиль
Из принятых аккаунтов собирается публичный профиль скана.
- Паспорт: имена, ники (только с принятым аккаунтом), email, телефоны, локация, часовой пояс, работа, ссылки, аватары.
- Заполненность — доля из 10 полей: имена, ники, email, телефоны, локация, часовой пояс, работа, ссылки, аватар, хотя бы один аккаунт с высокой уверенностью. Для пустых полей — подсказка, чем дополнить.
- Граф связанных личностей: кто через кого найден и на каком круге.
- Хронология: даты регистраций и активности по аккаунтам; самая ранняя — возраст следа.
- Портрет: чем занимается, хобби, зоны интересов, последняя активность — правилами, без LLM.
Дообогащение
После профиля — отдельные шаги, каждый можно перезапустить.
- Публикации: открытые эндпоинты без логина — GitHub (репозитории, gists, активность), GitLab, Habr, HuggingFace, Codeforces, Scratch, dev.to, Medium, Telegram-каналы, Bluesky. VK, X, Instagram, TikTok, Facebook требуют входа — помечаются «закрыто» и не трогаются.
- Telegram: публичная страница t.me, свои каналы (ник в описании) и публичные каналы, где упоминают @ник. Подписки пользователя в Telegram закрыты и не собираются.
- Резюме прозой пишет Claude. Наружу уходит минимум: имена, город, публичные био и ссылки, зоны интересов, даты. Email, телефоны и утечки — никогда.
Выдача
Один и тот же результат — в консоли, файле и API.
- Консоль: страница скана, аккаунты с решением и доказательствами, отметки «это он / не он» с пересчётом.
- Отчёт: обложка, заполненность и паспорт, дальше разделы — PDF через печать или HTML-файл.
- API: /v1/scans, /accounts с фильтром по уверенности, signals для конвейеров. OpenAPI-спецификация в «Документации API».
- Вебхук по завершении: подпись HMAC-SHA256 заголовком t=…,v1=…; только https и только на публичные адреса (защита от SSRF).
- Через 30 дней сканы удаляются вместе с файлами результата.
Как считается уверенность
Баллы складываются по каждому аккаунту:
- Имя совпало+3
- Имя не совпало−5
- Имя неизвестно0
- Найден несколькими движками+1 за каждый сверх первого, до +2
- Есть данные профиля+1
- Сильная площадка+1
- Аккаунт подтверждён как зарегистрированный+1
- Круг рекурсии−1 за каждый
Решение по аккаунту
confirmedвысокая уверенность✓probableсредняя уверенность✓anchorотмечен «это он»✓face_matchлицо как у эталона✓weakнизкая уверенность✕namesakeоднофамилец✕name_mismatchимя чужое✕shared_nickобщий ник✕face_mismatchдругое лицо✕face_conflictна аватарах разные люди✕excludedотмечен «не он»✕
Сигналы риска
Только факты, без скоринга: правила решения остаются у клиента.
no_footprintнет ни одного подтверждённого или вероятного аккаунтаyoung_footprintсамому старому аккаунту меньше 180 днейname_mismatchимена в профилях расходятся с заявленнымvoip_phoneтелефон — VoIPinvalid_phoneтелефон не проходит проверку номераbreached_credentialsemail в утечках с паролями (платные тарифы)Продукты: что каждый берёт из скана
паспорт, граф, хронология, портретno_footprint, young_footprint, voip_phonename_consistency, возраст следаработа, связи, утечки, публикацииимя и должность против профилейработа, возраст следа, красные флагиутечки, открытые email/телефоны, ники для подборавсё, что находится о себе/v1/scans, signals, вебхукЧего Oracul не делает
- Не входит в чужие аккаунты и не обходит логин: закрытые соцсети помечаются «закрыто».
- Не шлёт цели писем и сбросов пароля — все движки в тихом режиме.
- Фото не уходят наружу: лица сравниваются локальными моделями на сервере.
- Наружу (Claude) — только публичные имена, био и ссылки; email, телефоны, утечки — нет.
- Не собирает подписки Telegram и закрытые данные.
- Хранит результат 30 дней, потом удаляет.