# Changelog of Price List to CSV – Clean Price Sheet Parser (`jc-datatools/price-list-normalizer`) Actor

- **URL**: https://apify.com/jc-datatools/price-list-normalizer/changelog.md
- **Full Actor documentation**: https://apify.com/jc-datatools/price-list-normalizer.md

## Changelog

### 0.2.10 (2026-11-03)

- A title or note whose only number is a date (for example `Tree Services Quote Sheet - updated 27 Oct` or `Price List (effective 11/01/2026)`) is no longer turned into a priced row. It now shows up in the unparsed lines with the reason "only a date - probably a title or date line", so nothing disappears.
- Prices written with a slash unit, like `$4.50 / bottle` or `$18.00 / case`, now keep their unit.
- Lines like `Service fee 10%` or `Gratuity 18%` still come through as items with no price, the same as before.

### 0.2.8 (2026-11-02)

- A duration in minutes is no longer read as the price. `Massage 60 minutes 95` now prices at 95, not 60.
- A bare number right before "seconds" (for example `Quotation valid for 60 seconds`) is still kept as written, but now carries a `stray_number_before_time_unit` flag so you can check it.

### 0.2.7 (2026-10-31)

- **Price list URL** now reads text-based PDF links (up to 40 pages), including PDFs served as `application/octet-stream` and PDFs that open without a password.
- Scanned or image-only, password-protected, corrupt and oversized PDFs are refused with a message saying why. A refused PDF is not charged.
- A link served as `application/octet-stream` that is really text, CSV or HTML is now read; other binary files are still refused.

### 0.2 (2026-10-29)

- A SKU or part code (`A-100`) is no longer read as the price.
- "Save $20", discounts, deposits and refundable amounts are no longer taken as the price.
- A price followed by `/ N unit` (for example `$99 / 2 hrs`) keeps its price.
- `price` is the best per-unit price; for multi-buy deals `price == deal_total / deal_quantity`.
- `tiers` hold per-unit prices only; bundle totals are labelled `deal_N_for_M`.
- Count ranges no longer become `price_low` / `price_high`.
- **Breaking:** `tiers` keys changed from `column_2`, `column_3`, ... to `primary`, `alt_1`, `alt_2`, ... and `deal_N_for_M`.

### 0.1 (2026-10-28)

- First public release.
