Integrating NocoDB and n8n for Open-Source Automation
Combining NocoDB and n8n provides an entirely self-hostable alternative to Airtable and Zapier. NocoDB turns relational databases like PostgreSQL and MySQL into programmable spreadsheets with auto-generated REST APIs, while n8n handles complex logic using node-based execution workflows and native JavaScript or Python runtimes. This integration eliminates proprietary vendor lock-in and per-seat or per-task SaaS subscription fees.
Explore: Databases & Spreadsheets · Workflow Automation
Comparison matrix
| Feature | NocoDB | n8n | Edge |
|---|---|---|---|
| License Model | AGPLv3 Open Source | Fair-code (Sustainable Use License) | NocoDB |
| Primary Architecture | Database GUI with Auto-REST/GraphQL APIs | Workflow Automation & Orchestration Engine | Tie |
| Self-Hosting Capabilities | Docker, Node.js, Kubernetes (Unrestricted) | Docker, npm, Kubernetes (Unrestricted community) | Tie |
| Native Integrations Count | ~40 Third-party connectors & storage plugins | 1,100+ Pre-built integration nodes | n8n |
| Custom Scripting Support | SQL queries and formula fields | Full JavaScript and Python runtime nodes | n8n |
| Authentication Methods | xc-token header and JWT tokens | X-N8N-API-KEY, Basic Auth, OAuth2 | Tie |
| Execution / Rate Limits | Unlimited on self-hosted instances | Unlimited runs on self-hosted instances | Tie |
| Relational Schema Handling | Direct schema migrations on MySQL, Postgres, SQLite | Stateless payload processing with internal state store | NocoDB |
| Start free | Try NocoDB → | Try n8n → |
ROI metrics
Hours saved / mo
42
NocoDB / mo
$0
n8n / mo
$24
Break-even
1.8 wks
Annual savings
$15,600
Replacing an Airtable Team tier ($20/user/mo for 10 users = $2,400/yr) and Zapier Team plan ($69/mo = $828/yr) with self-hosted NocoDB and n8n Cloud or self-hosted n8n saves over $15,000 annually while preventing vendor lock-in and removing API row caps.
Step-by-step setup guide
1.Deploy Services via Docker Compose
Create a shared Docker network running PostgreSQL 15, NocoDB on port 8080, and n8n on port 5678 to enable direct inter-container networking.
version: '3.8' services: nocodb: image: nocodb/nocodb:latest ports: ['8080:8080'] environment: - NC_DB=pg://postgres:5432?u=app&p=secret&d=appdb n8n: image: docker.n8n.io/n8nio/n8n:latest ports: ['5678:5678'] environment: - N8N_HOST=n8n.internal - WEBHOOK_URL=http://n8n:5678/2.Generate NocoDB API Token
In the NocoDB web interface, navigate to User Settings > API Tokens. Generate an API token and copy the generated xc-token value for n8n credentials.
curl -X POST 'http://localhost:8080/api/v2/meta/tokens' -H 'xc-auth: YOUR_ADMIN_JWT' -H 'Content-Type: application/json' -d '{"description":"n8n-worker-token"}'3.Create n8n Webhook Trigger Node
Open the n8n canvas, add a 'Webhook' trigger node, set HTTP Method to POST, and copy the Production Webhook URL path (e.g., /webhook/nocodb-sync).
4.Register NocoDB Outbound Webhook
Open NocoDB table settings, navigate to Webhooks, select the 'After Record Insert' event, and set the destination URL to the n8n webhook endpoint.
curl -X POST 'http://localhost:8080/api/v2/meta/bases/BASE_ID/tables/TABLE_ID/hooks' -H 'xc-token: YOUR_XC_TOKEN' -H 'Content-Type: application/json' -d '{"event":"records.after.insert","url":"http://n8n:5678/webhook/nocodb-sync","notification":{"type":"URL"}}'5.Execute Data Transformation and Update via REST
Add an HTTP Request node in n8n that reads the incoming payload, calculates business logic, and updates status flags back in NocoDB via PATCH.
curl -X PATCH 'http://localhost:8080/api/v2/tables/TABLE_ID/records' -H 'xc-token: YOUR_XC_TOKEN' -H 'Content-Type: application/json' -d '{"Id":12,"Status":"Processed","ProcessedAt":"2023-10-27T10:00:00Z"}'
Webhook payload example
POST http://n8n:5678/webhook/nocodb-sync · event: records.after.insert
{
"event": "records.after.insert",
"base_id": "p_9b4e1f72",
"table_id": "m_5d2a8b90",
"table_name": "CustomerOrders",
"data": [
{
"Id": 1084,
"CustomerEmail": "lead@enterprise.com",
"OrderValue": 1450.00,
"Status": "Pending",
"CreatedAt": "2023-10-27T14:32:01.000Z",
"UpdatedAt": "2023-10-27T14:32:01.000Z"
}
]
}NocoDB: pros & cons
- ✅ Connects directly to existing PostgreSQL, MySQL, and SQLite databases
- ✅ Exposes production-ready REST and GraphQL endpoints automatically
- ✅ Zero per-user licensing fees when deployed on private infrastructure
- ⚠️ Formula and rollup features are less mature than proprietary spreadsheet tools
- ⚠️ No native workflow canvas for multi-branch sequential conditional logic
n8n: pros & cons
- ✅ Native sandboxed JavaScript and Python execution nodes for data formatting
- ✅ Over 1,100 modular integration nodes with visual error debugging
- ✅ Supports parallel worker scaling via Redis queues in queue mode
- ⚠️ Steeper initial configuration curve compared to pure SaaS automation tools
- ⚠️ Requires ongoing server maintenance, image patching, and database backups
FAQ
How do I authenticate n8n HTTP requests against NocoDB v2 API?
Pass the NocoDB API token in the custom request header as 'xc-token: YOUR_API_TOKEN'. Do not use Bearer auth unless authenticating through the short-lived xc-auth JWT endpoint.
Can NocoDB trigger workflows on specific column updates?
Yes. NocoDB webhook configurations support filters based on conditions and trigger events including 'records.after.update', which outputs both current row data and changed field maps.
What is the throughput capacity for self-hosted NocoDB to n8n pipelines?
A standard 2 vCPU, 4GB RAM Docker host handles 80 to 120 webhook executions per second. For higher volumes, run n8n in Queue Mode powered by Redis and multiple worker containers.
How are relational links between NocoDB tables handled inside n8n?
NocoDB includes linked table primary keys in payloads. To retrieve foreign row objects, use an n8n HTTP Request node targeting 'GET /api/v2/tables/{tableId}/links/{linkFieldId}/records/{recordId}'.