Кейс Istak: разработали систему поиска B2B-компаний по странам
Операторская система с картой, которая превращает поиск по странам и категориям в сохраняемый каталог компаний.
Мы разработали для Istak рабочую систему поиска потенциальных B2B-партнёров. Оператор выбирает страну, категорию покупателей и запускает поиск; результаты и состояние обработки сохраняются в базе. Карта показывает прогресс по категориям, а для США доступен отдельный поиск по штатам.

ВЫБОР страна | при необходимости штат США
→ КАТЕГОРИЯ импортёр / дистрибьютор / оптовик / сеть / интернет-магазин
→ ПОИСК через серверный API
→ СОХРАНЕНИЕ компаний и версионированного прогресса
→ ПРОСМОТР каталога и статуса на картеЗадача бизнеса
Istak нужен был повторяемый способ находить потенциальных B2B-покупателей на разных рынках. Обычный веб-поиск оставляет разрозненные ссылки и не показывает, какие страны, типы покупателей или штаты уже обработаны. Первый рабочий этап мы построили вокруг каталога стран, географического обзора и долговременного хранения результатов.
От свободного поиска к точной области работы
Задача поиска была конкретной: находить возможных покупателей алкогольной продукции и крепких напитков, сохраняя контекст для последующей оценки сайтов. Импортёр и интернет-магазин — разные коммерческие профили. Если искать их одним общим запросом, сложнее понять и состав выдачи, и реальный прогресс оператора. Поэтому тип покупателя стал явным параметром поиска, а не ярлыком, который проставляют после получения результатов.
География влияет на смысл результата не меньше. Каталог стран позволяет переходить между рынками, не теряя историю обработки. Для США понадобилась детализация: общенациональный поиск и поиск по Калифорнии должны различаться, даже если они обнаружили одну компанию. Это требование одновременно определило контракт API, ключи хранения и отображение прогресса.
Что мы сделали
Мы реализовали интерфейс на React и Vite с мировой картой jsVectorMap, API на Fastify и хранением в PostgreSQL. Оператор может искать пять категорий: импортёры, дистрибьюторы, оптовики, розничные сети и интернет-магазины. Для США можно выбрать всю страну либо один из 50 штатов; прогресс каждого штата учитывается отдельно.
Один интерфейс, разные зоны ответственности
React-клиент отвечает за выбор страны и категории, состояние карты, список компаний и обратную связь оператору. Он запрашивает у API каталог стран и число завершённых категорий, а затем обновляет цвета карты после асинхронной загрузки данных. Поэтому карта показывает сохранённую работу, а не служит декоративной графикой или копией ручной таблицы рынков.
Fastify обрабатывает поисковые запросы и обращается к провайдеру. PostgreSQL хранит компании, контекст их обнаружения и прогресс по географии и категориям. Браузер отображает и фильтрует процесс, а сервер остаётся источником истины для сохранённых результатов и статусов.
Сценарий оператора
Оператор выбирает страну на карте или в списке. Для США при необходимости уточняет штат. Затем выбирает категорию и запускает поиск: интерфейс передаёт точную область серверу, показывает найденные компании и обновляет статус категории. В карточке компании доступны источник и описательные сведения; при возвращении к стране сохранённые результаты и прогресс остаются на месте.
Конкретный проход без вымышленных компаний
Предположим, оператор выбирает Германию и категорию дистрибьюторов. Dashboard запрашивает поиск по этому рынку и профилю покупателя. Сервер получает веб-результаты, сохраняет пригодные записи компаний и обновляет статус категории. Интерфейс затем загружает сохранённый каталог, а не держит выдачу как временный список.
Для США сценарий тот же, но с дополнительной областью. При выборе Калифорнии код штата сохраняется вместе с категорией; при выборе всей страны область штата остаётся пустой. В селекторе штатов видны собственные счётчики компаний и обработанных категорий. Одна компания может встретиться в разных категориях или штатах, но эти пути обнаружения привязаны к единой записи компании.
Карта как экран прогресса
Карта получает состояние стран из API и выделяет пять уровней завершённости — от одной до пяти обработанных категорий текущей версии поиска. Завершённая категория означает, что выполнен её набор запросов, а не что найден каждый возможный покупатель. Для штатов США хранятся отдельные счётчики и выборки: поиск по Калифорнии не смешивается с общенациональным.
Что именно означают зелёные уровни
Пяти категориям покупателей соответствуют пять ступеней прогресса на мировой карте. Страна переходит от нуля к одной завершённой категории после успешного окончания поиска по текущей версии запросов; с каждой следующей категорией цвет становится насыщеннее. Для США мировая карта отражает общенациональную область, а селектор штатов показывает их прогресс отдельно. Обработанные штаты не создают ложного впечатления, будто завершён поиск по всей стране.
Система различает успешные и неудачные запуски и связывает прогресс с актуальной конфигурацией поиска. Сбой не окрашивает рынок как завершённый, а старый результат не подменяет обработку после изменения правил. Оператор видит полезный сигнал прогресса, не принимая его за гарантию полного охвата рынка.
Поиск, хранение и качество данных
Сервер выполняет поиск с учётом выбранной категории и географии через Brave Search. Он убирает повторяющиеся домены и сохраняет результаты вместе с контекстом их обнаружения в PostgreSQL. Состояние поиска по категориям тоже сохраняется, поэтому к рынку можно вернуться позже. Сниппеты остаются материалом для проверки, а не подтверждёнными контактами или квалифицированными покупателями.
Как веб-результат попадает в каталог
Формулировка поиска зависит от категории покупателя и выбранной географии. Поиск дистрибьютора отвечает на иной вопрос, чем поиск интернет-магазина; штат также отделён от общенациональной области. Оператор задаёт осмысленную область и видит её результат отдельно от других поисков.
Сервер приводит адреса сайтов к доменам и не добавляет одну компанию многократно в каталог рынка. Он сохраняет достаточный контекст источника, чтобы оператор понимал, почему компания появилась и в каких поисках встретилась. Выдача организована для оценки, но не превращается автоматически в проверенные контакты или готовый список для рассылки.
Ключевые решения и компромиссы
Поисковые запросы и учётные данные остаются на сервере. Каждый запуск ограничен, чтобы оператор получил понятный результат и статус. Широкий поиск может включать кандидатов, которых ещё нужно проверить; национальный домен помогает организовать список, но не подтверждает местонахождение или релевантность компании. Это делает этап поиска полезным, не выдавая обнаружение за завершённую квалификацию.
Ограниченный поиск и понятные ошибки
Браузеру не нужен ключ поискового провайдера. Запросы проходят через backend, где доступ и сбои обрабатываются единообразно. Если поиск не удался, интерфейс показывает проблему и сохраняет честный статус, а не представляет пустую таблицу как успешно завершённую работу.
Каждый запуск имеет практическое ограничение. Оно делает прогресс понятным, но завершённая категория означает выполнение настроенного поиска, а не обнаружение всех компаний рынка. Оператор решает, уточнить ли поиск, повторить его позже или перейти к оценке текущего каталога. Это различие мы сохранили и в продукте, и в кейсе.
Полученный результат
Istak получил рабочую операторскую систему, связывающую географию, тип покупателя, найденные компании и состояние обработки. Реализованный этап охватывает поиск и просмотр. AI-анализ, синхронизация с CRM и email-рассылка относятся к следующим этапам; здесь мы не заявляем неподтверждённые продажи или экономию времени.
Рабочий первый этап и понятное продолжение
В итоге получился цельный этап поиска: выбрать рынок и профиль покупателя, запустить контролируемый поиск, сохранить источники и компании без дублей, увидеть уже обработанные области. Оператор может вернуться к стране или штату и продолжить работу с сохранёнными данными, а не восстанавливать историю из памяти браузера.
Следующее бизнес-решение — квалификация: какие сайты действительно относятся к потенциальным партнёрам и какие контакты подтверждаются надёжными источниками. Текущая система не принимает это решение автоматически. Отдельное описание готового поискового этапа делает кейс полезным для оценки похожей операторской системы и не превращает продуктовый план в утверждение о состоявшейся рассылке.
Фактический путь данных
- Страна / штат США + категория
- Fastify формирует запрос → Brave Search
- Нормализация и удаление дублей
- PostgreSQL: компания + состояние категории
- Каталог компаний + прогресс на карте
Нужна похожая операторская система или процесс работы с данными?
Обсудить проект · Разработка продукта · AI-специалист в Армении · Другие кейсы