Comparison8 min read

Migrating from Airtable to NocoDB or Grist on a VPS

On August 4, 2026, Bending Spoons announced the acquisition of Airtable for $1.285 billion. This acquirer has a well-documented track record: after buying Evernote in 2023, it significantly raised the annual subscription price for users. Teams storing their customer data, project pipelines or content catalogs in Airtable have a migration window before pricing changes. NocoDB and Grist offer exactly the same primitives — relational databases, spreadsheet views, REST API — self-hosted on a VPS you control.

Why the Bending Spoons acquisition changes everything

Bending Spoons has built its model on a repeated pattern: acquire a mature SaaS, reduce headcount, then revise pricing upward. Evernote is the most documented example — the annual subscription rose significantly after the 2023 acquisition by Bending Spoons, for unchanged features. Airtable's terms of service impose no cap on annual price revisions.

Airtable reported $480 million in ARR as of June 2026, with 500,000 customer organizations including 80% of the Fortune 100. These figures indicate a solid revenue base — and pricing leverage that grows with customer dependency.

For an agency or development team that has built its workflows on Airtable, the question is no longer "will prices change?" but "when, and by how much?"

What you gain by self-hosting

  • Fixed cost — a VPS at {{vps.start.price}} covers NocoDB for a ten-person team with no per-seat variable line.
  • Data under your control — no third party accesses your contact databases, sales pipelines or product catalogs.
  • Identical REST API — NocoDB exposes an API compatible with the webhooks and integrations you built on Airtable.
  • No record limits — Airtable caps at 50,000 rows on Business plans; self-hosted NocoDB and Grist have none.
  • Controlled updates — you choose when to migrate to a new version, without vendor-imposed breaking changes.
  • Full export at any time — your data lives in your own PostgreSQL or MySQL database, exportable without depending on a third-party API.

NocoDB vs Grist vs Airtable — comparison table

CriterionNocoDBGrist
LicenseAGPL-3.0Apache 2.0
Data modelRelational database (PostgreSQL / MySQL / SQLite)Relational spreadsheet with calculated columns
Native Airtable importYes — via Personal Access Token and Shared Base IDNo — CSV/Excel import; two-step migration
Available viewsGrid, gallery, form, kanban, calendar, mapGrid, card, calendar, record detail
FormulasLimited (basic)Advanced — Python syntax, chained calculated columns
Auto-generated REST APIYes — OpenAPI 3.0 per tableYes — REST API and Webhooks
Minimum RAM2 GB (recommended 2 vCPU / 4 GB)1 GB (recommended 1 vCPU / 2 GB)
Primary use caseDirect Airtable replacement, public forms, lightweight CRMComplex spreadsheets, calculated columns, data analysis

Choosing between NocoDB and Grist

The choice comes down to the nature of your Airtable bases.

Choose NocoDB if your Airtable bases are primarily linked data tables — contacts, tickets, inventories, pipelines — with kanban views and public forms. The native API import avoids manual conversion, and the interface is visually very close. NocoDB auto-generates an OpenAPI 3.0 REST API per table: if your scripts or Zapier, Make or n8n webhooks already consume the Airtable API, the transition amounts to changing the base URL and authentication token.

Choose Grist if you make heavy use of Airtable's formula and calculated column features. Grist uses Python syntax for its formulas, giving more power for calculation or analysis bases. A calculated column can reference multiple other columns from the same or a linked table, without depth limits — where Airtable blocks circular references. Import is done from an Airtable CSV export, which requires an intermediate step, but it is a one-hour exercise on a standard-sized base.

The two tools are complementary: some teams deploy NocoDB for operational data — CRM, project management, client forms — and Grist for reporting dashboards that aggregate data from multiple sources. Both can be self-hosted on the same VPS if resources allow.

VPS prerequisites before you start

Both tools install via Docker Compose. A Linux VPS with root access is sufficient — Ubuntu 22.04 LTS or Debian 12 are recommended.

For NocoDB: 2 vCPU and 4 GB RAM for a team of ten to twenty people. 20 GB SSD storage for attachments. Docker 24+ and Docker Compose v2. NocoDB can run with embedded SQLite for individual use, but PostgreSQL is recommended in production: it handles concurrency better and simplifies automated backups via pg_dump.

For Grist: 1 vCPU and 2 GB RAM for individual or small team use. Docker 24+. HTTPS configuration can go through an nginx or Caddy reverse proxy. Grist stores its documents in a persistent directory mounted as a Docker volume — a daily backup of this directory is sufficient to protect all data.

In both cases, plan for a domain name pointed at your VPS and a TLS certificate — Let's Encrypt integrates natively via Certbot. If you host both tools on the same VPS, a VPS with 4 vCPU and 8 GB RAM is a comfortable starting point for a team of fewer than fifteen people.

Migrating to NocoDB — procedure

01

Generate an Airtable Personal Access Token

In your Airtable account, go to Account → Developer hub → Personal access tokens. Create a token with the data.records:read, schema.bases:read and webhook:manage scopes. Copy it — it only displays once.

Also retrieve your Shared Base ID: open the relevant base, click Share → Get shareable link, then copy the shr… portion of the URL.

02

Deploy NocoDB with Docker Compose

Create a docker-compose.yml file:

services:
  nocodb:
    image: nocodb/nocodb:latest
    ports:
      - "8080:8080"
    environment:
      NC_DB: "pg://db:5432?u=nocodb&p=password&d=nocodb"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: nocodb
      POSTGRES_PASSWORD: password
      POSTGRES_DB: nocodb
    volumes:
      - pg_data:/var/lib/postgresql/data
volumes:
  pg_data:

Start with docker compose up -d. NocoDB is accessible on port 8080.

03

Configure the reverse proxy and TLS

If using nginx, create a vhost that proxies port 8080 to your domain, then obtain a certificate with Certbot: certbot --nginx -d nocodb.yourdomain.com. The NC_PUBLIC_URL environment variable must point to the final HTTPS URL for sharing links and webhooks to work correctly.

04

Import the Airtable base

In the NocoDB interface, create a new project then click Import → Airtable. Enter your Personal Access Token and your Shared Base ID. NocoDB imports tables, fields (with type mapping), views and records via the Airtable API. For large bases (> 10,000 records), the import may take several minutes — a progress log is displayed.

05

Verify field types and views

Some Airtable field types have no direct equivalent: Formula fields are imported as text, Rollup fields lose their aggregation. Check each critical table in NocoDB after the import and rebuild any formulas or links that didn't migrate. Public forms and webhooks need to be reconfigured manually.

Migrating to Grist — procedure

01

Export your bases from Airtable

In Airtable, open each table and click Download CSV (three-dot menu at the top right of the grid view). Export one table at a time — Airtable does not provide a multi-table export in one operation. For complex bases with many linked tables, plan a dedicated session.

02

Deploy Grist with Docker

Grist deploys with an official Docker image:

services:
  grist:
    image: gristlabs/grist:latest
    ports:
      - "8484:8484"
    volumes:
      - grist_data:/persist
    environment:
      APP_HOME_URL: "https://grist.yourdomain.com"
      GRIST_SINGLE_ORG: "my-organization"
volumes:
  grist_data:

Start with docker compose up -d. Add your nginx reverse proxy and Certbot for TLS.

03

Import CSVs into Grist

On the Grist home screen, click Add New → Import document to create a document from a CSV, or Add New → Import from file from an existing document to add tables. Grist also supports Excel, JSON and TSV files. The import dialog lets you choose the destination (new table or existing table) before applying the import.

04

Rebuild relationships and formulas

Grist models relationships between tables via Reference columns — to be created manually to reproduce Airtable's linked fields. Formulas use Python syntax: an Airtable formula IF({Status}="Active", "Yes", "No") becomes "Yes" if $Status == "Active" else "No" in Grist. The official documentation at support.getgrist.com/imports covers common migration cases.

Keep Airtable access during migration

Do not cancel your Airtable subscription before validating that all your automations and integrations work on NocoDB or Grist. Plan for a double-running period of at least two weeks. Export a complete copy of each base as CSV before starting, regardless of the migration method chosen — this is your safety net if partial import fails on a field type.

Deploy from ServOrbit in one click

ServOrbit offers pre-configured VPS templates for NocoDB and Grist. The template installs Docker, the ready-to-use docker-compose.yml, nginx reverse proxy and the Certbot chain — you enter your domain and database password, and the VPS is ready in minutes.

VPS plans start at {{vps.start.price}} with root access, dedicated IPv4 and SSD storage in our European datacenters. The VPS Administration option is available if you prefer to delegate system maintenance.

Deploy NocoDB or Grist on your VPS

Root access, dedicated IPv4, SSD storage. NocoDB and Grist templates available. Your data stays on your infrastructure.

Need help?

Browse our help center and FAQ, or reach our team — callback, WhatsApp or email. Support in French, English and Arabic.

Message us on WhatsAppopens in a new tab