# Changelog of Etsy Shop Scraper From $1.6/1K 💰 Profiles & Full Catalogs (`dz_omar/etsy-shop-scraper`) Actor

- **URL**: https://apify.com/dz_omar/etsy-shop-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/dz_omar/etsy-shop-scraper.md

## Changelog

### 0.0 — initial release

Etsy Shop Scraper.

- **Shop profile** — for every shop URL, name or numeric ID, fetches the full Etsy shop payload
  (shop, owner, policies, about story, FAQ, ratings, trust signals, sections, featured and
  best-selling listings) and preserves it as a `shop_profile` record.
- **Full listing catalog** via the `includeListings` toggle: on → profile + every listing; off →
  profile only (no catalog requests). Each `shop_profile` record records which mode was used.
- **Per-shop `maxListings`** — applies to each shop independently; never limits the one
  shop-profile record per shop.
- **Catalog order preserved** — listings arrive in the shop owner's order with a `catalog_position`
  on every record.
- **Complete catalogs** — a full-catalog run is checked against the shop's own listing count and any
  missed listings are recovered (they carry an empty `catalog_position`).
- **Full data preservation** — every field Etsy returns is kept, including nested objects. Only the
  listing objects that would duplicate the catalog inside the profile are replaced by listing IDs.
- **Progressive delivery** — records stream to the dataset while the run is still working.
- **Resumable, encrypted run state** — safely resumes after interruption, migration, or restart
  (profile and catalog tracked as independent phases per shop) without re-delivering work.
- Not-found shops return a clear `not_found` record and are not charged; a shop that can't be
  retrieved in a run returns an `unavailable` record (also not charged) instead of silently
  disappearing; a crash anywhere still ends the run cleanly with a `run_incomplete` row.
- Two dataset record types (`shop_profile`, `listing`) with dedicated views, related by
  `scraped_shop_id`.
