Records changed
Run an automation when rows are added, changed or removed in a CSV, Excel or XML file.
What it does
Watches one file and compares its rows with the last known state. When something changed, it starts the workflow with the changes: which rows are new, which were changed (with the previous values) and which were removed.
There are two variants — pick the one that matches where the file lies:
| Trigger | File lies … |
|---|---|
| Records changed (server folder) | on the AI Kit server or a mounted network drive. Changes are noticed immediately. |
| Records changed (WebDAV) | on Nextcloud, ownCloud, a NAS or another WebDAV server. The file is checked at a fixed interval and only downloaded when it has changed. |
The format (CSV, Excel .xlsx/.xls/.ods, XML) is recognised from the file itself — there is nothing to choose. CSV delimiters (;, ,, tab, |) and encodings (UTF-8, Windows-1252 as in typical German exports) are detected automatically.
Typical sources are exports from an ERP or merchandise management system that are rewritten regularly, or an Excel list maintained by hand.
- On the first start the trigger only records the current state; nothing runs. (Optionally, existing rows can count as new.)
- The state survives restarts: changes made while the service was stopped are reported on the next start.
- A file that is still being written, is missing or cannot be read does not change the state — it is simply read again at the next check. A temporarily missing file is not reported as "all rows removed".
What you configure
| Field | What it controls | Required | Notes |
|---|---|---|---|
| WebDAV address / User / Password | Access to the WebDAV server. | WebDAV only | As for Store file; the password is stored encrypted. |
| File | The file to watch. | required | Server folder: absolute path, e.g. /data/exports/orders.csv. WebDAV: path below the address, e.g. Exports/orders.csv. |
| Key column | The column that identifies a row, e.g. Order no. | optional | Needed to detect changed and removed rows. Without a key only new rows are detected. |
| New rows / Changed rows / Removed rows | Which changes start a run. | optional | New and changed are on, removed is off by default. |
| Runs | per-run or per-row. | optional | per-run (default): one run with all changes of a check. per-row: one run per changed row. |
| Existing rows count as new on first start | Report the current content once. | optional | Off by default. |
| Sheet (Excel only) | Which sheet to read. | optional | Default: the first sheet. |
| Record element (XML only) | The repeating element. | optional | Empty: the first repeating element is used. Otherwise a path such as Orders/Order. Attributes appear with @, e.g. @id. |
| Network drive (polling) | For SMB/NFS shares that do not report file changes. | server folder only | Off by default. |
| Check every (seconds) | The check interval. | WebDAV only | Default 60. |
| Changes | Memory key for the changes as Markdown tables. | required | Ready to use in an AI step or a mail. See below. |
| Changes as data (optional) | Memory key for the same changes as structured data. | optional | For conditions or the Excel action. |
| File info (optional) | Path, address (path or URL), modification time and number of rows. | optional |
Changes (Markdown) with per-run:
**3 Änderungen** in `orders.csv`: 1 neu, 1 geändert, 1 entfernt
### Neu (1)
| Order no. | Customer | Status |
| --- | --- | --- |
| 1003 | White | open |
### Geändert (1)
| Order no. | Customer | Status | Geänderte Felder |
| --- | --- | --- | --- |
| 1001 | Miller | delivered | Status: open → delivered |
### Entfernt (1)
…
Changes as data with per-run:
{
"count": 3, "added": 1, "changed": 1, "removed": 1,
"changes": [
{ "changeType": "changed", "key": "1001",
"row": { "Order no.": "1001", "Customer": "Miller", "Status": "delivered" },
"previous": { "Order no.": "1001", "Customer": "Miller", "Status": "open" },
"changedFields": ["Status"] },
{ "changeType": "added", "key": "1003", "row": { "Order no.": "1003", "Customer": "White", "Status": "open" } },
{ "changeType": "removed", "key": "1002", "row": { "Order no.": "1002", "Customer": "Baker", "Status": "open" } }
]
}
With per-row both outputs describe a single change. CSV values stay text exactly as in the file (1.200,50); Excel values keep their type.
Workflows created with the earlier single Records changed trigger (with a Storage switch) keep running unchanged; the editor marks it as outdated.
Example scenario
Delivery status. The ERP writes orders.csv every 15 minutes. The trigger watches it with key column Order no. and only Changed rows, one run per row. It writes the change as data to change; a condition checks {memory://change/row/Status} == "delivered", an AI step writes a short delivery confirmation and the mail action sends it to the customer.
Recommendations
- ✅ Always set a key column if the file has one — only then are changes and removals recognisable.
- ✅ Use per-row when each change leads to its own action (a mail, a ticket); use per-run for summaries.
- ✅ Let the exporting system write to a temporary name and rename at the end — the trigger additionally waits until the file stops growing.
- ⚠️ Changing the key column, sheet or record element starts a new baseline.
- ❌ Do not point the trigger at a file your own workflow writes to — every run would start the next one.
What to do next
- Work on the rows with the Excel action or put a person in the loop with Request approval.