SheetBase Pro ā Google Sheets as a database for n8n (Simple public reads, Advanced Apps Script CRUD, Tool, and Webhook Trigger with API key security).
npm install n8n-nodes-sheetbase> Transform Google Sheets into a powerful database with AI Agent memory - 100% Free, No API Quotas!



ā
100% Free Forever - No API costs, no quotas, no hidden fees
ā” Ultra Fast - 0-1ms response with intelligent caching
š§ AI Agent Memory - Persistent memory for chatbots
š Fuzzy Search - Advanced keyword matching
š„ Collaborative - Real-time multi-user editing
š Production Ready - Tested with 50,000+ rows
Via n8n Community Nodes
Settings ā Community Nodes ā Install ā n8n-nodes-sheetbase
Or manually
cd ~/.n8n
npm install n8n-nodes-sheetbase
pm2 restart n8n
text
user_name | user_id | user_preference | user_small_history | user_timestampfunction doGet(e) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
const headers = data;
const rows = data.slice(1);
const operation = e.parameter.operation || 'search';
const userId = e.parameter.user_id || '';
const keywords = e.parameter.keywords || '';
let results = rows.map((row, idx) => {
let obj = { __row: idx + 2 };
headers.forEach((h, i) => obj[h] = row[i]);
return obj;
}).filter(r => r.user_id === userId);
if (operation === 'search' && keywords) {
const keywordList = keywords.toLowerCase().split(/\s+|,/).filter(k => k.length > 0);
results = results.filter(r => {
const searchText = JSON.stringify(r).toLowerCase();
return keywordList.some(keyword => searchText.includes(keyword));
});
}
return ContentService.createTextOutput(JSON.stringify({
success: true,
data: results,
count: results.length
})).setMimeType(ContentService.MimeType.JSON);
}
function doPost(e) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = JSON.parse(e.postData.contents);
if (data.operation === 'create') {
const v = data.values;
sheet.appendRow([v.user_name, v.user_id, v.user_preference, v.user_small_history, v.user_timestamp]);
return ContentService.createTextOutput(JSON.stringify({ success: true })).setMimeType(ContentService.MimeType.JSON);
}
if (data.operation === 'update') {
const u = data.updates;
sheet.getRange(data.rowNumber, 3).setValue(u.user_preference);
sheet.getRange(data.rowNumber, 4).setValue(u.user_small_history);
sheet.getRange(data.rowNumber, 5).setValue(u.user_timestamp);
return ContentService.createTextOutput(JSON.stringify({ success: true })).setMimeType(ContentService.MimeType.JSON);
}
if (data.operation === 'delete') {
sheet.deleteRow(data.rowNumber);
return ContentService.createTextOutput(JSON.stringify({ success: true })).setMimeType(ContentService.MimeType.JSON);
}
}
text
4. Deploy ā New deployment ā Web app ā Anyone ā Deploy
5. Copy URL to SheetBase Memory node
- š¤ AI Chatbots - Remember user preferences
- š¼ CRM - Customer database without costs
- š Content Management - Blog posts, documentation
- šļø E-commerce - Product catalogs
- š Data Collection - Forms, surveys, leads
- š IoT - Sensor data logging
| Rows | Search Time | Status |
|------|-------------|--------|
| 1,000 | <5ms | ā
Excellent |
| 10,000 | ~15ms | ā
Great |
| 50,000 | ~30ms | ā
Good |
Real test: 50,000 rows searched in under 1 second!
Created by Charles Lepoittevin
- š§ Email: charleslepoittevin34@gmail.com
- š¼ LinkedIn: charles-lepoittevin
- š Facebook: Charles Lepoittevin
- š» GitHub: @CharlesMagicDev
MIT License - Free for personal and commercial use
---
Made with ā¤ļø by Charles Lepoittevin
If SheetBase saves you time or money, consider ā starring the repo!