Configuration
Add this step from the Utilities group in Search steps….
Modes
Build Rows
Use Build Rows to zip arrays by index into an array of objects. Each field has a Key and a Source Value. The key becomes an object property. The source can be a whole variable reference such as{{tool_names}} or {{step_3.output}}, or a static value. The step fails if you run it with no fields or with a blank field key.
Array source values are read by index. Static scalar values repeat for every row.
Example:
Concat Arrays
Use Concat Arrays to append multiple arrays into one longer array. Each source must resolve to an array. If a source resolves to a string, object, number, or boolean, the step fails. Example sources:["a", "b"] and ["c"], the output is:
Flatten Array
Use Flatten Array to flatten one array by one level. Nested array elements expand. Non-array elements stay in place. Example source:Objects to Grid
Use Objects to Grid when a previous step returns an array of objects and you want to write that dataset into Google Sheets. Set Source Value to the records array, such as{{step_2.output}}. If the previous step wraps rows in a field (for example AI Keyword Data Search), use that field instead, such as {{step_2.output.items}}. Leave Headers blank to use every object key in first-seen order. You can also pass a placeholder that resolves to an array of column names, or a comma-separated list such as keyword, volume, difficulty.
Example source:
Classify Date
Use Classify Date when you need to know whether a date has passed, such as a tender deadline or an offer expiry. A model is unreliable at comparing dates, so this mode does it in code after an AI step has extracted the raw date text. Set Source Value to the records array, Date Field to the field holding the date (for exampledeadline), and leave Today as {{_current_date}}. Each record comes back with a status field (default date_status):
To rank or filter by age, set Age Field: each record also gets the number of days since the date under that name (a date still ahead gives a negative number, and an unclear date gives
null). A time or timezone after the date is ignored. A numeric date whose day and month are both 12 or less, with no month name, such as 10/12/2026, is ambiguous and comes back unclear instead of being guessed. 25/12/2026, 2026-12-25 and 25 December 2026 are all read normally.
Summarize
Use Summarize to count a list, optionally total a numeric field and group by another field, so a later step reports numbers that match the list. The output is{ "count": 5, "total": 17.5, "groups": [{ "value": "open", "count": 2, "total": 12 }] }; total appears only when you set Total Field, and groups only when you set Group By. Non-numeric values are skipped when adding up.
Use Count items where when a later step needs a count of the items that meet a condition, or a percentage, such as how many checklist items are found out of all of them. Set a field, an operator and a value (for example status is one of structured, buried). The output then also has matched (how many items meet the condition) and matched_percent (matched as a percentage of count, rounded to a whole number, or 0 for an empty list). Reference them like any other output, for example {{step_6.output.matched_percent}}, so the numbers come from the step instead of an AI step counting for itself.
Date Window
Use Date Window when a scheduled workflow reads a period such as last week or today. Typing the dates as inputs goes stale after one run, and a model is unreliable at working out “last Monday to Sunday”, so this mode does it in code from the run date. It needs no source value. Set Period to the window you report on and leave Today as{{_current_date}}. Weeks start on Monday, so Last week on a Monday run is the previous Monday to Sunday. Last 7 days and Last 30 days end today; Last N days takes its length from Days. The output is one object:
{{STEP_IDENTIFIER.output.start}} and {{STEP_IDENTIFIER.output.end}} to an integration step’s date arguments, or start_at and end_at where it wants a full timestamp, and {{STEP_IDENTIFIER.output.label}} to the step that writes the report.
Output
Data Transform stores its result at:headers and rows. Use it with Google Sheets Upsert Rows.
For Classify Date, the output is the input array with the status field added to each record.
For Summarize, the output is an object with count and, when configured, total, groups, matched and matched_percent.
For Date Window, the output is an object with start, end, start_at, end_at, days and label.
Notes
- Source values should be whole placeholders such as
{{step_2.output}}, or static scalar values. - Mixed template strings such as
Research for {{tool_names}}are not supported in Data Transform V1. - Data Transform preserves arrays and objects as structured JSON for downstream steps.
- Data Transform is a free utility step.

