Home · Blog · Chatbot and Google Sheets: what you can connect and how
Chatbot and Google Sheets: what you can connect and how
A Google Sheet is the most common “CRM” of a small business: it holds the price list, requests, the customer list and the schedule. That is why the question “can the bot work with a spreadsheet?” comes up in almost every conversation about launching one. The short honest answer for CHBT: there is no “connect a Google account” button, but there are four working connections — one built in, two through ordinary flow tools and one manual. Here is each of them: what it does, how it is set up and where its limit is.
Four directions — and which to choose
| Task | How in CHBT | Middleman needed |
|---|---|---|
| Products and prices from a sheet into the bot | Catalog: a link to a sheet published as CSV | No |
| Requests from the bot as a row in a sheet | Action → HTTP request | Apps Script or Make, n8n, Albato |
| The customer list into a sheet | Contacts → CSV export | No, manually |
| The bot replies with data from a sheet | HTTP request with the response saved to a variable | Make, n8n or your own script |
There is no Google account connection in CHBT: the bot does not read or change a sheet on its own. Everything below works through a link to the sheet, through your script or through an automation service — and is described honestly together with its limits.
Products from a sheet into the bot’s catalog
If the price list is kept in a Google Sheet, it can become the catalog source. The catalog can read CSV by link, and Google can serve a sheet as CSV.
- In the sheet: File → Share → Publish to the web. Choose the sheet you need and the CSV format, and copy the link.
- In CHBT: Marketplaces → Online store. In Store platform choose “Other platform or your own feed”.
- Paste the link into Link to product feed and click Connect a store. The format is detected from the content.
- Open the catalog: new products arrive as drafts. Check them and publish the ones you need.
Google serves a published sheet through a redirect — CHBT follows up to three redirects in a row, which is enough. If the connection failed, open the link in a browser without signing in to Google: a file should download, not a sign-in page.
What the product sheet should look like
A CSV by link is read by the same rules as a catalog file:
- the first row is headers, the column order does not matter;
- the “article” (SKU) column is required — by it a product is updated rather than duplicated; a row without a SKU is skipped;
- headers can be in Russian or English: “name”, “price”, “availability”, “stock”, “category”, “link”, “size”, “colour”;
- the same SKU in several rows means variants of one product, for example sizes;
- an empty price or stock means “unknown”, not zero.
Photos from the sheet will not come through: there is no column for images, and a photo link becomes an ordinary attribute. More about the format — in the article on uploading products from CSV.
How often the bot sees changes in the sheet
The catalog re-reads the feed on its own when the data is more than 6 hours old. If you changed a price in the sheet and the bot should quote the new one right now, click Update now on the online store card, no more than once every 2 minutes.
A product you deleted from the sheet is not unpublished automatically: an interrupted download should not hide half the catalog. If the product is gone, move it with the To draft button.
The catalog is shown to the shopper by the AI sales assistant: it picks a product based on the question in the chat and sends a card. The AI sales assistant is available from the Basic plan, while the catalog itself can be built on Free — in advance.
Requests from the bot into a sheet
The opposite direction is a row in the sheet for every request. For this, a flow has an Action → HTTP request after the step where the name and phone are collected. CHBT sends JSON to your address: the contact with name, phone, email and tags, the flow variables, the customer’s last text and the channel.
Two kinds of middlemen can accept this JSON and append a row:
- Google Apps Script — a small script inside the sheet, published as a web app. It is free, but with a quirk: Google answers a POST with a redirect, and CHBT does not follow redirects. The row is still added, but the log will show code 302, and the script’s reply will not come back to the bot.
- Make, n8n or Albato — a two-step scenario: “receive a webhook” and “add a row to Google Sheets”. It responds with a normal 200, and the reply can be returned to the bot.
The script code and step-by-step setup — in the article on HTTP requests from a chatbot.
Which columns to make for requests
A convenient structure for a “Requests” sheet that the HTTP request JSON covers:
| Column | Where it comes from |
|---|---|
| Date | the time the script or service received the request |
| Name, phone, email | contact fields filled in by Collect data |
| What the customer wants | the flow variable where the button choice was saved |
| Last message | the customer’s text |
| Channel | telegram, max, vk or web |
| Tags | the contact’s tags — source, interest |
If managers work in the sheet, add your own columns on the right: “Status”, “Owner”, “Comment”. The bot does not touch them; the script appends rows only to its own columns.
Exporting contacts into a sheet
The simplest way to get your customer base into a sheet is to export it. In Contacts click CSV export: the Download all contacts in CSV button gives the whole base, and with a tag filter — Download contacts with this tag as CSV.
The file contains the name, email, phone, channel, id in the channel, tags and the date the contact appeared, plus survey and questionnaire answers as separate columns. Open the sheet and choose File → Import to load it into a new sheet.
This is a manual export, not a sync: the sheet will not update itself when new people come into the bot. For a weekly report that is enough. If you need a row for every new customer right away, use the HTTP request from the previous section.
The bot replies with data from a sheet
A common task: a customer asks about availability, their booking or a price, and the answer is in a sheet. The bot itself will not read a cell, but it can ask a middleman:
- In the flow, collect what is needed for the lookup — an order number or a SKU — into a variable.
- Action → HTTP request to a Make or n8n webhook. In Save to variable specify where to save the reply, for example
answer. - The Make scenario finds the row in the sheet and replies with a ready phrase: “Order 1042: handed over for delivery”.
- The next step is a Message with the text
{{answer}}.
Limits: the reply is awaited for up to 15 seconds, and the whole response body goes into the variable, up to 10 KB — you cannot pick a separate field out of JSON. So have the middleman reply with plain text. In the test chat the request is not sent; test from the messenger.
An event log in a sheet
If you need a log sheet of all conversations — who wrote, when they were handed over to an operator, when they were closed — use Event subscriptions in the integrations section. CHBT sends conversation events to your service’s address: a message from the customer, a reply from the bot or an operator, a conversation start, a handover to a person, closing, a new contact and a request.
The automation service receives the event and adds a row to the sheet. Keep in mind: the phone, email and form answers are present only in the Request event — when the customer first left a phone or email. Other events carry no contact details; if you need them in every row, send them with an HTTP request from the flow.
Example: a bouquet studio on a single sheet
A small studio keeps everything in one Google Sheet and connects the bot like this:
- The “Price list” sheet — SKU, name, category, price, availability. The sheet is published as CSV and connected to the catalog. In the morning the florist updates availability, clicks Update now — and the AI sales assistant already offers only what is in stock.
- The “Requests” sheet — the “Bouquet order” flow collects the occasion, budget, phone and date, sets the
bouquet-ordertag and sends an HTTP request to Make, which appends a row. - The “Customers” sheet — once a month the administrator exports Contacts with the
bouquet-ordertag and checks who has not ordered for a while, to invite them with a broadcast before a holiday.
One sheet, three connections and not a single line of code, apart from a two-step Make scenario.
When a spreadsheet is no longer enough
A spreadsheet is fine while there are dozens of requests. When there are hundreds and several managers are at work, rows get lost and the question “who took this customer” comes up. CHBT has a built-in deals kanban: Action → CRM deal puts a request at the right stage straight from the flow, and the conversation with the customer is right next to it, in Conversations.
You can also combine them: the deal goes into the CHBT CRM, a copy of the row into the sheet for the manager’s report. If the team already works in amoCRM, no middleman is needed: the integrations section has a ready-made amoCRM connection — a request left in Collect data becomes a deal with the name, phone and email on its own. How to choose between the built-in CRM and an external one — in the article on leads from the bot into a CRM.
Common mistakes
- A “Share” link instead of “Publish”. A regular link to the sheet opens the Google editor, not CSV — the catalog cannot parse it.
- No SKU column. Rows without a SKU are skipped entirely.
- Expecting the Apps Script reply in the bot. Because of the Google redirect it will not come back — for a reply in the conversation you need Make, n8n or Albato.
- Testing the request in the test chat. The HTTP request is not executed there, and the row will not appear.
- Merged cells and subheadings in the price list. CSV expects a flat table: one row — one product or variant.
HTTP request from a chatbotProduct catalogChatbot integrationsLeads from a bot in CRM