'm using the Google Sheets node with “Append or Update Row” operation and “Map
Each Column Manually” mode. All my field expressions are correctly set to
Expression mode (not Fixed mode), but they’re being written to the spreadsheet
as literal text strings instead of being evaluated.
Setup:
- Operation: Append or Update Row
- Mapping Column Mode: Map Each Column Manually
- Google Sheets OAuth2: Connected and authenticated successfully
- Spreadsheet columns: Timestamp, User Name, User Message, AI Response, User
Email
Expressions configured (all in Expression mode):
$now.toISO()
$(‘Webhook’).item.json.query.name
$(‘Webhook’).item.json.query.message
$(‘Basic LLM Chain’).item.json.text
$(‘Webhook’).item.json.query.email
Expected behavior:
The expressions should be evaluated and write actual data like:
2025-11-03T10:46:02Z
John Smith
What should I do first?
[AI response text]
[email protected]
Actual behavior:
The literal expression strings are written to the spreadsheet:
$now.toISO()
$(‘Webhook’).item.json.query.name
$(‘Webhook’).item.json.query.message
$(‘Basic LLM Chain’).item.json.text
$(‘Webhook’).item.json.query.email
What I’ve tried:
- Verified all fields are in Expression mode (not Fixed)
- Removed quotes from expressions
- Added = prefix to expressions
- Checked that workflow executes successfully (all nodes green)
- Verified the node OUTPUT shows the expressions as strings with quotes around
them
Additional finding:
When using “Map Automatically” mode, Google Sheets interprets the expression
strings as formulas (because they start with $), resulting in #NAME? and
#ERROR! errors in the cells. This confirms the expressions are being passed as
literal strings rather than being evaluated by n8n before being sent to the
API.
Describe the problem/error/question
What is the error message (if any)?
Please share your workflow
(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)
Share the output returned by the last node
Information on your n8n setup
- n8n version:
- Database (default: SQLite):
- n8n EXECUTIONS_PROCESS setting (default: own, main):
- Running n8n via (Docker, npm, n8n cloud, desktop app):
- Operating system:
Can you SS the node to give us more context?
Remove ‘=’ and put your expressions in double brackets. Example:
{{ $now }}
Thanks. I’ve tried brackets too but will try again!
some items aren’t working with this format
So the issue that you are facing is that some items are returning ‘undefined’, yes? Have you checked if your webhook definitely outputs items called ‘name’ and ‘email’ specifically under ‘query’ object?
Considering that ‘message’ item works just fine, your webhook node is attached and routes correctly. So it seems that either those items(name, email) do not exist or are inside another object.
here’s the spreadsheet - doesn’t this show they exist? clause has checked script.js 3 times and confirms it maps each field. hmmm
Check your webhook, not your spreadsheet. Does the Webhook node output the items you are referencing in the expressions? If those items don’t exist, then their values won’t be parsed. Eventually they will be entered as a fixed value, not as an expression.
Thank you. Here is output when I execute step (noting of course those two fields are not working). So you can see when I execute step without testing the bot (i.e. inputting in any items) this is the output. The user emal and name fields come up ““ but I’m not entirely surprised given what’s happening on the left …
Claude Code has created code for me that is connected via Github - including script.js. It’s triple checked the code and says it should facilitate the pulling of all these listed fields. Sorry if I’m stating the obvious; you can probably tell I’m not technical but doing my best!
According to the JSON screenshot you provided, the field name is “User Email”, but your node is configured to use “email”. Very often, AI products do not implement n8n workflows correctly, so you must learn how to use the product.
I bet if all you did was drag-and-drop the JSON User Email field over to your User Email node value, it would work. Probably the same with the user name, but you did not provide the JSON for that.
The field you want in that email field should probably look like this:
{{ $(‘Webhook’).item.json[“User Email”] }}
I hope that helps. -Bill
Thanks - how do i drag and drop? From the input here on the left? That just shows the text from my chatbot
When I put that suggested syntax in directly it doesn’t quite work 

How do I hire someone to jump on a call and work through my workflow with me to try and settle?
All those items you see on the left can be dragged-and-dropped into the values where the node is located.
If you are looking for some paid help, there are lots of people here that can do that for you, including myself. You can go to my site at https://cambermast.com and locate my 30 and 60-minute paid meeting options. I’m certainly not pushing you to do that so you can continue asking here as well. -Bill
Thanks. The items on the left don’t have the fields I need
At this point my entire chatbot has broken
It’s saying: I’m having trouble connecting right now. Please try again in a moment, or select one of the options below.
What is saying that? The node you are trying to execute? n8n the app? Please be as specific as possible and or share screenshots.