Describe the problem/error/question
I am trying to run evaluations on a workflow, but the evaluation workflow runs only once for the first row even though I have multiple rows in the connected Google Sheet. I’ve followed the documentation exactly and still cannot get it to loop back and run for multiple rows. The workflow below is a very simple one I setup to test this.
Please share your workflow
Share the output returned by the last node
[
{
“content”: {
“parts”: [
{
“text”: “| output |\n| :— |\n| Hello John |”,
“thoughtSignature”: “EvAECu0EAQw51seqBldzgke32L2p2FSTP+LVobUg/nFzZql1BnD6iGqh9K4Q9rj3ZqYka+EN7xZy1Gyw7MgYL2aHsJfeJ/hlP8yjww+16mYvwlvB/uw5Im5CL6V7dRvGwNTp3BKXushluRrPeUVKZt6E+DN06xHETSKfmN/ICvt+1ae4WCjsmv1BkWhCvrI0tLrT4mVTQ/9wuFpFIX03fwJV2EIghSQcaTCk5ptNyo+LnH0VmKsbv7HpVc9WMOhUKK2Mnh9Oqon1w8Q4Pv95mpEvajvSCJ1PG9zaTFxKRFgHEM0hlC7oE60LlueKrjhrT4wvt4aIifXiBT9kP2A7EtPXGxlafSTIwejDldN6eV5gXKp8raW5o3gW5A/fBWFmVYiC0Rv6fre+vuDgziQdPFBVjm94Cd/LRYj1/BuX5fnSF9ydldwnVtQdrWjchvllCpVj5GJOMfp3ED/6b7tuNNvnGI09L3RhiqYVw4aZNidhBvDrdP+IXnN8sS7qUS0K1OSQaOQ9EmwEhwslRkU28oGItJQSQ315l1VV05UmEI6Sw3IivTPtHBh4oF4yz5JUPtxLrsVbe2KNujYpU+IWweOvZCrnaWhsyleqycRivzJIIx+9wsH5s14tBtbusp2fTq/TdhU3UJtJMPl5vgA6unEh1yCtMLPRZLJrRuV/nxX0jAwTLpRASnfOT4hDO0j6BnfF8QatVRsks6VdAdOWhixT2desPsZ2uEuuXYqpyQ9nCLV5WuCD08sMAfVLTFMeV45KGLDfT3nDwRRAy3tXziR4MgaWvXCzFSBuFnGUBZOUY9ZWeatvDdM9wiKLV4gtJdMn”
}
],
“role”: “model”
},
“finishReason”: “STOP”,
“index”: 0
}
]
Information on your n8n setup
- n8n version: n8n cloud
- Database (default: SQLite):
- n8n EXECUTIONS_PROCESS setting (default: own, main):
- Running n8n via (Docker, npm, n8n cloud, desktop app):
- Operating system:
This is the output from the initial eval trigger. There is a field “_rowsLeft”: 1 which means that the trigger is recognizing that there are multiple rows in the evaluation Google sheet.
[
{
"row_number": 2,
"row_id": 1,
"first_name": "John",
"expected_output": "",
"actual_output": "Hello! How can I help you today?",
"_rowsLeft": 1
}
]
Thank you. I am definitely running the full exectution.
I tried 1-4 and there was not change.
Also tried 5 and it still only writes 1 row. Maybe there’s a bug. Here’s the simplified workflow:
I can reproduce what looks like the same issue on self-hosted n8n 2.20.9.
In my case, the Evaluation Trigger uses a Data Table, not Google Sheets. The first dataset row runs successfully, and the Evaluation Trigger output contains _rowsLeft / rows_left > 0, but no second workflow run is started.
I checked the browser Network tab: after clicking the “Execute workflow” button next to the Evaluation Trigger, there is only one /run request. After row 1 finishes, no second /run request is triggered.
This used to work for us on n8n 2.17.5 and stopped working after upgrading to 2.20.6 / 2.20.9. It reproduces across multiple workflows and multiple Data Tables with filters disabled.
This makes it look like the Evaluation Trigger itself correctly detects the remaining rows, but the editor/evaluation runner does not continue the evaluation loop.
I haven’t found a workaround or fix yet. If anyone finds a solution, please let me know.
Update: I downgraded to n8n 2.18.7, and the Evaluation Trigger works again there.
So far, this is the latest version I have tested where the Evaluation Trigger still loops through all dataset rows correctly.
@superkyle
Are you clicking on Run tests within the Evaluations tab of the workflow, or are you using the editor’s normal run button? Your typeversion looks odd… What version of your n8n are you running? Did you create this workflow manually or did you import it from a template?
Another point I noticed: “outputValue” should be ={{ "Hello " + $json.first_name }} or just plain text without the =, the evaluation trigger expects the final evaluation to write the result back to the google sheet on the same row that was read (it can cause a silent error).
Are you clicking on Run tests within the Evaluations tab of the workflow, or are you using the editor’s normal run button?
- I am definitely clicking on Run tests.
What version of your n8n are you running?
- I am using n8n cloud. So, the latest version.
Did you create this workflow manually or did you import it from a template?
- I created this manually based on the evaluation documentation.
“outputValue” should be ={{ "Hello " + $json.first_name }} or just plain text without the =
- This doesn’t seem to be the issue because the evaluation workflow successfully rights to the google sheet for the first row. The issue is that it only runs for the first row.
ok, but does the evaluation workflow successfully write on the first line AND on the second line and beyond?
@superkyle
Open the Evaluation node after executing, is the actual_output field showing the correct value or is it empty/with an error?
The issue is that the evaluation workflow successfully writes on the first line, but does not loop and continue on subsequent rows.
The actual_ouput does show the correct value for the first row. There is no error. You can see it here n8n eval testing - Google Sheets
@superkyle
Reviewing your JSON, I noticed that the Evaluation node has no connected output (“main”: []). Since the Evaluation Trigger needs to continue the cycle to process the next lines, this might be causing the flow to stop after the first one. Try connecting the Evaluation output back to When fetching a dataset row and run the test again. If that fixes it, confirm here to help validate the behavior.
It’s not possible to connect the output back to “When fetching a dataset row” because “When fetching a dataset row” is an evaluation trigger. According to the docs, it should loop through all rows after the setOutputs node runs.
ok, my bad, I got confused.
I understand that you don’t agree to review the expression, but it’s essential to confirm this because I’m not able to reproduce your error. If Set outputs doesn’t complete correctly on the first line, that could explain why the runner doesn’t move forward to the next steps.
please, test with ={{ 'Hello ’ + $json.first_name }}
Thanks for looking into this. I have tried that and it does not change anything. It only adds a = to the front of the output. That’s not the issue because the set outputs does complete correctly on the first line.
Sorry, I made a mistake above.
If setoutputs doesn’t complete correctly, it will be able to process the first line but won’t be able to move to the next ones.