FlowKit

The Summarize node in n8n: group, aggregate and pivot your data like a group by

Published 5 August 2026 · 6 min read

You have 200 orders sitting in an n8n item list and your client asks for "the total per customer" or "the average rating per product". In SQL that would be a GROUP BY; in Excel, a pivot table. In n8n, it's the Summarize node — the only built-in node that can group items by category and compute something on each group. It's surprisingly overlooked: plenty of makers reach for a Code node to hand-roll what Summarize does in three clicks, or mix up its role with that of Aggregate, which merges without calculating. This guide covers the node end to end: its operations, its group-by mechanism, its typical use cases and its traps.

What the Summarize node is for

Summarize takes N items in and produces a numeric summary out. Two parameters drive everything:

  • Fields to Summarize: the fields to compute on, each paired with an operation (sum, average, count…). You can stack several aggregations in the same node.
  • Fields to Split By: the grouping fields. Left empty, the node computes one global summary across all items; filled in, it outputs one item per distinct value of the field — the classic group by.

That pairing of "aggregation function + grouping dimension" is anything but incidental: it has been the heart of data analysis for decades. The seminal paper by Jim Gray and his co-authors published in 1997, Data Cube: A Relational Aggregation Operator Generalizing Group-By, Cross-Tab, and Sub-Totals (see it on Google Scholar), already showed that nearly every reporting need boils down to these two building blocks: aggregating values along dimensions. Summarize is exactly that, applied to the items flowing through your workflow.

The eight available operations

For each field to summarize, you pick an operation:

  • Count: counts the number of values present — perfect for "how many tickets per category".
  • Count Unique: counts distinct values — "how many different customers placed an order".
  • Sum: adds up numeric values — revenue, quantities.
  • Average: the numeric mean — average rating, average basket.
  • Min / Max: the smallest or largest value — first order date, record amount.
  • Concatenate: joins the values into a single string, with the separator of your choice — handy for listing a group's references in a cell or a Slack message.
  • Append: collects the values into an array, with an option to skip empty values — useful when the rest of the workflow needs to iterate over each group's details.

On output, each aggregate is automatically named operation_field: summing amount yields sum_amount, counting rating yields count_rating. Predictable, and therefore easy to reference in downstream expressions.

Fields to Split By: n8n's group by

Take four orders as input:

[
  { "customer": "Atelier Brune", "amount": 240 },
  { "customer": "Studio Ker", "amount": 90 },
  { "customer": "Atelier Brune", "amount": 310 },
  { "customer": "Studio Ker", "amount": 150 }
]

A Summarize configured with Sum on amount and customer in Fields to Split By returns:

[
  { "customer": "Atelier Brune", "sum_amount": 550 },
  { "customer": "Studio Ker", "sum_amount": 240 }
]

Two distinct customers, two output items, each carrying its own total. Without the split, you'd get a single item { "sum_amount": 790 } — the grand total. The field also accepts a comma-separated list (region, category) to cross several dimensions, just like a two-level pivot table — which is why this node fully earns its nickname of "n8n's pivot".

Summarize or Aggregate: which one to pick

The confusion is common because both nodes "group things". The distinction fits in one sentence: Aggregate merges without computing, Summarize computes. Aggregate takes N items and stores them as-is in an array inside a single item — perfect for prepping an LLM call or a recap email, as covered in our Split Out and Aggregate guide. It cannot sum, count or group by category. As soon as there's a notion of "per customer", "per product", "per week" or a number to produce, Summarize is the node you want. And don't confuse it with Merge, which joins two separate workflow branches, either: Summarize operates on a single branch.

Three concrete use cases

Order totals per customer. That's the example above, verbatim. Coming out of your CRM or your store, a Summarize with "Sum on amount, split by customer" gives you the list of customers with their revenue — ready to feed a Google Sheet or an Excel/CSV export.

Average rating per product. With customer reviews as input, combine two aggregations in the same node — Average on rating and Count on rating — split by product:

[
  { "product": "Oslo Chair", "average_rating": 4.5, "count_rating": 12 },
  { "product": "Rennes Table", "average_rating": 3.2, "count_rating": 5 }
]

Keeping the count next to the average stops you from over-reading a mean computed from two reviews.

A weekly report counted by category. A Schedule Trigger on Monday morning, a read of the week's tickets or events, then a Summarize with "Count, split by category": in three nodes you have the skeleton of an activity report, along the same lines as our automated Google Analytics 4 report. This is precisely the kind of task still done by hand in a spreadsheet far too often — with the risks that entails: Raymond Panko's research, notably What We Know About Spreadsheet Errors (1998, see it on Google Scholar), showed that the majority of operational spreadsheets contain errors. A Summarize configured once recalculates correctly, every single week.

The traps to know about

  • Text vs numbers. Trap number one. Data coming from webhooks, CSV files or Google Sheets often arrives as strings: "240" instead of 240. Sum and Average then produce 0 or nonsense. Convert upstream with an Edit Fields (Set) node and an expression like {{ Number($json.amount) }}.
  • Field name casing. Amount, amount and AMOUNT are three different fields. If your aggregate comes out empty, check the exact spelling in the previous node's output view before blaming the node.
  • Missing fields. By default, Summarize stops with an error if a field to summarize can't be found in the items. The Continue if Field Not Found option lets it carry on regardless — useful on heterogeneous data, but it can also paper over a real upstream problem.
  • Duplicates inflating totals. If the same order shows up twice (double webhook, re-sync), the sum is wrong. A Remove Duplicates node before the Summarize cleans up the input.

Combining Summarize with Filter and Merge downstream

Summarize's output is an item list like any other: the whole n8n toolbox applies. Two chains come up constantly:

  • Summarize → Filter: keep only the groups above a threshold — customers with more than €500 in orders, categories with more than 10 tickets. The Filter node acts as your HAVING clause.
  • Summarize → Merge: inject the aggregates back into the detail rows. One branch computes the total per customer, the other keeps the individual orders, and a Merge in combine-by-key mode on customer adds sum_amount to every row — handy for computing each order's share of its customer's total.

Summary

The Summarize node is n8n's GROUP BY: eight operations (count, count unique, sum, average, min, max, concatenate, append), grouping by one or more fields via Fields to Split By, and clean output named operation_field. Remember the dividing line with Aggregate — merge without computing on one side, compute per group on the other — and watch out for numbers stored as text, the prime suspect whenever a total looks wrong. If what sits behind these aggregates is regular, traceable reporting — activity reports, consolidated logs, weekly KPIs — the Compliance & Audit Pack (€149) ships ready-to-use logging and reporting workflows where Summarize plays exactly that weekly consolidation role.

FAQ

Frequently asked questions

What is the difference between Summarize and Aggregate in n8n?

Aggregate merges N items into a single one without any computation: it collects values or whole items into arrays, and that's it. Summarize actually calculates: it counts, sums, averages, takes the min or max, and above all it can group by category thanks to Fields to Split By. If you just need to go from N items to 1 for an email or an LLM call, use Aggregate; if you need a total per customer or an average per product, Summarize is the one.

How do I group by multiple fields in n8n?

In the Summarize node, the Fields to Split By parameter accepts a comma-separated list of fields, for example region, category. The node then outputs one item per unique combination of those field values, exactly like a GROUP BY region, category in SQL or a two-level pivot table. Each output item carries the grouping fields plus the computed aggregates.

Why does my sum return 0 or a weird result in Summarize?

In almost every case, the summed field contains strings rather than numbers: "42" instead of 42, a frequent trap with data coming from webhooks, CSV files or Google Sheets. Insert an Edit Fields (Set) or Code node before the Summarize to convert the field to a number, for instance with Number($json.amount). Also double-check the exact casing of the field name: Amount and amount are two different fields as far as n8n is concerned.

Bundle FlowKit Complet

€269