Dataset Change Detector — Prices, Stock & Records avatar

Dataset Change Detector — Prices, Stock & Records

Pricing

from $1.00 / 1,000 change records

Go to Apify Store
Dataset Change Detector — Prices, Stock & Records

Dataset Change Detector — Prices, Stock & Records

Compare two JSON snapshots or Apify datasets. Export NEW, UPDATED and optional REMOVED records with field-level before/after values. Composite keys, duplicate validation, and no timestamp noise.

Pricing

from $1.00 / 1,000 change records

Rating

0.0

(0)

Developer

ABDULWAHAB NASER RASHED ALQARAWI

ABDULWAHAB NASER RASHED ALQARAWI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Provide two snapshots or a completed WooCommerce dataset/report, and choose the fields that identify each product. Get NEW and UPDATED records with before/after values; enable removed records only when both snapshots are complete.

Automatic monitoring and useful alerts

Use stateStoreName to retain the last completely delivered snapshot. Remove the previous example and its dataset field. On the first run, products are NEW; an identical second snapshot produces no rows. Set maxResults high enough for the first snapshot, or use the seed-only option below. State is never advanced if result delivery stops at a result/spend limit or an error.

For this author's WooCommerce monitoring release, supply currentDatasetId and currentReportStoreId from the same completed source run, plus keyFields: ["storeUrl", "id"]. Remove the current example array. The Actor reads only those selected storages, verifies the completion report, counts and source scope, and derives its baseline time. Optional currentRunId checks the expected run identifier. Trigger through ACTOR.RUN.SUCCEEDED; the report is a completeness contract, not an independent audit of the source website.

For Salla or another manual snapshot, set currentSnapshotComplete: true only after checking the source report, snapshotScope to a stable collection identity, and snapshotTakenAt to its actual ISO timestamp with timezone. Use Salla keys ["store", "productId"] and stock fields ["isOutOfStock", "isAvailable"]. An arbitrary successful Salla/YouCan run is not automatically assumed complete. Capped test datasets are unsuitable for a full-catalog baseline.

Optional alert filters:

  • minPriceChangePercent: 5 suppresses price-only changes below 5% relative to the previous complete snapshot. This is a per-comparison threshold, not cumulative price drift. Zero keeps the original behavior.
  • onlyPriceOrStockChanges: true excludes other-only UPDATED events. NEW and enabled REMOVED events still pass.
  • priceField, currencyField, and stockFields map the source columns. Include all monitored columns in compareFields if you restrict it. A stock or currency change passes; unknown, invalid or zero prior prices are handled conservatively.

RUN_REPORT separates total, selected and filtered changes. Deliberately filtered changes still advance the baseline. State mode adds deterministic eventId values for downstream deduplication if a run crashes after delivering events but before committing its baseline.

Limits: 10,000 rows and 5 MB UTF-8 per snapshot, with the baseline envelope also within 5 MB. Do not edit source datasets during reads. Older snapshots, corrupt state and configuration/scope changes fail without overwriting the baseline; use a new store name for a new monitor. Empty replacements require allowEmptySnapshot: true. Run one monitor at a time per state store: the conflict check is not an atomic distributed lock. Storage retention follows your account. No schedule is enabled automatically.

Safe first baseline and batches

Use seedBaselineOnly: true with a NEW stateStoreName to save the validated complete snapshot without emitting or charging result events. The normal Actor start fee still applies. This supports up to 10,000 rows / 5 MB even if maxResults is smaller. Set the option false on subsequent runs. An existing baseline cannot be overwritten using seed mode.

In state mode, the Actor checks the entire selected comparison against the remaining result/spending allowance before delivering anything. If it does not fit, the run fails with an actionable message and no result events. Increase the allowance or deliberately seed a new monitor. Complete snapshots are never committed after partial delivery. Results are saved in batches of up to 100 using native Apify per-event charging.

Real output example

The comparison input is a deliberately small synthetic example; the output below was produced by the real Actor run. Captured on 2026-09-14 from run utCLfobECOWRLFdkg using the input below. Selected fields are shown; long values are shortened with an ellipsis. Live source data can change.

eventkeychanges
UPDATED{"id":"SKU-1"}{"price":{"before":10,"after":12,"beforeMissing":false,"afterMissing":false},"inStock":{"before":true,"after":false,"bef…
NEW{"id":"SKU-3"}{}
REMOVED{"id":"SKU-2"}{}

Quick start

  1. Leave the prefilled example in place and click Start for a small first run. Replace it with your own source when ready.
  2. Set Maximum delivered results and Apify's Maximum cost per run.
  3. Run the Actor. Export the dataset as JSON, CSV or Excel. Open Run report for errors, skipped items and limits.
{
"previous": [
{
"id": "SKU-1",
"price": 10,
"inStock": true
},
{
"id": "SKU-2",
"price": 5
}
],
"current": [
{
"id": "SKU-1",
"price": 12,
"inStock": false
},
{
"id": "SKU-3",
"price": 8
}
],
"keyFields": [
"id"
],
"allowRemoved": true,
"maxResults": 3
}

What it supports

Compare up to 10,000 objects per snapshot. Use previous/current arrays OR previousDatasetId/currentDatasetId accessible to your Apify account. Keys are type-sensitive: 1 and "1" are different. Missing fields and null are different. Timestamp fields observedAt, scrapedAt and fetchedAt are ignored by default. REMOVED events require allowRemoved=true: enable only when both snapshots cover the same complete population. maxResults can truncate changes; inspect RUN_REPORT.changeCount. This Actor compares supplied snapshots; it does not fetch store catalogs on its own.

Price

$0.0010 per change record ($1 per 1,000), plus $0.001 per run start at the supported 512 MB–1 GB memory sizes. The custom result event is charged only for a delivered dataset row. There is no separate automatic dataset-row fee. A run that returns zero rows still incurs the start fee. Your account's displayed pricing and platform terms apply. Actor authors pay their own platform resource costs during development and testing.

Set the maximum cost in Apify to cap spending. maxResults also limits output. A limit may truncate a catalog or comparison; inspect RUN_REPORT rather than assuming completeness.

Output and reliability

Main fields: event, key, before, after, changes. Each row includes observedAt. Nested values remain JSON; choose JSON export to preserve all detail.

RUN_REPORT contains result count, HTTP request/download totals, source errors, skipped unchanged items and final status. PARTIAL means at least one source failed while other rows were delivered. FAILED means no successful result and at least one error. Successful empty feeds or no-change comparisons can legitimately return zero rows. A 240-second processing deadline and Apify's run timeout bound execution. Downloads are limited to 40 MB per run, with smaller per-response caps; robots checks count as requests. No proxy or external AI API subscription is required.

Only public pages and documented public APIs are supported. Access restrictions are reported. The crawler does not send your Apify token to target websites or connect to private network addresses. Use sources you are entitled to access. Static HTML tools do not execute website JavaScript.

Repeated runs

For Actors with stateStoreName, use a distinct name for each collection and keep the same name for later runs. Apify creates that store in your account; storage retention and access follow your account settings. Do not start overlapping runs that share a store. onlyChanges emits new/updated items and retains at most 10,000 recent fingerprints. It does not infer removed pages/jobs. Other Actors without a state option are stateless; Dataset Change Detector now supports the explicit baseline mode described above.

Apify tasks, schedules and integrations can reuse this input. No recurring schedule or customer notification is created automatically.

عربي

أداة جاهزة للتشغيل من واجهة Apify أو API. أدخل الروابط أو البيانات، وحدد عدد النتائج والحد الأعلى للتكلفة. النتائج بصيغ JSON وCSV وExcel، والتفاصيل والأخطاء في RUN_REPORT. البيانات العامة فقط؛ الحقول غير المتوفرة تبقى فارغة. راجع حدود الأداة أعلاه قبل اعتماد النتائج.