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 joins the
finished run's dataset (
payload.resource.defaultDatasetId, then resource.defaultDatasetId) as the main data
instead of the pre-filled example file. A filled-in dataset still wins. No input-schema, output or price change.
- README: the ready-to-run Store examples.
First release.
- Joins main data (an Apify dataset, or a CSV/TSV, JSON, JSON Lines or Excel file at a URL) with lookup data (the same
kinds) on one or more key pairs (
field or main = lookup, nested paths allowed), like VLOOKUP or a SQL join.
- Matching as text (case, extra spaces and accent encoding ignored; 12 = "12"), exactly, or by website domain (URLs,
bare domains and email addresses).
- Left, inner and anti joins; the first lookup row per key, or one output row per match.
- Lookup fields picked and renamed, an optional prefix,
lookup_<name> for names the main row already has, null-filled
columns for unmatched rows, and a joinMatched field.
- Fails before writing anything when no lookup row, or none of the first 100 main rows, has the join field.
- Charged per output row (
apify-default-dataset-item); max rows per run and the maximum cost per run stop the run.
- Limits: 200,000 lookup rows within half of the run's memory, 1,000,000 main rows, 200 MB files, 5 MB output rows.