Если продукт нужен компаниям определенного размера, их проще искать не в LinkedIn, а по сайтам. Есть посещаемость - значит компания живая, а по трафику видно, насколько она большая.
Способ подходит, когда важен размер компании, а сфера вторична или ее можно отобрать классификатором. Если ваши клиенты - B2B-ниши с крошечными сайтами, сюда они почти не попадут: в списки Google входят только сайты, которые заметно посещают из Chrome.
Chrome UX Report - открытые данные Google о сайтах, которые реально открывают в Chrome. Там есть ранг популярности, по нему и отбирается нужный размер.
Скрипт открывает главную и ищет ссылку linkedin.com/company/. Нет страницы компании - сайт дальше не идет.
Текст главной без тегов уходит в Jev с двумя вопросами: коммерческий ли это сайт и к какой сфере он относится.
По оставшимся сайтам берется посещаемость за последние месяцы и источники трафика. В таблице остаются те, кто попал в нужный диапазон.
Каждый шаг отсеивает часть списка, а следующий работает только с оставшимися. Jev стоит дешевле TabAPI, поэтому классификация идет до проверки трафика.
Готовый топ-1 млн с ежемесячным обновлением лежит на GitHub: zakird/crux-top-lists. Это CSV с двумя колонками: адрес сайта и ранг. Скачивать руками не нужно, промпт ниже сделает это сам.
Страновых файлов на GitHub нет, они берутся из BigQuery - это сервис Google Cloud, где лежит весь CrUX. Бесплатного месячного лимита хватает с запасом, но для проекта Google попросит привязать карту.
Открываете консоль BigQuery, вставляете запрос и сохраняете результат в CSV. В примере - Германия (country_de) и август 2026 (202608). Код страны - две буквы, месяц - последний доступный: данные выходят во второй вторник следующего месяца.
SELECT DISTINCT origin, experimental.popularity.rank AS rank FROM `chrome-ux-report.country_de.202608` WHERE experimental.popularity.rank IN (50000, 100000, 500000)
Малому бизнесу трудно попасть в мировой топ, поэтому для него страновые списки обычно полезнее мирового.
Сайты в CrUX не пронумерованы по порядку. Ранг показывает корзину: топ-1k, 5k, 10k, 50k, 100k, 500k, 1M и дальше. Корзина 50000 означает "в топ-50k, но не в топ-10k", а внутри корзины порядок случайный. Выбирать нужно корзины, а не "строки с 20 000 по 80 000".
Jev - модель от TypeSafe AI, доступна через OpenRouter. Это не LLM: текст она не пишет. Ей дают материал и вопрос с вариантами ответа, она выбирает вариант и возвращает вероятность по каждому. Умеет выбор из списка, да/нет и оценку по шкале.
Платный только вход - $0.042 за 1 млн токенов, ответ бесплатный. Главная страница - это около 3 тыс. токенов, поэтому тысяча сайтов обходится примерно в $0.13.
Создаете ключ на openrouter.ai/settings/keys, пополняете баланс и отправляете тестовый запрос. Вместо sk-or-... вставьте свой ключ. В ответе придет выбранный вариант и вероятности.
export OPENROUTER_API_KEY="sk-or-..."
curl https://openrouter.ai/api/alpha/decisions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"state": {"site": "Семейная стоматология в Казани. Лечение, имплантация, детский прием. Запись онлайн."},
"questions": {
"commercial": {
"type": "choice",
"instructions": "Это сайт компании, которая продает товары или услуги?",
"criteria": {
"yes": "Коммерческая компания: продает товары или услуги",
"no": "Госорган, вуз, СМИ, блог, некоммерческая организация"
}
},
"sphere": {
"type": "choice",
"instructions": "К какой сфере относится компания?",
"criteria": {
"medicine": "Медицина и стоматология",
"retail": "Розничная торговля и интернет-магазины",
"it": "IT и разработка",
"construction": "Строительство и ремонт",
"other": "Другое"
}
}
}
}'
$env:OPENROUTER_API_KEY = "sk-or-..."
$body = @'
{
"model": "typesafe/jev-1.13",
"state": {"site": "Семейная стоматология в Казани. Лечение, имплантация, детский прием. Запись онлайн."},
"questions": {
"commercial": {
"type": "choice",
"instructions": "Это сайт компании, которая продает товары или услуги?",
"criteria": {
"yes": "Коммерческая компания: продает товары или услуги",
"no": "Госорган, вуз, СМИ, блог, некоммерческая организация"
}
},
"sphere": {
"type": "choice",
"instructions": "К какой сфере относится компания?",
"criteria": {
"medicine": "Медицина и стоматология",
"retail": "Розничная торговля и интернет-магазины",
"it": "IT и разработка",
"construction": "Строительство и ремонт",
"other": "Другое"
}
}
}
}
'@
Invoke-RestMethod -Method Post -Uri "https://openrouter.ai/api/alpha/decisions" `
-Headers @{ Authorization = "Bearer $env:OPENROUTER_API_KEY" } `
-ContentType "application/json; charset=utf-8" `
-Body ([System.Text.Encoding]::UTF8.GetBytes($body)) | ConvertTo-Json -Depth 10
typesafe/jev-1.13, а не latest. После обновления модели вероятности могут сместиться, и пороги придется подбирать заново.TabAPI по домену отдает визиты по месяцам, ранги, отказы, страны и разбивку источников: органика, платная реклама, прямые заходы, соцсети, AI-ассистенты.
| Что | Сколько |
|---|---|
| $1 | 1000 кредитов, без подписки, не сгорают |
| Трафик по домену | 1 кредит за месяц истории, минимум 3 - от $0.003 |
| Ошибки | не списываются |
| При регистрации | 100 кредитов, без карты |
Источник данных TabAPI на сайте не раскрывает. Для маленьких сайтов любые сервисы оценки трафика дают приблизительную цифру - ее стоит читать как порядок величины, а не как точное число.
Заранее неизвестно, в какой корзине CrUX лежат сайты с 5-100 тыс. визитов - это зависит от страны. 100 бесплатных кредитов хватает примерно на 30 доменов: по 5-10 случайных из каждой корзины. После этого видно, какие корзины брать, и большой прогон не тратит деньги на лишнее.
Отправляете это в Claude Code или Codex. Сначала он задаст вопросы и остановится, потом соберет скрипт, прогонит его на небольшой выборке и покажет смету на полный список.
Собери мне пайплайн, который находит живые компании по трафику их сайта.
--------------------------------------------------------------------
СНАЧАЛА СПРОСИ МЕНЯ И ОСТАНОВИСЬ
Одним сообщением, нумерованным списком:
1. Какая страна или весь мир. Для страны нужен список из BigQuery:
если у меня его нет, объясни, как его выгрузить, или предложи
начать с мирового списка.
2. Какие корзины популярности CrUX брать. По умолчанию предложи
50k, 100k и 500k. Объясни, что это корзины, а не места в рейтинге.
3. Что я продаю и кому. Три-пять строк своими словами.
4. Список сфер для классификации: мой или твой из 20-30 групп
под мой продукт.
5. Какой диапазон трафика нужен. По умолчанию 5 000-100 000
визитов в месяц.
6. Сколько сайтов прогнать в первый раз. По умолчанию 200.
Не начинай собирать, пока я не отвечу.
--------------------------------------------------------------------
КЛЮЧИ
OPENROUTER_API_KEY и TABAPI_KEY читай из файла .env в папке проекта.
Если файла нет, создай .env с пустыми значениями и попроси меня
вписать ключи самому. Ключи в чате не проси, в код и логи не выводи.
Добавь .env в .gitignore.
--------------------------------------------------------------------
ИСТОЧНИКИ
Актуальный формат API проверь по документации, а не по памяти.
- CrUX, мировой список:
https://raw.githubusercontent.com/zakird/crux-top-lists/main/data/global/current.csv.gz
Колонки origin и rank. Страновые списки - из BigQuery, таблица
chrome-ux-report.country_XX.YYYYMM, поле experimental.popularity.rank.
- Jev: https://openrouter.ai/docs/guides/community/jev-tutorial
POST https://openrouter.ai/api/alpha/decisions, модель typesafe/jev-1.13.
Версию закрепи, не используй latest.
- TabAPI: https://tabapi.com/docs
GET https://tabapi.com/api/v1/domains/{domain}/traffic?months=3
--------------------------------------------------------------------
ПОРЯДОК - ОТ ДЕШЕВОГО К ДОРОГОМУ
Каждый шаг отсеивает часть списка, следующий работает только
с оставшимися.
1. Нормализация. origin превращай в домен: без https:// и www.,
поддомены одной компании склей. Выкинь зоны gov, edu, mil, int
и корзины 1k и 5k.
2. Главная страница. Обычный HTTP-запрос, таймаут 15 секунд,
5-10 запросов параллельно, честный User-Agent. Браузер (Playwright)
- только для сайтов, где ссылки подгружает JavaScript.
Ищи ссылку linkedin.com/company/ на главной. Если ее нет -
на /about, /contact и их вариантах на языке сайта.
Сохрани текст главной без тегов, обрежь до 8 000 символов.
3. Jev - только по сайтам, где нашелся LinkedIn. Два вопроса типа
choice в одном запросе:
- коммерческая компания или нет. Отдельными вариантами - казино,
адалт, СМИ, госорганы и вузы;
- сфера из моего списка. Если сфер больше 30, классифицируй
в два шага: сначала группа, потом подсфера внутри группы.
Сохраняй confidence. Сайты с confidence ниже 0.6 помечай
"проверить вручную", не выкидывай.
4. TabAPI - только по коммерческим. Визиты за 3 месяца и источники
трафика. Оставь тех, кто попал в мой диапазон.
--------------------------------------------------------------------
ДО БОЛЬШОГО ЗАПУСКА
- Калибровка. Возьми по 5-10 случайных доменов из каждой выбранной
корзины, проверь их трафик в TabAPI и покажи таблицу
"корзина -> медиана визитов в месяц". Я скажу, какие корзины оставить.
- Пробный прогон всего пайплайна на выборке, которую я назвал.
Покажи результат и фактические расходы на Jev и TabAPI, посчитай
смету на полный список и жди моего подтверждения.
--------------------------------------------------------------------
НАДЕЖНОСТЬ
- Кэшируй результат каждого шага по домену: повторный запуск
не ходит заново на сайты и не тратит кредиты.
- После обрыва запуск продолжается с места остановки.
- Ошибки (403, таймауты, Cloudflare) пиши в колонку статуса,
а не роняй весь прогон.
--------------------------------------------------------------------
РЕЗУЛЬТАТ
CSV с колонками: домен, корзина CrUX, ссылка на LinkedIn,
коммерческий (да/нет + confidence), сфера (+ confidence),
визиты в месяц, доля органики, доля рекламы, доля прямых заходов,
статус.
В конце - сводка: сколько сайтов осталось после каждого шага
и сколько потрачено.
Потом в двух абзацах объясни, что где лежит и как запустить
пайплайн на другой стране.
Страница компании в LinkedIn - еще не контакт. Дальше по каждой компании ищут ЛПР и их контакты, а готовую базу загружают в CRM. Как подключить CRM к Claude, ChatGPT, DeepSeek или другому harness - в гайде CRM внутри Claude и ChatGPT. Как обогащать новые сделки данными о компании - в гайде про обогащение сделок.
Jev пригодится и за пределами этой задачи: везде, где нужно не написать текст, а выбрать ответ из списка - отсеять нерелевантные сайты, проставить сферу, ответить да/нет по анкете.
Цены и форматы API проверены 08.10.2026 по документации CrUX, crux-top-lists, Jev на OpenRouter и TabAPI. У новых сервисов цены меняются часто - перед большим прогоном стоит перепроверить.