# Changelog of Whatnot Seller Inventory Scraper (`devilscrapes/whatnot-seller-inventory-scraper`) Actor

- **URL**: https://apify.com/devilscrapes/whatnot-seller-inventory-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/devilscrapes/whatnot-seller-inventory-scraper.md

## Whatnot Seller Inventory Scraper — Changelog

### 0.1.0 — 2026-09-16 (initial build, local-green)

- Full implementation, not a scaffold stub: `src/models.py` (Pydantic v2
  `ActorInput` + `ResultRow`), `src/graphql_queries.py` (pinned `GetUser` /
  `ProfileShop` / `Search` query text, harvested and schema-validated live
  against `www.whatnot.com/services/graphql/`), `src/http_client.py`
  (curl-cffi retry/backoff, rotating impersonation profiles), `src/client.py`
  (GraphQL call wrappers), `src/parser.py` (ListingNode -> ResultRow),
  `src/scraper.py` (per-target fault isolation + pagination + the
  objectSize>50 zero-edge trap guard + the geo-skew warning), `src/main.py`
  (Apify SDK wiring, PPE charging, pinned BUYPROXIES94952 + US proxy).
- Two input modes: `sellerUsernames` (primary — per-seller shop inventory,
  matches the highest-run-count incumbent's usage pattern) and
  `searchKeywords` (secondary — PRODUCT vertical keyword search).
- 56 tests (models, parser against a real captured fixture, http\_client
  retry/backoff + GraphQL error handling, client wrappers, scraper fault
  isolation + trap assertions + geo guard, main.py wiring). `ruff` and
  `pyright src/` clean.
- Verified live 2026-09-16 via direct GraphQL replay (no Apify run spent):
  `GetUser` and `ProfileShop` returned real seller/listing data; `Search`
  confirmed the documented `objectSize`(`first`)>50 trap reproduces exactly
  (`first=50` -> 50 edges/totalCount=10000, `first=100` -> 0 edges/
  totalCount=0, both HTTP 200).
