Никита Бойко
Все кейсы
ИИ-конвейер200 сайтов за один день

Вместо холодного письма — готовый сайт: 200 штук за один день

Находит в США малый бизнес без сайта и собирает ему готовый: 272 сайта по 2,4–4,1 цента на ИИ

Вместо холодного письма — готовый сайт: 200 штук за один день

Коротко о проекте

Для кого
Консультант по ИИ-автоматизации, который знакомит малый бизнес в США со своим брендом и услугами.
Моя роль
Проектирование и вся разработка: исследование, конвейер данных, промпты, шаблон сайта, хостинг, почта и трекинг. Код — с ИИ-ассистентами Claude Code и OpenAI Codex.
Задача
Превратить «я могу помочь вашему бизнесу» в готовый сайт владельца из того, что о нём говорят клиенты. Такое оценивают за десять секунд.
Что сделано
Конвейер: находит компании без сайта, проверяет контакт, собирает и публикует сайт, пишет владельцу, проводит опрос и отдаёт файлы.
Сроки
9–17 сентября 2026, от первого файла до прогона на 200 сайтов.
Объём
24 128 компаний в 100 городах 13 штатов, 19 100 проверенных сайтов из карточек. 272 сайта в 29 нишах, 200 — за один день.
Расходы на ИИ
2,4–4,1 цента за сайт, хостинг — бесплатный тариф Cloudflare. Данные, поиск и почту отдельно не считали.
Защита
Телефоны и цены берутся из данных — модель их не пишет. Каждый сайт проходит автопроверки. Письмо уходит, только если сохранено доказательство, что адрес принадлежит компании. Капчи не обходим.

Идея

В Google Maps полно малого бизнеса без сайта: цветочный с 25 отзывами, обувная мастерская со 185, мотомастерская с фото каждого восстановленного байка. Маркетинг за них уже сделали клиенты, а новых отправить некуда.

Для консультанта по автоматизации это шанс. Холодное письмо легко пролистать, а готовый сайт с фото, часами и услугами из карточки компании владелец оценит за секунды, ещё до разговора.

Заказчик попросил софт, который собирает такие сайты пачками и заодно представляет его услуги. Правил было пять:

  1. Никакого «ИИ-мусора»: большинство владельцев могли бы опубликовать сайт как есть.
  2. Ничего выдуманного. Фото — из карточки, не со стоков. Услуги — из карточки, отзывов и страниц компании, цены — только опубликованные ею. Услуги из одних отзывов компания не подтверждала. Мало данных — пропускаем.
  3. Нужному человеку или никому: письмо — только на адрес с сохранённым подтверждением связи с компанией.
  4. Дёшево на объёме: от 20–30 сайтов в день при жёстком контроле расходов на ИИ.
  5. Без обязательной покупки: сайт остаётся онлайн, даже если владелец не ответил на опрос и ничего не купил. Снимаем только по его просьбе.

Что получает владелец

Путь владельца: письмо, опрос, передача файлов
  1. Личное письмо со скриншотом его сайта и двумя предложениями о том, откуда сайт взялся. Вместо продающего текста — один вопрос с кнопками: что отнимает больше всего времени в вашей неделе? Ссылка ниже ведёт сразу на сайт.
  2. Опрос из четырёх вопросов: что отнимает время, сколько часов, кто этим занят и что владелец отдал бы другим. Компанию определяет ссылка, имя и email вводить не нужно. Ответы показывают консультанту, где автоматизация реально могла бы помочь.
  3. Страница передачи: файлы, простая инструкция для бесплатного хостинга или своего домена и предложение платной помощи — правки, перенос домена, напоминания о записи, запросы отзывов, проекты с нуля.

Сайт открывается прямо из письма, а за файлами ведёт опрос. Сначала польза, вопросы потом — это специально.

Кстати, почтовые клиенты вырезают формы. Поэтому вопрос в письме — кнопки-ссылки: клик записывает ответ и открывает опрос с уже выбранным вариантом.

Из чего состоит каждый сайт

Анатомия сгенерированного сайта

Шаблон один, а наполняют его данные самой компании:

  • Первый экран: лучшее фото, пометка «открыто сейчас», которая сама считается по часам работы и часовому поясу, рейтинг Google, кнопки звонка и услуг.
  • О нас — по тому, что реально пишут в отзывах.
  • Услуги во вкладках. Цены — только опубликованные самой компанией, например на старом сайте или в меню. Иначе без цен, а «цены уточняйте по телефону» вырезается.
  • Галерея фото из карточки с полноэкранным просмотром.
  • Почему клиенты возвращаются: три-четыре повторяющиеся положительные темы из отзывов, пересказом, а не цитатами.
  • Как нас найти: часы с выделенным сегодняшним днём, звонок в одно касание, маршрут и карта.

Сайт — один HTML-файл и папка с фото. Открывается из скачанной папки, работает на любом бесплатном хостинге и правится в Блокноте. Плюс простая текстовая инструкция для тех, кто никогда не имел дела с сайтами.

Как это работало

Сентябрьская кампания на этом конвейере знакомила малый бизнес в 13 штатах с брендом и услугами заказчика.

Кампанию вёл я, на компьютере с Windows: из командной строки или простого меню. Этап — одна команда (staged, qualify, make, deploy, mail), а mail без --send только готовит черновики на проверку.

На всё есть справочник команд и подробные заметки. Сейчас конвейер простаивает и ждёт новых городов и ниш.

Масштаб и стоимость

Конвейер в цифрах
  • ИИ: 2,4–4,1 цента за сайт по официальным ценам, по замерам на пяти рабочих партиях.
  • Хостинг: 0$ — один проект Cloudflare Pages на бесплатном тарифе, по папке на компанию.
  • Данные, поиск и почта оплачиваются поставщикам за запрос или по тарифу. Здесь они не учтены: отдельно я их не отслеживал.

Как это устроено

Конвейер

Больше всего возни было с фото: в карточках полно меню, размытых кадров, дублей и интерьера. В одном из ранних прогонов главным фото сайта стала раковина в туалете😅 Теперь каждое фото до публикации проверяет визуальная модель.

Факты — из данных, слова — от модели

Факты против текстов

Первый сайт Claude собрал прямо в чате: исследование, тексты, проверка. Выглядел неплохо. Но если модель пишет всю страницу, ничто не мешает ей «улучшить» номер телефона или придумать цену.

Поэтому страница делится надвое:

  • Факты — из данных: название, телефон, email, адрес, часы, рейтинг, фото и опубликованные цены. Их вставляет шаблон, а структурированные поля контактов не попадают даже в промпты для текстов. Отзывы и фото при этом уходят в Claude на анализ.
  • Слова — от модели: заголовки, «О нас», описания услуг и темы отзывов — отдельно для каждого раздела страницы.

Сверху — механические проверки. Обещания вроде «я всё починю», «ответьте мне» или «в тот же день» валят сборку, а «цены уточняйте по телефону» вырезается. Промпт запрещает цитировать отзывы дословно (они принадлежат авторам) и не пускает критику в «почему клиенты возвращаются»: «лучше три честные положительные темы, чем четыре, среди которых затесалась критика».

Бонус: так вышло ещё и дешевле. Разделение «факты отдельно, тексты отдельно» дало 0,18$ за сайт на самой мощной модели. Потом тексты ушли на Claude Sonnet, фото и классификация — на Claude Haiku, на каждом шаге появился кеш, и получилось 2,4–4,1 цента за сайт.

Email — только с доказательством

Как принимается контактный email

Самым сложным оказалось не собрать сайты, а найти, кому их отправить. Малый бизнес без сайта редко публикует email, а нестрогий поиск охотно «находит» чужой.

Первая версия брала адрес, если название компании было где-то в URL страницы. Так она «нашла» email для 14 компаний из 27, а верными оказались ~3. Остальные принадлежали маркетплейсу подарочных карт, картографическому сайту, продавцу наград и клининговой компании из другого города.

Агрегаторы вставляют названия компаний в свои URL, так что правило я перестроил под точность:

  • характерное слово из названия — в имени ящика, домене email или хосте страницы, а не только в пути; общие вроде «nails» или «cleaners» не в счёт;
  • домены платформ — в чёрном списке;
  • поиск в три шага: открытый веб → соцсети → имя владельца; большинство настоящих адресов нашлось на страницах компаний в соцсетях;
  • в боевом режиме адрес остаётся, только если на той же странице есть телефон компании или её адрес с улицей и городом; этот фрагмент сохраняется как доказательство.

Мораль: точность важнее охвата. Лучше упустить лид, чем написать не той компании.

Кому сайт действительно нужен

Пустое поле «сайт» в карточке Google не доказывает, что сайта нет. В первой тестовой партии из десяти компаний «без пригодного сайта» у четырёх он был: онлайн-запись, страница заказов, JavaScript-приложение.

Wix, Squarespace, Square и сервисы заказов рисуют сайт через JavaScript, и в исходном HTML рабочей страницы бывает всего 27 слов. Поэтому правила консервативные:

  • загружается страница — значит, сайт есть;
  • сайт вне карточки засчитывается, только если в его хосте два характерных слова из названия: одно — часто просто город;
  • соцсети и мультиссылки сайтом не считаются.

Отдельная группа — те, чей сайт из карточки не прошёл автопроверку: из 19 100 проверенных ~470 не ответили или только перекидывали на соцсети. Им ушло другое письмо: «Сайт в вашем профиле Google Maps не работает. Я сделал рабочий».

Честно: с «не работает» я поторопился — автопроверка видит лишь, что сайт не открылся у неё, а не что он лежит у всех.

Удаление по просьбе

По просьбе владельца сайт заменяется уведомлением «удалено по просьбе владельца», а компания уходит в стоп-лист. Его сверяют поиск, сборка и отправка, так что сайт не пересоберётся и не уйдёт повторно.

Подвох нашёлся в кеше: сначала CDN Cloudflare держал страницы семь дней, и правка или удаление дошли бы до людей через неделю. Теперь страницы перепроверяются каждые пять минут, а картинки, которые не меняются, остаются в кеше.

Разработка: 9 дней

Дата Что происходило
9 сентября Исследование ниш, первый сайт вручную с Claude, архитектура «шаблон + JSON», первый деплой на Cloudflare Pages. Обход капчи Google отмели: данные берём официально, у Google.
10 сентября Заказчик посмотрел десять сайтов и письма. Две проблемы: сайты для тех, у кого сайт уже был, и для тех, кому некуда писать. Правило: сначала — нет сайта и есть подтверждённый email, а поиск email стал строже. Первый полностью автоматический прогон на десять сайтов.
11–12 сентября Два прохода по 1 500 парам «город — ниша» (24 128 компаний), аудит 19 100 сайтов из карточек. Первые письма владельцам.
11–16 сентября Жёсткие подтверждения контактов, память против повторных писем, логи и учёт открытий и кликов. Партии по 10–20 сайтов, каждая модель — на задаче, где она сильнее, кеш на каждом шаге. Опрос, страница передачи, заголовки кеширования, удаление по просьбе и стоп-лист.
17 сентября 200 сайтов за один день🚀 Письма владельцам ушли в тот же день.

Кому это подойдёт

  • Веб-студиям и фрилансерам, которые продают сайты местному бизнесу: показать готовый сайт до первого звонка.
  • Агентствам, которые продают через рассылки: персональный лендинг или демо каждому потенциальному клиенту.
  • Сервисам для местного бизнеса (запись, отзывы, заказы): готовое демо на данных самого клиента.
  • Консультантам, которые, как этот заказчик, хотят знакомить с услугами через что-то полезное.

Те же данные подойдут для сводок отзывов, аудитов локального поиска или рекламных лендингов. Эта версия — под адресную рассылку: проверка контактов, черновики на просмотр, стоп-лист.

Технические подробности

Технические подробности

Детали этапов

  • Поиск: запрос «ниша в городе, штат», затем полные данные — адрес, часы, рейтинг, тексты отзывов и ссылки на фото.
  • Отбор: рейтинг от 3,8, от 10 до 1 500 отзывов и указанные часы работы; сети и карточки не по нише исключаются.
  • Фото: от 1 000 px, дубли — по контрольной сумме. Модель смотрит их на контактных листах, по многу на одной картинке ради экономии, отбрасывает меню, тёмные кадры и повторы и выбирает главный кадр.
  • Сборка: факты, проверки, страница владельца, инструкции и ZIP.
  • Аналитика: открытия, клики, ответы на опрос и передачи файлов — по каждому письму.

Каждая команда пишет полный протокол в лог, результаты моделей кешируются по компании — повторный запуск не платит дважды. Перед работой компания сверяется с историей по place ID, slug и названию с улицей и городом, чтобы не обработать её и не написать ей дважды.

Подвох платформы: бессерверные функции получают только пути из файла маршрутов, а не внесённая туда функция молча не срабатывает, и запрос получает статическую страницу. Теперь у каждой новой функции есть маршрут.

Данные и приватность в этой сборке

  • Только публичная информация: карточка в Google и открытые страницы из поиска. Отзывы и фото уходят в Claude на анализ, а в них самих бывают контакты.
  • Источник раскрыт: каждый сайт и каждое письмо говорят, что сайт собран по публичной информации.
  • Опрос не просит имя и контакты. Ответы, открытия писем и клики привязаны к компании через трекинговый ID письма.
  • Отписка: каждое письмо заканчивается фразой «Ответьте „stop“, и я больше не буду писать». В этой кампании ответы разбирались вручную: адрес уходил в стоп-лист, сайт снимался по просьбе владельца.
  • Хранение: события трекинга и ответы на опрос лежат в Cloudflare D1, автоматически ничего не удаляется.
  • Фото — из публичных карточек. Публичность не даёт права их перепубликовать, а тот, кто загрузил фото, не обязательно владеет на него правами.
  • Ключи — в локальном .env вне публикуемой папки.

Что добавляется при внедрении у клиента

Модуль рассылки настраивается под каждого клиента:

  • отправка с домена клиента: SPF, DKIM, DMARC, график прогрева и дневные лимиты;
  • понятная отписка и действующий почтовый адрес отправителя в каждом письме, как требует закон США (CAN-SPAM): ссылка для отписки с автоматическим стоп-листом плюс уведомление об отслеживании открытий и кликов;
  • юридическая проверка правил рассылок для целевых регионов;
  • фото, которые принадлежат компании или одобрены ею, либо лицензированные стоки; картографические данные — по условиям поставщика;
  • повторные письма и подключение CRM;
  • проверка человеком перед отправкой — уже встроена: сначала черновики, потом --send.

Качество

Автопроверки на каждой сборке (запрещённые обещания, пустые фразы о ценах, пустые разделы), валидация партии и живая проверка опубликованных URL после каждого деплоя. Юнит-тесты покрывают защиту от повторов, листы с фото, ссылки на профили, отправку и бюджет на поиск.

Стек

Слой Технологии
Конвейер Python 3.12: requests, aiohttp, Jinja2, Pillow, Playwright. CLI на 18 команд и меню для Windows
Данные Google Places API; поиск — Serper, запасной — Tavily
ИИ Claude Sonnet 5 — тексты; Claude Haiku 4.5 — фото, отзывы и классификация карточек. Стоимость каждого вызова пишется в лог
Сайт Шаблон Jinja2 со встроенными CSS и JavaScript, плюс мобильная панель для звонка
Хостинг и трекинг Cloudflare Pages (бесплатный тариф), Pages Functions на JavaScript, Cloudflare D1, Wrangler
Почта SMTP; HTML и простой текст со встроенным скриншотом сайта, одно письмо на адрес

Всего ~6 000 строк на Python, ~500 на JavaScript и ~1 100 строк шаблонов и CSS.

Хотите что-то похожее?

Расскажите о своей задаче, и я вернусь с планом: что сделаем, за какой срок и как поймём, что сработало.

Обсудить проект
Связаться