Versions follow MAJOR.MINOR.PATCH (src/version.py); Apify shows MAJOR.MINOR from .actor/actor.json.
Every run logs its version and records it in the RUN_STATS key-value record.
- A run that returns nothing (every input bad, private, blocked or unreachable, or an empty input) now ends
SUCCEEDED with an empty dataset and the reason as its status message and in the log, instead of FAILED. Only an
unexpected error still fails the run.
RUN_STATS keeps the reason as before.
- No change to output fields or price.
- Started by an Actor-to-Actor integration or a webhook with Apify dataset left empty, the run now compares the
finished run's dataset (
payload.resource.defaultDatasetId, then resource.defaultDatasetId) instead of the
pre-filled example files, and remembers it per scraper as a picked dataset would be. A filled-in dataset still wins.
No input-schema, output or price change.
- README: the ready-to-run Store examples.
- The status counts the older rows before matching (it said "compared with 0 rows" in last-run mode).
First release.
- Compares new data (an Apify dataset, or a CSV/TSV, JSON, JSON Lines or Excel file at a URL) with older data (the
same kinds), or with what the same comparison saw on its last run, and writes the new, changed and removed rows
with
changeType, changedFields and previousValues.
- Rows are matched by key fields (nested paths allowed) or whole rows; compared on all fields or the ones named,
minus ignored ones; values compare as they read (12 = "12"; null = "" = [] = {} = missing; accents normalized).
- Last-run memory in the user's own
dataset-diff-memory store, named after the comparison name, the saved task, the
actor that wrote the dataset, or the file URL, plus the key/compare/ignore set-up. Snapshots are written in gzipped
parts under a new generation before the old one is deleted; a quiet run doesn't rewrite it.
- Memory only moves on for what the user got: changes cut by max rows, max cost or a source failing midway are
reported next run. Removed rows are only checked when every new row was read.
- Charged per change (
apify-default-dataset-item) and per row compared (row-compared, charged before each 1,000
rows are compared, so the maximum cost per run stops the work, not just the writing).
- Limits: 100,000 rows per side, a memory budget of 40% of the run's memory for the snapshots, 200 MB files, 5 MB
output rows.