Разработка · 6 мин чтения

Google Sheets в n8n: интеграция без кода и скриптов

Google Таблицы остаются самым простым интерфейсом для менеджера, бухгалтера или логиста: открыл файл, увидел строку, поправил статус, отдельная админка не нужна. Я регулярно собираю связку google sheets n8n интеграция для клиентов, которым нужно завести заявки с Tilda, заказы из WooCommerce, статусы СДЭК или сообщения aiogram-бота в обычную таблицу и обратно, без единой строчки кода на стороне самой таблицы. Ниже показываю, как настраиваю доступ, какими нодами читаю и пишу строки и какие лимиты Google API дают о себе знать на больших объёмах.

Зачем связывать Google Таблицы и n8n

Таблицы редко подходят на роль основной базы данных, зато отлично работают как витрина: в неё смотрит отдел продаж, бухгалтер сверяет платежи, логист проверяет доставки. Автоматизировать саму таблицу вручную через Google Apps Script можно, но каждый раз это отдельный скрипт под конкретную задачу и отдельная поддержка. Нода Google Sheets в n8n читает и пишет строки за несколько кликов и сразу встраивается в цепочку с другими сервисами: почтой, Telegram, CRM.

На практике чаще всего связываю таблицы с:

  • формами на Tilda, чтобы заявки падали не только на почту, но и в общий реестр для отдела продаж
  • заказами WooCommerce с оплатой через T‑Bank, чтобы бухгалтер видел сумму, статус и номер платежа без захода в админку магазина
  • статусами доставки СДЭК, когда нужно обновлять столбец «статус» в таблице по номеру заказа
  • Telegram-ботом на aiogram, который читает остатки или цены из таблицы перед ответом клиенту

Подключение Google Sheets к n8n: OAuth2 или сервисный аккаунт

Прежде чем нода Google Sheets заработает, в Google Cloud Console нужно создать проект, включить Google Sheets API и Google Drive API (без него нода не увидит список файлов на аккаунте), а затем выпустить учётные данные. n8n поддерживает два варианта авторизации, и выбор зависит от того, чьи таблицы вы читаете.

Способ Кому подходит Что нужно настроить
OAuth2 (Google Sheets OAuth2 API) Личный или рабочий аккаунт, доступ к своим таблицам через браузер OAuth Consent Screen, Client ID и Client Secret, redirect URI на адрес n8n
Service Account Серверные сценарии, доступ к таблицам клиента без его логина в Google JSON-ключ сервисного аккаунта, ручная выдача доступа к файлу через «Настройки доступа»

Для self-hosted n8n самая частая ошибка на этом шаге, забыть прописать реальный внешний адрес сервера в OAuth redirect URI внутри Google Cloud Console, тогда авторизация зависает на ошибке redirect_uri_mismatch. У сервисного аккаунта своя особенность: ключ выпускается один раз, но саму таблицу нужно расшарить на email вида *.iam.gserviceaccount.com через обычную кнопку «Настройки доступа», иначе нода вернёт ошибку 403 при первом же запросе.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Чтение строк без кода: операция Get row(s)

Для чтения выбираю таблицу по ссылке или ID, лист по названию, операцию Get row(s) и, если нужна выборка, фильтр по значению колонки. Тумблер Return All забирает все строки разом, без него нода отдаёт только первые записи по лимиту. Отдельно стоит проверить параметр value render: Formatted Value возвращает то, что видно в ячейке (например, «1 200 ₽»), Unformatted Value отдаёт число без форматирования, и для дальнейших расчётов в цепочке обычно нужен именно второй вариант.

На таблицах от 10-15 тысяч строк фильтрация внутри ноды заметно замедляет каждый запуск сценария, потому что n8n сначала вычитывает диапазон целиком, а потом уже фильтрует на своей стороне. В таких случаях выгоднее держать в самой таблице формулу QUERY или отдельный лист с уже отфильтрованными данными и читать нодой именно его.

Запись и обновление строк: Append, Update, Append or Update

У ноды три рабочих режима записи, и на практике использую все три в разных сценариях:

  • Append: добавляет новую строку в конец диапазона, подходит для логов и заявок, где дубли не страшны
  • Update: обновляет конкретную строку по номеру строки, нужен точный индекс, поэтому чаще использую в связке с предварительным Get row(s)
  • Append or Update: ищет совпадение по выбранной колонке (например, order_id) и либо обновляет найденную строку, либо добавляет новую, этот режим закрывает большинство сценариев со статусами заказов

У Google Sheets API есть квота: 300 запросов на чтение и запись в минуту на проект и 60 запросов на пользователя в минуту. Если в цепочке стоит Split In Batches с записью каждой строки отдельным вызовом на сотне заказов, квота выбирается быстро и часть запросов падает с ошибкой 429. Правильнее собрать все строки в один массив и отправить одним вызовом Append, нода умеет писать пакетом.

Так обычно выглядит Function-нода, которая готовит заказ WooCommerce перед записью в таблицу:

return items.map(item => {
  return {
    json: {
      order_id: item.json.id,
      customer: `${item.json.billing.first_name} ${item.json.billing.last_name}`,
      status: item.json.status,
      total: item.json.total,
      updated_at: new Date().toISOString()
    }
  };
});

Практические сценарии: заявки, заказы, статусы доставки

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

  • Заявки с Tilda: вебхук Tilda отправляет POST на n8n, Function-нода раскладывает поля формы по колонкам, Google Sheets Append записывает строку, следом Telegram-нода шлёт уведомление менеджеру с номером новой заявки
  • Заказы WooCommerce с оплатой через T‑Bank: триггер по webhook заказа, HTTP Request проверяет статус платежа в T‑Bank API, Google Sheets Append or Update записывает или обновляет строку по order_id, чтобы бухгалтер видел актуальный статус без захода в WooCommerce
  • Статусы СДЭК: Cron-нода раз в час опрашивает СДЭК API по трек-номерам из таблицы, Google Sheets Append or Update обновляет колонку «статус» только для тех заказов, где статус изменился
  • Telegram-бот на aiogram: бот дёргает webhook n8n с артикулом товара, Google Sheets Get row(s) с фильтром по колонке возвращает нужную строку с остатком и ценой, бот отправляет клиенту готовый ответ

Для нетиповых кейсов, где СДЭК или T‑Bank отдают данные в формате, который стандартная нода не раскладывает по колонкам сходу, цепочку обычно дорабатываю кастомным Function-узлом, а если логики набирается на полноценный процесс с несколькими системами сразу, веду это уже как отдельный проект по автоматизации бизнес-процессов, а не типовой шаблон на пару нод.

Где Google Таблицы перестают справляться

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

Отдельный момент, персональные данные клиентов (телефон, email, адрес доставки) по 152-ФЗ должны храниться на серверах в России. Google Sheets для постоянного хранения такой информации не подходит, таблицу стоит использовать как рабочую витрину или отчёт, а основной базой контактов держать CRM или обычную БД на российском хостинге.

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

Нужен ли платный аккаунт Google для работы с n8n?

Нет, обычный бесплатный Google-аккаунт подходит, лимиты API привязаны к проекту в Google Cloud Console, а не к тарифу Google Workspace. Платный Workspace имеет смысл, если нужно централизованно управлять доступом сотрудников к таблицам.

Сколько строк выдержит Google Таблица в связке с n8n?

Формальный лимит, 10 миллионов ячеек на файл, но комфортно нода Google Sheets работает примерно до 20-30 тысяч строк на лист, дальше каждое чтение с фильтром начинает заметно тормозить сценарий.

Как часто можно опрашивать таблицу без превышения лимитов API?

Квота Google Sheets API, 300 запросов в минуту на проект и 60 на пользователя, при разумном Cron-триггере раз в 5-15 минут и пакетной записи одним вызовом Append этого хватает даже для сотен заказов в день.

Что делать, если n8n стоит на сервере в России, а Google Sheets временами недоступен?

Добавляю в цепочку Retry On Fail с паузой и запасной канал уведомлений, например Telegram, чтобы при недоступности Google строка не терялась, а сценарий повторял попытку записи через несколько минут вместо мгновенного падения.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно