Исследовательский сценарий
От цели к
проверяемым результатам.
Воркер может спланировать работу с источниками, использовать настроенные инструменты поиска и разбора, сохранить свидетельства в памяти и выдать проверяемый результат. Поиск контактов — лишь один пример, а не идентичность рантайма.
Девятиэтапный конвейер
Каждый лид, от начала до конца
search_business_directory опрашивает 2GIS, Google Maps, Яндекс.Карты и Жёлтые страницы параллельно. search_social сканирует Twitter/X, Telegram и LinkedIn. search_news ищет упоминания в прессе.
parse_corporate_site извлекает название компании, отрасль, членов команды, контакты и соцпрофили с корпоративных сайтов через JSON-LD, Schema.org и 14 CSS-селекторов для командных страниц.
find_leads оркестрирует весь пайплайн: справочники → парсинг корпоративных сайтов (до 6 параллельно) → поиск в соцсетях → атрибуция email → ранжирование по достоверности. Формирует подтверждённые лиды по контактам и компаниям.
extract_contacts извлекает email (3-проходная деобфускация включая словесные формы), телефоны (E.164 через libphonenumber), соцпрофили (15 платформ) и сущности людей/компаний с помощью LLM из любого текста или HTML.
enrich_company определяет 45+ технологий, извлекает выручку, год основания, штаб-квартиру и классифицирует отрасль по 18 категориям. enrich_person находит должность, компанию, биографию и локацию через комбинированный поиск по веб-источникам и LinkedIn.
verify_email выполняет синтаксис → DNS-over-HTTPS MX → disposable (55+ доменов) → role-based (37 паттернов) → опциональный SMTP-зонд на порту 25. verify_phone нормализует в E.164. verify_social_profile проверяет 15 платформ и извлекает подписчиков.
suggest_emails генерирует 9 корпоративных email-паттернов (first.last, f.last, flast и т.д.), определяет паттерн домена из email коллег и проверяет каждого кандидата через MX + опциональный SMTP.
save_contacts пишет в SQLite/PostgreSQL с TOCTOU-безопасной дедупликацией. Автосейв срабатывает автоматически после извлечения — контакты попадают в БД, даже если LLM забудет. Чеки верификации определяют статус Verified/Partial/Unverified.
Контакты: CSV, vCard 3.0, JSON, Excel (XLSX) с дедупликацией при экспорте. Отчёты: HTML, JSON, PDF, DOCX. Пуш в amoCRM, Bitrix24 или HubSpot с параллельной доставкой и дедупликацией по crm_id.
Источники данных
Четыре справочника, три платформы, один новостной движок
2GIS, Google Maps, Яндекс.Карты, Жёлтые страницы — параллельный запрос с кросс-директорной дедупликацией по названию+адресу.
Twitter/X (API v2 или веб-поиск), Telegram (обогащение через t.me preview), LinkedIn (site-restricted поиск). Дедуп по (платформа, URL).
Serper News + Google News RSS как фолбэк. Эвристика извлечения сущностей: персоны (2-3 слова с заглавной) и компании (корпоративные суффиксы, ALL-CAPS токены).
Верификация
Пять шлюзов до сохранения контакта
Каждый email проходит валидацию синтаксиса, DNS-over-HTTPS MX-запрос, детекцию одноразовых (55+ провайдеров), флаггинг role-based (37 паттернов) и опциональный SMTP-зонд на порту 25. Результаты записываются в append-only журнал чеков верификации.
СинтаксисПодмножество RFC 5322: один @, локальная часть ≤64 символов, домен ≤253, без начальных/конечных/подряд точек.
MX-запросDNS-over-HTTPS через Google затем Cloudflare. Фолбэк на A/AAAA по RFC 5321 §5.1. Null MX (RFC 7505) обнаруживается и отбрасывается.
Одноразовые55+ известных одноразовых провайдеров (mailinator, yopmail, guerrillamail, tempmail). Субдомен-матчинг включён.
Ролевые37 паттернов отделов/функций: admin, info, support, sales, noreply, hr, billing и т.д.
SMTP-зондОпциональное SMTP-рукопожатие на порту 25: баннер → HELO → MAIL FROM → RCPT TO. Принимает 250/251, отклоняет 5xx, неопределённо 4xx (greylisting). Никогда не отправляет содержимое сообщения.
Обогащение
45+ технологий, 18 отраслей
enrich_company читает HTML-сигнатуры для определения CMS, JS-фреймворков, аналитики, платежей и хостинга. enrich_person перекрёстно сверяет веб + LinkedIn для заполнения должности, компании, био и локации.
WordPress, Shopify, Squarespace, Wix, Webflow, Drupal, Joomla, Magento
Next.js, Nuxt.js, React, Vue.js, Angular, Svelte, Gatsby
Google Analytics, Segment, Mixpanel, Amplitude, Hotjar, Matomo, Яндекс.Метрика
Stripe, PayPal
Vercel, Netlify, CloudFront, S3, HubSpot, Klaviyo, Mailchimp, Salesforce, Sentry
Отслеживание качества
Append-only чеки верификации
Каждая проверка записывает durable-чек в JSONL-журнал. Чеки ключуются по (тип, значение) — PASS по одному типу никогда не заглушит FAIL по другому. Последний чек по ключу побеждает. Три уровня статуса: Verified (SMTP принял), Partial (синтаксис+MX ок), Unverified.
SMTP принял почтовый ящик
Синтаксис + MX проверка пройдена
Нет проходных чеков верификации
Плановый сбор
Запустите снова. Сравните результаты.
Флаг --repeat N перезапускает тот же запрос каждые N секунд, сравнивает хранилище контактов между прогонами и отправляет алерты о вновь обнаруженных контактах через webhook, Telegram или email.
# Run every 24 hours, alert on new contacts
fathom run --repeat 86400 \
"Find VP Engineering at Series B startups in SF"
# Watch mode output:
# ── Findings changed since the previous run ──
# Reviewable contacts, evidence and gaps are written
# according to the configured output and approval policy.CRM и экспорт
Синхронизация с CRM без дубликатов
Пуш до 4 контактов параллельно с одной автоматической повторной попыткой. crm_id предотвращает повторный пуш уже синхронизированных контактов. Экспорт в CSV, vCard 3.0, JSON или Excel.
RFC 4180, 10 столбцов, теги и соцпрофили через точку с запятой
RFC 2426, N/FN/ORG/TITLE/EMAIL/TEL/X-SOCIALPROFILE
Pretty-printed, все поля включая social_profiles и notes
XLSX через rust_xlsxwriter, лист "Contacts"
Запустите первое исследование
Запросите доступ к серверу, настройте инструменты воркера и попросите его подготовить проверяемые результаты.