<!-- BusyBot node reference — https://busybot.net/tools/airtable-trigger/ -->

> Node: Airtable Trigger (`airtable_trigger`) · Polling trigger · v1
> Category: Data & Storage · Credentials: Airtable Personal Access Token (`airtableApi`)
> Updated: 2026-08-16

# Airtable Trigger

> Polls Airtable for new or updated records

## Overview

Polls an Airtable table on a schedule to detect new or recently modified records. Uses a configurable date/time trigger field with the IS_AFTER() formula to filter records created or modified since the last poll. Supports additional formula filters, view scoping, field selection, and attachment downloading. Returns each matching record as a separate workflow item.

**Category:** Data & Storage  
**Tool Name:** `airtable_trigger`  
**Version:** 1

**Appearance:** Icon: `si-airtable` | Color: `#18bfff`

## Node Type

**Trigger** — polling (checks for new data on a schedule)

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | None (trigger node) |
| Output | `Output` |

## Credentials

This tool requires **Airtable Personal Access Token** credentials.
See the [Credentials Guide](https://busybot.net/credentials/airtable-api/) for setup instructions.

### Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Base ID | `string` | Yes | — | The ID of the Airtable base (e.g. appXXXXXXXXXXXXXX). You can find this in the Airtable URL: https://airtable.com/{baseId}/... |
| Table ID | `string` | Yes | — | The ID or name of the table (e.g. tblXXXXXXXXXXXXXX). You can find this in the Airtable URL after the base ID. |
| Trigger Field | `string` | Yes | — | A Created Time or Last Modified Time field used to detect new/updated records. If you do not have one, create a Created Time or Last Modified Time field in your Airtable schema. |
| Download Attachments | `boolean` | No | `false` | Whether attachment fields should be downloaded and included as binary data in the output. |
| Download Fields | `string` | No | — | Comma-separated names of attachment-type fields to download (e.g. 'Photos, Documents'). Case sensitive. _(shown when Download Attachments is `true`)_ |
| Additional Fields | `collection` | No | `{}` | Optional query refinements applied on top of the time filter. |
| — Fields | `string` | No | — | Comma-separated list of field names to include in the response. By default all fields are returned. Example: Name, Email, Status |
| — Formula | `string` | No | — | An additional Airtable formula to combine with the time filter using AND(). See https://support.airtable.com/hc/en-us/articles/203255215-Formula-Field-Reference |
| — View ID | `string` | No | — | The name or ID of a view in the table. If set, only records in that view will be returned. |
| Poll Interval | `number` | No | `1` | How often to check for new data. |
| Poll Interval Unit | `options` | No | `minutes` | Unit for the poll interval. |
| | | | | Options: `seconds`, `minutes`, `hours` |

## Output Data

Each new or updated record becomes one output item. The Airtable record is emitted as-is, plus two trigger markers:

```json
{
  "id": "recXXXXXXXXXXXXXX",
  "createdTime": "2026-08-15T09:12:44.000Z",
  "fields": {
    "Name": "Acme Corp",
    "Status": "Active",
    "Last Modified": "2026-08-15T09:12:44.000Z"
  },
  "_trigger": "airtable_polling",
  "_timestamp": "2026-08-15T09:13:00.000Z"
}
```

- `id` — the Airtable record ID.
- `createdTime` — when Airtable created the record.
- `fields` — the record's column values, restricted to **Fields** when that option is set.
- `_trigger` — always `airtable_polling`.
- `_timestamp` — when the poll that produced the item ran.

When **Download Attachments** is on and **Download Fields** names one or more attachment columns, each item additionally carries:

- `_attachments` — an object keyed by attachment field name, each holding an array of `{ url, filename, type, key }` entries.
- Binary properties named `{fieldName}_{index}` (for example `Photos_0`), holding the downloaded file so that downstream nodes can read it. An attachment that cannot be downloaded is skipped; its URL metadata is still emitted.

Reference record values downstream by expression, e.g. `{{ $json.fields.Email }}`.

## Usage Examples

- Trigger workflow when a new row is added to an Airtable base
- Monitor an Airtable table for updated records every 5 minutes
- Watch for new Airtable records matching a specific view and formula
- Detect changes in an Airtable CRM table and sync to another system

## Example Configuration

Watch a table for newly created records:

```json
{
  "type": "airtable_trigger",
  "parameters": {
    "baseId": "appXXXXXXXXXXXXXX",
    "tableId": "tblYYYYYYYYYYYYYY",
    "triggerField": "Created Time",
    "pollInterval": 1,
    "pollIntervalUnit": "minutes"
  }
}
```

Watch for modified records in one view, narrowed by a formula and a field list:

```json
{
  "type": "airtable_trigger",
  "parameters": {
    "baseId": "appXXXXXXXXXXXXXX",
    "tableId": "Customer Records",
    "triggerField": "Last Modified",
    "pollInterval": 5,
    "pollIntervalUnit": "minutes",
    "additionalFields": {
      "fields": "Name, Email, Status, Priority",
      "viewId": "Active Customers",
      "formula": "{Priority} = 'High'"
    }
  }
}
```

Download attachments from the records that match:

```json
{
  "type": "airtable_trigger",
  "parameters": {
    "baseId": "appXXXXXXXXXXXXXX",
    "tableId": "Project Files",
    "triggerField": "Created Time",
    "downloadAttachments": true,
    "downloadFieldNames": "Photos, Documents",
    "pollInterval": 30,
    "pollIntervalUnit": "seconds",
    "additionalFields": {
      "formula": "{Processing Status} = 'Pending'"
    }
  }
}
```

### Trigger Behavior

- **Activation:** Polling starts when the workflow is activated. There is no poll at the moment of activation — the first check runs one full interval later.
- **Schedule:** The trigger polls for new data based on the configured polling interval.
- **State:** Maintains internal state (the last poll timestamp plus the record IDs seen at that boundary) so each poll returns only records that are new since the last check.
- **First Run:** The first poll records the current position and returns no items, so activating the workflow never replays existing records.
- **Testing:** Running the node from the editor emits a single sample record so you can build the rest of the workflow; real records arrive only while the workflow is activated.

## Tips

Configure your Airtable base ID, table ID, and trigger field (a Created Time or Last Modified Time column). The trigger polls Airtable using the IS_AFTER() formula to find records newer than the last check. Optionally filter by view, additional formula, or specific fields. Set the poll interval to control how frequently it checks.

### Parameter Relationships

- **Download Fields dependency**: The `downloadFieldNames` parameter is only available when `downloadAttachments` is set to `true`. This lets you specify which attachment fields to download rather than downloading all attachments.

- **Additional Fields structure**: All filtering options (`fields`, `formula`, `viewId`) must be nested within the `additionalFields` object. They cannot be specified at the top level of parameters.

- **Trigger Field requirement**: The specified `triggerField` must be a Created Time or Last Modified Time field type in your Airtable schema. Standard text or number fields will not work for change detection.