Airtable
Reads and writes records of an Airtable table — the spreadsheet with types that many teams use as a light database. Fields are written by name, as you see them in Airtable, and a batch of records is split and paced for you.
Setup
Connect Airtable under Settings → Credentials (OAuth) and grant it the bases the flow needs; then pick the credential in the node. Base and table come from dropdowns that read the schema. A base is app…, a table tbl… or its name, a record rec….
Operations
| Value | In the dropdown | What it does |
|---|---|---|
| listRecords | List records | Records of a table, through a view and a filter formula if you give them. Iterable over records. |
| getRecord | Get record | One record by its ID, with every field. |
| createRecord | Create record | Adds a record — or many, with Batch. |
| updateRecord | Update record | Changes the fields you give and leaves the rest. |
| upsertRecord | Upsert record | Finds a record by up to three fields and updates it, or creates it. Fails if more than one matches. |
| deleteRecord | Delete record | Deletes a record — or many, with Batch. Through the API there is no trash. |
| listBases | List bases | The bases the credential reaches. Iterable over bases. |
| getBaseSchema | Get base schema | Tables with their fields (type, select options) and views. Iterable over tables. |
Convert values to the field's type (Airtable's typecast) is on by default: "Yes" fills a checkbox and an unknown option is added to a select. Airtable takes 10 records per call and 5 calls a second per base; the node splits a batch and waits between calls.
AI toolkit mode
Once the credential is picked, the node asks for a Mode. AI toolkit turns it into eight tools that an AI Node — or an MCP client, through one of your MCP servers — calls by name. The model writes field values by name as a JSON object, e.g. {"Name": "Ana", "Status": "Done"}, and can read the base's schema first so names and options match.
| Tool | Arguments |
|---|---|
| list_records | base_id · table_id · view_id? · filter_by_formula? · only_fields? · sort_field? · sort_direction? · max_records? |
| get_record | base_id · table_id · record_id |
| create_record | base_id · table_id · fields? · records? · typecast? |
| update_record | base_id · table_id · record_id? · fields? · records? · typecast? |
| upsert_record | base_id · table_id · merge_on · fields? · records? · typecast? |
| delete_record | base_id · table_id · record_id? · record_ids? — blocked by default |
| list_bases | — |
| get_base_schema | base_id |
When the node has a base (and a table), base_id and table_id become optional and default to them.
What you control
- Where the model can work. This node's base (the default) keeps the model in one base — the one you pick in the toolkit settings or, when empty, the Single operation's — and in one table if you pick it. Another base or table is refused before Airtable is called, and
list_basesonly shows that base. Any base opens every base the credential reaches. - Characters per call sent to the model. 20,000 by default, anything from 1,000 to 200,000.
- Deleting starts blocked. Through the API there is no trash. Unblock
delete_recordunder Block these tool calls if the agent needs it; block updates the same way to make the agent read-and-add only.
What goes back to the model
The same response as the operation. list_records returns 50 records unless the model asks for more, up to 200 — the model decides; a limit set in Single operation doesn't count in toolkit mode. Records that don't fit the characters limit are left out whole, with a notes field saying how many. Arguments are used as written: a {{payload.x}} the model writes is not resolved against the flow.
Testing a tool
operation in their payload that names another tool is refused.{ "operation": "list_records", "filter_by_formula": "{Status} = \"Open\"", "max_records": 5 }Gotchas
- A failed batch may be half written. Batches go 10 records per call; when one call fails the earlier ones already wrote, and the error says how many.
- An upsert with two matches fails instead of picking one. Match on fields that identify a single record — an email, an external ID.
- A 429 waits 30 seconds and retries once. Airtable's limit is 5 requests a second per base.
- Field names are exact. A misspelled name is an error from Airtable;
get_base_schemagives the model the real ones.