- Silenced the
MaxListenersExceededWarning noise under concurrency by raising
EventEmitter.defaultMaxListeners (the listener count is bounded, not a real leak).
- Proxy setup is wrapped in try/catch so a scoped/limited token (no proxy access) logs a
clear warning instead of crashing.
- Clarified the recommended workflow: use category/search mode for discovery (collect
product URLs), then run those URLs through Product URLs mode to get prices, stock,
and specs from the product-detail endpoint.
- Unavailable fields are now omitted from output instead of left empty. Listing-mode
items (category/search) no longer carry empty
categoryBreadcrumbs: [] or specs: {} —
those keys are simply absent (they're only available in Product URLs / detail mode).
price, availability, productId, url, and extractedAt are always present.
- Proxy is now always-on residential RO. Altex blocks datacenter and non-Romanian
IPs on the platform, so the Actor now forces Apify residential proxies in Romania for
every run instead of leaving it optional. Removed the
proxyConfiguration input field
(there is nothing to configure). Note: residential-proxy usage is billed on top of the
per-result price.
Major rewrite: API-first. The Actor now talks to Altex's public fenrir JSON API
instead of driving a headless browser.
- Crawler: Playwright + Chrome →
HttpCrawler. No browser, no fingerprinting.
Base image is now apify/actor-node:20; playwright dependency removed.
- Endpoints: product detail (
/catalog/product/{sku}), search
(/v2/catalog/search/{term}), and category listings (page __NEXT_DATA__).
- Reliability & cost: runs from datacenter IPs without a proxy; ~10× cheaper and
faster per product. Proxy is now optional (off by default).
- Pricing: $0.006 → $0.004 per product.
price.lowest — EU 30-day lowest price (Omnibus Directive), when Altex exposes it.
detailLevel field — "full" (Product URLs mode) vs "listing" (category/search).
- Real-API fixtures (
tests/fixtures/) and tests asserting against them.
- Review-body scraping (
includeReviews, maxReviewsPerProduct, reviewsSample):
the API does not expose review text. Aggregate rating (average + count) is retained.
- Output is the same
AltexProduct shape plus price.lowest and detailLevel, minus
reviewsSample and availability.estimatedDelivery. Update downstream consumers
that relied on those fields.
Initial release (Playwright-based).
- Two input modes:
productUrls and categoryOrSearch.
- JSON-LD +
__NEXT_DATA__ + DOM extraction with Playwright/Chrome.
- Conditional Apify proxy (residential RO), state persistence, errors dataset.
- Pay-per-result at $0.006 per product.