English
Airtable row changed
Starts the workflow when a row in an Airtable table is created or changed. What changed lands in data.airtable, with no triggering email.
The Airtable row changed trigger checks an Airtable table at regular intervals and starts one run for each row created or modified since the previous check. Use it to react to a deadline that moves, a status that changes or a new entry in a tracking table. Nothing has to be set up on the Airtable side beyond a date field: no webhook, read access is enough.
It needs a "Last modified time" field (or a "Created time" field when you only watch new rows) in the table: this field tells what changed. If the table has none, create it in Airtable; no API can replace it.
The run has no triggering email: nodes that act on the triggering email (reply in the thread, Move, Flag) cannot be used after this trigger, and the editor reports them as a blocking error. Send still works when you choose the sending mailbox on the node. To write back to Airtable, use the Airtable node.
At a glance
- Type:
trigger.airtable· version 1 - Category: Triggers
- Kind: Trigger — starts a run
- Effect: No external effect (
none) — nothing is written outside Mankomail; safe to replay - Needs a carrier email: No
- Connection: Airtable
- Outputs:
main
Connection
This node needs a Airtable connection.
Parameters
connection
Airtable connection — The Airtable connection to use. Create it once in Connections; its key never appears in the workflow.
- Type: Connection (
credential) - Required: Yes
- Default:
""(empty)
base
Base
- Type: Remote resource (
resourceLocator) - Required: Yes
- Ways to choose: pick from a list, type an ID, paste a URL (
airtable.base) - Listed with the connection in:
connection
table
Table
- Type: Remote resource (
resourceLocator) - Required: Yes
- Ways to choose: pick from a list, type an ID, paste a URL (
airtable.table) - Listed inside:
base - Listed with the connection in:
connection
event
Trigger on
- Type: One choice (
options) - Required: Yes
- Default:
modified - Options:
modified— A changed row: Any change, creations included. Requires a “Last modified time” field.created— A new row: Creations only. Requires a “Created time” field.
triggerField
Date field — The table’s “Last modified time” (or “Created time”) field — it is what says what changed. Create it in Airtable if it does not exist: no API can replace it.
- Type: Remote resource (
resourceLocator) - Required: Yes
- Ways to choose: pick from a list, type an ID (
airtable.field) - Listed inside:
table - Listed with the connection in:
connection
view
View — Optional: watch only the rows visible in that view — “open cases”, “follow-ups due”.
- Type: Remote resource (
resourceLocator) - Required: No
- Ways to choose: pick from a list, type an ID, paste a URL (
airtable.view) - Listed inside:
table - Listed with the connection in:
connection
formula
Additional filter — An Airtable formula, combined with the date using and: {Status} = "Closed". Leave empty to watch the whole table.
- Type: Long text (
text) - Required: No
- Default:
""(empty) - 4000 characters at most
- Example:
{Status} = "Closed" - Expressions:
{{ }}not accepted
everyMinutes
Check every (minutes) — Each check costs one API call. ⚠️ Airtable’s free plan is capped at 1,000 calls per month: fifteen minutes is a careful compromise.
- Type: Number (
number) - Required: No
- Default:
15 - Whole number, from 5 to 1440
Outputs
main— Taken once per new or changed row found by a check: each row starts its own run.
Data produced
What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).
{{ data.airtable.recordId }}—string. Identifier of the row (rec…).{{ data.airtable.fields }}—object. The row's fields as Airtable returns them, keyed by field name.{{ data.airtable.fields.Status }}reads the Status field.{{ data.airtable.changedAt }}—string. Value of the date field chosen on the node for this row: its last modification (or creation) time.{{ data.airtable.baseId }}—string. Identifier of the base, as selected on the node.{{ data.airtable.tableId }}—string. Identifier of the table, as selected on the node.
Example
A firm tracks its cases in an Airtable table with a Status field and a "Last modified time" field named Modified. To email the client when a case is closed, set:
event modified
triggerField Modified
formula {Status} = "Closed"
everyMinutes 15Every 15 minutes, each row that changed and whose status is "Closed" starts one run on the main port. A Send node can address {{ data.airtable.fields.Email }} and quote {{ data.airtable.recordId }}.
Tips
- Start position. On publication the trigger starts "from now": existing rows are not replayed. Publishing again keeps the position already reached.
- Cadence. Between 5 and 1,440 minutes, 15 by default. The instance may impose a higher floor (
INTEGRATION_POLL_MIN_MINUTES, see environment variables); the node can only make checks less frequent. Each check is one call to the Airtable API and counts against your Airtable plan. - Volume. A check returns at most 100 rows. The rest waits for the next check and is not lost.
- No duplicates. A run is identified by the row and its modification time: checking the same change twice never starts a second run. A row changed again later starts a new one.
- Filters. The view and the formula are optional and combine with the date using AND: only rows visible in the view and matching the formula count.
- Errors. A temporary error (rate limit, Airtable unavailable, network) leaves the position unchanged and the next check retries. A permanent error (revoked connection, deleted table, incomplete settings) sends you a notification, once per outage.
- Field names.
{{ }}paths only accept names made of unaccented letters, digits,_and$, not starting with a digit. A field namedDue dateorÉchéancecannot be read with{{ data.airtable.fields.… }}; give the fields you need such names. - Deletions are not detected, and the previous value of a cell is not available.
- Pause. A paused workflow keeps its arming but stops checking; resuming does not require publishing again.
- Testing. Testing from this trigger in the editor really queries Airtable and runs the draft, in a test run, on the most recent row found. The test never moves the position: what it shows will still be processed by the real checks (see Test runs).