Search Vinted (vinted.com/.co.uk/.de/.fr) catalog listings by keyword — one row per item with price, condition, brand, size, seller, and photo. Built for resale-arbitrage comps. No login; we handle the retries.
Fix: default proxy configuration now requests the RESIDENTIAL Apify
Proxy group (.actor/input_schema.jsondefault/prefill,
src/models.pyActorInput.proxy_configuration default). Root cause
of the reported failures: Vinted's cookie-seed GET
(GET https://www.{domain}/) returns an instant, non-retriable
HTTP 403 on datacenter/auto Apify Proxy exits — confirmed via a
cloud reproduction run (default proxy config: FAILED, same input
with apifyProxyGroups: ["RESIDENTIAL"]: SUCCEEDED). A caller-
supplied proxyConfiguration still overrides this default — REQ-2's
"SHALL NOT hard-require RESIDENTIAL" still holds; only the default
changed, matching DEVILSCRAPES-CONTEXT.md's "Anti-blocking stack"
§2 rule for anti-bot-prone targets.
tests/fixtures/input.qa.json updated to request RESIDENTIAL
explicitly, matching the new default and the verified-working cloud
repro input.
tests/test_models.py: replaced
test_default_proxy_never_forces_residential (encoded the buggy
behavior) with test_default_proxy_defaults_to_residential +
test_explicit_proxy_configuration_overrides_default.
0.0.1 — 2026-07-29
Scaffolded: .actor/ (actor.json with categories: ["ECOMMERCE"],
input_schema.json / dataset_schema.json / output_schema.json
matching design.md field-for-field, Dockerfile), src/main.py
placeholder (reads input, validates against the placeholder
ActorInput, pushes one clearly-marked placeholder record, exits
clean), src/__init__.py / src/__main__.py, test scaffold
(tests/conftest.py, tests/test_main.py), the QA fixture
(tests/fixtures/input.qa.json, spec's own live-verified
keywords=["jacket"]/domain="vinted.com"/maxItems=5 combination),
README skeleton, scaffold.json, promo.json.
.actor/icon.svg deferred to actor-icon-designer (Vinted brand
mark inside the canonical Devil Scrapes container).
.actor/pay_per_event.json deferred to implementer (T07) per
docs/specs/vinted-sold-listings/design.md's file plan.
Added throwaway placeholder src/models.py (bare ActorInput/
ResultRow, no validators) and src/scraper.py (NotImplementedError
stub) so the repo's ADR-0004 Pydantic-wiring gate
(scripts/verify_pydantic.py, enforced by .claude/hooks/stop_check.sh)
passes at scaffold time. Both are fully replaced, not extended, by
T02 (models.py — the real validated ActorInput/ResultRow) and
T04-T06 (parser.py/client.py/scraper.py — the real orchestration)
per docs/specs/vinted-sold-listings/design.md and tasks.md.
Real crawler logic (src/client.py, src/parser.py, plus the real
src/models.py / src/scraper.py / src/main.py) is not implemented
yet — see docs/specs/vinted-sold-listings/tasks.md.