Automate Airtable + Discord
Structured records with an API worth automating. Community chat with an automation-friendly API. Put an agent between them and the hand-off stops being manual: it reads, decides, acts, and shows its work.
Document Extractor is a ready-made agent built around Airtable; point its last step at Discord to finish this hand-off.
Automations teams run
Unlike field-mapping automation, the step in the middle is an agent: it can summarise, classify, judge and draft, not merely copy values from Airtable into Discord.
When a record is created in Airtable…
…an agent can post channel messages in Discord — after reading the context and deciding it should.
When a field changes in Airtable…
…an agent can DM members in Discord — after reading the context and deciding it should.
When a view gains a row in Airtable…
…an agent can publish digests in Discord — after reading the context and deciding it should.
When a message posts in a channel in Discord…
…an agent can create and update records in Airtable — with the reasoning recorded in the run’s receipt.
When a member joins in Discord…
…an agent can query views for reporting in Airtable — with the reasoning recorded in the run’s receipt.
When a keyword appears in Discord…
…an agent can link records across tables in Airtable — with the reasoning recorded in the run’s receipt.
The Airtable and Discord hand-off, setup template
Start with a custom-api call to api.airtable.com and the discord-api node. Configure the Airtable source payload, the agent input, and the Discord operation. The sequential template does not implement conditional writes or approval by itself.
This is a schema-checked starting point, not an end-to-end tested automation. Replace every CONFIGURE_ value, choose the operations you intend, connect credentials and map source outputs into later inputs. An edge orders steps; it does not supply a condition, an approval gate or a field mapping. Add and test those controls explicitly before any write. Cloud APIs and model providers may receive data. Keep the workflow inactive until tested with fixtures.
{
"id": "38959501-7a16-43aa-a6e5-69932ac2add4",
"name": "Airtable → Discord",
"nodes": [
{
"id": "76b68ef9-2ef8-4889-a12b-b5845f0b45be",
"text": "Run on a schedule",
"x": 512,
"y": 144,
"isEditing": false,
"type": "trigger-timer",
"icon": "connect",
"category": "trigger",
"isSelected": false,
"parameters": {
"fireOnStart": "No",
"scheduleType": "Interval",
"schedule": "Every 15 Minutes"
},
"description": "Setup template for Timer Trigger. This trigger node fires the workflow at specified intervals or at a specific time. Configure credentials, inputs and output mapping before use.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
},
{
"id": "00b52484-386a-4aca-a2bb-6ec87828cee0",
"text": "Review source and draft",
"x": 512,
"y": 336,
"isEditing": false,
"type": "agnt-agent",
"icon": "connect",
"category": "action",
"isSelected": false,
"parameters": {
"agentId": "CONFIGURE_AGENTID",
"message": "Read the Airtable item. Decide whether it warrants action in Discord, and explain why.\nSource input: CONFIGURE_SOURCE_INPUT. Produce a reviewable draft only; do not take external actions."
},
"description": "Setup template for Agent Chat. Chat with an AI agent from your agent library. Select an agent and send messages to interact with it within your workflow. Configure credentials, inputs and output mapping before use.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
},
{
"id": "45313924-b14c-4af1-aa06-661dce550b2e",
"text": "Configure destination in Discord",
"x": 512,
"y": 528,
"isEditing": false,
"type": "discord-api",
"icon": "connect",
"category": "action",
"isSelected": false,
"parameters": {
"action": "SEND_MESSAGE",
"recipientType": "channel",
"channelId": "CONFIGURE_CHANNELID",
"message": "CONFIGURE_MESSAGE",
"autoSplit": false,
"splitLimit": 1,
"splitDelayMs": 1,
"numberChunks": false
},
"description": "Setup template for Discord API. Interact with Discord to perform various operations such as sending messages, managing roles, and uploading files. Long messages are automatically split into multiple chunks (Discord caps a single message at 2000 characters); splitting is code-block aware and emoji-safe. Configure credentials, inputs and output mapping before use.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
}
],
"edges": [
{
"id": "5fec9c32-55f5-40e6-af48-363af399d0e8",
"start": {
"id": "76b68ef9-2ef8-4889-a12b-b5845f0b45be",
"type": "output"
},
"end": {
"id": "00b52484-386a-4aca-a2bb-6ec87828cee0",
"type": "input"
},
"startX": 800,
"startY": 168,
"endX": 512,
"endY": 360
},
{
"id": "b2681118-ae72-4cd3-ad77-ee6f514169ea",
"start": {
"id": "00b52484-386a-4aca-a2bb-6ec87828cee0",
"type": "output"
},
"end": {
"id": "45313924-b14c-4af1-aa06-661dce550b2e",
"type": "input"
},
"startX": 800,
"startY": 360,
"endX": 512,
"endY": 552
}
],
"zoomLevel": 1,
"canvasOffsetX": 0,
"canvasOffsetY": 0,
"isTinyNodeMode": false
}
Configure Discord API
Interact with Discord to perform various operations such as sending messages, managing roles, and uploading files. Long messages are automatically split into multiple chunks (Discord caps a single message at 2000 characters); splitting is code-block aware and emoji-safe.
- action — The action to perform on Discord. RESOLVE_USER = look up a user by username or ID. TEST_DM = 5-stage diagnostic that verifies the bot can DM a user. ORCHESTRATOR_CHAT = bridge a message into AGNT's full orchestrator (the same engine that powers the main Annie chat) and return the reply + any generated image refs; conversationId (or channelId) keys persistent memory. DELETE_MESSAGE = delete the bot's OWN message(s) — one by messageId, or purge all/recent bot messages from a DM or channel (deleteMode='purgeMine'/'purgeRecent'). In a DM the bot can only delete its own messages (Discord platform rule). Only use this when you actually intend to delete something: mode='single' with no messageId is a safe no-op (deletes nothing). Current example:
SEND_MESSAGE. - recipientType — Where the action targets. 'channel' = guild text channel (uses channelId). 'user' = direct message to a Discord user (uses userId; bot must share at least one guild with the user). Applies to SEND_MESSAGE, UPLOAD_FILE, and DELETE_MESSAGE. Current example:
channel. - channelId — The ID of the Discord channel (for SEND_MESSAGE, UPLOAD_FILE, and DELETE_MESSAGE when recipientType='channel'). When recipientType='user' this field is ignored (use userId instead). Current example:
CONFIGURE_CHANNELID. - message — The message text. For SEND_MESSAGE: the Discord message to send (auto-split if over the 2000-char limit unless autoSplit is disabled). For UPLOAD_FILE: optional caption sent with the attachment. For ORCHESTRATOR_CHAT: the prompt sent to Annie's full orchestrator. Current example:
CONFIGURE_MESSAGE. - autoSplit — Automatically split messages that exceed the character limit into multiple sequential messages (for SEND_MESSAGE action). Splitting avoids breaking words, preserves fenced code blocks, and never slices emoji. Default: true. Set false to send as-is (Discord will reject content over 2000 chars). Current example:
false. - splitLimit — Maximum characters per message chunk when autoSplit is on (for SEND_MESSAGE action). Capped at Discord's 2000-char hard limit. Lower it for a safety margin. Default: 2000. Current example:
1. - splitDelayMs — Delay in milliseconds between sequential chunks when a message is split (for SEND_MESSAGE action). Keeps chunks in order and avoids Discord rate limits. Default: 350. Set 0 for no delay. Current example:
1. - numberChunks — Append a (n/N) counter to the end of each chunk when a message is split (for SEND_MESSAGE action). Default: false. Current example:
false.
Install Document Extractor
Document Extractor is a working agent built around Airtable. Install it, point its last step at Discord, and you have this hand-off without building it from an empty canvas.
Runs on your own machine · See what it does
Wiring Airtable to Discord
- Install AGNT — it runs on your own machine and needs no account to start.
- Authorise Discord (an API key pasted into the vault) and Airtable (an API key pasted into the vault). Nothing is stored anywhere but your disk.
- Describe the job in plain language, or paste the definition above; custom-api does the reading and discord-api the writing.
- Gate anything you would not want done unattended, then let it run and read the first receipt end to end.
Airtable and Discord — common questions
Can I connect Airtable to Discord without writing code?
You can build it entirely from the canvas. Authorise Airtable with an API key pasted into the vault, Discord with an API key pasted into the vault, then tell the agent what pipeline trackers that stay current should look like once Discord is involved. Code is an option for the unusual cases, never a requirement for the common ones.
How is this different from a field-mapping Airtable to Discord automation?
The difference shows up on the messy inputs. A rule chain needs every case enumerated in advance; an agent handles pipeline trackers that stay current the way a colleague would — reading the Airtable context, judging it, then writing to Discord with the reasoning recorded.
Does my Airtable and Discord data leave my machine?
Not to us. AGNT runs locally and both sets of credentials are encrypted on your own disk. Outbound traffic goes only to Airtable, Discord and whichever model you chose — and pointing that at Ollama or LM Studio keeps everything on your hardware.
What does a Airtable and Discord run leave behind?
You get an auditable trail rather than a success flag. It shows the Airtable context the agent worked from, the judgment it made about community questions answered from your docs, and the exact change applied in Discord, with approvals attached where you required them.