Got an issue on the workflow exercise of N8N101's Section 2 when sending the CSV

Hi everyone. I need help on the N8N101’s Section 2 on workflow exercise - Step 4: Generate and Finalize Your Report. Love to know if anyone could pass this step and what else I could do to fix it.

I encounter this issue at the step of sending a CSV file to https://learn.app.n8n.cloud/webhook/course/n8n101/send-report, and it keeps responding empty.

What have I tried to fix?

  • I reached two previous checkpoints, so the workflow is fine at those stages.
  • I double-checked to ensure I was following the exact instructions for this step.
  • Below is my workflow so far and the CSV file, which I have redacted to avoid leaking the answer.

average_order_total;region;order_totals;order_count;report_generated;assessment_id
999.5;region1;999;9;2026-06-19 11:49:24;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
999.5;region2;999;9;2026-06-19 11:49:24;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
999;region3;999;9;2026-06-19 11:49:24;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
999.5;region4;999;9;2026-06-19 11:49:24;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

One thing I notice is that the CSV has an assessment_id column, so I suppose there might be an issue in checking that could relate to a previous post, where assessment_id had issues when sending via header.

Hi @kristinker

Thanks for reporting this, yet again another typo on my end in our workflow. Fixed and tested.

cheers,

Hi… May I ask how to fix it since I’m still getting empty after sending the report. Thanks

Hi asdrt,

The issue was with n8n academy checking assessment_it in the CSV that the student sent to their server. I’ve run it again, and it still works, so the issue might be in your current setup.

With that in mind. You could check your previous steps before sending the CSV to see which goes wrong. You could use my initial post as a checklist:

  • Have you passed the two previous checkpoints?
  • Does your CSV file look like the one I attached? The real data are redacted, but column names and the total number of rows are still correct.
  • Have you followed all the instructions from that step (node name, data type, field name, etc)

Good luck

I’ve already passed the previous checkpoints and followed the steps. I’ll just send my setup and can you check it? My only problem is in step 4. Thanks for your help.

Sure, you could send your workflow to me, but before that, please try those steps. I see your workflow has some spots worth checking:

  • Node “SetReportMetaData” has assessment_id with wrapper in square brackets [xxxx], please remove the square brackets. Also, I see this doesn’t return fields from the previous node, so please scroll down the configuration menu and select Input Fields to Include to All

  • Node “Convert To File”, please open that CSV and check if it has 6 columns as I mentioned previously. I doubt it only has 2 columns.

Hi @jamiemadden_n8n

Regarding the step server check CSV, I see its current behavior when students send an invalid CSV (the students can send an invalid CSV file with only 2 columns (assessment_id and created_date) or assessment_id checking fails in my original case), and the server still responds with a 200 with an empty body, which makes students wonder: “I see the node green, did I pass? Or am I supposed to fix something?”. So I propose a small update on this to make the feedback more intuitive:

  • If the student sends an invalid CSV and doesn’t pass, the server should respond 4xx and point out that the CSV is not correct so the student knows where to fix it.

  • Or if we keep the response an empty 200 for some reason, we at least should mention it in the checkpoint or Troubleshooting so the student is aware that something is wrong and they have not passed yet and have a way to troubleshoot on their own.

Buenas, tengo el mismo problema, estuve leyendo el post, y por lo que interpreto, es un problema del servidor verdad? Porque en el último paso, no me asigna el código de verificación y dentro del curso, me queda como que tengo pendiente esta tarea, si me pueden orientar por favor, tal vez hay algo que no estoy viendo. Revise dos veces todas las instrucciones, no encontre ninguna diferencia, pero aún así, no logro obtener el último código de verificación. Los anteriores si los pude obtener, muchas gracias. Adjunto el JSON de mi workflow.

{

“name”: “Section 2 - Sales Data Pipeline”,

“nodes”: [

{

  "parameters": {},

  "type": "n8n-nodes-base.manualTrigger",

  "typeVersion": 1,

  "position": \[

    0,

    -272

  \],

  "id": "ccdc0a3f-c825-4875-9de9-7d7c2014be2b",

  "name": "TriggerManual"

},

{

  "parameters": {

    "url": "https://learn.app.n8n.cloud/webhook/course/n8n101/sales-data",

    "authentication": "genericCredentialType",

    "genericAuthType": "httpHeaderAuth",

    "sendHeaders": true,

    "headerParameters": {

      "parameters": \[

        {

          "name": "X-Assessment-ID",

          "value": "a2522471826abeaf5b090ee65e56e18c"

        }

      \]

    },

    "options": {}

  },

  "type": "n8n-nodes-base.httpRequest",

  "typeVersion": 4.4,

  "position": \[

    224,

    -272

  \],

  "id": "4ee58409-12fc-4709-ace7-c293e03fa8bf",

  "name": "GetSalesData",

  "credentials": {

    "httpHeaderAuth": {

      "id": "QQcXYH9c9Bjq284o",

      "name": "n8n Academy API Key"

    }

  }

},

{

  "parameters": {

    "fieldToSplitOut": "orders",

    "options": {}

  },

  "type": "n8n-nodes-base.splitOut",

  "typeVersion": 1,

  "position": \[

    448,

    -272

  \],

  "id": "c9297b13-caf6-4bc8-9c42-b62bca11d6c4",

  "name": "SplitOrders"

},

{

  "parameters": {

    "assignments": {

      "assignments": \[

        {

          "id": "0c7b5fc4-920a-4363-9468-c9701ed0b3bf",

          "name": "order_id",

          "value": "={{ $json.order_id }}",

          "type": "string"

        },

        {

          "id": "036a73b7-7896-438a-9ecc-440dc6d571d3",

          "name": "customer_name",

          "value": "={{ $json.customer_name }}",

          "type": "string"

        },

        {

          "id": "9994322b-80ea-436a-941f-73d4b394b692",

          "name": "region",

          "value": "={{ $json.region }}",

          "type": "string"

        },

        {

          "id": "e3eebd43-39e2-4b91-b760-66b7e18f1863",

          "name": "status",

          "value": "={{ $json.status }}",

          "type": "string"

        },

        {

          "id": "cde0d5f0-ff61-4f63-8209-735324c8e3e9",

          "name": "order_total",

          "value": "={{ $json.quantity \* $json.unit_price }}",

          "type": "number"

        }

      \]

    },

    "options": {}

  },

  "type": "n8n-nodes-base.set",

  "typeVersion": 3.4,

  "position": \[

    672,

    -272

  \],

  "id": "a436a191-3500-4f9f-9b3c-de2834021079",

  "name": "SetOrderTotals"

},

{

  "parameters": {

    "aggregate": "aggregateAllItemData",

    "destinationFieldName": "orders",

    "options": {}

  },

  "type": "n8n-nodes-base.aggregate",

  "typeVersion": 1,

  "position": \[

    896,

    -464

  \],

  "id": "4c0c71d2-2f34-49bc-8436-7a0d99ee90b9",

  "name": "AggregateOrders"

},

{

  "parameters": {

    "method": "POST",

    "url": "https://learn.app.n8n.cloud/webhook/course/n8n101/process-orders",

    "authentication": "genericCredentialType",

    "genericAuthType": "httpHeaderAuth",

    "sendHeaders": true,

    "headerParameters": {

      "parameters": \[

        {

          "name": "X-Assessment-ID",

          "value": "a2522471826abeaf5b090ee65e56e18c"

        }

      \]

    },

    "sendBody": true,

    "bodyParameters": {

      "parameters": \[

        {

          "name": "orders",

          "value": "={{ $json.orders }}"

        }

      \]

    },

    "options": {}

  },

  "type": "n8n-nodes-base.httpRequest",

  "typeVersion": 4.4,

  "position": \[

    1120,

    -464

  \],

  "id": "b75a2fd2-94ed-4b73-ae50-bc4b716b67d9",

  "name": "SendOrders",

  "credentials": {

    "httpHeaderAuth": {

      "id": "QQcXYH9c9Bjq284o",

      "name": "n8n Academy API Key"

    }

  }

},

{

  "parameters": {

    "conditions": {

      "options": {

        "caseSensitive": true,

        "leftValue": "",

        "typeValidation": "strict",

        "version": 3

      },

      "conditions": \[

        {

          "id": "84d523d2-884a-44f6-bc84-1c7a9788ced5",

          "leftValue": "={{ $json.status }}",

          "rightValue": "delivered",

          "operator": {

            "type": "string",

            "operation": "equals"

          }

        }

      \],

      "combinator": "and"

    },

    "options": {}

  },

  "type": "n8n-nodes-base.if",

  "typeVersion": 2.3,

  "position": \[

    896,

    -176

  \],

  "id": "b74fb43d-2d94-4af1-b3a5-fc17c2f8678a",

  "name": "FilterDelivered"

},

{

  "parameters": {

    "fieldsToSummarize": {

      "values": \[

        {

          "aggregation": "sum",

          "field": "order_total"

        },

        {

          "field": "order_total"

        },

        {

          "aggregation": "average",

          "field": "order_total"

        }

      \]

    },

    "fieldsToSplitBy": "region",

    "options": {}

  },

  "type": "n8n-nodes-base.summarize",

  "typeVersion": 1.1,

  "position": \[

    1120,

    -272

  \],

  "id": "b79acb85-1eee-4b10-ae31-634770ac3503",

  "name": "SummarizeByRegion"

},

{

  "parameters": {

    "keys": {

      "key": \[

        {

          "currentKey": "sum_order_total",

          "newKey": "order_totals"

        },

        {

          "currentKey": "count_order_total",

          "newKey": "order_count"

        },

        {

          "currentKey": "average_order_total",

          "newKey": "avarege_order_total"

        }

      \]

    },

    "additionalOptions": {}

  },

  "type": "n8n-nodes-base.renameKeys",

  "typeVersion": 1,

  "position": \[

    1344,

    -272

  \],

  "id": "0a89ddb6-6598-45a7-82e7-8535f2e4749c",

  "name": "UpdateFieldNames"

},

{

  "parameters": {

    "aggregate": "aggregateAllItemData",

    "destinationFieldName": "regions",

    "options": {}

  },

  "type": "n8n-nodes-base.aggregate",

  "typeVersion": 1,

  "position": \[

    1568,

    -368

  \],

  "id": "e4d2ff81-11e5-4994-991b-008b91d87062",

  "name": "AggregateRegions"

},

{

  "parameters": {

    "method": "POST",

    "url": "https://learn.app.n8n.cloud/webhook/course/n8n101/validate-analysis",

    "authentication": "genericCredentialType",

    "genericAuthType": "httpHeaderAuth",

    "sendHeaders": true,

    "headerParameters": {

      "parameters": \[

        {

          "name": "X-Assessment-ID",

          "value": "a2522471826abeaf5b090ee65e56e18c"

        }

      \]

    },

    "sendBody": true,

    "bodyParameters": {

      "parameters": \[

        {

          "name": "regions",

          "value": "={{ $json.regions }}"

        }

      \]

    },

    "options": {}

  },

  "type": "n8n-nodes-base.httpRequest",

  "typeVersion": 4.4,

  "position": \[

    1792,

    -368

  \],

  "id": "504d6d3e-3914-408d-a0bf-b30b328c298f",

  "name": "SendAnalysis",

  "credentials": {

    "httpHeaderAuth": {

      "id": "QQcXYH9c9Bjq284o",

      "name": "n8n Academy API Key"

    }

  }

},

{

  "parameters": {

    "assignments": {

      "assignments": \[

        {

          "id": "3471e8c4-6494-4d87-8c27-fcd8f626a2f7",

          "name": "report_generated",

          "value": "={{ $now.format('yyyy-MM-dd HH:mm:ss') }}",

          "type": "string"

        },

        {

          "id": "797e341f-6d34-4e56-b428-1644a78d3915",

          "name": "assessment_id",

          "value": "a2522471826abeaf5b090ee65e56e18c",

          "type": "string"

        }

      \]

    },

    "includeOtherFields": true,

    "options": {}

  },

  "type": "n8n-nodes-base.set",

  "typeVersion": 3.4,

  "position": \[

    1568,

    -176

  \],

  "id": "a1638fbf-f6fd-403a-8ce9-d73f965985b7",

  "name": "SetReportMetadata"

},

{

  "parameters": {

    "binaryPropertyName": "report",

    "options": {}

  },

  "type": "n8n-nodes-base.convertToFile",

  "typeVersion": 1.1,

  "position": \[

    1792,

    -176

  \],

  "id": "28660eaa-4cb1-4952-ac18-2c4bb28fcbe3",

  "name": "ConvertToCSV"

},

{

  "parameters": {

    "method": "POST",

    "url": "https://learn.app.n8n.cloud/webhook/course/n8n101/send-report",

    "authentication": "genericCredentialType",

    "genericAuthType": "httpHeaderAuth",

    "sendHeaders": true,

    "headerParameters": {

      "parameters": \[

        {

          "name": "X-Assessment-ID",

          "value": "a2522471826abeaf5b090ee65e56e18c"

        }

      \]

    },

    "sendBody": true,

    "contentType": "binaryData",

    "inputDataFieldName": "report",

    "options": {}

  },

  "type": "n8n-nodes-base.httpRequest",

  "typeVersion": 4.4,

  "position": \[

    2016,

    -176

  \],

  "id": "194d9159-bc73-453b-8e18-8c9b0278d31e",

  "name": "SendReport",

  "credentials": {

    "httpHeaderAuth": {

      "id": "QQcXYH9c9Bjq284o",

      "name": "n8n Academy API Key"

    }

  }

},

{

  "parameters": {},

  "type": "n8n-nodes-base.noOp",

  "typeVersion": 1,

  "position": \[

    1120,

    -80

  \],

  "id": "af17a61f-e8d1-4290-9724-7d113bd9124c",

  "name": "IgnoreNonDelivered"

}

],

“pinData”: {},

“connections”: {

"TriggerManual": {

  "main": \[

    \[

      {

        "node": "GetSalesData",

        "type": "main",

        "index": 0

      }

    \]

  \]

},

"GetSalesData": {

  "main": \[

    \[

      {

        "node": "SplitOrders",

        "type": "main",

        "index": 0

      }

    \]

  \]

},

"SplitOrders": {

  "main": \[

    \[

      {

        "node": "SetOrderTotals",

        "type": "main",

        "index": 0

      }

    \]

  \]

},

"SetOrderTotals": {

  "main": \[

    \[

      {

        "node": "FilterDelivered",

        "type": "main",

        "index": 0

      },

      {

        "node": "AggregateOrders",

        "type": "main",

        "index": 0

      }

    \]

  \]

},

"AggregateOrders": {

  "main": \[

    \[

      {

        "node": "SendOrders",

        "type": "main",

        "index": 0

      }

    \]

  \]

},

"FilterDelivered": {

  "main": \[

    \[

      {

        "node": "SummarizeByRegion",

        "type": "main",

        "index": 0

      }

    \],

    \[

      {

        "node": "IgnoreNonDelivered",

        "type": "main",

        "index": 0

      }

    \]

  \]

},

"SummarizeByRegion": {

  "main": \[

    \[

      {

        "node": "UpdateFieldNames",

        "type": "main",

        "index": 0

      }

    \]

  \]

},

"UpdateFieldNames": {

  "main": \[

    \[

      {

        "node": "AggregateRegions",

        "type": "main",

        "index": 0

      },

      {

        "node": "SetReportMetadata",

        "type": "main",

        "index": 0

      }

    \]

  \]

},

"AggregateRegions": {

  "main": \[

    \[

      {

        "node": "SendAnalysis",

        "type": "main",

        "index": 0

      }

    \]

  \]

},

"SetReportMetadata": {

  "main": \[

    \[

      {

        "node": "ConvertToCSV",

        "type": "main",

        "index": 0

      }

    \]

  \]

},

"ConvertToCSV": {

  "main": \[

    \[

      {

        "node": "SendReport",

        "type": "main",

        "index": 0

      }

    \]

  \]

}

},

“active”: false,

“settings”: {

"executionOrder": "v1",

"binaryMode": "separate"

},

“versionId”: “13d25ae4-5903-4e5d-96fd-c31460bd9e79”,

“meta”: {

"instanceId": "54f686cd8025e96d283c85699adf4945c234670c29097dcbc346f6794485ee6a"

},

“nodeGroups”: [],

“id”: “zHhggcePiczrgYaw”,

“tags”: [

{

  "name": "n8n101",

  "id": "ANRJX0kNx03bHS7k",

  "updatedAt": "2026-06-23T03:07:48.986Z",

  "createdAt": "2026-06-23T03:07:48.986Z"

}

]

}

Hello @EzeMorales

In future, please start your own topics and share your complete workflow so that we can assist you.

cheers,

Uh, okay, sorry, I wasn’t aware, I’d taken advantage of it being the same topic, sorry. I’m opening a new topic now, thank you very much and sorry.