Каждый workflow в n8n, который трогает Google Sheets, Google Drive или Gmail, начинается с одного и того же шага: подключить Google-аккаунт к n8n через OAuth. Без этого нода Google Sheets не даст выбрать таблицу из списка, а Gmail-триггер вообще не запустится. На практике почти все затыки клиентов на этом этапе связаны не с самим n8n, а с настройками в Google Cloud Console: неверный redirect URI, не включённый API, забытый тестовый пользователь при статусе Testing. Ниже - весь путь от создания проекта в Google Cloud до рабочих credentials в n8n, с разницей между self-hosted и n8n Cloud там, где она реально есть.
Зачем OAuth для Sheets, Drive и Gmail, а не простой API-ключ
API-ключ подходит для публичных данных вроде Google Maps, где Google не важно, чей это запрос. Sheets, Drive и Gmail работают с данными конкретного человека или организации, поэтому Google требует OAuth 2.0: сначала владелец аккаунта явно подтверждает, каким приложениям и с какими правами разрешает действовать от своего имени, и только потом n8n получает токен доступа. Токен привязан к набору scope, то есть к конкретным правам: чтение таблиц отдельно от их редактирования, отправка писем отдельно от чтения входящих.
Похожий принцип разграничения прав использую и в Telegram-ботах на aiogram: бот получает токен доступа только к тем данным, что нужны конкретному сценарию, только там обмен токена на разрешения делаю вручную через код, а в n8n за это отвечает встроенный OAuth2-flow, и вручную писать ничего не нужно.
Отдельный момент, если планируете собирать через Sheets или Gmail контактные данные клиентов - имена, телефоны, почту из заявок. Google Sheets и Gmail работают на серверах за пределами России, а для хранения персональных данных российских граждан закон обязывает использовать серверы в РФ (ст. 18 152-ФЗ). Для CRM-сценариев такие данные лучше вести в базе на своём сервере или в российском сервисе, а Google-сервисы в n8n подключать под задачи без ПДн: отчётность, внутренние таблицы, рассылки без персональных данных получателей в теле письма.
Создаю проект и включаю нужные API в Google Cloud Console
Иду на console.cloud.google.com и создаю новый проект - именно под интеграцию с n8n, отдельно от других сервисов, чтобы не путать квоты и scope между разными задачами. Привязывать платёжный аккаунт на этом шаге не нужно: Sheets, Drive и Gmail API работают в рамках бесплатной квоты, billing требуется только для платных Google Cloud сервисов вроде Vision API или BigQuery, которые к теме не относятся.
Дальше в разделе APIs & Services открываю Library и включаю API под каждый нужный сервис:
| Сервис в n8n | API в Google Cloud | Для чего нужен |
|---|---|---|
| Google Sheets | Google Sheets API | Чтение и запись строк, создание и обновление листов |
| Google Drive | Google Drive API | Загрузка и поиск файлов, работа с папками и правами доступа |
| Gmail | Gmail API | Отправка писем, чтение входящих, триггер на новое письмо |
Включение каждого API занимает около минуты. У всех трёх есть бесплатная квота, которой для типового workflow в n8n хватает с большим запасом: у Sheets API это 300 запросов в минуту на проект, у Gmail API - миллиард условных единиц квоты в сутки. Включать стоит только те API, которые реально используете - лишние scope на этапе consent screen только усложнят проверку приложения Google.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Настраиваю OAuth consent screen: тип приложения, scope и тестовые пользователи
В разделе OAuth consent screen выбираю тип External, если это не корпоративный Google Workspace с собственным доменом (тогда доступен Internal, и шаг с верификацией вообще не нужен). Заполняю название приложения, контактный email поддержки и email разработчика - без них Google не даст сохранить форму.
На шаге Scopes добавляю ровно те права, что использую в workflow: .../auth/spreadsheets для Sheets, .../auth/drive или его более узкие варианты для Drive, .../auth/gmail.send и при необходимости .../auth/gmail.readonly для Gmail. Scope для Gmail и Drive Google относит к категории sensitive, а некоторые - к restricted, и для боевого использования с чужими аккаунтами такие scope требуют прохождения верификации приложения - это отдельная процедура на несколько дней с проверкой видео-демонстрации работы приложения.
Для собственного аккаунта или аккаунтов клиента, которые вы сами добавляете, верификация не обязательна: приложение остаётся в статусе Testing, а нужные аккаунты добавляются в список Test users на той же странице. Важный нюанс, который часто ловит клиентов: для неверифицированного приложения с sensitive или restricted scope Google выдаёт refresh token со сроком жизни 7 дней, после чего n8n попросит пройти авторизацию заново. Для тестового контура это нормально, для продакшена - повод либо пройти верификацию, либо использовать только non-sensitive scope там, где это возможно.
Создаю OAuth Client ID и указываю redirect URI из n8n
В разделе Credentials нажимаю Create Credentials и выбираю OAuth client ID, тип приложения - Web application. Здесь важна точность: redirect URI нужно скопировать буквально из окна создания credential в n8n (нода Google Sheets, Google Drive или Gmail, вкладка Create New Credential), а не набрать по памяти. Для n8n Cloud это готовый адрес вида https://ваш-инстанс.app.n8n.cloud/rest/oauth2-credential/callback, для self-hosted - https://ваш-домен/rest/oauth2-credential/callback, где домен берётся из переменной окружения WEBHOOK_URL или N8N_HOST.
Google принимает redirect URI только по HTTPS, кроме localhost для разработки. Если n8n развёрнут на сервере без домена и сертификата, для теста подойдёт временный туннель через ngrok или Cloudflare Tunnel, но для рабочего инстанса домен и HTTPS нужны в любом случае - без этого возвращается ошибка redirect_uri_mismatch ещё до экрана выбора аккаунта. Если поднимать инстанс, домен и HTTPS настраивать самостоятельно некогда, такие проекты беру на настройку n8n под ключ вместе с самим сценарием автоматизации.
Client ID и Client Secret из этого шага копирую в поля credential в n8n, сохраняю и жму «Sign in with Google». Дальше стандартный экран выбора аккаунта Google и подтверждение запрошенных прав.
Проверяю доступ отдельно для Sheets, Drive и Gmail
В n8n у каждого сервиса свой тип credential - Google Sheets OAuth2 API, Google Drive OAuth2 API, Gmail OAuth2 API, даже если Client ID и Secret в Google Cloud общие для всех трёх. Через один и тот же OAuth-клиент можно создать три отдельные credential записи в n8n, каждая пройдёт свою авторизацию и запросит свой набор scope.
Проверяю по очереди: в ноде Google Sheets открываю список Spreadsheet и смотрю, подтягиваются ли таблицы аккаунта - если да, scope на чтение и запись выданы верно. В ноде Gmail отправляю тестовое письмо самому себе через операцию Send. В ноде Google Drive делаю List файлов в корневой папке.
На практике за этими нодами обычно стоит конкретный сценарий: заявки с сайта на Tilda падают в Google Таблицу через вебхук и ноду Sheets, оттуда n8n раскладывает их по менеджерам и шлёт уведомление на Gmail, а копии вложений сохраняет на Drive. Если тестовые операции выше проходят без ошибок авторизации, эти три ноды в связке уже готовы к работе в реальном сценарии.
Типичные ошибки при подключении Google-аккаунта к n8n
- Error 400: redirect_uri_mismatch - адрес в Google Cloud не совпадает с тем, что показывает n8n, вплоть до лишнего слэша на конце или http вместо https.
- «Google hasn’t verified this app» - экран блокирует вход, если аккаунт не добавлен в Test users при статусе приложения Testing.
- access_denied сразу после выбора аккаунта - та же причина: приложение в разработке, а используемый аккаунт не в списке тестовых.
- Токен перестаёт работать через неделю - для неверифицированного приложения с sensitive-scope это ожидаемое поведение Google, а не сбой n8n.
- Insufficient Permission после добавления новой ноды - например, к рабочему credential для Sheets позже добавили Gmail: старый токен не расширяет scope сам, credential нужно переавторизовать заново через кнопку Reconnect.
- Ошибка API not enabled - нужный API просто не включён в Google Cloud Console для этого проекта, решается за минуту в разделе Library.
Если ошибка не про конфигурацию, а про то, что сценарий в целом собирается медленно или падает на других шагах, разбор такого workflow обычно быстрее делать по логам конкретного execution в n8n, а не гадать по общему описанию проблемы.
Частые вопросы
Нужна ли верификация OAuth-приложения Google для продакшена в n8n
Если сценарий работает только с вашим собственным Google-аккаунтом или с аккаунтами клиентов, которые вы сами вручную добавили в Test users, верификация не обязательна - только помните про переавторизацию раз в 7 дней для sensitive-scope. Верификация нужна, если приложение массово подключает чужие аккаунты без вашего участия в настройке каждого из них.
Можно ли подключить несколько Google-аккаунтов в одном workflow n8n
Да, для каждого аккаунта создаётся отдельная credential запись того же типа, например Google Sheets OAuth2 API, и в ноде просто выбирается нужная запись. Client ID и Client Secret при этом можно использовать один и тот же на все credential в проекте.
Что делать, если n8n постоянно просит повторную авторизацию Google
Чаще всего это связано с 7‑дневным сроком жизни refresh token у неверифицированных приложений с sensitive или restricted scope. Решение - пройти верификацию приложения в Google Cloud Console либо перейти на scope без пометки sensitive там, где функциональность сценария это позволяет.
Какие права доступа реально нужны для Sheets, Drive и Gmail в n8n
Для чтения и записи в таблицы достаточно scope spreadsheets, для работы с файлами - drive или более узкий drive.file, если доступ нужен только к файлам, созданным самим приложением. Для Gmail на отправку хватает gmail.send, а для чтения и триггеров на новые письма нужен gmail.readonly или gmail.modify - запрашивайте только то, что реально используете в сценарии.