> 🎤 **Nick Saraev** — Ник Сараев — эксперт по автоматизации бизнес-процессов и создатель образовательных курсов по n8n и ИИ.

### ⚡ Зачем читать это руководство?
- **Экономия бюджета:** Перестаньте платить сотни долларов за API для парсинга — используйте мощь n8n и стандартные HTTP-запросы.
- **Масштабируемость:** Научитесь строить гибкие системы, которые собирают тысячи лидов из Google Maps полностью на автомате.
- **Навыки профессионала:** Освойте работу с регулярными выражениями (regex), циклами (loops) и прокси-серверами для обхода блокировок Google.

### 🗺 Карта навыков
| Уровень | Навык | Инструмент |
| :--- | :--- | :--- |
| Базовый | Настройка HTTP-запросов | n8n, Google Sheets |
| Средний | Работа с Regex и JSON | JavaScript |
| Продвинутый | Управление циклами и задержками | Loop/Wait nodes |
| Экспертный | Интеграция SERP-прокси | Proxy configuration |

## 1. Фундамент системы: Структура данных в Google Sheets

В основе любого автоматизированного процесса сбора данных лежит строгая дисциплина работы с входными данными. Ник Сараев в своем видео наглядно демонстрирует, что успех автоматизации начинается не с кода, а с правильно организованной таблицы. Представьте, что вы строите конвейер: если на вход подается хаос, на выходе вы получите мусор. В данном случае мы создаем систему, которая работает по принципу «очереди задач». Мы используем два листа: «Searches» (Поиск) и «Emails» (Почта).

На листе «Searches» мы сохраняем поисковые запросы, например, «Calgary dentist». Важно понимать технический аспект: Google Maps воспринимает запросы через специфические URL-структуры. Простой ввод текста не сработает — нам нужно преобразовать поисковый запрос в корректную ссылку, где пробелы заменены на знаки «+». Спикер подчеркивает, что этот лист становится вашим «пультом управления». Вы можете добавить туда сотни ниш и городов, и система будет последовательно обрабатывать их, не требуя вашего участия. Лист «Emails» выступает в роли «базы данных», куда система будет аккуратно складывать найденные контакты. Такой подход позволяет отделить процесс подготовки данных от процесса их обработки, что критически важно для отладки. Если ваш поток данных (workflow) внезапно остановится, вы всегда будете знать, на каком этапе поиска вы находитесь, просто взглянув на таблицу. Это превращает хаотичный парсинг в предсказуемый бизнес-процесс, который можно масштабировать до тысяч записей без риска потерять прогресс.

> "What I'll do first is demo the flow before then showing you guys how to build it on your own from scratch. You guys can find the templates in the description as per usual."

**✅ Сделайте сейчас:** Создайте Google Sheet с двумя вкладками: 'Searches' и 'Emails'. В первой колонке вкладки 'Searches' вставьте как минимум 5 различных поисковых запросов в формате URL-ссылок (например, https://www.google.com/maps/search/calgary+dentist). Убедитесь, что вы предоставили n8n доступ к этой таблице через Google Credentials.

## 2. Инициализация HTTP-запроса и извлечение данных

Когда структура готова, следующим шагом является «общение» с серверами Google. Здесь в игру вступает узел HTTP Request. Многие новички боятся этого шага, полагая, что им потребуются платные провайдеры API, однако Ник доказывает обратное. Мы обращаемся к Google Maps напрямую, имитируя запрос браузера. В настройках узла важно отключить проверку SSL, чтобы избежать ошибок безопасности при попытке доступа к внешним ресурсам, и обязательно включить передачу заголовков ответа (response headers). Это дает нам доступ к сырому HTML-коду страницы, который является "золотой жилой" для парсинга.

Однако получение HTML — это лишь полдела. Мы сталкиваемся с огромным объемом «шума»: скриптами, CSS-стилями и служебными данными Google. Чтобы превратить этот хаос в полезную информацию, мы применяем JavaScript-сценарий. Ник использует регулярные выражения (regex) — это мощный инструмент для поиска шаблонов в тексте. Вы можете спросить у ИИ (как сделал Ник с ChatGPT), чтобы он написал для вас выражение, которое вычленяет именно URL-адреса сайтов из HTML-кода. Весь процесс сводится к тому, чтобы превратить неструктурированную строку HTML в упорядоченный массив объектов JSON. В n8n мы должны учитывать, что данные приходят массивом, поэтому мы пишем код, который «распаковывает» этот массив и возвращает только нужные нам ссылки. Это ключевой момент обучения: вы не обязаны писать сложный софт, достаточно понимать логику обработки массивов данных (input-process-output). Если вы пропустите этап очистки, ваша база данных быстро заполнится мусорными ссылками типа 'gstatic' или 'google.com', которые не имеют никакого отношения к вашим потенциальным клиентам. Процесс фильтрации здесь — это ваш главный инструмент контроля качества, превращающий тысячи случайных символов в конкретный список доменов, готовых к дальнейшему исследованию.

> "What we're doing is we're scraping all of the Google Maps listings over here for Calgary dentists... We do some URL extraction. Then we do some filtering, some duplicate removal."

**✅ Сделайте сейчас:** Добавьте в n8n узел HTTP Request. Настройте его на URL вашего поискового запроса Google Maps. Используйте узел Code, чтобы написать простой скрипт на JavaScript, который извлекает все найденные ссылки со страницы. Выведите результат в консоль и убедитесь, что вы видите список URL-адресов компаний.

---

## 3. Гигиена парсинга: Циклы, задержки и обработка исключений

В мире профессиональной автоматизации скорость — это не всегда преимущество. Если вы начнете отправлять сотни запросов в секунду на сервера Google, их алгоритмы защиты (Anti-bot) мгновенно зафиксируют аномальную активность и заблокируют ваш IP-адрес. Ник Сараев в своем видео наглядно иллюстрирует, почему «гигиена парсинга» является критически важным этапом. Когда мы переходим от получения списка сайтов к посещению каждого из них для извлечения email-адресов, мы вступаем на территорию, где поведение системы должно максимально имитировать действия живого человека. Использование узла «Split in Batches» (разбиение на пакеты) позволяет нам не только контролировать нагрузку на систему, но и делает процесс предсказуемым. 

В видео Ник объясняет, что попытка обработать сразу 27 сайтов приведет к ошибкам сети. Он рекомендует использовать узел «Wait» с задержкой в 1 секунду между запросами. Это кажется незначительным, но именно эта секунда дает системе время на корректное завершение соединения и освобождение ресурсов. Важной деталью является настройка обработки ошибок: в узле HTTP Request всегда стоит активировать опцию «Continue on fail». Почему это важно? Потому что некоторые сайты могут быть недоступны, иметь битый SSL-сертификат или просто блокировать автоматизированные запросы. Без настройки «Continue on fail» ваш весь рабочий процесс (workflow) остановится при первой же ошибке, и вы потеряете все данные, которые могли бы собрать с оставшихся двадцати сайтов. Мы также обсуждаем использование лимитов (Limit node) на этапе тестирования. Это блестящая практика: ограничив поток до 3-5 записей, вы экономите время на отладку и бережете свою «репутацию» перед Google. Если вы будете тестировать систему на полном списке из сотен элементов, каждое изменение в коде будет стоить вам минут ожидания, что делает процесс разработки мучительно медленным.

> "I usually recommend at least for testing purposes, just put some weights in... If you find yourself ever getting an error with an HTTP request, what you can do is you can go to settings and then just go on error continue."

**✅ Сделайте сейчас:** В вашем n8n workflow добавьте узел «Split in Batches» перед узлом HTTP Request, который заходит на целевые сайты. Установите параметр «Batch Size» на значение 1. После узла HTTP Request добавьте узел «Wait» с задержкой 1000 мс (1 секунда). В настройках HTTP Request активируйте «Continue On Fail», чтобы сбои на отдельных сайтах не останавливали всю цепочку.

## 4. Глубокое извлечение контактов: Парсинг Email через Regex и агрегация данных

Когда мы успешно «зашли» на каждый сайт из нашего списка, начинается самая ответственная часть работы — извлечение email-адресов. Как отмечает Ник Сараев, HTML-код сайта — это неструктурированная свалка информации. Наша задача — превратить этот хаос в чистый список контактов. Мы используем еще один узел «Code», куда внедряем регулярное выражение (Regex), специально нацеленное на поиск паттернов email-адресов. Регулярные выражения — это своего рода «поисковые маски», которые позволяют нам вытаскивать данные, соответствующие определенному формату (например, «текст@домен.зона»). 

Важный методический аспект: после парсинга у нас неизбежно возникнет много пустых значений (null), так как не на каждом сайте указан email (или он защищен скриптами). Здесь мы применяем фильтрацию. Использование узла Filter позволяет нам отбросить все «пустышки» и оставить только валидные адреса. После этого мы сталкиваемся с проблемой дубликатов: разные страницы одного сайта могут содержать один и тот же адрес (например, info@company.com), поэтому узел «Remove Duplicates» становится обязательным финальным штрихом перед сохранением данных в Google Sheets. Ник подчеркивает, что этот процесс можно масштабировать: если вы хотите собирать еще больше лидов, вы можете усложнить систему, добавив второй цикл. Первый цикл находит URL-адреса страниц «Контакты» или «О нас», а второй цикл заходит именно на эти страницы для извлечения адреса. 

В конце пути мы используем узел для работы с Google Sheets, где выбираем действие «Append Row». Важно: чтобы не перегружать API Google, используйте опцию «Minimize API Calls» или, если данных тысячи, выводите их в CSV-файл и импортируйте массово. Этот этап превращает вашу техническую разработку в законченный бизнес-продукт. Вы не просто «поиграли с кодом», вы создали работающую воронку генерации лидов, которая может приносить реальные деньги. Понимание того, как данные проходят путь от поисковой выдачи до ячейки таблицы, делает вас специалистом, способным автоматизировать практически любую рутинную задачу в интернете.

> "I just wanted to give you guys like a little nugget that you could build out. This isn't the first time that people have built a sort of system like this. It's not like this is revolutionary or anything, but yeah, I just wanted everybody here to have a good place to start."

**✅ Сделайте сейчас:** Добавьте узел «Code» после HTTP Request для парсинга email. Используйте регулярное выражение для поиска email-адресов. После этого добавьте узел «Filter», чтобы удалить все пустые значения (null). Завершите цепочку узлом «Google Sheets», настроенным на добавление найденных email-адресов на лист «Emails».

---

## 5. Масштабирование: от локального теста к промышленному скрапингу

Когда ваш алгоритм успешно находит адреса для 10-20 компаний, возникает естественное желание ускорить процесс или увеличить охват. Однако здесь мы сталкиваемся с тем, что Ник называет «ограничениями по репутации» IP-адреса. Google — это не просто поисковик, это сложная система защиты, которая анализирует «цифровой отпечаток» вашего запроса. Если вы начнете «бомбардировать» сервера тысячами запросов в час, вы получите либо капчу, либо бан. В этом блоке мы разберем, как превратить «игрушку» в инструмент для реальной лидогенерации.

Первый шаг к масштабированию — использование прокси-серверов. Ник подчеркивает: прокси выступает в роли посредника, который «очищает» ваш запрос от признаков автоматизации. Вы не просто меняете IP, вы меняете тип соединения. Использование SERP-прокси (Search Engine Results Page proxy) позволяет отправлять запросы так, будто они исходят от обычного пользователя из определенной локации. Например, если вам нужны стоматологи из Калгари (Calgary dentists), прокси с канадским IP-адресом будет выглядеть в глазах Google гораздо естественнее, чем запрос с вашего домашнего сервера.

Второй критический элемент — логика разбиения на пакеты. Если вы планируете собирать тысячи лидов, нельзя использовать один «плоский» список. Вам нужно создать очередь. Представьте, что у вас есть 10 000 потенциальных клиентов. Если вы отправите их в n8n одним массивом, система зависнет. Вы должны использовать структуру «Dynamic Batching». Мы разбиваем данные на группы по 50-100 записей и добавляем между ними «паузы покоя» (Wait nodes). Это позволяет Google «забыть» о вашей интенсивной активности, сохраняя ваш доступ к API-подобным результатам на долгий срок.

Третий аспект — это «умная» обработка ошибок. Когда мы работаем с тысячами сайтов, сбои неизбежны. Один сайт может быть перегружен, другой — иметь устаревший SSL-сертификат. В методологии Ника «Continue on fail» — это не просто настройка, это стратегия выживания потока. Вы можете добавить узел «Error Trigger», который будет записывать все «битые» ссылки в отдельный Google Sheet «Errors». Позже вы сможете проанализировать их, понять причину и, возможно, отправить их на повторную обработку через день. Это превращает ваш инструмент из хрупкого кода в самовосстанавливающуюся систему. Помните, что качество данных важнее их количества. Лучше собрать 500 качественных email-адресов, чем 5 000 «мертвых» ссылок, которые только испортят вашу репутацию при последующей email-рассылке.

> "If you run this at any sort of scale, eventually this Google Maps HTTP request module will run into Google Maps rate limits... The most common way is to use a proxy. Now, proxies are basically third-party services where you pass the request through before it goes to the end URL."

**✅ Сделайте сейчас:** Интегрируйте прокси в ваш HTTP Request узел. В настройках узла найдите раздел «Proxy» и вставьте данные вашего провайдера. Настройте «Error Handler» (узел Error Trigger), который будет автоматически логировать все неудачные попытки запросов в отдельный лист вашей таблицы «Logs», чтобы вы могли отслеживать проблемные сайты.

## 6. Глубокое погружение: рекурсивный скрапинг и цепочки переходов

Многие новички совершают ошибку, ограничиваясь главной страницей сайта компании. Однако контактные данные (Email, формы обратной связи) часто скрыты на страницах «Contact Us», «About» или даже в подвале (footer), который подгружается динамически. Ник Сараев указывает на важный архитектурный прием: «рекурсивный скрапинг». В этом подходе мы не просто получаем один URL — мы превращаем наш воркфлоу в дерево принятия решений.

Как это работает на практике? После получения списка сайтов мы не сразу ищем email. Сначала мы заходим на сайт и парсим все доступные внутренние ссылки. Мы ищем ключевые слова: «contact», «about», «team», «email». Затем мы создаем цикл внутри цикла. Внешний цикл перебирает компании, а внутренний цикл (Nested Loop) заходит на найденные страницы «Контакты». Этот метод позволяет находить email-адреса даже на тех сайтах, которые кажутся пустыми при первом просмотре главной страницы. Это значительно повышает конверсию сбора данных — с 10-15% до 40-60%.

Важный методический совет: не пытайтесь парсить всё подряд. Если вы зашли на страницу, которая не содержит ключевых слов «contact» или «email», нет смысла тратить время на глубокий анализ её HTML-кода. Используйте узлы «Condition» или «Switch» для фильтрации контента до того, как начнется ресурсоемкий парсинг. Это экономит время выполнения и снижает нагрузку на систему. Если вы видите, что сайт использует современные JS-фреймворки (типа React), обычный HTTP Request может вернуть вам просто пустой тег <body>. В таких случаях Ник рекомендует либо использовать инструменты типа Puppeteer для «отрисовки» страницы (headless browser), либо парсить мета-теги, где часто скрыты контактные email-адреса.

Последний этап этого продвинутого процесса — нормализация данных. Вы получили сотни email-адресов. Некоторые из них могут быть «info@...», некоторые — личными адресами сотрудников. Ваша задача — создать «Data Validator». Это узел Code, который проверяет адреса на соответствие стандартам (например, отсутствие спецсимволов, правильное доменное имя). Объединение этих данных в единую базу данных с мета-информацией (название компании, URL, источник) позволит вам не просто иметь список, а обладать мощным инструментом для маркетинговой аналитики. Вы превращаете хаотичный набор строк в структурированный актив вашего бизнеса.

> "Realistically the email addresses aren't just buried on the homepage... You could first extract the URL. Then you do an HTTP request to that URL... Then you run a third loop that goes through each of the URLs... and then it does the exact same thing."

**✅ Сделайте сейчас:** Усложните ваш воркфлоу, добавив узел «HTML Extract» для поиска ссылок на странице. Реализуйте «Inner Loop», который заходит по найденным ссылкам, содержащим «contact» или «about». Настройте «Data Validator» в узле Code, который отсеивает адреса с явными ошибками (например, без символа @ или с некорректными доменными зонами).

---

## 7. Монетизация автоматизации: превращаем скрипты в сервис

Когда ваш поток сбора лидов работает стабильно, возникает вопрос: «Что дальше?». Многие разработчики останавливаются на этапе получения CSV-файла, но настоящий профессионал видит в этом бизнес-возможность. Ник Сараев в своих выступлениях часто подчеркивает, что автоматизация — это не самоцель, а инструмент создания ценности. Если вы научились собирать 500 email-адресов стоматологов в Калгари за 20 минут, вы обладаете навыком, за который владельцы малого бизнеса готовы платить. Представьте, сколько времени они тратят на ручной поиск клиентов. Ваша система экономит им десятки часов, что конвертируется в реальные деньги.

Первым шагом к коммерциализации является создание «базы под ключ». Вы можете предлагать услуги по парсингу узконишевых рынков. Вместо продажи «программного кода», вы продаете «отфильтрованный список лидов с высоким намерением покупки». Используйте инструменты визуализации, такие как Looker Studio или просто красиво оформленные Google Sheets с добавлением статусов (например, «Связь установлена», «Отправил КП», «В процессе»), чтобы клиент видел прогресс работы. Это превращает безликий список в CRM-систему начального уровня.

Второй аспект — это «рекуррентная ценность». Сбор данных не должен быть разовой акцией. Рынок меняется: одни стоматологии закрываются, другие открываются. Предложите своим клиентам абонентскую плату за ежемесячное обновление базы. Вы запускаете воркфлоу раз в неделю, очищаете данные, удаляете дубликаты и отправляете обновленный файл. Это создает предсказуемый доход при минимальных затратах времени, так как ваша система уже настроена и отлажена. Автоматизация в n8n позволяет делать это в фоновом режиме, пока вы занимаетесь поиском новых заказов.

Третий важный момент — это этика и комплаенс. При работе с данными важно соблюдать локальные законы (GDPR, CAN-SPAM). Ник напоминает, что при отправке холодных писем по собранным адресам вы должны иметь четкое понимание того, как вы получили этот контакт. Включайте в свои отчеты мета-данные: когда и на каком сайте был найден email. Это повышает доверие клиента и защищает вас от обвинений в «спаме». Ваше преимущество перед конкурентами — это прозрачность процессов и качество данных. Помните, что каждый собранный email — это потенциальный контакт, который может принести сделку, поэтому относитесь к своей базе данных как к самому ценному активу вашего бизнеса.

> "The really cool thing about this is you could run multiple variations of what I just built for basically any service, whether it's directories, whether it's some other search engine, whether it's county real estate databases and more. If you wanted to turn your build and automation skills into maybe a profitable business."

**✅ Сделайте сейчас:** Создайте отдельный лист в Google Sheets под названием «Клиентский отчет». Настройте узел Google Sheets так, чтобы он не просто добавлял email, но и записывал дату парсинга и URL источника. Это создаст «прослеживаемость» данных, что критически важно при продаже лидов заказчикам.

## 8. Искусство обработки ошибок: устойчивость вашей системы

Любая автоматизация, работающая с внешним вебом, сталкивается с нестабильностью. Сайты падают, API меняют структуру, интернет-соединение пропадает. Ник Сараев акцентирует внимание на том, что «хрупкий» код — это главная причина провала автоматизаторов-новичков. В этом блоке мы изучим, как сделать систему, которая не требует вашего участия 24/7.

В основе устойчивой системы лежит стратегия «Error Handling». В n8n есть мощный инструмент — узел «Error Trigger». Вместо того чтобы просто останавливать поток при сбое, мы должны перенаправлять «битые» задачи в «карантин». Создайте отдельный лист «Failed_Queue» в вашей таблице. Если HTTP-запрос возвращает 404 (страница не найдена) или 500 (сервер упал), ваш поток должен записывать URL в этот список. Раз в сутки можно запускать отдельный «восстановительный» воркфлоу, который будет пытаться обработать только те ссылки, что попали в карантин.

Кроме ошибок сервера, есть «ошибки логики». Например, сайт обновил дизайн, и ваш регулярный код перестал находить email-адреса. Здесь на помощь приходит «Data Validation Loop». После того как узел Code завершил работу, добавьте узел «Condition», который проверяет количество найденных email-адресов. Если оно равно 0 для большого количества страниц подряд, отправьте уведомление в Slack или Telegram. Это сигнал для вас: «Срочно проверь код, что-то пошло не так». В этом и заключается суть профессиональной работы — вы не ждете, пока клиент позвонит и пожалуется, вы знаете о проблеме раньше него.

Помните про лимиты памяти и времени исполнения. Если ваш цикл включает 1000 итераций, не пытайтесь прогнать всё одной «пачкой». Ник рекомендует разбивать большие задачи на мелкие порции по 50 элементов. Это предотвращает переполнение оперативной памяти сервера, на котором запущен n8n. Используйте переменные окружения для хранения чувствительных данных: API-ключей, учетных данных прокси. Никогда не «зашивайте» пароли прямо в узлы. Это правило безопасности позволит вам спать спокойно, даже если вы случайно опубликуете свой проект в открытом доступе или передадите его клиенту.

> "I'm just going to use the minimize API call option because I've obviously had some issues with this in the past where I've just done so many demos that it's just dumped a bunch of stuff into a Google sheet and then I run into API rate limits and stuff."

**✅ Сделайте сейчас:** Настройте уведомления в Telegram через «Telegram Node», которые будут срабатывать, если ваш скрипт не нашел ни одного email-адреса за 10 итераций подряд. Это позволит вам оперативно реагировать на изменения в верстке сайтов ваших клиентов.

## 🏋️ Практикум
1. Добавьте узел 'Wait' с рандомным временем задержки (от 1 до 3 секунд) для имитации поведения человека.
2. Реализуйте 'Data Validator' с использованием JavaScript, который удаляет дубликаты адресов с одинаковым доменным именем.
3. Создайте 'Error Reporting System', записывающую URL, на которых парсер 'упал' с ошибкой, в лист 'Errors'.
4. Добавьте 'Slack/Telegram Notification' при завершении цикла парсинга, чтобы получать отчет о количестве найденных лидов.
5. Настройте 'Dynamic Batching': система должна сама определять размер пачки (batch size) в зависимости от количества входящих URL.
6. Внедрите 'Webhook' для ручного запуска парсинга через браузер или мобильное приложение.
7. Добавьте фильтр 'Domain Authority' (через простой код), чтобы отсеивать сайты с подозрительными или 'мусорными' расширениями домена.

## 🔑 Итоги: 5 действий на сегодня
1. Зарегистрируйтесь в n8n (облачном или self-hosted).
2. Создайте структуру Google Sheets: 'Searches' и 'Emails'.
3. Соберите базовый поток из HTTP Request и Code узла по шаблону Ника.
4. Настройте минимальный 'Wait node' для соблюдения правил вежливого парсинга.
5. Запустите первый тест на 5 поисковых запросах и убедитесь в заполнении таблицы.

## 💬 Цитаты для вдохновения
- "This isn't the first time that people have built a sort of system like this. It's not like this is revolutionary or anything, but yeah, I just wanted everybody here to have a good place to start."
- "If you run this at any sort of scale, eventually this Google Maps HTTP request module will run into Google Maps rate limits."
- "Realistically the email addresses aren't just buried on the homepage... You could first extract the URL. Then you do an HTTP request to that URL... Then you run a third loop."
- "Work smart, not hard. Automate the boring, focus on the growth."