DEV Community

Alex Spinov
Alex Spinov

Posted on

Teable Has a Free API — Heres How to Build an Airtable Alternative You Own

Teable is an open-source Airtable alternative built on PostgreSQL. Spreadsheet UI with database power — real SQL under the hood, full API access, and self-hosted.

Why Teable?

  • PostgreSQL-backed: Real database, not a spreadsheet
  • Airtable-like UI: Drag-and-drop, views, filters
  • API-first: Full REST API for everything
  • Self-hosted: Your data, your server
  • Realtime: Collaborative editing
  • 100K+ rows: Handles real data, not just demos
  • Views: Grid, Kanban, Form, Gallery, Calendar

Self-Host

git clone https://github.com/teableio/teable.git
cd teable
docker compose up -d
Enter fullscreen mode Exit fullscreen mode

Open http://localhost:3000

API: List Records

curl https://your-teable.com/api/table/TABLE_ID/record \
  -H 'Authorization: Bearer API_TOKEN' \
  -G -d 'fieldKeyType=name'
Enter fullscreen mode Exit fullscreen mode

API: Create Record

curl -X POST https://your-teable.com/api/table/TABLE_ID/record \
  -H 'Authorization: Bearer API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "records": [
      {
        "fields": {
          "Name": "Alice Johnson",
          "Email": "alice@example.com",
          "Status": "Active",
          "Score": 95
        }
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

API: Update Record

curl -X PATCH https://your-teable.com/api/table/TABLE_ID/record \
  -H 'Authorization: Bearer API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "records": [
      {
        "id": "rec_xxx",
        "fields": {"Status": "Completed", "Score": 100}
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

API: Query with Filters

curl https://your-teable.com/api/table/TABLE_ID/record \
  -H 'Authorization: Bearer API_TOKEN' \
  -G --data-urlencode 'filter={"conjunction":"and","filterSet":[{"fieldId":"fld_xxx","operator":"is","value":"Active"}]}' \
  -d 'sort=[{"fieldId":"fld_yyy","order":"desc"}]' \
  -d 'take=20'
Enter fullscreen mode Exit fullscreen mode

API: Delete Record

curl -X DELETE https://your-teable.com/api/table/TABLE_ID/record/RECORD_ID \
  -H 'Authorization: Bearer API_TOKEN'
Enter fullscreen mode Exit fullscreen mode

JavaScript SDK

import { TeableSDK } from '@teable/sdk';

const teable = new TeableSDK({ baseUrl: 'https://your-teable.com', token: 'API_TOKEN' });

// List records
const records = await teable.record.getRecords({
  tableId: 'tbl_xxx',
  take: 50,
  fieldKeyType: 'name',
});

// Create record
await teable.record.createRecords({
  tableId: 'tbl_xxx',
  records: [{ fields: { Name: 'Bob', Email: 'bob@example.com' } }],
});
Enter fullscreen mode Exit fullscreen mode

Webhooks

curl -X POST https://your-teable.com/api/table/TABLE_ID/webhook \
  -H 'Authorization: Bearer API_TOKEN' \
  -d '{
    "url": "https://your-app.com/webhook",
    "events": ["record.created", "record.updated"]
  }'
Enter fullscreen mode Exit fullscreen mode

Real-World Use Case

A startup paid $240/year for Airtable Pro (5 users). They switched to self-hosted Teable — same spreadsheet UI, same API, but with real PostgreSQL queries. They can now join Teable data with their production database directly.


Need to automate data collection? Check out my Apify actors for ready-made scrapers, or email spinov001@gmail.com for custom solutions.

Top comments (0)