Summarize
Summarize turns a list into grouped results. Pick what to group by, then say what to work out for each group: a count, a total, an average, the smallest or the largest.
- Use it to
- Group a list by one or more fields and calculate counts, totals, averages, minimums, or maximums
- Find it
- Tools → Data → Transform → Summarize
- Cost
- 1 Step credit per execution
- Limits
- Up to 100,000 input items · 100,000 characters max serialized output
- Output
- {{ N.groups }} (list of grouped records), {{ N.groupCount }}
- Instead
- Inline pipes ({{ 1.orders | pluck:amount | total }}) when computing a single total
It answers the questions that otherwise need code. Revenue per account manager, tickets per priority, orders per region.
Simple total or average without grouping? You can calculate a single total, average, count, or min/max directly inside field tokens using Data Transformation:
- Sum of record property:
{{ 3.deals | pluck:amount | total }} - Average deal size:
{{ 3.deals | pluck:amount | average }} - Largest sale:
{{ 3.deals | pluck:amount | largest }} - Count of items:
{{ 3.deals | count }}
Use the Summarize canvas step when you need to group data by dimensions (e.g. revenue grouped by account manager or ticket counts per status).
Setting it up
Add the step
Open Tools in the dock and choose Summarize.
Point it at a list
List takes a reference to a list an earlier step produced, for example {{ 3.result }} (or a valid JSON array). A single record or plain value is not wrapped as a one-item list. Insert the reference from the data icon rather than typing it.
Choose how to group
Group by takes the field whose values become the groups: region, owner, priority. Add more than one row to group by a combination.
Leave it empty to treat the whole list as one group. That is how you total a list without splitting it.
Say what to work out
Work out takes one row per number you want. Each row picks an operation and what to work on: a field of each record, or each whole item. Count needs neither.
| Operation | What it gives you |
|---|---|
| Count | How many records are in the group |
| Count unique | How many different values a field has |
| Sum | The total of a numeric field |
| Average | The mean of a numeric field |
| Smallest | The lowest value |
| Largest | The highest value |
| List the values | Every value of that field in the group, as a list |
| Join the values | The same values as one piece of text, with a separator you choose |
Summarizing a list of plain values: When the input list holds plain numbers rather than records, set Work on to Each whole item and leave Group by empty. The output column is named after the operation alone, such as {{ N.groups.0.sum }}.
What it passes on
The result is always a list under groups (ordered by when each group first appeared in the input), even when everything lands in one group:
| Reference | What it holds |
|---|---|
{{ N.groups }} | One entry per group |
{{ N.groupCount }} | How many groups there are |
Each group carries your Group by fields plus one column per Work out row (<operation>_<field>):
// Input: [{"region": "UK", "amount": 500}, {"region": "UK", "amount": 700}]
// Output at {{ 5.groups }}:
[
{
"region": "UK",
"sum_amount": 1200,
"count": 2
}
]Read fields from the first group as {{ 5.groups.0.region }}, {{ 5.groups.0.sum_amount }}, and {{ 5.groups.0.count }}, or loop over {{ 5.groups }} with a Repeater. The output also records the operation and timezone when applicable.
How values are counted
| Input Case | How Summarize Handles It |
|---|---|
| Missing or non-numeric values | A missing value (null, "n/a", true, {}) is never counted as zero. Under If a field is missing, choose Report it (fail the step) to halt and name the invalid field, or Skip those records to exclude them and record counts in skippedByOperation and skippedByGroupField. |
| Numeric strings | Numeric text such as "1200" is parsed as a number for arithmetic (Sum, Average, Smallest, Largest). |
Decimal rounding (Sum & Average) | Uses decimal accumulation to avoid floating-point drift (such as 0.1 + 0.2) and rounds to Decimal places (0 to 10, default 2). Very large values remain subject to standard number representation limits. |
Exact extremes (Smallest & Largest) | Returns the exact unrounded value from the input records. |
Limits
- Input and output size. Summarize accepts up to 100,000 items and produces up to 100,000 characters of serialized output.
- Two rows cannot write the same column. Two Sums of
amountwould both besum_amount, so the step reports the clash rather than overwriting a result. - A record missing its group-by field never lands in a group called “undefined”. It follows the same If a field is missing setting.
Examples to copy
Revenue per account manager
List: {{ 3.deals }} · Group by: owner · Work out: Sum of amount, and Count.
Gives one entry per owner with sum_amount and count. Follow it with a Repeater over {{ N.groups }} to send each manager their own figure.
Tickets per priority, as one message
List: {{ 2.tickets }} · Group by: priority · Work out: Count.
Then reference the groups directly in a Slack message rather than looping.
A single total, no grouping
List: {{ 4.invoices }} · Group by: empty · Work out: Sum of total.
One group, reached as {{ N.groups.0.sum_total }}.
- Run
- Point List at a sample array of records, set Group by and a Sum or Count row, and click Run step in Test & Debug
- You should see
- The Output tab returns groups (one object per group with your calculated columns) and groupCount.
What’s Next?
- Run over each group with Repeater.
- AI Data Transform: pull values out of text that has no fixed shape.
- Reshape records before summarising them with Change fields.