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

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

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

{/* 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.



## Tools

### `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 |
| `fields` | string | No | No description |

#### 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 |


