How to Build an AI Document Chatbot with n8n, Google Drive and Supabase

You’ve got dozens of PDFs, reports, and spreadsheets scattered across Google Drive. Finding that one specific number or policy buried on page 47? That’s where your afternoon goes.

What if your documents could talk? Imagine asking your chatbot “What was our Q3 revenue projection?” and getting an instant, accurate answer pulled from your actual files—not a hallucination. That’s the power of RAG (Retrieval Augmented Generation).

In this guide, we’re building exactly that: an AI document chatbot that automatically processes everything you upload to Google Drive, makes it searchable, and lets you chat with it using natural language. We’ll use n8n to orchestrate the whole pipeline, Google Drive for storage, Google Gemini to enhance your content, OpenAI for embeddings and chat, and Supabase as our vector database.

By the end, you’ll have a workflow that doesn’t just read documents—it understands them contextually and retrieves the most relevant information on demand.

What You’ll Build

This workflow has two halves that work together seamlessly:

The Document Processing Pipeline watches your Google Drive folder, automatically grabs new files (PDFs, CSVs, Google Docs), extracts the text, enhances it with AI smarts, splits it into searchable chunks, generates vector embeddings, and stores everything in a Supabase database.

The Chat Interface is where users interact. When someone sends a message, an AI agent searches your vector database for the most relevant chunks, reads them in context, and generates an intelligent answer grounded in your actual documents.

The magic here is that the chatbot doesn’t just guess—it retrieves and reasons over your real data. No more “I don’t have that information.” Your documents become your knowledge base.

How It Works: High-Level Architecture

┌─────────────────────────────────────────────────────────────────┐
│                    Document Processing Pipeline                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                   │
│  Google Drive      Extract      AI Enhancement    Vector Store   │
│   Folder          Text               │              (Supabase)   │
│      │               │         Generate:               │         │
│      │               │         • Metadata       • Embeddings     │
│      │               │         • Context        • Chunks         │
│      └──────────────┬┴────────────┬────────────────┤             │
│                     │             │                │             │
│            (Monitor every minute)                  │             │
│                                                    └─────────┐   │
│                                                              │   │
├──────────────────────────────────────────────────────────────┼──┤
│                   Chat Interface                             │  │
├──────────────────────────────────────────────────────────────┼──┤
│                                                              │  │
│  User Message     Search      Retrieve      Generate        │  │
│      │            Vector DB   Context       Answer           │  │
│      │               │            │            │             │  │
│      └───────────────┼────────────┼────────────┤             │  │
│                      │            │            │             │  │
│            (Powered by OpenAI GPT-4o-mini) ←──┘             │  │
│                                               │             │  │
│                            Sourced from Supabase────────────┘  │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘

What You’ll Need

Before we start building, gather these:

  • n8n account — cloud or self-hosted, either works
  • Google account — for Google Drive and Google Gemini API access
  • OpenAI API key — for embeddings and the GPT-4o-mini chat model
  • Supabase account — free tier is fine; you’ll create a PostgreSQL database with the pgvector extension
  • A Google Drive folder — dedicated to documents you want indexed
  • Sample documents — PDFs, CSVs, or Google Docs to test with

Estimated setup time: 15–20 minutes. The workflow itself is provided as a template you can import directly.

Part 1: Document Processing Pipeline

This is the intake system. Every minute, it checks for new files and prepares them for retrieval.

1 Google Drive Trigger

The entry point. Configure this node to:

  • Connect your Google account via OAuth2
  • Select the Google Drive folder where you’ll upload documents
  • Set the poll frequency to every 1 minute (or adjust to your needs)

This trigger fires whenever n8n detects new or modified files in that folder. You can filter by file type if you want (e.g., only PDFs and CSVs).

2 Loop Over Items

Since Google Drive might return multiple files, we process them one by one. This node iterates through the list so each file gets its own execution path through the pipeline.

3 Set File ID

A simple expression node that extracts and stores the Google Drive file ID. We’ll use this later to track which document a chunk came from. Use an expression like: $json.fileId

4 Download File

Downloads the actual file from Google Drive. Important: Google Docs are automatically converted to PDF during download, so you get consistent text extraction across all document types.

5 Switch Node (MIME Type Router)

Routes the file to the right text extraction method based on its type:

  • If MIME type is application/pdf → send to PDF extractor
  • If MIME type is text/csv → send to CSV extractor

This branching logic ensures each file type is handled with the right tool.

6 Extract from PDF / Extract from CSV

Two parallel nodes (one for each file type) that pull raw text:

  • PDF extraction: Use n8n’s built-in PDF node or a code snippet to extract text, preserving paragraph structure where possible
  • CSV extraction: Parse the CSV, convert rows to readable text (e.g., “Row 1: Name=Jennifer Chen, Department=Marketing, Salary=92000”)

Both outputs feed into the next stage as plain text.

💡

Rough PDFs or image-heavy documents? Consider adding an OCR step here using services like Google Vision API. It adds latency but ensures no text is missed. Check our template marketplace for OCR-enhanced variants.

7 Document Data (JSON Wrapper)

Wraps the extracted text in a structured JSON object:

{
  "text": "[extracted text here]",
  "file_id": "[Google Drive ID]",
  "file_name": "[original filename]",
  "mime_type": "[pdf or csv]"
}

This structure carries metadata through the pipeline, so we always know where each chunk originated.

8 Create Metadata (Google Gemini)

Before we split text into chunks, we generate high-level metadata using Google Gemini. Send the full document text to Gemini with a prompt like:

“Read this document and provide: (1) A concise title (5–10 words), (2) A brief description (1–2 sentences) explaining what this document contains and who should read it. Output as JSON: {title, description}”

Gemini returns structured metadata that will be attached to every chunk from this document. This is crucial: when the chatbot retrieves chunks, it shows the user which document they came from and why it’s relevant.

9 Split Into Chunks (Code Node)

Raw documents are too large to process as embeddings. This node intelligently splits text into 1000-character chunks with 200-character overlap, respecting sentence and paragraph boundaries:

// Simplified chunking logic (pseudocode)
const chunkSize = 1000;
const overlapSize = 200;
let chunks = [];
let currentChunk = '';

// Split on sentences/paragraphs first
const sentences = text.split(/(?<=[.!?])\s+/);

for (let sentence of sentences) {
  if ((currentChunk + sentence).length > chunkSize) {
    chunks.push(currentChunk.trim());
    currentChunk = currentChunk.slice(-overlapSize) + sentence;
  } else {
    currentChunk += ' ' + sentence;
  }
}
if (currentChunk) chunks.push(currentChunk.trim());

return chunks;

This ensures that no information is lost at chunk boundaries, and related concepts stay together.

10 Split Out

Converts the chunks array into separate items so each chunk flows through its own execution. If a document produces 50 chunks, this creates 50 parallel execution paths.

11 Limit (Optional)

A safety valve: limits processing to the first 20 chunks per document. Set this based on your OpenAI quota and cost tolerance. You can remove it for unlimited processing.

12 Process Context (Google Gemini)

Each chunk is sent to Gemini for contextual enhancement. Prompt:

“Here is an excerpt from a larger document. Enhance this excerpt with additional context that would help someone retrieve and understand it later. Add brief background, define jargon, and clarify pronouns. Keep it to 1–2 sentences. Return the enhanced excerpt.”

Example: If a chunk says “Q3 revenue up 15%”, Gemini might enhance it to “Q3 2025 revenue increased 15% compared to Q2 2025, reaching $4.2M.” Now when the chatbot retrieves this chunk for a question like “What was our revenue trend?”, it has full context.

13 Summarize (Concatenate)

Combines the enhanced chunks back into a single string, separated by a delimiter (e.g., \n---\n). This serves as the final text to embed. The structure is:

[Enhanced Chunk 1]
---
[Enhanced Chunk 2]
---
[Enhanced Chunk 3]

14 Add Data to Supabase Vector Store

The final step: store everything in Supabase. This node does three things:

  1. Generates OpenAI embeddings for each chunk (using text-embedding-3-small model)
  2. Prepares metadata (file_id, title, description, chunk index)
  3. Stores in Supabase with the embedding vector, content, and metadata

The node uses Supabase’s built-in vector support. Each row in your documents table looks like:

  • content: The enhanced chunk text
  • embedding: The 1536-dimensional vector from OpenAI
  • metadata: JSON with file_id, title, description, chunk_index

Once this completes, your document is fully indexed and searchable.

Part 2: Chat Interface

Now users can ask questions and get answers grounded in their documents.

1 When Chat Message Received

This is n8n’s chat trigger. Users send messages through the n8n UI (or via webhook if you embed it elsewhere), and each message fires this trigger. The input includes the user’s question and conversation history.

2 AI Agent (OpenAI)

The brain of the system. Configure an n8n AI Agent node with:

Model: GPT-4o-mini (fast, cost-effective, smart enough for RAG retrieval)

System Prompt:

“You are an internal company knowledge assistant. Your job is to answer questions about company documents. Always search the Vector Database first using the provided tool. Retrieve the most relevant document excerpts. Ground your answer in what you found. Never guess or make up information. If you cannot find relevant information, say so honestly.”

Memory: Enable Simple Memory with a 10-message limit so the chatbot remembers recent context within a conversation.

Tools: Attach the Supabase Vector Store as a tool. This gives the agent the ability to search for relevant chunks when answering a question.

When the user asks “What’s our return policy?”, the agent:

  1. Takes the question
  2. Calls the Vector Store tool with an embedding of the question
  3. Retrieves the top 20 most similar chunks
  4. Reads those chunks
  5. Generates a coherent answer citing the relevant sections

This is RAG in action: retrieval + augmented generation.

The Data Structure: Supabase Setup

Your vector database needs the right schema. In Supabase, run this SQL:

-- Enable pgvector extension
CREATE EXTENSION IF NOT EXISTS vector;

-- Create documents table
CREATE TABLE public.documents (
  id bigserial PRIMARY KEY,
  content text NOT NULL,
  metadata jsonb,
  embedding vector(1536),
  created_at timestamp with time zone DEFAULT now()
);

-- Create an index for faster vector searches
CREATE INDEX documents_embedding_idx
  ON documents
  USING ivfflat (embedding vector_cosine_ops)
  WITH (lists = 100);

-- Create an index on metadata for filtering
CREATE INDEX documents_metadata_idx
  ON documents
  USING GIN (metadata);

Explanation:

  • content: The chunk text itself
  • metadata: JSONB storing file_id, title, description, chunk_index
  • embedding: The 1536-dimensional vector from OpenAI’s embedding model
  • The ivfflat index speeds up similarity searches across millions of chunks

Full System Flow Diagram

START
  │
  ├─► Google Drive Trigger (every 1 min)
  │     │
  │     ├─► Loop Over Items
  │     │     │
  │     │     ├─► Extract File ID
  │     │     │
  │     │     ├─► Download File
  │     │     │
  │     │     ├─► Switch by MIME Type
  │     │     │     │
  │     │     │     ├─► PDF Branch
  │     │     │     │     ├─► Extract PDF Text
  │     │     │     │     └─► Wrap in JSON
  │     │     │     │
  │     │     │     └─► CSV Branch
  │     │     │           ├─► Parse CSV
  │     │     │           └─► Wrap in JSON
  │     │     │
  │     │     ├─► Create Metadata (Gemini)
  │     │     │     └─► Store title + description
  │     │     │
  │     │     ├─► Split into 1000-char Chunks
  │     │     │
  │     │     ├─► Split Out (iterate chunks)
  │     │     │
  │     │     ├─► Limit to 20 chunks
  │     │     │
  │     │     ├─► Process Context (Gemini)
  │     │     │     └─► Enhance each chunk
  │     │     │
  │     │     ├─► Summarize (concatenate)
  │     │     │
  │     │     └─► Add to Supabase
  │     │           ├─► Generate Embedding (OpenAI)
  │     │           └─► Store in Vector DB
  │     │
  │     └─► [Document Indexed & Searchable]
  │
  └─► Chat Interface
        │
        ├─► When Chat Message Received
        │     │
        │     └─► AI Agent (GPT-4o-mini)
        │           │
        │           ├─► Embed Question (OpenAI)
        │           │
        │           ├─► Search Supabase Vector Store
        │           │     └─► Retrieve top 20 chunks
        │           │
        │           └─► Generate Answer
        │                 └─► Return to User
        │
        └─► [Chat Interface Ready]

Testing Your Workflow

Once deployed, test it end-to-end:

  1. Upload a test document to your Google Drive folder. A PDF with company policies works great. You should see the Google Drive trigger fire within 1 minute.
  2. Monitor the workflow execution in n8n. Watch the logs as your document flows through extraction, chunking, enhancement, and embedding.
  3. Verify in Supabase. Query your documents table: SELECT COUNT(*) FROM documents; You should see rows for each chunk.
  4. Test the chat interface. Click the chat icon in n8n and ask a question about your document. For example: “What is the vacation policy?” The chatbot should retrieve relevant chunks and answer from your actual document.
  5. Refine as needed. If answers aren’t specific enough, adjust the context enhancement prompt in Step 12. If too many irrelevant chunks appear, experiment with the chunk size or overlap in Step 9.

A successful test: You ask a specific question (like “Who is responsible for budget approvals?”) and the chatbot cites the exact section of the document it found the answer in.

Frequently Asked Questions

How long does it take to index a new document?

Depends on document size. A typical 20-page PDF takes 30–90 seconds: extraction (5s), enhancement (20–60s), embedding (5–30s), and Supabase storage (5s). Large datasets benefit from batching and optimizing your chunk size.

What happens if I ask the chatbot about something not in my documents?

The AI agent is configured to search the Vector Database first. If no relevant chunks are retrieved, it will respond honestly: “I couldn’t find information about that in the available documents.” No hallucinations—that’s the RAG advantage.

Can I use a different LLM instead of OpenAI?

Yes. n8n supports Anthropic Claude, Google Gemini, and others. For embeddings, you’d need a provider with embedding endpoints (OpenAI, Cohere, or HuggingFace). Swap the model and API keys in the configuration. The workflow structure stays the same.

What’s the cost to run this workflow?

Rough estimates per 100 documents: Google Drive API (~$0, free tier is generous), Google Gemini API (metadata + context: ~$2–5), OpenAI embeddings (~$0.02 per document), GPT-4o-mini chat (~$0.015 per conversation, highly variable), Supabase hosting ($0 on free tier, $25/mo for production). Your biggest variable is chat usage and document volume.

Can I delete or update documents in the vector store?

Absolutely. Add a separate n8n workflow with a Supabase trigger that listens for deleted files in Google Drive. When a file is deleted, remove all chunks with matching file_id from the vector store. Same for updates: re-process the document and insert fresh chunks, optionally deleting old ones.

How many documents can the system handle?

Supabase’s free tier supports millions of vectors. The bottleneck is API rate limits: Google’s quota (varies), OpenAI embeddings (up to 3,500 requests/min on paid accounts), and Gemini rate limits. For enterprise scale, contact your API providers for higher quotas.

What’s Next?

You now have a functioning RAG chatbot. Here are natural next steps:

  • Deploy the chat interface publicly: Embed the n8n chat widget on a website or expose it via a webhook so external users can query your documents.
  • Add document filtering: Modify the Vector Store search to filter by department, date range, or document type. Useful if different teams have different documents.
  • Implement multi-language support: Use translation APIs to process documents in French, Spanish, German, etc. The embeddings and chat adapt automatically.
  • Create document analytics: Track which documents get queried most, what questions come up repeatedly, and use that to improve your knowledge base organization.
  • Integrate with Slack or Teams: Instead of a web chat, let employees query documents directly from Slack. n8n webhooks make this straightforward.
  • Add feedback loops: Let users rate chatbot answers (“Was this helpful?”). Log feedback to a table and use it to retrain or improve your prompts.

Ready to Deploy Your RAG Chatbot?

The complete, production-ready n8n workflow template is available right now. Import it directly into your n8n instance, configure your API keys, and start indexing documents in minutes.

Get the Template

One-click import. Full documentation included. Free to modify and extend.

Summary

You now understand the architecture of an enterprise-grade document chatbot. The two-part workflow—document processing and chat interface—work together to create a system that knows your documents intimately and answers questions with precision.

The key innovations:

  • Intelligent chunking preserves context
  • Gemini enhancement adds semantic richness
  • Vector embeddings enable semantic search (not keyword search)
  • RAG prevents hallucinations by grounding answers in actual content
  • Metadata tracking ensures users know where answers come from

Build this workflow, test it with your own documents, and watch it transform how your team accesses information. Stop searching pages manually. Start asking.

ai-chatbot
rag
n8n
google-drive
supabase
openai
vector-database
automation

How to Build an AI Website Chatbot with CRM Lead Capture Using n8n

AI Website Chatbot n8n workflow template thumbnail

Every visitor who leaves your website without talking to someone is a missed opportunity. Maybe they had a question about your services but didn’t feel like filling out a contact form. Maybe they were ready to buy but got distracted. A live chat widget helps, but you can’t sit at your desk 24/7 waiting for messages. What if an AI chatbot could greet visitors, answer their questions about your business, and quietly collect their name and email — all while you sleep? That’s exactly what you’ll build in this guide using n8n and OpenAI.

Prefer to skip the setup? Grab the ready-made template → and be up and running in under 10 minutes.

What You’ll Build

  1. A visitor lands on your website and sees a chat widget in the corner of the screen.
  2. They type a question — the AI chatbot responds naturally, explains your services, and asks what they need help with.
  3. Once the visitor shares their email and describes their project, the chatbot automatically saves the lead to a Google Sheet acting as your lightweight CRM.
  4. The visitor gets a friendly confirmation message, and you wake up to a spreadsheet full of qualified leads ready for follow-up.

How It Works — The Big Picture

This template uses two connected workflows inside n8n. The main workflow runs the chatbot itself — receiving messages, thinking through responses with GPT-4o mini, and maintaining conversation context. When the visitor shares their contact info, the chatbot calls a sub-workflow tool that extracts the email and description, formats it into clean JSON, and appends a new row to your Google Sheet.

┌──────────────────────────────────────────────────────────────────────────────┐
│  MAIN WORKFLOW — Website Chatbot                                            │
│                                                                              │
│  [Chat Trigger] → [Website Chatbot Agent] ←── [OpenAI GPT-4o mini]         │
│                           ↑                                                  │
│                    [Conversation Memory]                                     │
│                           ↓ (tool call when lead info collected)             │
│                    [Save Lead to CRM]                                        │
└──────────────────────────────────────────────────────────────────────────────┘
                            │
                            ▼
┌──────────────────────────────────────────────────────────────────────────────┐
│  SUB-WORKFLOW — CRM Lead Processing                                         │
│                                                                              │
│  [Receive Lead Data] → [Extract Lead Info] → [Append to Sheet] → [Confirm] │
│                              ↑                                               │
│                     [GPT-4o mini + Output Parser]                            │
└──────────────────────────────────────────────────────────────────────────────┘
                            │
                            ▼
                   ┌─────────────────┐
                   │  Google Sheets   │
                   │  (Leads CRM)     │
                   └─────────────────┘
  

What You’ll Need

  • A self-hosted or cloud n8n instance (version 1.0 or later)
  • An OpenAI API key with access to GPT-4o mini (or any other chat model)
  • A Google account with Google Sheets access (free tier works fine)
  • A website where you can embed the n8n chat widget (any site that supports JavaScript snippets)

Estimated build time: 30–45 minutes from scratch, or under 10 minutes with the template.

Part 1 — The Main Chatbot Workflow

This workflow handles every incoming message from your website visitors. It powers the AI conversation, remembers what the visitor said earlier in the chat, and calls the CRM sub-workflow when it detects lead information.

1 Chat Trigger (n8n Chat Trigger)

The Chat Trigger node is n8n’s built-in way to receive messages from a chat widget you embed on your website. When a visitor types something and hits send, this node fires and passes the message into the workflow.

  1. Add a Chat Trigger node to your canvas (search for “When chat message received”).
  2. Leave the default options as-is — no extra configuration needed.
  3. After saving and activating the workflow, n8n gives you a webhook URL and a small JavaScript snippet you can paste into your site’s HTML to display the chat widget.
{
  "action": "sendMessage",
  "body": {
    "message": "Hi, I'm interested in automating my invoice process."
  },
  "sessionId": "visitor-session-abc123"
}
💡

Tip: The n8n chat widget works on any website — WordPress, Shopify, static HTML, React apps. Just paste the embed snippet before the closing </body> tag.

2 Website Chatbot Agent (AI Agent)

This is the brain of the operation. The AI Agent node receives the visitor’s message, processes it through the OpenAI model, checks conversation history, and generates a helpful response. It’s configured with a system message that tells the AI who it is, what services your company offers, and what information to collect.

  1. Add an AI Agent node and connect it to the Chat Trigger.
  2. In the System Message field under Options, paste your company description and instructions. Here’s the template version (customize for your business):
You are the first point of contact for visitors on our website.
Your company helps businesses automate their internal processes
using n8n, an open-source workflow automation platform.

Keep answers brief and helpful.

Our services include:
- Designing and implementing automations using n8n
- Replacing manual work with fully automated workflows
- Training teams to manage and scale automations in-house

Your primary goals are:
1. Briefly explain what we do in a helpful, conversational tone.
2. Ask the visitor what processes they want to automate.
3. Collect their name and email address for follow-up.

After you have the email and what the user needs, send all the
info together to the CRM tool.
💡

Tip: The last line is critical — it tells the AI agent when to trigger the CRM tool. Without it, the agent won’t know to save the lead. Adjust the wording, but keep the instruction to call the tool once email and description are collected.

3 OpenAI Chat Model (Language Model)

This node provides the actual language model that powers the agent’s responses. It connects to the Agent node via the ai_languageModel connector — not the regular data flow.

  1. Add an OpenAI Chat Model node.
  2. Select gpt-4o-mini as the model (fast, cheap, and accurate enough for customer conversations).
  3. Connect your OpenAI API credential.
  4. Drag a connection from this node’s output to the Agent node’s AI Language Model input (the connector on the bottom-left of the Agent node).
📌

You can swap gpt-4o-mini for gpt-4o if you want more nuanced responses, but it costs roughly 10x more per token. For a lead-capture chatbot, gpt-4o-mini is the sweet spot.

4 Conversation Memory (Buffer Window Memory)

Without memory, the chatbot forgets everything after each message. The Buffer Window Memory node stores the last several exchanges so the AI can reference what the visitor said earlier in the conversation — like when they mentioned their name two messages ago.

  1. Add a Window Buffer Memory node.
  2. Leave defaults as-is (it stores the last 5 message pairs by default).
  3. Connect it to the Agent node’s AI Memory input.

Part 2 — The CRM Sub-Workflow (Lead Processing)

When the chatbot collects enough information (email + project description), the Agent calls the CRM tool. This tool is actually a full sub-workflow embedded inside a Tool Workflow node. It takes the raw conversation data, extracts the structured lead info, and saves it to Google Sheets.

5 Save Lead to CRM (Tool Workflow)

The Tool Workflow node lets you give the AI agent access to a multi-step process as if it were a single tool. When the agent decides it’s time to save the lead, it calls this tool and passes the conversation data in.

  1. Add a Tool Workflow node and connect it to the Agent node’s AI Tool input.
  2. Set the source to Parameter (this embeds the sub-workflow JSON directly inside the node, so you don’t need a separate workflow file).
  3. In the Description field, write: CRM tool to store lead information — call this once you have the visitor's email address and a description of what they need
  4. Paste the sub-workflow JSON into the Workflow JSON field. The template includes this pre-configured.
💡

Tip: The tool description matters more than you’d think. The AI agent reads this description to decide when to call the tool. A vague description like “save data” may cause the agent to trigger it at the wrong time.

6 Extract Lead Info (AI Agent with Output Parser)

Inside the sub-workflow, this agent node takes the raw conversation input (which could be messy — “Sure, my email is sarah.thompson@gmail.com and I need help with onboarding automation”) and extracts it into a clean JSON object with exactly two fields: email and description.

  1. The node receives input from the Receive Lead Data trigger.
  2. It uses GPT-4o mini with a strict system prompt that says: “You are a formatting assistant. Your only job is to extract and convert the input into clean, valid JSON.”
  3. A Structured Output Parser is connected to enforce the JSON schema, making sure the output always has the right shape.

After this node runs, the data looks like this:

{
  "output": {
    "email": "sarah.thompson@gmail.com",
    "description": "Wants help automating client onboarding and sending welcome emails."
  }
}

7 Append Lead to Sheet (Google Sheets)

This node takes the structured lead data and appends it as a new row in your Google Sheet. Each lead gets its own row with the email and project description.

  1. Connect your Google Sheets OAuth2 credential.
  2. Select your spreadsheet (or create a new one called “Leads CRM”).
  3. Choose Sheet1 as the sheet name.
  4. Map the columns: set email to ={{ $json.output.email }} and description to ={{ $json.output.description }}.

8 Send Confirmation (Code Node)

A simple Code node that returns a thank-you message back to the chatbot. This text gets sent back through the tool chain to the agent, which uses it to confirm the lead was saved.

return [
  {
    json: {
      text: "Thanks for the info, we will be in touch soon"
    }
  }
];

The Data Structure

Your Google Sheet acts as a lightweight CRM. It only needs two columns to start, but you can add more later (timestamp, source page, lead score).

Column Type Example Description
email Text sarah.thompson@gmail.com The visitor’s email address, collected during the chat conversation
description Text Wants help automating client onboarding and sending welcome emails A summary of what the visitor needs, extracted by the AI from the conversation

Here’s what a few rows might look like after a week of running the chatbot:

email description
sarah.thompson@gmail.com Wants help automating client onboarding and sending welcome emails
james.carter@outlook.com Looking to sync Shopify orders with their warehouse spreadsheet automatically
emily.rodriguez@acmecorp.com Needs a workflow to route support tickets from email to Slack channels
📌

Column names must match exactly — email and description, all lowercase. The Google Sheets node maps data by column header, so a mismatch like “Email” or “Description” will cause empty cells.

Full System Flow

  Visitor types message in chat widget
                │
                ▼
  ┌─────────────────────────────┐
  │  Chat Trigger               │ ← Receives message via webhook
  └─────────────┬───────────────┘
                │
                ▼
  ┌─────────────────────────────┐     ┌──────────────────────┐
  │  Website Chatbot Agent      │ ←── │ OpenAI GPT-4o mini   │
  │  (System prompt defines     │     └──────────────────────┘
  │   company info + goals)     │     ┌──────────────────────┐
  │                             │ ←── │ Conversation Memory   │
  └─────────────┬───────────────┘     └──────────────────────┘
                │
          Has email + description?
          ┌─────┴─────┐
          No          Yes
          │           │
          ▼           ▼
     Reply with    ┌──────────────────────┐
     follow-up     │ Save Lead to CRM     │ (Tool Workflow call)
     question      └───────────┬───────────┘
                              │
                              ▼
                   ┌──────────────────────┐
                   │ Extract Lead Info     │ ← GPT-4o mini + Output Parser
                   └──────────┬───────────┘
                              │
                              ▼
                   ┌──────────────────────┐
                   │ Append Lead to Sheet  │ → Google Sheets
                   └──────────┬───────────┘
                              │
                              ▼
                   ┌──────────────────────┐
                   │ Send Confirmation     │ → "Thanks, we'll be in touch"
                   └──────────────────────┘
  

Testing Your Workflow

  1. Save and activate the workflow in n8n.
  2. Open the chat widget (you can test it directly in n8n by clicking “Chat” in the top-right corner of the editor, or embed the snippet on a test page).
  3. Send a greeting like: “Hi, I run a small e-commerce store and I’m interested in automating my order fulfillment process.”
  4. Wait for the chatbot to respond and ask for your email. Provide a test email: “Sure, it’s test.user@example.com”
  5. Check your Google Sheet — you should see a new row with the email and a description of the request.
  6. Verify the chatbot sent back a confirmation message like “Thanks for the info, we will be in touch soon.”
Problem Likely Cause Fix
Chatbot responds but never saves the lead The tool description is too vague, or the system prompt doesn’t tell the agent to call the CRM tool Make sure the system message ends with “After you have the email and what the user needs, send all the info together to the CRM tool.”
Google Sheet stays empty Column headers don’t match or OAuth credential expired Check that your sheet has email and description as column headers (lowercase). Re-authorize Google Sheets in n8n if needed.
Chat widget doesn’t appear on site Embed snippet is missing or blocked by CSP Paste the n8n chat embed code before </body>. Check your browser console for Content Security Policy errors.
Agent gives generic or off-topic answers System message doesn’t describe your specific business Rewrite the system message to include your actual services, company name, and the tone you want.
“Could not parse output” error in sub-workflow The Structured Output Parser schema doesn’t match GPT’s output format Ensure the parser’s example JSON has exactly email and description fields. Check the Extract Lead Info node’s execution log for the raw output.

Frequently Asked Questions

Can I use a different AI model instead of GPT-4o mini?

Yes. You can swap in any model that n8n supports — GPT-4o, Claude, Gemini, or even a local model via Ollama. Just replace the OpenAI Chat Model nodes with the appropriate model node. Keep in mind that the system prompts may need slight adjustments for non-OpenAI models.

How do I add the chat widget to my WordPress site?

After activating the workflow, n8n provides an embed snippet (a small block of HTML and JavaScript). In WordPress, go to Appearance → Theme Editor → footer.php and paste the snippet just before the closing </body> tag. Alternatively, use a plugin like “Insert Headers and Footers” to add it without editing theme files.

Will the chatbot work on multiple pages at once?

Yes — the chat widget runs on every page where the embed snippet is loaded. Each visitor gets their own session ID, so conversations stay separate even when dozens of people are chatting at the same time. The Buffer Window Memory keeps each session’s context isolated.

Can I collect more fields like phone number or company name?

Absolutely. Update the system message to ask for those fields, then update the Structured Output Parser schema in the sub-workflow to include the new fields. Finally, add matching columns to your Google Sheet. The AI will extract whatever you tell it to look for.

How much does it cost to run this per month?

The main cost is OpenAI API usage. GPT-4o mini is priced at about $0.15 per million input tokens and $0.60 per million output tokens. A typical chat conversation of 10 messages costs roughly $0.002–$0.005. Even with 500 conversations per month, you’d spend under $3 on AI. n8n self-hosted is free; n8n Cloud starts at $24/month.

What happens if OpenAI’s API goes down while someone is chatting?

The chatbot will fail to respond to that specific message. n8n will log the error in the execution history. The visitor’s message isn’t lost — they can try again once the API recovers. For production use, consider adding an error branch in the Agent node that sends a fallback message like “Sorry, I’m having trouble right now. Please email us at support@yourcompany.com.”

🚀 Get the AI Website Chatbot Template

Skip the 45-minute build. Get the complete workflow JSON, a setup guide with step-by-step screenshots, and a credentials guide that walks you through every API key — ready to import and go live in under 10 minutes.

Get the Template →

Instant download · Works on n8n Cloud and self-hosted

What’s Next?

  • Add email notifications: Connect a Gmail or SendGrid node to email yourself whenever a new lead is captured, so you can follow up faster.
  • Qualify leads with AI scoring: Add a second AI step that rates each lead (hot, warm, cold) based on their description and writes the score to a third column in your sheet.
  • Connect to a real CRM: Replace the Google Sheets node with HubSpot, Salesforce, or Pipedrive to send leads directly into your sales pipeline.
  • Add a knowledge base: Attach a RAG (Retrieval-Augmented Generation) tool so the chatbot can answer detailed questions about your products or services using your own documentation.
n8n
OpenAI
Google Sheets
chatbot
lead capture
CRM
automation
AI agent