---
title: Airtable
description: Read, create, and update Airtable
---

import { BlockInfoCard } from "@/components/ui/block-info-card"

<BlockInfoCard 
  type="airtable"
  color="#FFFFFF"
/>

{/* MANUAL-CONTENT-START:intro */}
[Airtable](https://airtable.com/) is a powerful cloud-based platform that combines the functionality of a database with the simplicity of a spreadsheet. It allows users to create flexible databases for organizing, storing, and collaborating on information.

With Airtable, you can:

- **Create custom databases**: Build tailored solutions for project management, content calendars, inventory tracking, and more
- **Visualize data**: View your information as a grid, kanban board, calendar, or gallery
- **Automate workflows**: Set up triggers and actions to automate repetitive tasks
- **Integrate with other tools**: Connect with hundreds of other applications through native integrations and APIs

In Sim, the Airtable integration enables your agents to interact with your Airtable bases programmatically. This allows for seamless data operations like retrieving information, creating new records, and updating existing data - all within your agent workflows. Use Airtable as a dynamic data source or destination for your agents, enabling them to access and manipulate structured information as part of their decision-making and task execution processes.
{/* MANUAL-CONTENT-END */}


## Usage Instructions

Integrates Airtable into the workflow. Can list bases, list tables (with schema), and create, get, list, or update records. Can also be used in trigger mode to trigger a workflow when an update is made to an Airtable table.



## Actions

### `airtable_list_bases`

List all bases the authenticated user has access to

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `offset` | string | No | Pagination offset for retrieving additional bases |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `bases` | array | Array of Airtable bases with id, name, and permissionLevel |
|   ↳ `id` | string | Base ID \(starts with "app"\) |
|   ↳ `name` | string | Base name |
|   ↳ `permissionLevel` | string | Permission level \(none, read, comment, edit, create\) |
| `metadata` | json | Pagination and count metadata |
|   ↳ `offset` | string | Offset for next page of results |
|   ↳ `totalBases` | number | Number of bases returned |

### `airtable_list_tables`

List all tables and their schema in an Airtable base

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `baseId` | string | Yes | Airtable base ID \(starts with "app", e.g., "appXXXXXXXXXXXXXX"\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tables` | array | List of tables in the base with their schema |
|   ↳ `id` | string | Table ID \(starts with "tbl"\) |
|   ↳ `name` | string | Table name |
|   ↳ `description` | string | Table description |
|   ↳ `primaryFieldId` | string | ID of the primary field |
|   ↳ `fields` | array | List of fields in the table |
|     ↳ `id` | string | Field ID \(starts with "fld"\) |
|     ↳ `name` | string | Field name |
|     ↳ `type` | string | Field type \(singleLineText, multilineText, number, checkbox, singleSelect, multipleSelects, date, dateTime, attachment, linkedRecord, etc.\) |
|     ↳ `description` | string | Field description |
|     ↳ `options` | json | Field-specific options \(choices, etc.\) |
| `metadata` | json | Base info and count metadata |
|   ↳ `baseId` | string | The base ID queried |
|   ↳ `totalTables` | number | Number of tables in the base |

### `airtable_list_records`

Read records from an Airtable table

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `baseId` | string | Yes | Airtable base ID \(starts with "app", e.g., "appXXXXXXXXXXXXXX"\) |
| `tableId` | string | Yes | Table ID \(starts with "tbl"\) or table name |
| `maxRecords` | number | No | Maximum number of records to return \(default: all records\) |
| `filterFormula` | string | No | Formula to filter records \(e.g., "\(\{Field Name\} = \'Value\'\)"\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `records` | array | Array of retrieved Airtable records |
|   ↳ `id` | string | Record ID |
|   ↳ `createdTime` | string | Record creation timestamp |
|   ↳ `fields` | json | Record field values |
| `metadata` | json | Operation metadata including pagination offset and total records count |
|   ↳ `offset` | string | Pagination offset for next page |
|   ↳ `totalRecords` | number | Number of records returned |

### `airtable_get_record`

Retrieve a single record from an Airtable table by its ID

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `baseId` | string | Yes | Airtable base ID \(starts with "app", e.g., "appXXXXXXXXXXXXXX"\) |
| `tableId` | string | Yes | Table ID \(starts with "tbl"\) or table name |
| `recordId` | string | Yes | Record ID to retrieve \(starts with "rec", e.g., "recXXXXXXXXXXXXXX"\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `record` | json | Retrieved Airtable record |
|   ↳ `id` | string | Record ID |
|   ↳ `createdTime` | string | Record creation timestamp |
|   ↳ `fields` | json | Record field values |
| `metadata` | json | Operation metadata |
|   ↳ `recordCount` | number | Number of records returned \(always 1\) |

### `airtable_create_records`

Write new records to an Airtable table

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `baseId` | string | Yes | Airtable base ID \(starts with "app", e.g., "appXXXXXXXXXXXXXX"\) |
| `tableId` | string | Yes | Table ID \(starts with "tbl"\) or table name |
| `records` | json | Yes | Array of records to create, each with a `fields` object |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `records` | array | Array of created Airtable records |
|   ↳ `id` | string | Record ID |
|   ↳ `createdTime` | string | Record creation timestamp |
|   ↳ `fields` | json | Record field values |
| `metadata` | json | Operation metadata |
|   ↳ `recordCount` | number | Number of records created |

### `airtable_update_record`

Update an existing record in an Airtable table by ID

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `baseId` | string | Yes | Airtable base ID \(starts with "app", e.g., "appXXXXXXXXXXXXXX"\) |
| `tableId` | string | Yes | Table ID \(starts with "tbl"\) or table name |
| `recordId` | string | Yes | Record ID to update \(starts with "rec", e.g., "recXXXXXXXXXXXXXX"\) |
| `fields` | json | Yes | An object containing the field names and their new values |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `record` | json | Updated Airtable record |
|   ↳ `id` | string | Record ID |
|   ↳ `createdTime` | string | Record creation timestamp |
|   ↳ `fields` | json | Record field values |
| `metadata` | json | Operation metadata |
|   ↳ `recordCount` | number | Number of records updated \(always 1\) |
|   ↳ `updatedFields` | array | List of field names that were updated |

### `airtable_update_multiple_records`

Update multiple existing records in an Airtable table

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `baseId` | string | Yes | Airtable base ID \(starts with "app", e.g., "appXXXXXXXXXXXXXX"\) |
| `tableId` | string | Yes | Table ID \(starts with "tbl"\) or table name |
| `records` | json | Yes | Array of records to update, each with an `id` and a `fields` object |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `records` | array | Array of updated Airtable records |
|   ↳ `id` | string | Record ID |
|   ↳ `createdTime` | string | Record creation timestamp |
|   ↳ `fields` | json | Record field values |
| `metadata` | json | Operation metadata |
|   ↳ `recordCount` | number | Number of records updated |
|   ↳ `updatedRecordIds` | array | List of updated record IDs |

### `airtable_get_base_schema`

Get the schema of all tables, fields, and views in an Airtable base

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `baseId` | string | Yes | Airtable base ID \(starts with "app", e.g., "appXXXXXXXXXXXXXX"\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tables` | json | Array of table schemas with fields and views |
| `metadata` | json | Operation metadata including total tables count |



## Triggers

A **Trigger** is a block that starts a workflow when an event happens in this service.

### Airtable Webhook

Trigger workflow from Airtable record changes like create, update, and delete events (requires Airtable credentials)

#### Configuration

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `triggerCredentials` | string | Yes | This trigger requires airtable credentials to access your account. |
| `baseId` | string | Yes | The ID of the Airtable Base this webhook will monitor. |
| `tableId` | string | Yes | The ID of the table within the Base that the webhook will monitor. |
| `includeCellValues` | boolean | No | Enable to receive the complete record data in the payload, not just changes. |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `payloads` | array | The payloads of the Airtable changes |
|   ↳ `timestamp` | string | Timestamp of the change |
|   ↳ `baseTransactionNumber` | number | Transaction number |
| `latestPayload` | object | The most recent payload from Airtable |
|   ↳ `timestamp` | string | ISO 8601 timestamp of the change |
|   ↳ `baseTransactionNumber` | number | Transaction number |
|   ↳ `payloadFormat` | string | Payload format version \(e.g., v0\) |
|   ↳ `actionMetadata` | object | Metadata about who made the change |
|     ↳ `source` | string | Source of the change \(e.g., client, publicApi\) |
|     ↳ `sourceMetadata` | object | Source metadata including user info |
|       ↳ `user` | object | User who made the change |
|         ↳ `id` | string | User ID |
|         ↳ `email` | string | User email |
|         ↳ `name` | string | User name |
|         ↳ `permissionLevel` | string | User permission level |
|   ↳ `changedTablesById` | object | Tables that were changed \(keyed by table ID\) |
|     ↳ `changedRecordsById` | object | Changed records keyed by record ID |
|       ↳ `current` | object | Current state of the record |
|         ↳ `cellValuesByFieldId` | object | Cell values keyed by field ID |
|     ↳ `createdRecordsById` | object | Created records by ID |
|     ↳ `destroyedRecordIds` | array | Array of destroyed record IDs |
| `airtableChanges` | array | Changes made to the Airtable table |
|   ↳ `tableId` | string | Table ID |
|   ↳ `recordId` | string | Record ID |
|   ↳ `changeType` | string | Type of change \(created, changed, destroyed\) |
|   ↳ `cellValuesByFieldId` | object | Cell values by field ID |

