> For the complete documentation index, see [llms.txt](https://docs.stackai.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.stackai.com/integrations/catalog/airtable.md).

# Airtable

Query an Airtable base with natural language or semantic search.

### Connectors

Choose the connector that matches your authentication method. The options below use the names shown in StackAI.

| Connector                        | Authentication        |
| -------------------------------- | --------------------- |
| Airtable                         | OAuth sign-in         |
| Airtable (Personal Access Token) | Personal Access Token |

#### Airtable

Connect to Airtable to access and manipulate your structured data. Supports reading and writing records, managing webhooks, and accessing schema information.

**Set up in Airtable**

1. Sign in to Airtable in the window that opens.

**Set up in StackAI**

1. Open **Settings → Connections**, add a connection, and select **Airtable**.
2. Select **Connect**, sign in to the provider account, and review the requested access. Complete authorization to return to StackAI.
3. Save the connection and check its connection status. Select this saved connection when configuring an action or feature that uses it.

StackAI obtains the OAuth credentials during sign-in. You do not need to paste an access token or refresh token.

**Provider documentation:** [Setup reference](https://airtable.com/developers/web/guides/oauth-integrations).

#### Airtable (Personal Access Token)

Connect to Airtable using a Personal Access Token. Ensure your PAT has the following scopes: data.records:read, data.records:write, schema.bases:read, user.email:read. The PAT must have access to the bases you want to query.

**Set up in Airtable**

1. Sign in to Airtable and open the developer hub, then click **Personal access tokens** under the Developers section (or go to <https://airtable.com/create/tokens>).
2. Click **Create token**, give it a name, and add the scopes `data.records:read`, `data.records:write`, `schema.bases:read`, and `user.email:read`.
3. Under access, add the specific bases (or workspaces) you want the token to reach.
4. Create the token and copy it immediately; it is shown only once.

**Set up in StackAI**

1. Open **Settings → Connections**, add a connection, and select **Airtable (Personal Access Token)**.
2. Enter the credentials and connection details in the fields below.
3. Save the connection and check its connection status. Select this saved connection when configuring an action or feature that uses it.

**Connection fields**

| StackAI field         | Required | What to enter                                                                                                                                                                                 |
| --------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Personal Access Token | Yes      | Your Airtable Personal Access Token. Required scopes: data.records:read, data.records:write, schema.bases:read, user.email:read. [Provider instructions](https://airtable.com/create/tokens). |

**Provider documentation:** [Setup reference](https://support.airtable.com/docs/creating-personal-access-tokens).

#### Verify the connection

Check that the connection is healthy. Then run a read operation against a resource the connected account can access. A successful connection check confirms authentication; it does not guarantee permission for every action.

If access is denied, check the credential or OAuth permissions, the selected account or environment, and access to the specific resource. Update expired credentials or reconnect after permissions change.

#### Detailed setup guides

* [Connect Airtable and select a base](/integrations/catalog/airtable/connect-airtable-and-select-a-base.md)

## Use an action

1. Add the required **Airtable** action to the workflow.
2. Select a connection when the action requests one.
3. Complete the required fields. Use the reference picker when a value comes from another workflow step.
4. Run the workflow and inspect the action’s output. Check the result before using it in a later step.

### Actions

#### Query Airtable

Query an Airtable base with natural language, direct SQL, or semantic search

**Inputs**

| Field       | Type                      | Required | Description                                                                                                                                                                                                                                                      |
| ----------- | ------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Base ID     | select (string)           | Yes      | The ID of the Airtable base to query. Options load from the selected connection.                                                                                                                                                                                 |
| Tables      | multiple\_select (string) | Yes      | The tables to query. Select one or more tables from the base. Options load from the selected connection.                                                                                                                                                         |
| View        | string                    | No       | Optional comma-separated view IDs. Leave empty to query without view filter.                                                                                                                                                                                     |
| Query       | string                    | Yes      | The query to execute. Use natural language for Text to SQL/Semantic modes, or write SQL directly for Direct SQL mode.                                                                                                                                            |
| Search Type | select (string)           | No       | The type of search to perform. Text to SQL mode converts natural language to SQL queries, Direct SQL mode accepts direct SQL queries, and Semantic mode finds records by meaning/context. Available values: Text to SQL, Semantic, Direct SQL. Default: formula. |
| Max Records | integer                   | No       | Maximum number of records to fetch per selected table. Defaults to 10000, maximum 100,000. Default: 10000.                                                                                                                                                       |

**Outputs**

| Field   | Type        | Description                      |
| ------- | ----------- | -------------------------------- |
| Query   | string      | The SQL query that was executed. |
| Results | dict\_array | Results of the Airtable query.   |

#### Write to Airtable

Write data to an Airtable base using natural language

**Inputs**

| Field   | Type            | Required | Description                                                                         |
| ------- | --------------- | -------- | ----------------------------------------------------------------------------------- |
| Base ID | select (string) | Yes      | The ID of the Airtable base to write to. Options load from the selected connection. |
| Table   | select (string) | Yes      | The name or ID of the table to write to. Options load from the selected connection. |
| View    | string          | No       | Optional view ID to write to. Leave empty to write without filtering by view.       |
| Data    | string          | Yes      | The data to write to Airtable in natural language format.                           |

**Outputs**

| Field     | Type   | Description                               |
| --------- | ------ | ----------------------------------------- |
| Record ID | string | The ID of the created record.             |
| Fields    | dict   | The fields that were written to Airtable. |

#### Update Airtable Record

Update an existing Airtable record using natural language

**Inputs**

| Field     | Type            | Required | Description                                                                                             |
| --------- | --------------- | -------- | ------------------------------------------------------------------------------------------------------- |
| Base ID   | select (string) | Yes      | The ID of the Airtable base containing the record to update. Options load from the selected connection. |
| Table     | select (string) | Yes      | The name or ID of the table containing the record to update. Options load from the selected connection. |
| Record ID | string          | Yes      | The ID of the record to update.                                                                         |
| Data      | string          | Yes      | The data to update in natural language format.                                                          |

**Outputs**

| Field     | Type   | Description                               |
| --------- | ------ | ----------------------------------------- |
| Record ID | string | The ID of the updated record.             |
| Fields    | dict   | The fields that were updated in Airtable. |

#### Delete Airtable Record

Delete a record from an Airtable base

**Inputs**

| Field     | Type            | Required | Description                                                                                             |
| --------- | --------------- | -------- | ------------------------------------------------------------------------------------------------------- |
| Base ID   | select (string) | Yes      | The ID of the Airtable base containing the record to delete. Options load from the selected connection. |
| Table     | select (string) | Yes      | The name or ID of the table containing the record to delete. Options load from the selected connection. |
| Record ID | string          | Yes      | The ID of the record to delete.                                                                         |

**Outputs**

| Field     | Type    | Description                                  |
| --------- | ------- | -------------------------------------------- |
| Deleted   | boolean | Whether the record was successfully deleted. |
| Record ID | string  | The ID of the deleted record.                |

### Triggers

A trigger starts a workflow when its configured event occurs. Configure the event and filters before enabling the trigger.

#### On Record Change

Trigger a workflow execution when records are created, updated, or deleted in an Airtable table.

**Configuration**

| Field    | Type            | Required | Description                                                                                            |
| -------- | --------------- | -------- | ------------------------------------------------------------------------------------------------------ |
| Base ID  | select (string) | Yes      | The ID of the Airtable base to monitor for changes. Options load from the selected connection.         |
| Table ID | select (string) | Yes      | The ID of the table within the base to monitor for changes. Options load from the selected connection. |

**Event inputs**

| Field      | Type   | Required | Description                                                                                                      |
| ---------- | ------ | -------- | ---------------------------------------------------------------------------------------------------------------- |
| Event Type | string | Yes      | The type of change that occurred (e.g., 'record.created', 'record.updated', 'record.deleted'). Default: None.    |
| Record ID  | string | Yes      | The ID of the record that was changed. Default: None.                                                            |
| Base ID    | string | Yes      | The ID of the base containing the changed record. Default: None.                                                 |
| Table ID   | string | Yes      | The ID of the table containing the changed record. Default: None.                                                |
| Data       | string | No       | Complete data from the webhook payload including record details, metadata, and change information (JSON format). |

**Outputs**

| Field      | Type   | Description                                            |
| ---------- | ------ | ------------------------------------------------------ |
| Event Type | string | The type of change that occurred.                      |
| Record ID  | string | The ID of the record that was changed.                 |
| Base ID    | string | The ID of the base containing the changed record.      |
| Table ID   | string | The ID of the table containing the changed record.     |
| Data       | string | The data of the record that was changed (JSON format). |

### Important behavior

If an operation is denied, check the connection’s granted permissions and the account’s access in the provider. Reauthorize the connection when it needs additional permissions.

Actions that create, update, send, or delete data can change the connected service. Review their inputs before running them. A retry can repeat an operation; consider this when configuring retries for actions that change data.

The catalog lists the fields and capabilities available in the supplied provider definition. Availability can also depend on your deployment and organization’s Feature Access settings.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.stackai.com/integrations/catalog/airtable.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
