Catalog Feed Diff: Price, Stock and SKU Change Detector avatar

Catalog Feed Diff: Price, Stock and SKU Change Detector

Pricing

from $0.50 / 1,000 changed catalog rows

Go to Apify Store
Catalog Feed Diff: Price, Stock and SKU Change Detector

Catalog Feed Diff: Price, Stock and SKU Change Detector

Compare two product feeds or price lists (CSV, JSON, XML, Google Merchant) and get every added, removed, repriced and out-of-stock product. Schedule it to monitor a supplier feed.

Pricing

from $0.50 / 1,000 changed catalog rows

Rating

0.0

(0)

Developer

Althor Labs

Althor Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Compare two versions of a product feed, supplier price list or catalog export and get one row per product that changed: added, removed, repriced, out of stock, back in stock, or edited (title, brand, any field you choose).

Works with CSV, TSV, JSON, JSON Lines and XML, including Google Merchant (Google Shopping) feeds. Run it once on two files, or schedule it to monitor a supplier feed and get only what changed since the last run.

What you can use it for

  • Supplier price list changes. See which wholesale prices went up or down before you update your store.
  • Stock monitoring. Catch products that went out of stock or came back.
  • Feed QA before upload. Check what a new Google Merchant or marketplace feed changes compared with the one currently live.
  • Catalog sync checks. Find SKUs missing from one system after an import.

How to use it

  1. Give the current feed and the previous feed, as URLs or pasted text.
  2. Leave the field settings empty. The Actor detects the key (SKU, id, GTIN, handle), price, availability and title fields automatically.
  3. Run it. Each changed product is a row in the dataset. Export as CSV, Excel or JSON, or send it to Google Sheets, Slack or email with Apify integrations.

Monitoring mode (scheduled)

Turn on Compare against the last saved run and give only the current feed URL. The first run saves a baseline. Every later run compares the feed with the saved baseline, reports the changes, and saves the new version. Use a different Baseline name for each supplier or store. Add an Apify schedule (daily or hourly) and an integration to get the changes delivered.

For a restricted Apify token that can access selected storage resources by ID, provide both Baseline key-value store ID and Monitoring lock request queue ID. The store must be catalog-feed-reconciler-baselines; the queue must match the selected baseline name. The Actor checks each resource name before reading or writing the baseline. Leave both IDs empty for normal name-based access.

In monitoring mode, the stored baseline takes precedence over the previous-feed example in the prefilled input. A baseline advances only after the complete comparison and all dataset rows finish within the run's charge limit. If a run stops at a charge limit, its stored baseline stays unchanged so the next run compares against the last complete snapshot. Rows written before the limit can appear again on that next run.

n8n workflow

Use the Catalog Feed Monitor workflow JSON to seed a baseline, check daily changes, and email changed products. See the template setup notes for import and credential setup. Its n8n template submission is pending review.

Input

  • Current feed / previous feed: public HTTP or HTTPS URL (up to 50 MB, gzip supported) or pasted text. Redirects, URL credentials, and feeds behind authentication are not supported. Resolved private or local-network targets are rejected; URL paths and query strings are omitted from run metadata.
  • Feed format: detected automatically; can be forced.
  • Items path: for JSON documents where the products sit inside a key, such as products or data.items. Detected automatically.
  • Key, price, availability and title fields: optional overrides. Dot paths work for nested JSON, for example variants.0.price.
  • Other fields to compare: extra columns to watch, such as brand or image_link.
  • Minimum price change (%): ignore small price moves.
  • Include unchanged items and include full item data: optional.

Output

One dataset row per changed product:

{
"changeType": "price_changed",
"changeTypes": ["price_changed", "availability_changed"],
"key": "G-1",
"title": "Trail Running Shoe",
"oldPrice": 89.0,
"newPrice": 99.0,
"priceChange": 10.0,
"priceChangePct": 11.24,
"currency": "USD",
"oldAvailability": "in_stock",
"newAvailability": "out_of_stock",
"changedFields": []
}

changeType is one of added, removed, price_changed, availability_changed, fields_changed (or unchanged when requested). changeTypes lists every change on the item. changedFields lists other field edits with old and new values.

The run's OUTPUT record in the key-value store has a summary: item counts, the fields used, counts per change type (including price increases and decreases, items that went out of stock, items back in stock) and any warnings.

How values are normalized

  • Prices: $1,299.00, 1.299,95 EUR, 24,50, USD 12 and plain numbers are parsed. Currency is read from symbols or ISO codes. A currency change counts as a price change.
  • Availability: text such as in stock, InStock, sold out, preorder, backorder, schema.org URLs, booleans and stock quantities are mapped to in_stock, out_of_stock, preorder or backorder.
  • Keys: compared without surrounding spaces and without case differences. Spreadsheet artifacts like 123.0 are treated as 123.

Limits

  • Up to 500,000 items per feed (default 100,000). Larger feeds are rejected instead of being truncated, which could report false additions or removals.
  • Feed URLs must be publicly reachable; authenticated feeds are not supported yet.
  • URL redirects are rejected. Each URL fetch has a 60-second total deadline.
  • Monitoring runs for the same named baseline are serialized with an Apify request-queue lock. A run that exceeds its lock window will leave the stored baseline unchanged.
  • If no key field can be detected, the run stops and lists the columns it saw so you can set Key field.

Pricing

This Actor uses pay-per-event pricing on Apify:

  • $0.02 per started 1,000 product items compared across both feeds. The current feed and previous feed both count, including a saved baseline in monitoring mode. This charge applies even when the compared items produce no changed rows.
  • $0.0005 per changed product row written to the default dataset.

There is no Actor-start fee. Standard platform usage costs are included in these event prices. Check the Apify listing for current terms.

Support

Open an issue on this Actor's Issues tab with an example of your feed structure (a few rows are enough). We reply within one business day.