Slack --> n8n --> Airtable

I am trying to set up a workflow so that I can write messages in slack that are stored in an airtable. I was able to create the workflow so that when I write messages new rows are added to my airtable, HOWEVER, there is no text in the rows. i’ve tried troubleshooting over and over and cannot find a solution.


:wrench: Project Overview

You’re trying to build an automation that sends Slack messages from specific channels (job sites) into an Airtable base called “Job Management”, specifically into the “Job Messages” table. Each Slack message should create a new row in Airtable containing details like:

  • message
  • messageType
  • slackUserId
  • slackChannelId
  • timestamp
  • job address (extracted from channel name)
  • hoursWorked
  • debug (JSON payload for troubleshooting)

:white_check_mark: What’s Working

  • Slack Trigger is firing correctly (New Message Posted to Channel)
  • Your custom code in the Set Message Info node is parsing Slack events and tagging messageType based on keywords (e.g. “started grading”, “ended grading”)
  • The Slack channel info (job address, etc.) is also being extracted properly in a separate node
  • You’ve used a Merge node to combine outputs from both nodes before sending to Airtable
  • Airtable credentials are connected and you can select the base/table

:hammer_and_wrench: Steps You’ve Taken

  1. Tested individual node output
  • Set Message Info output looks correct and includes all expected fields
  • Merge node output correctly combines channel and message info
  1. Created new Airtable fields (message, debug, test)
  • Confirmed correct field names and types (long text and text)
  • Also noted the field IDs like fldrfrCSSVeaFpiyzC and attempted to use those directly
  1. Tried expressions and fixed values
  • Used expressions like {{ $json["message"] }} and {{ JSON.stringify($json, null, 2) }}
  • Also tested hardcoded fixed values like "Hello from n8n" in the same field
  • Even with valid hardcoded values, Airtable table still showed blank rows
  1. Deactivated and reactivated the workflow
  • To enable test execution (as Slack Trigger prevents simultaneous test + production listening)
  1. Rebuilt the Airtable node from scratch
  • Switched to “Create Record” with “Map Each Column Manually”
  • Confirmed column visibility and correct selection

:police_car_light: The Problem

Despite:

  • Seeing successful executions in n8n,
  • Correctly formatted data in the output,
  • And no Airtable permission or field name mismatches…

:backhand_index_pointing_right: No field values show up in Airtable — only empty rows are created.

Even fixed text values fail to appear in Airtable, confirming the issue is not with your JSON parsing or merge logic but likely with the Airtable node interaction itself.


:red_question_mark: What You Need

You’re looking for someone to:

  • Review the Airtable node config
  • Possibly spot a version mismatch, input binding issue, or internal Airtable node bug
  • Help get even one message to appear in Airtable properly

{
“name”: “Slack to Airtable”,
“nodes”: [
{
“parameters”: {
“trigger”: [“message”],
“watchWorkspace”: true,
“options”: {}
},
“type”: “n8n-nodes-base.slackTrigger”,
“typeVersion”: 1,
“position”: [140, -60],
“name”: “Slack Trigger”,
“credentials”: {
“slackApi”: {
“id”: “REDACTED”,
“name”: “REDACTED
}
}
},
{
“parameters”: {
“functionCode”: “const data = $json;\nconst message = data.text || "";\nconst user = data.user || "";\nconst channelId = data.channel || "";\nconst timestamp = data.ts || "";\n\nlet messageType = "Other";\nlet workDescription = message;\nlet hoursWorked = "";\n\nif (/started grading/i.test(message)) {\n messageType = "Start";\n} else if (/ended grading/i.test(message)) {\n messageType = "End";\n}\n\nreturn [\n {\n json: {\n message,\n slackUserId: user,\n slackChannelId: channelId,\n timestamp,\n messageType,\n workDescription,\n hoursWorked\n }\n }\n];”
},
“type”: “n8n-nodes-base.function”,
“typeVersion”: 1,
“position”: [160, 120],
“name”: “Set Message Info”
},
{
“parameters”: {
“resource”: “channel”,
“operation”: “get”,
“channelId”: {
“__rl”: true,
“value”: “REDACTED”,
“mode”: “id”
},
“options”: {}
},
“type”: “n8n-nodes-base.slack”,
“typeVersion”: 2.3,
“position”: [160, 280],
“name”: “Extract Job Address from Slack Channel”,
“credentials”: {
“slackApi”: {
“id”: “REDACTED”,
“name”: “REDACTED
}
}
},
{
“parameters”: {
“mode”: “combine”,
“combineBy”: “combineByPosition”,
“options”: {}
},
“type”: “n8n-nodes-base.merge”,
“typeVersion”: 3.2,
“position”: [420, 100],
“name”: “Merge”
},
{
“parameters”: {
“operation”: “create”,
“base”: {
“__rl”: true,
“value”: “REDACTED”,
“mode”: “list”
},
“table”: {
“__rl”: true,
“value”: “REDACTED”,
“mode”: “list”
},
“columns”: {
“mappingMode”: “defineBelow”,
“value”: {
“message”: “={{ $json["message"] }}”,
“debug”: “={{ JSON.stringify($json, null, 2) }}”,
“test”: “="Hello from n8n"”
}
}
},
“type”: “n8n-nodes-base.airtable”,
“typeVersion”: 2.1,
“position”: [700, 140],
“name”: “Airtable”,
“credentials”: {
“airtableTokenApi”: {
“id”: “REDACTED”,
“name”: “REDACTED
}
}
}
],
“connections”: {
“Slack Trigger”: {
“main”: [[{ “node”: “Set Message Info”, “type”: “main”, “index”: 0 }]]
},
“Set Message Info”: {
“main”: [
[{ “node”: “Extract Job Address from Slack Channel”, “type”: “main”, “index”: 0 }],
[{ “node”: “Merge”, “type”: “main”, “index”: 0 }]
]
},
“Extract Job Address from Slack Channel”: {
“main”: [[{ “node”: “Merge”, “type”: “main”, “index”: 1 }]]
},
“Merge”: {
“main”: [[{ “node”: “Airtable”, “type”: “main”, “index”: 0 }]]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “REDACTED
}
}

Hey @Jessica_Sutton, hope all is well, and welcome to the community.
Would you like to expand on your question? Attach a worflow (not a screenshot, an actual workflow, by copy-pasting your workflow in n8n and pasting here inside triple backticks before and after), we can all take a look.

I don’t know how to paste my workflow :confused: I’m a total newbie.

You can do it like this (thanks to @rbreen for the visuals):

You are so incredible. I can’t believe someone is helping :sleepy_face:

I added the workflow to my original post.

So after executing the workflow, do you see all the expected values in the input pane of the last node (airtable)? If you mapping mode is set to “Map each column manually”, you have to provide the mapping, otherwise for “Map Automatically” the fields much match the names of the Columns in Airtable.

If this is your current workflow

You might need to change to like this one

When you use merge you need to give path and data about what to merge.

You can seperate it at the front side.

This is what my workflow looks like. I am so new to this, I guess I should try to do what you’ve suggested? Scared to mess it up (albeit it’s already messed up).

YOU ARE JOKING. I did this, it took one second, and it worked. You are my savior. I’ve spent probably 12 hours using chat gpt to troubleshoot this. I know, silly, but I’m just a mom who works after her baby is in bed trying to find a way to automate invoicing for our business. You have no idea the relief you’ve given me. I’m going to add back in the other fields I want to capture from slack/columns. Once I get that working I will see if I can figure out the QuickBooks invoicing integration so invoices are drafted in real time from slack messages sent by my team.

Wow. What an amazing community. I joined last night out of desperation but had no idea I would get an answer let alone a solution.

I have hope..

1 Like

Darrell… can I hire you? I’m in a pinch.

Not sure I can post my link in here. But you can expand my profile. There is a link can connect to me. thanks

Or you can message me your related link

Can you email me and we can set up a teams or something and I can pay pal you or however you want paid?