# Changelog of Shopify Catalog & Price Monitor - Snapshots, Diffs, Alerts (`yasaslive/shopify-monitor`) Actor

- **URL**: https://apify.com/yasaslive/shopify-monitor/changelog.md
- **Full Actor documentation**: https://apify.com/yasaslive/shopify-monitor.md

## Changelog

All notable changes to this actor are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project uses
[semantic versioning](https://semver.org/spec/v2.0.0.html).

### \[Unreleased]

#### Fixed

- `storeUrls` now has a `default` as well as a `prefill`. Runs started without a
  filled-in form (API calls, schedules, the Store's automated test) no longer
  fail for lack of store URLs.
- Regression tests check that every required input field has a default and that
  schema defaults alone produce a valid run.

### \[0.1.0] — 2026-08-15

#### Added

- Full catalog export from a storefront's public `/products.json`, one dataset
  row per variant (`kind: "variant"`).
- Snapshot per storefront in a named key-value store, keyed by hostname, with all
  money stored as integer cents.
- Diff engine emitting six typed change events (`kind: "change"`): `price_drop`,
  `price_increase`, `back_in_stock`, `out_of_stock`, `new_product`,
  `removed_product`.
- `watchFilters` — `titleIncludes`, `vendors`, `tags`, `minPctChange` — applied to
  change events only, never to the catalog export.
- Slack and generic webhook alerts carrying a grouped per-store summary with the
  ten most significant price moves.
- `CHANGES-{runId}.json` artifact in the run's key-value store, mirrored to a
  fixed `CHANGES.json` key, plus a `summary` dataset record closing every run.
- Actor output schema (`.actor/output_schema.json`) so the Console's Output tab
  links the dataset and the change report directly.
- Pay-per-event charging: `catalog-snapshot` (per store), `variant-exported`
  (per variant) and `change-alert` (per change event), each charged singly and
  only after the corresponding records are persisted.
- robots.txt compliance (RFC 9309) including `Crawl-delay`, 500 ms between pages,
  three concurrent storefronts, three connections per hostname.
- Exponential backoff with jitter and `Retry-After` support on transient HTTP
  failures.
- SSRF guard on every user-supplied URL, re-validated on each redirect hop.
- Guards against the failure modes that would corrupt a diff: partial pagination,
  storefronts that ignore `page`, catalogs beyond Shopify's 25,000-product
  pagination ceiling, and a catalog that empties out while a snapshot exists.
