Перейти к содержимому

← Все статьи блога

Как подключить Google Sheets к n8n: заявки с сайта в таблицу за один workflow

Автор: Алексей Доронин

Владелец лендинга на Tilda получал заявки на почту, а менеджер к вечеру забывал переносить имя и телефон в Google Таблицу. В n8n собрали Webhook, нормализацию полей и Append Row - после экрана «небезопасное приложение» в Google OAuth тестовая заявка появилась во второй строке листа «Заявки 2026». Ниже один маршрут: форма на сайте → production webhook → строка в таблице за секунды, без ручного копирования из почты или мессенджера.

Webhook в n8n - это HTTPS-адрес, куда сайт шлёт POST с JSON полей формы. n8n принимает payload, приводит ключи к вашим колонкам и вызывает Google Sheets API. OAuth настраивается один раз, а не на каждую заявку. Важно из официальной документации n8n: для узла Google Sheets нужны и Google Sheets API, и Google Drive API - без Drive таблица часто не появляется в выпадающем списке. Для срочных лидов webhook быстрее триггера «Row Added» с задержкой до минуты.

Создайте таблицу-заявки с фиксированными заголовками

n8n-google-sheets-zayavki-v-tablitsu-inline-01 Как подключить Google Sheets к n8n: заявки с сайта в таблицу за один workflow

Боль: заявки с сайта не попадают в таблицу автоматически, менеджер копирует из почти вручную и путает источник. Решение - один лист с заголовками в строке 1, которые вы больше не переименовываете без правки n8n.

Создайте Google Таблицу, например «Заявки 2026». В первой строке задайте колонки: created_at, name, phone, email, source, comment, status. Можно кириллицу («Имя», «Телефон»), но выберите один вариант и держите стабильно: имена в n8n чувствительны к регистру, а после переименования заголовка узел Append Row падает с ошибкой «Column names were updated».

Колонку status оставьте для ручной работы: «новый», «в работе», «закрыт». Автоматизация пишет входящие поля и метку времени. Типичная ошибка - формулы в строке 1 вместо текста: мапинг в n8n должен ссылаться на текст заголовка, а не на формулу. Лучше сразу зафиксируйте имена колонок и не переименовывайте их без правки workflow.

Схема потока заявки:
Форма сайта (POST JSON) → Webhook n8n → Set (нормализация + timestamp) → Google Sheets Append Row → менеджер видит новую строку

Настройте OAuth в Google Cloud без redirect_uri_mismatch

n8n-google-sheets-zayavki-v-tablitsu-inline-02 Как подключить Google Sheets к n8n: заявки с сайта в таблицу за один workflow

Боль: при Sign in всплывает «Google hasn’t verified this app» или redirect_uri_mismatch. Для self-hosted n8n это ожидаемый этап, не признак поломки интеграции.

  1. Google Cloud Console → проект → включите Google Sheets API и Google Drive API.
  2. OAuth consent screen → External → добавьте email в Test users.
  3. Credentials → OAuth Client ID → Web application.
  4. Authorized redirect URIs → скопируйте OAuth Redirect URL из n8n (Credentials → Google Sheets OAuth2 API). Для локальной отладки допустим http://localhost:5678/rest/oauth2-credential/callback; на сервере - ваш домен с путём /rest/oauth2-credential/callback.
  5. В n8n Client ID и Secret → Sign in with Google → Save. На предупреждении: Advanced → Go to app (unsafe).

В режиме External Testing токен живёт около 7 дней - если запись внезапно перестала работать, переподключите credential. n8n Cloud часто обходится Managed OAuth без ручной настройки Cloud Console; здесь фокус на Custom OAuth2 для своего сервера. Не стоит пропускать шаг Test users на consent screen - без него Sign in для вашего Gmail не пройдёт.

Соберите workflow: Webhook, Set и Append Row

n8n-google-sheets-zayavki-v-tablitsu-inline-03 Как подключить Google Sheets к n8n: заявки с сайта в таблицу за один workflow

Боль: гайды показывают либо только OAuth, либо только ноду Sheets. Рабочий минимум для формы - три узла и активный workflow.

  1. Webhook → HTTP Method POST, Path site-lead. Response mode «Immediately» или отдельный Respond to Webhook с {«ok»:true} сразу после триггера.
  2. Set → {{ $json.body.name ?? $json.name }}, phone, email, {{ $now.toISO() }} в created_at, {{ $json.body.source ?? «landing» }}.
  3. Google Sheets → Operation Append Row → credential → Document ID из URL таблицы → Sheet1 → Map Each Column Manually.
  4. Тест → Listen for Test Event → curl POST на Test URL с {«name»:»Тест»,»phone»:»+79001234567″,»email»:»test@example.com»,»source»:»landing»}.
  5. Активация → включите workflow → Production Webhook URL в форму сайта (Tilda webhook, HTML fetch POST или n8n Form Trigger).

Не путайте Test URL и Production URL: в боевую форму вставляют только Production после активации workflow. Test работает, пока открыт редактор и слушается тестовое событие. Не делайте наоборот - иначе форма на сайте шлёт заявки в пустоту, пока вы закрыли редактор.

Маппинг из body, когда Sheets пустой при зелёном execution

Боль: execution success, строка в таблице пустая. Чаще всего поля лежат в body, а в Sheets мапят корневые ключи.

Откройте последний execution и посмотрите JSON. Tilda, HTML-форма и n8n Form отдают поля по-разному: name, client_name или Name. В Set задайте единый объект:

Пример Set:
name: {{ $json.body.name ?? $json.body.Name ?? $json.name }}
phone: {{ $json.body.phone ?? $json.body.Phone }}
email: {{ $json.body.email ?? $json.body.Email }}

В Append Row «Email» и «email» - разные колонки. Переименовали заголовок - пересоберите Mapping Column Mode в ноде Sheets. Для Tilda: Production URL в Настройки сайта → Формы → Webhook, галочка Webhook в блоке формы, опубликуйте страницу. Убедитесь, что в execution JSON поля лежат там, куда смотрит Set - чаще всего в body. Подробнее - как подключить Tilda к n8n.

OAuth или Service Account: что выбрать

На сервере нельзя каждый раз жать Sign in, а user OAuth в Testing mode отваливается через неделю. Сравнение:

Критерий OAuth2 (ваш аккаунт) Service Account (JSON)
Подключение Sign in with Google в UI n8n JSON-ключ, таблица расшарена на email SA
Кому подходит Пилот, малый бизнес, один админ Продакшен на VPS без ручного логина
Риски Testing: reconnect ~каждые 7 дней Забыть выдать доступ SA к файлу
Запись заявок Append Row, Append or Update Row Те же операции без UI-логина

Итоговый вердикт: первый вечер и проверка гипотезы - OAuth2. Когда workflow на рекламе на сервере - Service Account, расшарьте таблицу на name@project.iam.gserviceaccount.com.

Защита от дублей при повторной отправке

Двойной клик «Отправить» или retry браузера даёт три строки с одним телефоном. Перед Append: Google Sheets Get Rows по phone + IF - если найдено, обновите comment или пропустите. Или Append or Update Row с ключом email/phone - одна строка на лид. Избегайте бесконечного Append без дедупа, когда реклама уже включена.

В мини-CRM на Sheets добавляют lead_id и status. Не путайте с полным intake в CRM: маршрутизация в amoCRM и дедуп по всей воронке - отдельные сценарии. Здесь Google Sheets - первая база заявок с лендинга, а не замена всей автоматизации продаж. Советуем держать этот workflow простым: Webhook, Set, Append Row - и только потом ветвить в CRM.

Чек-лист: три тестовые заявки и критерии успеха

Пройдите до включения рекламы - на практике 15-20 минут при готовом OAuth. Рекомендуем три тестовые заявки: одна с curl, две с формы - так вы поймаете расхождение body до продакшена.

  1. Тестовый POST на Production URL или submit с опубликованной формы - execution success.
  2. Строка в таблице - name, phone, email, source, created_at без ручного ввода.
  3. Вторая заявка с другим телефоном - новая строка, порядок по времени верный.
  4. Повтор с тем же phone - дедуп или осознанный дубль с пометкой в comment.
  5. Пустой phone - ветка IF не пишет мусор (опционально, но полезно).
  6. Сломайте заголовок колонки, почините мапинг - Append снова работает.

Критерии успеха до FAQ: тест добавляет строку с именем, телефоном, email, источником и меткой времени; execution n8n зелёный; менеджер видит заявку за секунды; повторный payload не роняет workflow. Вы перестаёте переносить лиды вручную и получаете единый список с лендинга.

Нужен разбор формы, OAuth и дедупа под продакшен - схема на calmopsai.com.

Что дальше

  1. Зафиксируйте заголовки таблицы без переименований «на ходу».
  2. Подключите OAuth или Service Account с Sheets + Drive API.
  3. Соберите Webhook → Set → Append Row и проверьте мапинг body.
  4. Вставьте Production URL в форму и отправьте три теста.
  5. Добавьте дедуп или Append or Update, когда пойдёт трафик.

Материал проверен: эксперт Елена Ковалева (главный эксперт по SEO/GEO).
Достоверность данных: Append Row, требование Drive API, redirect callback, Testing mode OAuth ~7 дней, чувствительность имён колонок, задержка триггера Row Added - docs.n8n.io Google Sheets node (доступ 2026-07-29). Показы Wordstat по запросам темы не верифицированы (MCP недоступен в Cloud run).

Частые вопросы

Service Account или OAuth для малой команды?

OAuth2 быстрее на старте: один Sign in и видны свои таблицы. Service Account - для сервера без перелогина: JSON-ключ в credential и шаринг таблицы на email сервисного аккаунта с правом редактора.

Как не сломать формулы на листе при Append Row?

Заголовки в строке 1 - простой текст, формулы со строки 2 или на другом листе. Append добавляет данные в следующую пустую строку и не перезаписывает формулы в заголовках. Не переименовывайте колонки без обновления ноды Sheets.

Почему n8n не видит мою таблицу в списке?

Включите Sheets и Drive API в Google Cloud. Credential должен быть привязан к аккаунту, где лежит файл. Для Service Account таблица расшарена на email из JSON-ключа.

Execution есть, строка пустая - что смотреть?

Найдите поля в body JSON execution. В Set используйте $json.body.field. В Append Row сверьте регистр имён колонок с первой строкой и режим Map Each Column Manually.

Когда пора переезжать с Sheets в CRM?

Пока менеджер один и заявок до нескольких десятков в день - таблицы хватает. CRM нужна при стадиях сделки, распределении лидов и жёстком дедупе по базе. Sheets остаётся резервом и отчётным слоем.

Можно ли параллельно слать заявку в Telegram и в таблицу?

Да. После Set разветвите workflow: Append Row в Sheets и Telegram менеджеру. Отдавайте форме HTTP 200 быстро; тяжёлые узлы ставьте после Respond to Webhook, если конструктор чувствителен к таймауту.

Telegram