> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt # Linking Airtable as a source Canonical URL: https://posthog.com/docs/data-pipelines/sources/airtable > **Cloud region:** This page uses US Cloud hosts. For an EU Cloud project, use `https://eu.posthog.com` instead of `https://app.posthog.com` (app host for links). ## On this page - [Adding a data source](#adding-a-data-source) - [Available tables](#available-tables) - [Sync limitations](#sync-limitations) - [Configuration](#configuration) - [Supported tables](#supported-tables) ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_9608fcca70) ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_dark_a92b0e022d) Let AI connect your sources for you Skip the manual setup — run this in your project and the wizard auto-detects your databases and APIs and connects them to PostHog. `npx @posthog/wizard warehouse` ![PostHog Wizard hedgehog](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png) ![](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png)Let AI connect your sources for you The Airtable connector pulls your Airtable data — bases, tables, and records — into the PostHog data warehouse. ## Adding a data source 1. Go to the [sources tab](https://app.posthog.com/data-management/sources) of the data pipeline section in PostHog. 2. Click **\+ New source** and then click **Link** next to Airtable. 3. You need a personal access token from Airtable. Create one from [airtable.com/create/tokens](https://airtable.com/create/tokens). Grant the `data.records:read` and `schema.bases:read` scopes so all tables can sync, and grant access to the bases you want to sync. Copy the token value. 4. Back in PostHog, paste the token in the **Personal access token** field and click **Next**. 5. Select the tables you want to sync, set the sync method and frequency, then click **Import**. Once the syncs are complete, you can start using Airtable data in PostHog. ## Available tables | Table | Description | Sync method | | --- | --- | --- | | `bases` | Metadata listing of Airtable bases your token can access | Full refresh | | `tables` | Schema information for tables within each base | Full refresh | | `records` | Data rows from all tables across all accessible bases | Incremental | **Incremental** tables sync only new records on each run. **Full refresh** tables reload all data on each sync. ## Sync limitations - Incremental sync for records is append-only using the `createdTime` field. Updates to existing records are not detected — use a full refresh to catch those. - Records expose no last-modified field, so there is no way to incrementally sync updates. - Each record row carries `_base_id` and `_table_id` fields to identify its source base and table. - Record IDs are only unique within a table, so records use the composite primary key (`_base_id`, `_table_id`, `id`). ## Configuration | Option | Type | Required | | --- | --- | --- | | `Personal access token` | password | Yes | ## Supported tables | Table | Description | Sync method | Incremental field | Primary key | | --- | --- | --- | --- | --- | | `bases` | — | Full refresh | — | — | | `tables` | — | Full refresh | — | — | | `records` | — | Incremental, Full refresh | createdTime | — |