@d1dx/n8n-nodes-airtable
v2.3.2
Published
n8n community nodes for Airtable — instant webhook triggers with view filtering, and more. By D1DX.
Maintainers
Readme
Airtable Webhook for n8n
n8n community node that triggers workflows instantly when Airtable records change — using real Airtable webhooks, not polling.
Originally forked from @vwork-digital/n8n-nodes-instant-airtable-trigger, fully rewritten by D1DX.
How It Works
- Activate a workflow with this trigger — registers an Airtable webhook on your base
- Airtable sends a notification ping to n8n on every matching change
- The node fetches the webhook payloads with cursor-based pagination
- Payloads are parsed into flat per-record items with field names resolved
- Deactivate the workflow — webhook is automatically deleted
Important: Airtable webhooks expire every 7 days. Use a separate scheduled workflow to refresh them.
Installation
- Go to Settings > Community Nodes in your n8n instance
- Click Install a community node
- Enter
@d1dx/n8n-nodes-airtable - Click Install
Or via CLI:
cd ~/.n8n
npm install @d1dx/n8n-nodes-airtable
# Restart n8nConfiguration
All field names map directly to the Airtable Webhooks API specification.
Core Fields (always visible)
| Field | Airtable API | Description |
|-------|-------------|-------------|
| Base | — | Dropdown of all bases (via meta API) |
| Table | — | Dropdown of tables in selected base |
| View | recordChangeScope | Scope to a specific view. "Add" = entered view, "Remove" = left view. Form/List views not supported. Leave empty for entire table. |
| Change Types | changeTypes | Add / Update / Remove. Leave empty = all. Sent server-side to Airtable. |
Shown when "Update" is selected
| Field | Airtable API | Description |
|-------|-------------|-------------|
| Fields to Watch | watchDataInFieldIds | Only trigger on changes to these fields. Leave empty = all fields. Warning: webhook permanently stops if a listed field is deleted. |
| Include Previous Values | includePreviousCellValues | Include the previous value alongside current for changed fields. |
Output Options (always visible)
| Field | Airtable API | Description |
|-------|-------------|-------------|
| Fields to Include in Output | includeCellValuesInFieldIds | Always include these field values, even if unchanged. Select "All fields" to send "all" to API. Safe if a listed field is deleted. |
| Use Field Names | — | Resolve field IDs (e.g. fldABC123) to human names (e.g. Status) in output. |
Advanced Options
| Field | Airtable API | Description |
|-------|-------------|-------------|
| Data Types | dataTypes | tableData (default), tableFields, tableMetadata. Can combine multiple. |
| From Sources | fromSources | Filter by source: client, publicApi, automation, formSubmission, formPageSubmission, sync, system, anonymousUser, unknown. Empty = all. |
| Form Submission View ID | sourceOptions.formSubmission.viewId | Filter form submissions to a specific form view. Only relevant when "Form Submission" is in From Sources. |
| Form Page Submission Page ID | sourceOptions.formPageSubmission.pageId | Filter interface page submissions to a specific page. Only relevant when "Form Page Submission" is in From Sources. |
| Watch Field Schema Changes | watchSchemasOfFieldIds | Only trigger on schema changes for these fields. Requires tableFields data type. Warning: webhook stops if field is deleted. |
| Include Previous Field Definitions | includePreviousFieldDefinitions | Include previous field name/type in field change payloads. Requires tableFields data type. |
Credentials
You need an Airtable Personal Access Token (PAT):
- Go to airtable.com/create/tokens
- Create a token with these scopes:
webhook:manage— register and delete webhooksdata.records:read— read webhook payloadsschema.bases:read— populate base/table/view/field dropdowns
- Grant access to the bases you want to watch
- In n8n, create an "Airtable API" credential and paste the token
Output Format
One item per event. All items include eventType, recordId, tableId, source, changedBy, timestamp.
Record events (tableData)
Created:
{
"eventType": "created",
"recordId": "recXXXXXXXXXXXXXX",
"tableId": "tblXXXXXXXXXXXXXX",
"viewId": "viwXXXXXXXXXXXXXX",
"createdTime": "2026-04-05T12:00:00.000Z",
"fields": { "Status": "New", "Name": "Example" },
"source": "client",
"changedBy": { "userId": "usrXXXX", "userName": "John", "userEmail": "[email protected]" },
"timestamp": "2026-04-05T12:00:00.000Z"
}Updated:
{
"eventType": "updated",
"recordId": "recXXXXXXXXXXXXXX",
"tableId": "tblXXXXXXXXXXXXXX",
"changedFields": ["Status"],
"current": { "Status": "Done" },
"previous": { "Status": "Active" },
"unchanged": { "Name": "Example" },
"source": "client",
"changedBy": { "userId": "usrXXXX", "userName": "John", "userEmail": "[email protected]" },
"timestamp": "2026-04-05T12:00:00.000Z"
}Deleted:
{
"eventType": "deleted",
"recordId": "recXXXXXXXXXXXXXX",
"tableId": "tblXXXXXXXXXXXXXX",
"source": "client",
"timestamp": "2026-04-05T12:00:00.000Z"
}Field schema events (tableFields)
| eventType | Key fields |
|-----------|-----------|
| fieldCreated | fieldId, name, type |
| fieldChanged | fieldId, current, previous |
| fieldDeleted | fieldId |
Table metadata events (tableMetadata)
| eventType | Key fields |
|-----------|-----------|
| metadataChanged | current (name, description), previous |
Error events
| eventType | Key fields |
|-----------|-----------|
| error | code: INVALID_FILTERS, INVALID_HOOK, or INTERNAL_ERROR |
Gotchas
- View-scoped payloads have different structure. When
recordChangeScopeis a view, Airtable nests records insidechangedViewsByIdinstead of directly on the table. The node handles this transparently. - 10 webhooks per base. Each active workflow uses one webhook. Plan accordingly.
- Webhooks expire in 7 days. Refresh them or they stop silently.
- Field deletion kills the webhook. If a field in
watchDataInFieldIdsorwatchSchemasOfFieldIdsis deleted, the webhook enters a permanent error state. Must deactivate and reactivate. Exception:includeCellValuesInFieldIdsis safe — deleted fields are silently ignored. - Creator permissions required. The PAT owner must have Creator access to register webhooks.
- Community node updates require n8n restart. n8n loads node code at startup, not dynamically.
Credits
Originally created by Jacob Vendramin at vwork Digital as @vwork-digital/n8n-nodes-instant-airtable-trigger (MIT license). Forked and rewritten by D1DX.
License
MIT — see LICENSE.md
