---
"@context": https://schema.org
"@type": TechArticle
"@id": https://www.twilio.com/docs/data-destinations/destination/airtable#article
headline: Airtable destination
description: Learn how to send event data to Airtable, streaming events into an automatically created table in your own Airtable base.
url: https://www.twilio.com/docs/data-destinations/destination/airtable
inLanguage: en
dateModified: 2026-11-04T17:24:28.000Z
author:
  "@type": Organization
  name: Twilio Developer Education Team
publisher:
  "@type": Organization
  name: Twilio
---

# Airtable destination

> \[!IMPORTANT]
>
> Data Destinations is currently available as a Private Beta product and the information contained in this document is subject to change. Data Destinations is not a HIPAA Eligible Service or PCI compliant and should not be enabled in workflows that are subject to HIPAA or PCI. To learn more, see [Private beta legal information](/docs/data-destinations#private-beta-legal-information).

[Airtable](https://airtable.com/) is a collaborative database app that stores
structured records in bases and tables you control. This destination sends
events into an automatically created table in your own
Airtable base.

### Destination overview

* **Category**: CRM, Database
* **Release status**: Beta
* **Authentication**: API token
* **Regional availability**: US1

## Join the Data Destinations private beta

[Sign up](https://airtable.com/appaJfyV6LiIFMxuP/pagIaOAtKsQVxTfdW/form)

Get early access to native destinations for data warehouses, observability tools, and event pipelines.

## Eligible events

You can send all [event types](/docs/events/event-types-overview) supported by Event
Streams to Airtable. This destination has no user-identifier
restriction.

> \[!WARNING]
>
> Airtable enforces hard limits of 5 requests per second and 10 records per
> request. This results in a limit of 50 events per second. If your
> subscription generates more than 50 events per second, Twilio retries
> delivery with backoff.

## Get started

### Prerequisites

Before you set up an Airtable destination, make sure you have:

* **An Airtable base that you control**: Twilio creates a table in this base the first time you save a subscription. The table includes four fixed columns: `event_id`, `event_timestamp`, `event_type`, and `payload`. Don't create the table yourself, rename it, or edit its columns. If the table isn't created by Twilio or has unexpected changes to its columns, Twilio might reject further delivery to Airtable because of a schema mismatch.
* **An Airtable Personal Access Token scoped to that base**: This token must have the `data.records:write`, `schema.bases:read`, and `schema.bases:write` scopes. To learn more, see the Airtable guide to [creating personal access tokens](https://support.airtable.com/docs/creating-personal-access-tokens).

## Create the destination

> \[!NOTE]
>
> See [Set up a destination](/docs/data-destinations/destination-setup) for the full UI and Destinations API setup flow common to every destination type.

### Twilio Console

To create an Airtable destination in the Twilio Console:

1. From your Airtable account, gather the settings listed in [Destination settings](#destination-settings).
2. In the Twilio Console, go to **Data** > **Data Destinations** > **Destinations** > **Add destination subscription**.
3. Complete the **Add destination subscription** wizard.

### Destinations API

To create an Airtable destination through the Destinations API, send a `POST` request to the Destinations endpoint and set `destinationType` to `airtable`. For authentication and the other request body fields, see [Create a destination](/docs/data-destinations/api-quickstart#create-a-destination).

```text title="Create a destination"
POST "https://destinations.twilio.com/v1/ControlPlane/Destinations"
```

Set the `config` object in the request body as follows:

| Name                                              | Type   | Description                          |
| ------------------------------------------------- | ------ | ------------------------------------ |
| `baseId` <br />(**Required**)                     | string | Airtable base that receives records. |
| `credentials.credentialType` <br />(**Required**) | string | Set to `API_TOKEN`.                  |
| `credentials.token` <br />(**Required**)          | string | Your Airtable personal access token. |

The following example shows a request body. Replace the uppercase placeholder values with your own.

```json title="Example request body"
{
  "destinationType": "airtable",
  "name": "My Airtable destination",
  "config": {
    "baseId": "BASE_ID",
    "credentials": {
      "credentialType": "API_TOKEN",
      "token": "PERSONAL_ACCESS_TOKEN"
    }
  }
}
```

## Destination settings

| Field                 | Description                                                                                           | Required | Default or choices |
| --------------------- | ----------------------------------------------------------------------------------------------------- | -------- | ------------------ |
| Personal Access Token | Airtable Personal Access Token. Sent as a bearer token on every request. Sensitive, stored encrypted. | Yes      | None               |
| Base ID               | The Airtable base that receives records. Cannot be changed after the destination is created.          | Yes      | None               |

Twilio authenticates to Airtable by using your **Personal Access Token**, sent
as an `Authorization: Bearer` header on every request. You can rotate your
token at any time by updating the destination. Unlike the Base ID, the
token isn't locked once the destination is created.

## Default mappings

| Field         | Airtable column   |
| ------------- | ----------------- |
| Event ID      | `event_id`        |
| Event time    | `event_timestamp` |
| Event type    | `event_type`      |
| Event payload | `payload` (JSON)  |

Twilio delivers records using the Airtable upsert API, matching on `event_id`,
so a retried or duplicate delivery updates the existing row instead of
creating a duplicate one.

## Verification and troubleshooting

When you save an Airtable destination, Twilio verifies your Personal Access Token
and confirms your base is reachable before marking the destination active. This
check doesn't confirm your token has permission to create tables. Twilio
verifies that only the first time you save a subscription, when it attempts
to create the destination table.

Twilio doesn't currently offer a way to manually trigger a test event for this destination from either the Console or the CLI. To confirm delivery is working, wait for a real event of a subscribed type to fire.

### Common errors

| Cause                                                                                        | What you'll see                                                                                    | Fix                                                                |
| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| Invalid or revoked Personal Access Token                                                     | Validation fails with an auth error                                                                | Re-check the token in Airtable and update the destination          |
| Base doesn't exist, or isn't visible to the token                                            | Validation fails with a resource error                                                             | Confirm the Base ID and that the token has access to it            |
| Token lacks table-creation permission                                                        | Table creation fails when you save a subscription                                                  | Grant the token the `schema.bases:write` scope                     |
| Table already exists with a different schema (for example, its columns were edited manually) | Table creation fails with a resource error                                                         | Delete the conflicting table, or use a different base              |
| Airtable rate-limiting your base (5 requests/sec)                                            | Delivery errors reported in the [Debugger](/docs/usage/troubleshooting/debugging-your-application) | Reduce your event volume, or spread bindings across multiple bases |

If Twilio can't deliver events to your table, Twilio sends an error notification to the [Debugger](/docs/usage/troubleshooting/debugging-your-application) (available in US1 region only). If Twilio continues to encounter delivery errors, Twilio notifies you every 20 minutes after the initial error.

## Additional resources

* [Destinations overview](/docs/data-destinations/destinations-overview)
* [Set up a destination](/docs/data-destinations/destination-setup)
* [Event types reference](/docs/events/event-types-overview)
