База клиентов на российском сервере: Prodamus.XL → n8n → Grist и нейросеть для работы с таблицами
Контакты школы лежат в CRM, а вести базу в Google Таблицах всё рискованнее. Данила Самарин за полчаса собрал на глазах у зала связку «CRM → n8n → Grist»: контакт сам попадает в таблицу на российском сервере, а нейросеть для работы с таблицами пишет формулы вместо тебя. Разбираем метод по шагам и добавляем то, что в докладе уложилось в одну минуту, — закон о персональных данных.
// Интеллект-карта статьи развернуть
🎧 Саундтрек статьи
По выступлению Данилы Самарина на NeyroSummit 13Редактор — Андрей Плешков
Опубликовано Проверено Чтение ≈ 16 мин
Сведения из доклада — на дату выступления, ; дополнения редакции — на дату проверки, 25 октября 2026
Выпуск № 13 «Рутина на автопилоте» · Вайбкодинг и автоматизации · 4 из 12
// Коротко
- Что получишь
- Работающая цепочка «событие в CRM → webhook → n8n → строка в Grist» с проверкой кода 200, боевым адресом и формулой, которую написала нейросеть, плюс список проверок по закону и безопасности до запуска.
- Задача
- Как автоматически переносить контакты из CRM школы в свою базу на сервере в России и не вести её вручную в Google Таблицах. Материал — владельцам онлайн-школ и малого бизнеса, кураторам и автоматизаторам, у которых база клиентов живёт в CRM и таблицах, а свой сервер поднять не страшно.
- Ограничения
- Это метод для тех, кто готов поставить n8n и Grist на свой сервер: установку доклад не показывал, в статье — только ссылки на документацию.
- Интерфейсы Prodamus.XL, n8n и Grist — на декабрь 2025. Названия узлов и переменных перед запуском сверь со справкой сервисов.
- Юридическая часть — наша сверка с текстом закона, а не слова спикера и не консультация юриста: схему сбора согласия и хранения данных проверь у специалиста.
- Тестовые данные можно показывать нейросети, реальные персональные данные клиентов — нет.
Зачем уходить из Google Таблиц и что на самом деле говорит закон
Нейросеть для работы с таблицами — только последний шаг этой истории. Начинается она с базы клиентов. Данила Самарин — инженер-проектировщик по вентиляции, автоматизацией занимается с 2019 года, ведёт онлайн-школу на Prodamus.XL. На NeyroSummit 13 он объяснил, зачем всё это затеял. По его словам, в мае закон о персональных данных «всех поднакрыл», штрафы выросли, а базу надо держать на серверах в России: «Google таблицы нельзя». В его CRM, по его же словам, 36 000 контактов, и перенести их вручную невозможно — нужна автоматизация.
Позицию спикера мы оставляем его: он выбрал решение, которое замыкает цепочку внутри России. А вот формулировку «нельзя» закон не подтверждает, поэтому разберём её сразу — подробности и ссылки в «Дополнении редакции» ниже.
Общую часть — согласия на рассылки, локализацию и права агента — мы уже разбирали в статье про автоворонку с ИИ-агентом; здесь не повторяем её, а показываем техническую сторону: как устроить хранение так, чтобы данные не уходили за границу.
n8n — что это и из чего состоит связка
Самарин собирает цепочку из трёх звеньев:
- CRM — у него Prodamus.XL. Она знает контакт и событие: добавили тег, оплатили, заполнили форму.
- Шлюз — n8n. Это сервис автоматизаций: принимает запрос от одной системы и пересылает данные другой. Что такое n8n в двух словах: конструктор цепочек из «узлов», где каждый узел — один шаг.
- База — Grist. Снаружи это таблица, похожая на Excel, а внутри — база данных.
Главная мысль доклада шире конкретных сервисов. Дословно: это вопрос «не Prodamus или Google таблицы», а любых сервисов, к которым можно подключиться по API: «вам нужно найти шлюз». n8n он выбрал потому, что его можно поставить на свой сервер в России — тогда «контакт пределы РФ не покидает».
Схема из доклада:
| Звено | Что делает | Где стоит у спикера |
|---|---|---|
| Prodamus.XL | хранит контакты, запускает сценарий по событию | серверы сервиса в России (по словам спикера) |
| n8n | принимает webhook, пишет строку в таблицу | свой сервер в России |
| Grist | хранит базу, считает формулы | свой сервер в России, отдельный от n8n |
Спикер сам не рекомендует ставить n8n и Grist на одну машину, хотя технически это возможно. Установку на сервер он в докладе не показывал: переехал к другому провайдеру за два дня до эфира и подключался «по IP». Как поднять self-hosted n8n и Grist, смотри в документации — ссылки в дополнении ниже.
Сценарий в Prodamus.XL и webhook в n8n: ждём код 200
Начинай с самой простой версии: имя, фамилия, почта. Остальные поля добавишь, когда цепочка заработает.
Сразу про границу метода. В демо новый контакт попадает в базу по событию (в примере — добавили тег). Уже накопленные 36 000 контактов этим сценарием не переносятся: для них нужна разовая выгрузка из CRM и загрузка файла в Grist — проверь возможности обоих сервисов по их справке. В демо каждое повторное срабатывание добавляло новую строку, а защиты от дублей спикер не показывал — в эту инструкцию она не входит. Если она нужна, передавай ID контакта (в Prodamus есть такая переменная) в отдельный столбец Grist: он позволит найти дубли; а проверку «такой ID уже есть» перед записью добавь в поток n8n сам, по документации узла Grist.
Шаг 1. Создай сценарий. В Prodamus.XL открой «Сценарии» и создай новый. Сценарий — это механика, на которой работают и чат-боты, и автоворонки. Выбери триггер — событие, которое его запускает. В демо — «добавлен тег контакта» (чуть позже к нему вернёмся).
Шаг 2. Добавь уведомление себе в Telegram. Это отладочный приём спикера: узел «уведомление» присылает тебе сообщение «контакт улетел» и подтверждает, что сценарий вообще сработал. Когда всё заработает, узел можно убрать.
Шаг 3. Добавь узел «Запустить вебхук». Webhook, по определению Самарина, — «команда из одной системы в другую, чтобы передать информацию». В узле:
- метод запроса — POST. В n8n в узле Webhook тоже выставь «HTTP Method → POST»: по умолчанию там стоит GET, и запрос Prodamus не примется;
- заголовки — спикер называет их обязательными и «стандартными»; для JSON это
Content-Type: application/json; - адрес — тот, который даст n8n (см. ниже);
- тело запроса — простой JSON: ключи со значениями-переменными из списка Prodamus. Переменная подставится сама.
Пример тела по демо Самарина (имена ключей — латиницей, переменные Prodamus подставь из выпадающего списка в узле, их там сотни — имя, фамилия, почта, ID контакта и так далее):
{
"email": "<переменная Prodamus: почта>",
"name": "<переменная Prodamus: имя>",
"surname": "<переменная Prodamus: фамилия>"
}
Шаг 4. Создай рабочий поток в n8n с узлом Webhook. Он выдаст адрес — его и вставляешь в узел Prodamus. Включи «слушать тестовое событие».
Шаг 5. Проверь связь. В Prodamus нажми «тестовый запрос». Нужен код ответа 200. В n8n сразу видно пришедшие данные — в демо это были «test first name», «test last name» и «example mail». Видишь их — первое звено работает.
Grist: документ, таблица, столбцы латиницей
Grist — выбор самого Самарина. По его словам, он три дня сравнивал решения «со всеми нейросетями»; сомневался между Grist и другой похожей табличной базой, которая «попроще, но возможностей меньше». Название второго сервиса спикер в эфире не назвал — не гадаем. Это его выбор, а не рекомендация журнала: альтернативы сравни по документации сам.
Что нужно знать о Grist, чтобы не запутаться в терминах:
- то, что в Excel называется «книгой», в Grist — документ, а «лист» — таблица;
- заголовки не заводятся отдельной строкой: имя столбца задаёшь прямо в столбце;
- имена столбцов — латиницей. Спикер объясняет: это переменные для формул на Python. Точнее, по справке Grist, нелатинские символы допустимы в видимом названии столбца, но не в его идентификаторе (ID), по которому формулы к нему обращаются. Проще всего сразу назвать столбцы латиницей;
- в ячейках можно писать код на Python. Единственное ограничение, о котором говорит спикер: прямо из формул нельзя запускать внешние приложения — поэтому он возвращает событие «в обратную сторону» через n8n.
Создай документ, переименуй таблицу, заведи три столбца: email, name, surname. Это и будет приёмник для данных из webhook.
Create rows и боевой режим: n8n на своём сервере
Шаг 6. Добавь в n8n узел Grist. Операция — «Create rows in a table» (есть и обычный HTTP-запрос: часть операций Самарин делает только им). Укажи адрес своего сервера Grist и ключ доступа (API key): в Grist он создаётся в «Account settings» → «Developer» (справка Grist). Дальше выбери документ и таблицу. Когда подключение заработает, n8n сам подтянет столбцы таблицы.
Шаг 7. Сопоставь поля. В «данные для отправки» перетащи каждую пришедшую переменную в свой столбец. Заполненное сопоставление для демо выглядит так:
| Столбец Grist | Что подставляем из webhook |
|---|---|
email |
поле email из тела запроса |
name |
поле name |
surname |
поле surname |
Шаг 8. Проверь. Нажми «протестировать». Если ошибок нет — в Grist появилась строка. Каждое новое нажатие — ещё одна строка. Если строка не появилась, открой запуск потока в n8n и найди шаг с ошибкой: чаще всего это неверный адрес или ключ Grist либо столбец, которого нет в таблице.
Шаг 9. Переведи поток в боевой режим. Самое частое место, где всё ломается:
- Сделай рабочий поток n8n активным и сохрани.
- В узле Webhook возьми production URL вместо test URL и скопируй.
- Вставь его в узел «Запустить вебхук» в Prodamus и сохрани.
Тестовый адрес работает только пока ты «слушаешь» событие в редакторе. Боевой — всегда, но данные в редакторе не показывает: итоги ищи во вкладке запусков потока.
Шаг 10. Запусти живой триггер. Добавь тег контакту в Prodamus — через секунды контакт появился в Grist. В демо Самарин делал это на своей личной карточке: тестируй на себе, а не на чужих клиентах. Дальше значения из ячеек можно брать в сообщения и в другие потоки n8n. Передавать их в зарубежную нейросеть вместе с персональными данными нельзя — об этом в разделе ниже.
Нейросеть для работы с таблицами: формулы Grist без знания Python
Нейросеть в докладе — помощник для формул. Самарин честно говорит: «я правда не знаю, как писать на Python». Задача: из столбцов name и surname получить полное имя, чтобы потом обращаться к клиенту по имени и фамилии. Формула в Grist — это Python, поэтому он открывает ИИ-ассистента, показывает таблицу и просит составить формулу.
Что получилось на эфире: первая формула не подошла, Grist ответил ошибкой. Помогла вторая просьба — «посмотри ошибку и исправь формулу». В итоге формула сработала, хотя ассистент «полез» не туда, а решение оказалось проще, чем хотел спикер. Вывод для метода: результат нейросети проверяют, а ошибку возвращают ей же.
Ассистент в демо — встроенный в браузер Comet; спикер сам остался недоволен тем, как он себя вёл. Подойдёт любая нейросеть, дело не в ней.
Здесь важная оговорка, которой в докладе нет. Ассистент в браузере «видит таблицу на экране» — а значит, всё, что в ней открыто, попадает в облачную модель. В демо данные были тестовые. С реальной базой клиентов так делать нельзя: это уже передача персональных данных за пределы России. Лучше описать нейросети столбцы словами и попросить формулу, не показывая ни одной настоящей строки. Шаблоны — ниже.
/formula [столбцы]Подставь своё 3 поля
Я работаю в Grist. Формулы в ячейках пишутся на Python, имена столбцов — переменные, написанные латиницей.
Мои столбцы (только технические ID, как они пишутся в формулах): [список ID, например email, name, surname].
Пример вымышленной строки: [например name = Анна, surname = Иванова].
Нужна формула для нового столбца: [что получить, например полное имя из name и surname через пробел].
Дай одну формулу без пояснений и скажи, что она вернёт для примера выше. Данных клиентов у меня в этом чате нет, и я их не отправлю.Составлено редакцией по приёму спикера: ассистенту показывают таблицу и просят формулу
Ожидаемый результат для демо (пример редакции): в Grist к столбцу обращаются через $, поэтому формула полного имени выглядит как $name + " " + $surname и для строки «Анна / Иванова» вернёт «Анна Иванова». Чтобы вставить её, выбери столбец, нажми «Set formula» (как в демо) и вставь формулу; сравни результат с вымышленной строкой. Если нейросеть дала другую запись — это нормально, важно, чтобы итог совпал.
Если формула дала ошибку, повтори запрос спикера почти дословно:
/formulafix [ошибка]Подставь своё 1 поле
Формула, которую ты дал, в Grist выдала ошибку: [текст ошибки из Grist].
Посмотри ошибку и исправь формулу. Ответ — одна исправленная формула и короткое объяснение, что было не так.Реконструкция по методологии спикера: он просил «посмотри ошибку и исправь формулу»
Согласие на обработку данных: что показал спикер и что проверить
В конце доклада Самарин отвечает на вопрос, который сам задал в названии, — «как без штрафов». Он напоминает: нужна политика конфиденциальности и разрешение на обработку данных. Пример из эфира: человек заходит в Telegram-бота, получает сообщение «Согласен?» со ссылками на политики, нажимает кнопку «Согласен» — запускается сценарий, запись остаётся в логах Prodamus. Бота можно настроить так, чтобы это сообщение приходило первым. Спикер уверен, что так «всё по закону».
Механику мы оставляем — «бот → кнопка → запись в базу». А вот вывод «всё по закону» не повторяем: к форме согласия с 1 сентября 2025 года есть отдельное требование.
Минимум, который ты можешь сделать сам: собирай только нужные поля (в демо это имя, фамилия и почта — разумный образец), не клади в базу лишнего и заведи в таблице столбец «дата согласия».
Что проверить до запуска
Самарин в эфире говорит о защите вскользь, но для базы клиентов это не мелочь. Вот что стоит проверить, прежде чем отдать цепочке реальных людей.
Защита webhook. Адрес n8n принимает запросы от любого, кто его знает. В демо у запроса не было ни ключа, ни подписи, и спикер называл это «стандартной историей». Боевой адрес нельзя публиковать. У узла Webhook в n8n есть встроенная проверка: Basic auth, заголовок-ключ (Header auth) или JWT — включи любую и добавь тот же заголовок в узел «Запустить вебхук» в Prodamus.
Права и доступ. Grist на своём сервере по умолчанию доступен только владельцу установки; чтобы пускать других, настрой вход. Доступ к базе открывай только тем, кому он нужен.
Копии и сервер. База клиентов — твоя ответственность: бэкапы, шифрование диска, закрытые порты. Сервер должен быть в России; провайдера в докладе спикер не назвал, и мы не называем.
Уведомления. Если ты собираешь данные клиентов, у тебя могут быть обязанности перед Роскомнадзором (уведомление об обработке, об утечках). Они зависят от твоей ситуации — спроси юриста или сверься с текстом закона.
Не нейросети с реальными данными. Повторим: показывать нейросети структуру столбцов можно, настоящих клиентов — нет.
Как применить метод к другому сервису
Из доклада можно унести главное: цепочка не про Prodamus. Любой сервис, у которого есть открытый API или webhook, можно связать с таблицей. Самарин приводит пример из своей отрасли — выгрузки из программ для проектировщиков в таблицу с последующей обработкой. Рецепт тот же: событие в одном сервисе → webhook → n8n → запись в базу → дальше, например, нейросеть.
Если из таблицы нужно запустить что-то внешнее, спикер возвращает событие в n8n — запускать приложения из формул Grist не умеет. Сообщать внешнему адресу о новых строках Grist при этом может сам: у него есть webhooks, они отправляют изменённые строки на заданный адрес. Как n8n работает с Telegram-ботом и другими сервисами, показано в статье про ИИ-фотосессию для маркетплейсов, а как управлять рассылками школы на Prodamus.XL из Claude Code — в статье про рассылки школы через ИИ-агента.
От себя спикер оставил мысль, которую мы приводим как его позицию, а не вывод журнала. Он не стал бросать проектирование ради «чистой автоматизации», а связал одно с другим: курсы по нейросетям для проектировщиков, по его словам, вызвали больший отклик, чем всё, что он делал за три года онлайн-академии. Его совет: нейросети усиливают экспертность, и думать стоит в эту сторону.
С чего начать сегодня
- Реши, что хранишьТри поля: почта, имя, фамилия. Остальное добавишь, когда цепочка заработает. Лишних данных в базе не держи.
- Поставь n8n и Grist на сервер в РоссииПо документации обоих сервисов; на разных машинах — как советует спикер. Закрой порты и включи вход в Grist.
- Собери webhook и дождись кода 200Сценарий в CRM → узел «Запустить вебхук» с JSON → узел Webhook в n8n. Тестовый запрос, код 200, данные в n8n.
- Запиши в Grist и переведи поток в боевой режимУзел Grist «Create rows», столбцы латиницей, потом production URL и активный поток. Проверь на своей карточке.
- Закрой webhook и проверь согласиеВключи аутентификацию в узле Webhook и разберись, как у тебя оформлено отдельное согласие и где записана дата.
- Формулы — с нейросетью, но без клиентовОпиши столбцы словами, подставь вымышленную строку, проверь формулу, а ошибку верни нейросети.
Вопросы и ответы
Q1Зачем уходить из Google Таблиц и что на самом деле требует закон о локализации?Кратко: Закон требует вести первичную базу персональных данных граждан РФ в России; Google Таблицы как продукт никто не запрещал, но хранить в них базу клиентов рискованно.
Самарин в докладе говорит, что Google Таблицы «нельзя». Точнее так: при сборе персональных данных граждан РФ их запись и хранение должны идти в базах на территории России (ч. 5 ст. 18 закона № 152-ФЗ), а штраф за нарушение для юрлица — от 1 до 6 млн рублей, при повторе — от 6 до 18 млн (ч. 8 и 9 ст. 13.11 КоАП). Подробнее и со ссылками — в «Дополнении редакции» в начале статьи.
Q2Из чего состоит связка: CRM, n8n и Grist?Кратко: CRM даёт событие, n8n принимает webhook и пересылает данные, Grist хранит их как таблицу-базу; n8n и Grist стоят на твоём сервере в России.
Три звена: Prodamus.XL (событие — например, добавлен тег), n8n как шлюз и Grist как база. Спикер ставил n8n и Grist на отдельные машины в России, так что контакт «пределы России не покидает». Принцип подходит к любому сервису с API.
Q3Как настроить webhook из Prodamus.XL в n8n и проверить код 200?Кратко: Создай поток с узлом Webhook в n8n, вставь его адрес в узел «Запустить вебхук» (POST, JSON), нажми «слушать» в n8n и «тестовый запрос» в Prodamus — ждёшь код 200.
В Prodamus.XL: «Сценарии» → узел «Запустить вебхук», метод POST, заголовки, тело — JSON с ключами email, name, surname и переменными Prodamus. В n8n: узел Webhook, «слушать тестовое событие». Код ответа 200 и данные в n8n означают, что связь есть. Дальше — узел Grist.
Q4Как записывать контакты в Grist узлом Create rows?Кратко: В n8n добавь узел Grist с операцией «Create rows in a table», укажи документ и ID таблицы и сопоставь поля webhook со столбцами Grist, названными латиницей.
Идентификаторы столбцов в Grist — латиницей: по ним обращаются формулы. После подключения n8n подтянет их сам, и ты перетаскиваешь в каждый нужную переменную из webhook. Каждый тест добавляет новую строку, поэтому для боевой базы продумай защиту от дублей: спикер её не показывал.
Q5Чем тестовый адрес webhook отличается от боевого?Кратко: Тестовый работает, пока ты слушаешь событие в редакторе n8n, боевой — всегда, когда поток опубликован; в Prodamus нужно вставить боевой.
Если оставить в Prodamus тестовый адрес, всё сработает на демо, а потом перестанет: тестовый адрес живёт, только пока ты «слушаешь» событие. Сделай поток активным, возьми production URL и вставь его в узел «Запустить вебхук».
Q6Как нейросеть помогает писать формулы в Grist и что ей нельзя показывать?Кратко: Опиши ей названия столбцов и вымышленную строку и попроси формулу на Python; реальные данные клиентов и открытую таблицу с ними показывать нельзя.
В докладе ассистент в браузере писал формулу для столбца «полное имя»; первая версия дала ошибку, вторая — после просьбы «посмотри ошибку и исправь» — заработала. С реальными клиентами так делать нельзя: данные уйдут в облачную модель. Дай нейросети структуру столбцов и вымышленный пример.
Q7Что проверить до запуска: защита webhook, права доступа, уведомление РКН?Кратко: Закрой webhook аутентификацией, проверь вход в Grist и бэкапы, оформи отдельное согласие и узнай у юриста, нужно ли уведомление Роскомнадзора.
В демо адрес webhook был без защиты — в n8n включается Basic, Header или JWT-аутентификация. Grist после установки доступен только владельцу; пускай других осознанно. Согласие с 01.09.2025 — отдельным документом, доказывать его получение должен оператор. Нужно ли уведомление РКН, зависит от твоего случая — это вопрос к юристу.
♥ Промптов в статье: 2 — забирай на полку у каждого или открой все промпты статьи в библиотеке →
// Полезно? Сохрани — так я вижу, что писать дальше. Или отправь коллеге
Сохранённое — на полке, ссылка в шапке сайта.
// Дальше в выпуске № 13 · 5 из 12
Вайбкодинг и автоматизации · Алексей УльяновКак создать своего ИИ-агента в n8n с памятью: команда «запомни» вместо промпта на пять страницКак создать своего ИИ-агента в n8n: Telegram, Supabase и команда «запомни», которая пишет правила в векторную базу вместо длинного промпта. Схема, SQL, проверки.Читать дальше →← Можно ли заработать на нейросетях, если курсы пройдены, а денег нет: четыре ловушкиВесь выпуск № 13 →
// Прочитать с ИИ
Скопируй промпт и вставь в свой ассистент — ChatGPT, Claude, GigaChat, Алису, DeepSeek. Он откроет материал по ссылке, перескажет суть и адаптирует приёмы под твою задачу.
Что в промпте
Разбери материал журнала «Нейрохакер» «База клиентов на российском сервере: Prodamus.XL → n8n → Grist и нейросеть для работы с таблицами»: https://neyrohacker.com/baza-klientov-prodamus-n8n-grist-rossiyskiy-server/
1. Перескажи главную мысль в трёх предложениях.
2. Выпиши приёмы, которые можно применить сразу, — по шагам.
3. Задай мне три вопроса о моей задаче и адаптируй метод под мои ответы.// Обсудить
Есть вопрос к спикеру или по материалу? Задай его в открытом NeyroCommunity — там обсуждаем доклады саммита, отвечаем на вопросы к спикерам и разбираем материалы журнала.
9 000+ участников в чате сообщества
- вопросы спикерам саммита
- обсуждение докладов и материалов журнала
- общаться и помогать другим
бесплатно · откроется бот в Telegram, он пришлёт приглашение в чат
// Нейрохакер+
Готовые скиллы и нейрогайды под такие задачи
Промпты и скиллы, которые запускаются сразу, и нейрогайды по докладам саммита
Оформить подписку1 990 ₽, далее 990 ₽/месБиблиотека скиллов и нейрогайдов регулярно пополняется.
Подписка с автопродлением. Отменить — в один клик в личном кабинете, без объяснений.
Подписка уже есть? Войти в кабинет →


