Documentation
Nodes
A node is one step in your workflow: read a file, filter rows, join two tables, draw a map,
send an email. You connect nodes on the canvas, and data flows from one to the next.
Add a node
Right-click the canvas, or press ⌘K (Ctrl+K on Windows), and start typing.
Names from other tools work too, so Summarize, GroupBy or
Merge Queries find Aggregate or Join. With a node selected, the new one is wired
after it.
Some searches add a node that is already set up. Type an Excel finance function, such as
PMT, NPV or IRR, or what it works out, such as
loan payment or depreciation, and the Finance section
lists one row per function. Picking one adds an Add Column with the formula already written, or for the
cash-flow functions an Aggregate with the operation and its rates filled in; you replace
its placeholders with your columns. See Formulas and finance functions.
To read a file, you can also drop it on the canvas, or drag a source out of the
Drones panel on the left.
Ports
Inputs sit on a node's left edge and outputs on its right. Drag from an output to an input to
connect two nodes. Most ports carry a table. A few nodes have more than one input, such as Join
(a left and a right table), or more than one output, such as Switch (one per case).
Select a node to set it up in the Attributes panel on the right. Run the workflow, and
the panel under the canvas shows the selected node's output on the Data tab, or on
Map, Chart or Report for the nodes that draw one.
Input nodes bring data into the workflow. Files, databases and cloud sources usually come in from the Drones panel on the left: drop a file or folder on the canvas, or drag a source out of the panel, and the right reader appears already set up. The rest you add from the node menu like any other node.
Files
| Node |
What it does |
Typical use / also known as |
| CSV Reader |
Reads a CSV or other delimited text file, such as a TSV. Column types are detected for you, and you can override them or read every column as text. |
Import, read_csv, TSV |
| Fixed-width Reader |
Reads a text file whose columns sit at fixed character positions, such as a mainframe export or a legacy feed, slicing each line at the positions you set on a ruler over the file's first lines. Header row, start line, encoding and row limit work as in the CSV Reader. |
Fixed length, flat file, .dat, .prn, Alteryx .flat |
| JSON Reader |
Reads a .json, .jsonl or .ndjson file as a table. A JSON array of objects and one-object-per-line files are both detected automatically. |
JSON Lines, NDJSON, API response |
| Parquet Reader |
Reads a Parquet file and keeps the column types stored in it. |
Columnar, Arrow |
| Excel Reader |
Reads one worksheet of an Excel workbook, the first sheet unless you pick another. |
XLSX, spreadsheet |
| Geo Reader |
Reads a map file with its geometry: GeoJSON, Shapefile (also zipped), GeoPackage, GML, KML/KMZ, GPX, FlatGeobuf or MapInfo TAB. For a file with several layers, you pick which layer to read. |
Shapefile, GeoPackage, KML |
| XML Reader |
Reads an XML file into a table. It finds the repeating record element for you, so each record becomes a row. |
XML feed |
| SQLite Reader |
Reads one table from a local SQLite database file (.sqlite, .sqlite3 or .db). You pick the table from the file's list of tables. |
Embedded database |
| Locra Table Reader |
Reads a .ddtable file saved by Write Locra Table, in this project or another one. The column formats come back too, so everything prints as it did. |
Hand-off, checkpoint |
Databases and cloud
| Node |
What it does |
Typical use / also known as |
| DB Reader |
Reads a table from a PostgreSQL or MySQL database through a saved connection. You pick the schema and table. |
Postgres, MySQL, SQL input |
| S3 Reader |
Reads a file stored in an Amazon S3 bucket, or another S3-compatible store, into a table. A pattern such as s3://bucket/exports/*.csv reads every matching object into one table. |
AWS, bucket, MinIO |
| Snowflake Reader |
Reads a table from Snowflake through a saved connection, or the result of a SQL query you write. A table is read whole unless you set a row limit. |
Data warehouse |
| Salesforce Reader |
Reads the records of a Salesforce object through a saved connection, or the result of a SOQL query you write. An object is read whole unless you set a row limit. |
CRM |
| Strava Reader |
Reads your Strava activities, athlete profile or activity streams through your own connected Strava app. |
Fitness data |
Folders and loops
| Node |
What it does |
Typical use / also known as |
| Directory |
Lists the files in a folder, one row per file, instead of reading their rows. Wire it into a loop to process every file in turn. |
Batch of files, dynamic input |
| S3 Directory |
Lists the objects in an S3 location that match a pattern, one row per object, so a loop can process each one. |
Batch of S3 files |
| DB Directory |
Lists the tables in a database connection, one row per table, so a loop can run once per table. You can filter the list by name. |
Table per record |
| Sheets |
Lists the sheets of an Excel workbook, one row per sheet, so a loop can read each sheet in turn. |
Sheet per record |
| Current item |
Sits inside every loop and gives you the item the loop is on right now, such as the current file read as a table. It is added for you and can't be removed. |
Loop input |
| File |
Reads the file whose path sits in a column of its input: Parquet, CSV, JSON, Excel or a map file, on disk or in S3. Wire a loop's Current item into it to read a different file each time. |
Dynamic input, read by path |
Web and APIs
| Node |
What it does |
Typical use / also known as |
| REST Fetch |
Pulls data from a web address into a table. Enter the URL and press Generate fetch, and the code that fetches and parses the response is written for you. |
API, web scraping, download |
| Web Page |
Reads a web page or a saved .html file. Add it with Add data source, then choose what to read: a table, repeating items such as product cards or list entries, contact details, or the whole page as text. It can follow "next" links or a URL pattern to read several pages, and render a page built with JavaScript before reading it. |
Web scraping, scrape a table, Wikipedia |
Make your own data
| Node |
What it does |
Typical use / also known as |
| Constant Table |
A small table you type in by hand, with named, typed columns. Handy as a lookup list, or as the list of items a loop goes through. |
Text input, manual entry |
| Generate Series |
Creates a one-column table of numbers, dates or timestamps from a start to a stop at a fixed step, such as every day or every 15 minutes. Useful as a calendar to join facts onto. |
Date spine, calendar table, range |
| DuckDB Query |
Write your own SQL query for anything the other nodes don't cover. A wired-in table is available to the query as _input. Excel's cash-flow functions such as NPV and IRR take a column here, e.g. NPV(0.08, list(cashflow ORDER BY period)). |
Custom SQL |
Context data
| Node |
What it does |
Typical use / also known as |
| Overture Maps |
Fetches open map data from Overture Maps inside a box you draw: places, buildings, roads, land use or addresses. Places can be narrowed by category, such as restaurants. |
POIs, building footprints |
| Population (Kontur) |
Fetches the Kontur population grid for one country, clipped to your area, as one row per 400 m hexagon with its population. |
Population density, headcount |
| US Census (ACS) |
Fetches American Community Survey estimates, such as population, income, age and housing, for US states, counties, tracts, ZIP areas and more. Needs a Census API key saved in Credentials. |
Demographics |
| OSM Overpass |
Asks live OpenStreetMap for features that match tag filters inside your area, such as amenity=cafe or shop=supermarket. |
OpenStreetMap query |
| EU Parcels |
Fetches open land-parcel outlines and parcel references for Poland, France, Spain or the Netherlands: inside a box, at a point, or by parcel reference, depending on the country. Geometry and references only, never ownership data. |
Cadastre, land registry |
Shape
Shape nodes change a table: filter it, add columns, summarize it, combine it with another one. Each takes a table in and passes a table on.
Rows
| Node |
What it does |
Typical use / also known as |
| Filter |
Keeps only the rows that meet your conditions, combined with AND or OR. For example, keep orders where the amount is over 100. |
Where, select records |
| Switch |
Sends each row down one of several outputs: it goes to the first case whose condition is true, and rows that match none go to Default. |
Case when, if/else, conditional split |
| Sort |
Puts rows in order by one or more columns, ascending or descending, with blanks first or last. |
Order by |
| Row Limit |
Keeps or drops the first or last N rows, in their current order. For example, skip three header lines or take 100 rows for a quick check. |
Head, tail, skip rows, sample |
| Top / Bottom N |
Keeps the N rows with the largest or smallest values in one column, such as the 10 best-selling products. You choose what happens to ties at the cut-off. |
Leaderboard, nlargest |
| Distinct |
Keeps one row per unique combination of key columns. You choose whether the first or last copy survives; with no keys it drops exact duplicate rows. |
Remove duplicates, unique |
| Random Sample |
Picks a random set of rows, either a fixed number or a share such as 10%. You can sample with replacement, or stratify by a column so each group keeps its share. Set a seed to get the same rows every time. |
Downsample, stratified sample |
| Random Split |
Divides rows into named groups by percentage, each on its own output, such as 80/20 train and test. Repeatable, and can keep each group's share of a column. |
Train/test split, A/B cohorts, create samples |
| Add Row Number |
Numbers the rows 1, 2, 3… in a new column. You can sort first and restart the count in each group. |
Record ID, row_number |
| Rank |
Ranks rows by one or more columns, optionally within groups, so the top seller per region gets 1. You choose how ties are ranked; percentile rank is available too, and Tile splits the rows into N equal-sized buckets. |
Dense rank, percentile |
| Densify |
Adds the rows that are missing so every key combination appears, taken from the data or from a reference table you wire in, and fills the gaps with values you choose. For example, every product for every month, with 0 sales where none were recorded. |
Complete, fill gaps |
| Generate Rows |
Repeats each row once per value of a range, such as 1 to a count column or a start date to an end date, and adds the generated value as a column. For a sequence with no input, use Generate Series. |
Expand rows, one row per day, repeat rows |
Columns
| Node |
What it does |
Typical use / also known as |
| Select Columns |
Keeps only the columns you pick and drops the rest. |
Drop columns, select |
| Rename |
Gives columns new names. Type old-to-new pairs, or let the data decide at run time: take the names from the first row (which is then dropped), from a names table on a second input, or from an expression over each old name. |
Relabel, alias |
| Cast Types |
Changes a column's type, such as text to number or text to date. You choose what happens to a value that won't convert: stop the run, or make it blank with or without a warning. |
Data type, change type |
| Parse |
Turns messy text into real values: dates and times, numbers with separators or currency signs, true/false, durations, measurements with units, and coordinates. |
Text to date, text to number |
| Add Column |
Adds a column worked out by a formula, a fixed value, today's date or the current time, or a parameter. For example, margin = Price − Cost. Excel's finance functions such as PMT work here by name; see Formulas and finance functions. |
Formula, calculated field |
| Multi-field Formula |
Applies one formula to many columns at once, such as rounding every price column. Overwrite the columns or write new ones beside them. |
Apply to many columns |
| Multi-row Formula |
Works out a column from the current row and its neighbours, including the column's own value on the previous row. Use it for fill-down, running totals or carrying the last value forward. |
Previous row, fill down |
| Fill Missing |
Replaces blanks with a fixed value, an empty string, or the previous or next value, or drops those rows. It can also drop rows or columns that are entirely empty. |
Fill nulls, forward fill, data cleansing |
| Replace Values |
Swaps text in a column for other text, such as 'N/A' to blank or 'NY' to 'New York'. Each rule replaces its text wherever it appears in a value, as plain text or a pattern. |
Find and replace, recode |
| Replace via Mapping |
Swaps values in one or more columns using a second table of from → to pairs, such as a code list turning 'NY' into 'New York'. Values with no match stay as they are, or fail the run if you choose. |
Mapping table, recode, translate codes |
| Interpolate NULLs |
Fills blank numbers by estimating from the known values around them, in a straight line or by taking the nearest one. For example, missing sensor readings. |
Gap fill |
| Clip Values |
Caps numbers at a lower and/or upper bound. Anything below becomes the minimum, anything above becomes the maximum. |
Clamp, cap outliers |
| Bin |
Turns a number into a labelled band, using your own break points or equal-width buckets. For example, ages into 0–17, 18–64 and 65+. |
Bucket, tile, age groups |
| Format Table |
Sets how columns print in previews and reports: currency, percent, decimals, thousands separators, date masks, alignment and hidden columns. The values themselves don't change. |
Number format, display format |
| Format to Text |
Turns a number, date or time column into formatted text: thousands separators, fixed decimals, currency or a date pattern. The pattern can come from another column, row by row. Unlike Format Table, this changes the data. |
Number to text, format as text |
| Audit Stamp |
Adds columns that record when the row was loaded, from which source, and in which run. Use it before writing to a warehouse so you can trace every row. |
Lineage, batch ID |
Summarize and reshape
| Node |
What it does |
Typical use / also known as |
| Aggregate |
Collapses rows into one row per group and works out values for each: sum, count, average, median, mode, percentiles, longest text and more, cash-flow values such as NPV or IRR, and for a geometry the dissolved shape, extent or centroid. With no group, you get one grand-total row. |
Summarize, group by |
| Group Aggregate |
Works out a group total and writes it onto every row instead of collapsing them, as the value, a ratio or a percent. For example, each sale as a share of its region's total. |
Percent of total, window total |
| Running Aggregations |
Adds running totals that build up row by row: sum, average, median, min, max, count or standard deviation, optionally restarting per group. For example, year-to-date sales. |
Cumulative sum, running total |
| Pivot |
Turns the values of one column into new columns, such as one row per store with a column per month. The reverse of Unpivot. |
Cross tab, long to wide |
| Unpivot |
Turns chosen columns into rows of name and value pairs. For example, Jan, Feb and Mar columns become month and sales rows. |
Melt, wide to long, transpose |
| Transpose |
Swaps rows and columns, so every column becomes a row. Best for small, wide summary tables. |
Flip, swap rows and columns |
| Split to Rows |
Turns a cell holding several delimited values into one row per value. For example, 'red;green;blue' becomes three rows. |
Text to rows |
| Split to Columns |
Breaks one text column into several columns at a delimiter, such as 'London, UK' into city and country. |
Text to columns |
| Explode |
Turns each item of a list column into its own row. For comma-separated text, use Split to Rows instead. |
Unnest, flatten |
Text
| Node |
What it does |
Typical use / also known as |
| Text Operations |
Cleans text columns: change case, trim spaces, find and replace, pad, cut, add a prefix or suffix, or take the length. One node can clean several columns. |
Trim, upper case, cleanse |
| Tokenize |
Finds every match of a regular expression in a text column, such as each number in 'a12 b34'. It spreads the matches across columns, gives each its own row, or turns each match's capture groups into columns. |
Extract all matches, text to columns |
| URL Parse |
Splits a web address into its parts: scheme, host, port, path, query and fragment. For example, pull the domain out of referrer links. |
Extract domain |
| IP Parse |
Splits IPv4 or IPv6 addresses and network ranges into host, family, netmask, network and broadcast address. Handy for grouping traffic by subnet. |
CIDR, subnet |
| Slug |
Turns text into a web-friendly form: lower case, no accents, hyphens between words. 'Hello, World! 2026' becomes 'hello-world-2026'. |
Slugify, permalink |
| Base64 |
Encodes a column to base64 text, or decodes base64 back to text or raw bytes. |
Encode, decode |
Combine tables
| Node |
What it does |
Typical use / also known as |
| Join |
Matches rows from two tables on one or more key columns: inner, left, right, full, anti or semi. Keys can also compare with <, > or between, for range joins. |
Merge, merge queries |
| Lookup |
Adds columns from a reference table to every row by matching one key, like Excel's VLOOKUP. Rows without a match stay, with blanks. |
VLOOKUP, XLOOKUP, find and replace |
| Union |
Stacks the rows of two or more tables one under another. Columns line up by name or by position. |
Append, concatenate, stack |
| Zip |
Puts two tables side by side, row 1 with row 1, row 2 with row 2, with no key needed. Both tables must have the same number of rows. |
Join by position, bind columns |
| Cross Join |
Pairs every row of one table with every row of the other, so 10 × 5 rows gives 50. For example, every store with every month. |
Append fields, every combination |
| As-of Join |
Matches each row to the closest row in another table by a sorted key such as a time. For example, attach the price in effect at the time of each trade. |
Nearest match, merge_asof |
| Fuzzy Match |
Joins two tables on keys that are similar but not identical, such as customer names with typos. A score column shows how close each match is. |
Approximate join, record linkage |
Dates and time
| Node |
What it does |
Typical use / also known as |
| Date/Time Arithmetic |
Adds or subtracts time from a date, or measures the gap between two dates, from seconds to years or working days. For example, due date = order date + 30 days. |
Date diff, date add, business days |
| Truncate Date/Time |
Rounds dates down to the start of a period, such as the first of the month. Handy before grouping by month. |
Start of month, date floor |
| Time of Day |
Drops the date from a timestamp and keeps the clock time, so you can compare times across days. |
Strip date |
| Make Date from Parts |
Combines separate year, month and day columns (and hour, minute, second) into one real date or timestamp. |
Date from parts |
| Convert Date/Time to Text |
Turns a date into text using a pattern, such as 01/03/2024 or Mar 2024. The result is text, so use it for labels and exports, not for date math. |
Date format, strftime |
| Convert Serial Date |
Converts between numbers and dates: Unix timestamps, Excel serial dates, Julian days or your own starting point. For example, 45292 from Excel becomes 2024-01-01. |
Epoch, Excel date |
| Convert Timezone |
Shifts times from one time zone to another, with daylight saving handled. For example, UTC to Europe/Warsaw. |
Time zone, UTC |
Time series
| Node |
What it does |
Typical use / also known as |
| Shift / Lag |
Copies a value from N rows earlier or later onto each row, so you can compare a row with the one before it. For example, last month's sales next to this month's. |
Lag, lead, previous row |
| Diff / Pct Change |
Compares each row with the one N periods earlier and writes the difference or percent change. For example, month-over-month growth per store. |
Growth rate, year over year |
| Rolling Window |
Adds moving statistics over the last N rows: sum, average, standard deviation, min, max, count or median. For example, a 7-day moving average. |
Moving average |
| Resample |
Rolls a time series up into regular buckets, from minutes to years, with a total or other summary per bucket. Empty buckets can be left out, carried forward or set to zero. |
Time bucket, daily totals |
| Exponential Weighted Mean |
Smooths a number column so recent rows count more than older ones. Gives a weighted mean, standard deviation or variance. |
EWMA, exponential smoothing |
| Forecast |
Forecasts the next periods of a measure from a dated series, one forecast per group, with a lower and upper band. It can also backtest the recent past to show how accurate the forecast would have been. |
Sales forecast, time-series projection |
| Sessionize |
Groups events into sessions: a new session starts when the gap since the last event is longer than you set, such as 30 minutes. |
Clickstream sessions |
Statistics
| Node |
What it does |
Typical use / also known as |
| Describe |
Summarizes each column in one row: count, blanks, mean, standard deviation, min, percentiles and max. A quick first look at a new dataset. |
Summary statistics, profile |
| Value Counts |
Counts how often each value, or combination of values, appears: one row per distinct value with its count or share. |
Frequency table, tally |
| Column Profile |
Counts the distinct values in each chosen column, as long rows of column, value and count. Useful for spotting typos or dominant categories. |
Field summary |
| Correlation Matrix |
Shows how strongly each pair of number columns moves together, as a grid of values from −1 to 1. |
Pearson, Spearman |
| Covariance Matrix |
Works out the covariance of every pair of number columns, as a grid. |
Covariance |
| Linear Regression |
Fits a straight-line model of one column from one or more others. Outputs the coefficients, or your rows with predictions and residuals. |
Least squares, trend line |
| Standardize |
Rescales number columns to a common scale: z-score or 0 to 1. Use it before comparing measures in different units. |
Normalize, scale |
| Outlier Flag |
Adds a true/false column marking rows with unusually high or low values. Rows are kept, so you can filter or review them afterwards. |
Anomaly flag |
Data quality and flow control
| Node |
What it does |
Typical use / also known as |
| Assert |
Checks the data against rules, such as no blanks, unique keys, allowed values or freshness, and stops the run if one fails. Data that passes flows through unchanged. |
Test, validate |
| Expectations |
Runs a set of quality rules and outputs a scorecard with one row per rule, its failed count and pass rate. Unlike Assert, it never stops the run. |
Data quality report |
| Gate |
Passes data on only when a condition holds. The condition can test the data itself, a separate control table or a parameter. Otherwise everything after it is skipped and the run still succeeds. For example, publish only if the extract has rows. |
Only if, skip downstream |
| Wait For |
Holds a branch back until other steps have finished, then passes its data on. For example, send a Slack message only once the database write is done. |
Run after, block until done |
| Compare Tables |
Lines up two versions of a table by key columns and puts each value side by side, flagging every cell that changed. A row on only one side shows blanks for the other. |
Diff, reconcile |
Matching and dedupe
| Node |
What it does |
Typical use / also known as |
| Flag Duplicates |
Adds a true/false column marking rows that repeat on the key columns, and keeps every row for review. A fuzzy mode catches near-duplicates such as Jon and John. |
Find duplicates |
| Blocking |
Finds candidate pairs of records that share a key, such as the same postcode, within one table or across two. It narrows down the pairs before fuzzy matching. |
Record linkage, candidate pairs |
| Match Grouping |
Turns matched pairs into groups: if A matches B and B matches C, all three share one cluster ID. Wire in the original records too and every record gets its cluster ID, with unmatched records in a cluster of their own. |
Make group, clusters |
| Survivorship |
Merges each group of duplicate records into one best record, picking each field by a rule such as most recent or most frequent. |
Golden record, master data |
IDs and hashing
| Node |
What it does |
Typical use / also known as |
| Hash |
Replaces a column, or adds a new one, with its MD5, SHA-1 or SHA-256 hash. Use it to hide personal data such as emails, or to build a stable ID. |
Anonymize, pseudonymize |
| Row Hash |
Combines several columns into one fingerprint per row. Compare fingerprints between two loads to spot the rows that changed. |
Change detection, checksum |
| Surrogate Key |
Gives each distinct key a compact ID: a hash that stays the same across runs, or a number from 1 to N. |
Dimension key |
| UUID |
Adds a random unique ID to every row. The IDs change on every run; use Surrogate Key when they must stay stable. |
GUID, unique ID |
Geospatial
Geospatial nodes work with a geometry column: points, lines and polygons. You see the result on the Map tab under the canvas. Geocoding and routing run offline on your machine. Routing needs road data installed first.
Build and fix geometry
| Node |
What it does |
Typical use / also known as |
| Make Point |
Turns longitude and latitude columns into points you can map and use in other spatial nodes. |
XY to point, create points |
| Poly Build |
Connects ordered points into a line or polygon, or wraps them in a hull or bounding box, optionally one shape per group. For example, GPS points into route lines. |
Points to line, convex hull |
| Make Valid |
Repairs broken shapes, such as self-crossing polygons, so later spatial steps don't fail on them. |
Fix geometry |
| Reproject |
Converts geometry from one coordinate system to another. Use it before measuring or overlaying layers that come in different projections. |
CRS, EPSG, transform |
| Poly Split |
Breaks multi-part shapes into single parts, one row per part, such as the islands of a country. |
Explode multipart |
| Remove Holes |
Fills in the holes inside polygons, keeping only the outer boundary. |
Fill holes |
| Dissolve |
Merges shapes into one, or one per group, so the inner borders disappear. For example, county outlines into one outline per state. To keep totals alongside the shapes, use Aggregate's Union (dissolve). |
Merge polygons, union |
Combine and measure
| Node |
What it does |
Typical use / also known as |
| Spatial Join |
Joins two tables by where their shapes are, not by a key: intersects, within, contains or nearest. For example, tag each store with the region it falls in. |
Point in polygon, spatial match |
| Spatial Intersection |
Overlays two layers. Keep only where they overlap, or cut one out of the other, such as land parcels minus flood zones. |
Overlay, erase |
| Spatial Measure |
Adds a measurement per shape: length, area, perimeter, compass bearing, or the distance from the previous point on a track. |
Area, distance, length |
| Buffer |
Grows each shape outward by a distance, turning points or lines into areas. For example, a 500 m zone around every store. |
Radius, zone |
Areas and surfaces
| Node |
What it does |
Typical use / also known as |
| Trade Areas |
Builds catchment areas around each location: distance rings, drive-time bands, areas traced from demand, or rings cut into sectors. |
Catchment, market area |
| Gravity Model |
Splits each area's demand between the locations in range by their attractiveness and distance (the Huff model). Gives the demand each location captures, such as a new store's sales and what it takes from the others, the top location per area, or a probability for every area and location. |
Huff model, market share, site selection |
| Calibrate Gravity Model |
Fits the Gravity Model's attractiveness and distance-decay settings to what customers actually did, such as loyalty-card visits per area and store, and reports how well the fit reproduces each store. |
Calibrate Huff, distance decay |
| Voronoi |
Draws one area per point covering everywhere closer to it than to any other point, such as the nearest-store territory for every shop. |
Thiessen polygons |
| H3 Aggregate |
Puts features into hexagon cells of a chosen size and summarizes each cell, for an even grid on density maps. |
Hex bins, heat map |
| Spatial Interpolate |
Estimates a smooth surface from measured sample points, on a hexagon or square grid. For example, a pollution surface from sensors. |
IDW, heat surface |
Geocoding and routing
| Node |
What it does |
Typical use / also known as |
| Geocode |
Finds the latitude and longitude for addresses or place names and adds a point. Works offline at city level, at street level with an address index you build, or through an online service you opt into. |
Address to coordinates |
| Reverse Geocode |
Finds the nearest place or street address for each point and adds place, region, country, street, city and postcode columns. Works offline at city level, at street level with an address index you build, or through an online service you opt into. |
Coordinates to address |
| Route |
Works out the road route between each row's start and end point, with distance, travel time and the route line. By car, bicycle, foot or truck. |
Directions, drive distance |
| Isochrone |
Draws the area you can reach from each point within a time or distance, such as a 15-minute drive. |
Drive-time area, reachability |
| Matrix |
Works out road distance and travel time between every pair of points, or from each start to each destination. For example, drive time from every store to every customer. |
Distance matrix, origin–destination |
| Map-match |
Snaps noisy GPS points onto the road network, one matched path per trip or each point with its confidence. |
Snap to road, GPS traces |
| Optimize stops |
Puts stops in the visiting order with the least total travel time or distance on the road, for one or several vehicles. |
Route optimization, delivery route |
Intelligence
Intelligence nodes work with free text. You describe what you want in a prompt, AI writes the code, and you review it before it runs. You choose how much of your data, if any, the AI may see.
| Node |
What it does |
Typical use / also known as |
| Classify |
Labels each row with a category, using code written from your prompt. For example, tag support tickets as billing, bug or feature request. |
Categorize, sentiment |
| Summarize |
Turns the whole table into one text or number, such as a two-line summary of this month's sales. |
Narrative, insight |
| Generate |
Writes a piece of text for each row from its values, such as a one-line summary of each order. |
Per-row text, mail merge |
Output
Output nodes deliver results: they write files, load databases, build reports and send messages.
Files
| Node |
What it does |
Typical use / also known as |
| Write CSV |
Saves the table as a CSV file. It can create a new file, replace one (keeping a backup) or append to it; the delimiter, header and quoting are up to you. |
Export, save as |
| Write Excel |
Writes one or more tables into named sheets of an Excel workbook. It can add to an existing workbook and keep its other sheets. |
XLSX, multiple sheets |
| Write JSON |
Saves the table as a JSON file: one array of objects, or one object per line. |
JSON Lines |
| Write Parquet |
Saves the table as a compressed Parquet file that reloads fast here, in DuckDB, pandas or Spark. Good for large in-between results. |
Columnar export |
| Write XML |
Saves the table as an XML file with one element per row. Both element names are up to you. |
XML feed |
| Write HTML |
Saves the table as a plain HTML page with one table and an optional title. For a styled report, use Write Report. |
Web page |
| Write Geo File |
Saves a table with geometry as GeoJSON, GeoPackage, Shapefile or GeoParquet, ready to open in QGIS or ArcGIS. GeoParquet takes lon/lat data only. |
Shapefile, GeoPackage export |
| Write Locra Table |
Saves the table with its column formats into one .ddtable file, so a colleague can pick it up in another project and see it printed the same way. |
Hand-off, snapshot |
Databases and cloud
| Node |
What it does |
Typical use / also known as |
| Write to DB |
Loads the table into PostgreSQL or MySQL through a saved connection, or into a SQLite file. Stop if the table exists, replace it, or append rows. |
Insert, output to database |
| S3 Sink |
Saves a table to an S3 bucket as Parquet or CSV, or uploads a file another node wrote, such as a finished report. |
Upload to S3 |
Reports
| Node |
What it does |
Typical use / also known as |
| Table Section |
Puts a table in a report with a heading, optional commentary, a row cap, totals and highlighting. Number formats come from Format Table. |
Report table |
| Text Section |
Adds a block of text to a report, such as an intro or notes. It can include live values from your data, filled in at run time. |
Report text, dynamic text |
| Image Section |
Adds an image, such as a logo, product photo or site plan, to a report. |
Logo, picture |
| Chart |
Draws a chart from its input: bar, line, scatter, pie, histogram, box, heat map, KPI, treemap, funnel, waterfall and more. Set it up in the Chart tab, then place it in a report. |
Graph, plot, visualize |
| Map |
Draws the input's geometry as a map over an offline basemap, styled in the Map tab, ready to place in a report. |
Choropleth, static map |
| Report Assembly |
Takes the sections wired into it and arranges them on a layout into one report. Without a layout, each section gets its own full-width row. |
Layout, dashboard |
| Write Report |
Saves the report from Report Assembly as a PDF, an HTML file or an editable PowerPoint deck. Fed by a loop, it merges every report into one document. |
PDF, PowerPoint, render |
Send and serve
| Node |
What it does |
Typical use / also known as |
| Email |
Sends an email through a saved mail connection, with the table in the body or attached as a CSV. It can use a report as the email body. |
Notify, send report |
| Slack |
Posts a message to a Slack channel when the workflow runs. The message can include the first rows of the table, such as a daily KPI alert. |
Notify, alert |
| HTTP Request |
Sends the data to a web address with POST, PUT or PATCH, as JSON, form fields or a file. For example, push results to a webhook. |
Webhook, API call |
| HTTP Endpoint |
Publishes the table as JSON at a local web address on your machine, so other tools can fetch it. Each run refreshes what the address returns. |
Local API, serve |
Utility
When no ready-made node fits, write the step in Python, or let AI write it for you.
| Node |
What it does |
Typical use / also known as |
| Code Gen |
Describe what you want in plain language and AI writes the Python for it. It can read up to 8 input tables, and you can review the code it wrote. |
Python tool, custom script |
| Custom Node |
A node built from your own hand-written Python. Saved custom nodes show up in the add-node menu, and each one can read up to 8 inputs. |
Your own tool |
Containers: loops and functions
A container is a frame on the canvas that holds nodes. Drag the frame and everything inside
moves with it. Drop a node inside to add it; drag it out to take it away. To make one, open the
toolbar's ⋯ menu → Draw and draw a rectangle, or select some nodes and wrap
them.
| Container |
What it does |
Typical use / also known as |
| Loop (for each) |
Runs the nodes inside it once per row of a table, or once per file in a folder or S3 listing. Inside, the Current item node gives you the item the loop is on, and the results of every pass are collected for you. |
Batch macro, process every file |
| Loop (iterate until done) |
Feeds a starting table into the first pass, then each pass's output into the next. It stops when the output comes back empty, or at the maximum number of passes you set. |
Iterative macro |
| Named function |
Groups a set of nodes into one reusable step with its own inputs and outputs. Collapse it to a single node to keep the canvas tidy; you can still run it from there. |
Macro, sub-workflow |