All insights
InsightsarchitectureAirtableSupabase

Airtable and Postgres: the path designed from day one

An Airtable base that works ends up feeding applications: a portal, a dashboard, a product. That is when the published API limits — 5 requests per second per base, 50,000 records on the Team plan — stop being footnotes. The bridge between Airtable and Postgres should be designed before you need it.

Published on May 26, 20268 min readtechnical leveldata verified on August 12, 2026

TL;DR

  • Airtable's REST API is capped at 5 requests per second per base (official documentation, August 12, 2026): any application reading Airtable directly inherits that ceiling.
  • Airtable itself recommends a caching proxy for high read volumes: an external read layer is the pattern the vendor designed for, not a workaround.
  • Per-base ceilings are published, hence known from day one: 1,000 records on Free, 50,000 on Team, 125,000 on Business.
  • Immutable record IDs and native upsert on 1 to 3 merge fields: idempotent replication is wired into the API contract.
  • Airtable stays the operational layer where the business works in real time; Postgres via Supabase carries volume, RLS isolation and the Next.js applications.
  • Freshness is tuned per domain: scheduled replication, webhooks, ISR revalidation.
  • At Ownward, a mapping-driven sync engine connects 6 CRM/ERP systems to a single reference database, and 8 Next.js + Supabase applications run in production (internal data, 2026).
01

Two layers that coexist, not two camps

Here is the thesis, open to refutation: Airtable's published API limits are not constraints to endure — they are architecture specifications. Read correctly, they describe the system to build: an operational layer where the business works — Airtable — and a scale layer where volume and applications live — Postgres, in our case via Supabase. The pipeline between the two is not an emergency exit improvised under pressure. It is a component you design on day one, just like the data schema.

This hybrid architecture rests on a clean division of roles. Airtable excels at what it was built for: interfaces the business can edit, views, automations, extensions — the team stays autonomous in its own tool, in real time. Postgres excels at what it was built for: arbitrary SQL, volume, per-tenant isolation, concurrent access from web applications. "Every Supabase project gets a full Postgres database," Supabase writes: not an abstraction — the full engine.

The rest of this article documents that API contract, the four pipeline patterns, and the proof in production.

02

The API contract reads like a specification

Here is what Airtable's official pages publish as of August 12, 2026:

Published limitValueArchitectural consequence
API throughput per base5 req/s (status 429, then a 30 s wait)Application reads go through a replica
Throughput per personal access token50 req/s across all trafficThe pipeline is budgeted request by request
Monthly API calls1,000 (Free), 100,000 (Team), unlimited (Business, Enterprise Scale)Sync frequency is a cost parameter
Records per base1,000 (Free), 50,000 (Team), 125,000 (Business)Large history lives in Postgres
Paginated reads100 records max per requestAll replication is incremental, page by page
Attachment URLsGuaranteed active "at least 2 hours"Replicate the files, never the URLs

The most important line is not in this table: it is one sentence from the rate-limits documentation. "If you anticipate a higher read volume, we recommend using a caching proxy." The vendor itself designates the external read layer as the intended pattern. Using Airtable as the backend for high-traffic Next.js applications means building precisely that proxy — and building it in Postgres rather than an ephemeral cache, gaining joins, aggregations and row-level security along the way.

This is the reasoning at the heart of how we build: read a platform's published limits as specs, and design with them rather than against them.

03

Four patterns, each backed by a documented primitive

1. Scheduled replication. The PostgreSQL documentation describes logical replication as a publish/subscribe model: initial snapshot, then an incremental stream based on a replica identity. Airtable does not expose a transaction log; the equivalent is a scheduled task that reads changes and upserts them into Postgres. Two orchestrators fill that role: pg_cron on the Supabase side, or Trigger.dev scheduled tasks with deduplication.

2. Source of truth per domain. Flow direction is a per-table decision, not a religion. Contacts belong to Airtable and replicate into Postgres; application events are born in Postgres and flow back as aggregates. Supabase even publishes an Airtable foreign data wrapper — tables can be queried in SQL, read-only and without filter pushdown: ideal for exploration, and one more argument for scheduled replication in production.

3. Stable IDs. The Airtable record ID ("rec…") is immutable — it "cannot be altered in any way." Stored as an external key in Postgres, it makes every upsert idempotent. In the other direction, the write API supports native upsert:

{
  "performUpsert": { "fieldsToMergeOn": ["external_id"] },
  "records": [{ "fields": { "external_id": "crm-4812", "status": "active" } }]
}

Zero matches creates, exactly one updates, several fail the request. Idempotency is wired in both directions.

4. Portable schema conventions. Pagination by 100, field types, computed fields excluded from merge: everything demands an explicit mapping between the two layers. That mapping is a deliverable in its own right — we explained why in the schema is the deliverable. In our projects, it is stored as configuration inside Airtable itself: the business sees and governs what gets synced.

04

Freshness is a parameter, not a promise

The classic objection: "what about latency?" It assumes everything must be real time. But the business already works in real time, inside Airtable. Only the read layer is concerned, and its freshness is tuned per domain.

Three documented mechanisms combine. Airtable webhooks send a minimal ping; the actual content is fetched with a separate call, delivered at-least-once with up to 13 retries over roughly a day — and a refresh to automate, since a webhook expires after 7 days without one. Scheduled replication sets the baseline rhythm: hourly for a reference table, daily for history. On the application side, Next.js ISR drives revalidation: revalidate = 60 for hot content, revalidatePath on demand right after the pipeline writes; if a revalidation fails, the last generated version keeps being served.

For perspective: classic CDC captures changes from the transaction log, in order, at-least-once. Webhooks and scheduled replication play that role here, with the same requirement of idempotent writes: duplicate deliveries are normal.

What doing nothing costs — An application wired directly to the API shares the base's 5 req/s with every existing automation; each traffic spike is paid in 429 statuses and 30-second waits. On the Team plan, the 100,000 monthly call quota gets burned on redundant reads, after which all traffic is slowed to 2 req/s until the 1st of the month. And when the base approaches 50,000 records, the scale layer gets built in a rush — at the worst possible moment.

05

What it looks like in production

We operate this model. Eight production applications on Next.js + Supabase + Vercel — SaaS products, portals, dashboards — are fed by this kind of pipeline, across more than thirty delivered projects (Ownward internal data, 2026).

The pipeline is a mapping-driven sync engine: Python orchestrated on Trigger.dev, with its configuration stored in Airtable. It connects six CRM/ERP systems — HubSpot, Oscar, Dynamics 365, Hyperplanning, YPAREO over SOAP, and Airtable — to a single reference database. A new source means a new mapping, not new code; and zero manual re-entry. The choice of orchestrator follows the five criteria detailed in when to industrialize an automation.

And Airtable in all this? It remains the layer where the business is at home. In one year, we built seventeen custom extensions there with the official SDK (standard JavaScript/React), including a full CRM with telephony, templated emails and interactive maps. Adoption was immediate, precisely because the team never left its tool (Ownward internal data, 2026).

06

Which data lives in which layer

Our starting grid: it gets debated domain by domain, but it prevents the default decision — everything in a single layer.

Data type / usageLayerSync rule
Reference data edited by the business (contacts, catalog, config)Operational (Airtable), source of truthScheduled replication to Postgres; webhook to tighten latency
Day-to-day working data (sales pipeline, tracking)Operational (Airtable)Replicated to Postgres only if an application reads it
Large history, logs, application eventsScale (Postgres), source of truthBorn in Postgres; aggregates pushed back to Airtable via upsert if the business needs them
Data served to Next.js applications (high-traffic reads)Scale (Postgres)Read from the replica; freshness driven by ISR (revalidate, revalidatePath)
Multi-tenant data exposed to customersScale (Postgres)RLS isolation — each policy acts as an implicit WHERE; never served directly from the API
Files and attachmentsScale (object storage referenced in Postgres)Files replicated as they arrive; Airtable URLs expire, so they are never stored
Pipeline configuration (mappings, field correspondences)Operational (Airtable), source of truthRead by the sync engine on every run

Right-hand column, always the same requirement: a stable key (rec ID or external key), upsert writes, duplicate-free recovery.

07

The limits of this approach

This architecture has a fixed cost: a pipeline is software, with monitoring, error recovery and maintenance. Below a certain scale — one base, no external application, low read volume — Airtable alone is enough, and that is perfectly fine. Coexistence also introduces a deliberate replication delay: cases requiring strong read consistency are handled domain by domain, sometimes by reading the source directly. Finally, two layers means two models to keep aligned; without an explicit, versioned mapping, schema drift is a matter of months. None of this argues against the pattern — it is its price, and it can be budgeted.

Key takeaways

  • Treat every published API limit as an architecture requirement: throughput, quotas, record ceilings and ephemeral URLs sketch the pipeline you need to build.
  • Decide the source of truth table by table, and demand stable keys and idempotent writes everywhere — the API provides both primitives (immutable rec IDs, native upsert).
  • Tune freshness per domain instead of chasing uniform real time: scheduled replication as the baseline, webhooks to tighten, ISR to serve.

The coexistence of Airtable and Postgres is neither a compromise nor a transitional stage: it is the target architecture, where each layer does what it does best. Designing it on day one costs a few decisions; discovering it under pressure costs a full-blown project. Ownward helps companies perform better through technology — and above all, take back control.

Sources

Ownward internal data, 2026.

Data and pricing verified on August 12, 2026.

All trademarks belong to their respective owners. This article is neither sponsored nor endorsed by the vendors mentioned.

Is this on your desk right now?

Tell us where you stand. We reply with concrete elements — what we would do first, in your business.

Talk about your situation

Keep reading

All insights