Airtable
Databases integration · 9 node(s) including 1 trigger.
00Overview
Every field below is exactly what you see in the Flomation editor. Fields marked ● live picker let you choose from a list pulled live from your account — no IDs to look up.
01Connecting Airtable
Add your credentials as a Flomation environment secret, then pick them in each node. The connection fields are:
| Field | Type | Details | |
|---|---|---|---|
| Airtable Personal Access Token | secret | Required | pat... |
${secrets.your_secret}.02Base
Base: Get Schema
airtable/base_get_schema · Action
Get the schema of a base — its tables, and each table's fields (name, type, options) and views. Requires the schema.bases:read scope. Returns the tables array.
| Field | Type | Details | |
|---|---|---|---|
| Base ID | string | Required | appXXXXXXXXXXXXXX |
Returns: tables, count, result, tool_result, success, error
Base: List
airtable/base_list · Action
List the Airtable bases the token can access, with their IDs and permission levels. Optionally filter by permission level. Requires the schema.bases:read scope.
| Field | Type | Details | |
|---|---|---|---|
| Permission Level | string | Comma-separated filter: read, comment, edit, create (optional) |
Returns: bases, count, tool_result, success, error
03Record
Record: Create
airtable/record_create · Action
Create a record in an Airtable table. Set fields as simple key/value rows or as a JSON object for typed values (arrays, linked records, attachments). Returns the new record and its ID.
| Field | Type | Details | |
|---|---|---|---|
| Base ID | string | Required | appXXXXXXXXXXXXXX |
| Table (ID or name) | string | Required | tblXXXXXXXXXXXXXX or Table 1 |
| Fields | key_value_array | Field name = value (for simple text/number/single-select fields) | |
| Fields (JSON, advanced) | object | {"Name":"Ada","Tags":["A","B"],"Done":true} | |
| Typecast | boolean | Coerce string values to the field's type / create missing select options |
Returns: id, fields, record, tool_result, success, error
Record: Delete
airtable/record_delete · Action
Delete a record from an Airtable table by its record ID. Returns the deleted record ID.
| Field | Type | Details | |
|---|---|---|---|
| Base ID | string | Required | appXXXXXXXXXXXXXX |
| Table (ID or name) | string | Required | tblXXXXXXXXXXXXXX or Table 1 |
| Record ID | string | Required | recXXXXXXXXXXXXXX |
Returns: id, deleted, tool_result, success, error
Record: Get
airtable/record_get · Action
Retrieve a single record from an Airtable table by its record ID. Returns the record and its fields.
| Field | Type | Details | |
|---|---|---|---|
| Base ID | string | Required | appXXXXXXXXXXXXXX |
| Table (ID or name) | string | Required | tblXXXXXXXXXXXXXX or Table 1 |
| Record ID | string | Required | recXXXXXXXXXXXXXX |
Returns: id, fields, record, tool_result, success, error
Record: List
airtable/record_list · Action
List or search records in an Airtable table. Filter with a formula, sort, restrict to a view, project fields, and page through results (or return all). Returns matching records.
| Field | Type | Details | |
|---|---|---|---|
| Base ID | string | Required | appXXXXXXXXXXXXXX |
| Table (ID or name) | string | Required | tblXXXXXXXXXXXXXX or Table 1 |
| Filter by Formula | string | NOT({Name} = 'Admin') | |
| View | string | View name or ID (optional) | |
| Return Fields | string | Comma-separated field names to return (optional) | |
| Sort Field | string | Field name to sort by (optional) | |
| Sort Direction | string | choices: Ascending, Descending | |
| Sort (JSON, advanced) | object | [{"field":"Created","direction":"desc"}] (overrides Sort Field) | |
| Return All | boolean | Page through every matching record (up to a safety cap) | |
| Max Records | integer | Cap on total records returned (optional) | |
| Page Size | integer | Records per page, max 100 (default 100) | |
| Offset | string | Pagination offset from a previous page (optional) |
Returns: records, count, offset, result, tool_result, success, error
Record: Update
airtable/record_update · Action
Update fields on an existing Airtable record by its record ID. Only the supplied fields change. Returns the updated record.
| Field | Type | Details | |
|---|---|---|---|
| Base ID | string | Required | appXXXXXXXXXXXXXX |
| Table (ID or name) | string | Required | tblXXXXXXXXXXXXXX or Table 1 |
| Record ID | string | Required | recXXXXXXXXXXXXXX |
| Fields | key_value_array | Field name = value (for simple text/number/single-select fields) | |
| Fields (JSON, advanced) | object | {"Name":"Ada","Tags":["A","B"],"Done":true} | |
| Typecast | boolean | Coerce string values to the field's type / create missing select options |
Returns: id, fields, record, tool_result, success, error
Record: Create or Update
airtable/record_upsert · Action
Upsert a record: Airtable updates the record whose Match Fields equal the given values, or creates a new one if none match. Returns the record and whether it was created.
| Field | Type | Details | |
|---|---|---|---|
| Base ID | string | Required | appXXXXXXXXXXXXXX |
| Table (ID or name) | string | Required | tblXXXXXXXXXXXXXX or Table 1 |
| Match Fields | string | Required | Comma-separated field names to match on, e.g. Email |
| Fields | key_value_array | Field name = value (must include the Match Fields) | |
| Fields (JSON, advanced) | object | {"Email":"a@b.com","Name":"Ada"} | |
| Typecast | boolean | Coerce string values to the field's type / create missing select options |
Returns: id, created, fields, record, result, tool_result, success, error
04Triggers
Airtable Trigger
trigger/airtable_poll · Trigger
Triggers a flow when records are created or updated in an Airtable table. Polls the table on an interval using a Created Time or Last Modified Time field.
| Field | Type | Details | |
|---|---|---|---|
| Base ID | string | Required | appXXXXXXXXXXXXXX |
| Table (ID or name) | string | Required | tblXXXXXXXXXXXXXX or Table 1 |
| Trigger Field | string | Required | A 'Created Time' or 'Last Modified Time' field name |
| Trigger On | string | choices: Record created, Record updated, Record created or updated | |
| View | string | Restrict to a view name or ID (optional) | |
| Filter by Formula | text | Extra Airtable formula, ANDed with the timestamp filter (optional) | |
| Poll Interval | string | e.g. 1m, 5m | |
| Download Attachments | boolean | Download attachment fields as binary | |
| Attachment Fields | string | Comma-separated attachment field names (case sensitive) |
Returns: record_id, created_time, fields, triggered_at
05Notes & Limitations
Behaviours and constraints worth knowing before you build with these nodes.
- Rate limits apply per base at roughly five requests per second, and exceeding them returns a temporary error and a short cooldown, so pace high-volume or looped record actions accordingly.
- List Records returns at most 100 records per page, so enable the return-all option or page through results when a table holds more rows than that.
- Field names are case-sensitive and must match your Airtable column names exactly, including spaces and capitalisation, or the value will be silently ignored or rejected.
- Upsert requires the chosen Match Fields to identify records uniquely; if more than one existing record matches the given values, the action fails rather than guessing which to update.
- Deleting a record is permanent and cannot be recovered through automation, so confirm the record ID before running a Delete step in a flow.
- Schema and base-listing actions require the schema.bases:read scope on the connection, so grant it when setting up the token or those steps will fail with a permission error.