N8N spreadsheet / chatbot integration issues

'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

*claudecode

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 :frowning:

image

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 :frowning: 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.