Scrape used-car listings from Bilasolur.is, Iceland's #1 car marketplace — make, model, year, price in ISK, mileage, fuel type, drivetrain, engine power, engine size, color, registration date, and photos. Export to JSON or CSV; enrich each listing from its detail page.
Fixed new-vehicle ("Nýtt ökutæki") card parsing: those listings have no
registration date or odometer reading yet, so the first tech-details line
reads a bare year or " · Nýtt ökutæki" instead of the usual
"/ · km.". card_fuel_type was matching that line as
the fuel type (dropping the real fuel value) and card_year returned
None instead of the bare year. Reproduced live: ~5% of home-feed cards
(10/186) hit this shape.
card_year now also extracts a bare 4-digit year when no M/YYYY match
is found; card_fuel_type skips any line carrying the bare-year or
"Nýtt ökutæki" marker, same as it already skips reg/mileage/drivetrain
lines.
Root cause of the residual ~41% customer failure rate after v0.3.0 (which
fixed the RESIDENTIAL-proxy hard fail): partially a data-quality bug on
new-vehicle listings, on top of any remaining intermittent
proxy/IP blocking that FREE-tier residential rotation already mitigates.
Added test_new_vehicle_card_year_and_fuel_type and
test_new_vehicle_card_without_year_still_gets_fuel_type regression tests.
0.3.0 — 2026-06-13
Graceful proxy fallback: replace hard-fail on RESIDENTIAL unavailability with a two-step
resolution — try RESIDENTIAL first, then fall back to the account's automatic proxy group.
Customers without RESIDENTIAL access were getting an immediate RuntimeError; they now
proceed with auto proxy and get a warning in the run log and status message.
The scraper's existing 403 retry/rotation logic handles any site blocks from non-residential
IPs — no new scraping logic changes required.
Root cause of 28% 30-day success rate: 5/7 customer runs failed at proxy access-check because
those customers' Apify plans did not include RESIDENTIAL proxy group access.
0.2.0 — 2026-06-10
Force-residential proxy guard: _resolve_proxy_config now always injects the RESIDENTIAL group
when apifyProxyGroups is missing, empty, or contains no RESIDENTIAL entry. Customers running
without residential proxy were getting HTTP 403 from Bilasolur.is (datacenter IPs blocked).
Fail-fast on proxy unavailable: raises RuntimeError with a clear message instead of silently
falling back to direct routing.
Updated INPUT_SCHEMA.json, models.py, and README.md to document that RESIDENTIAL is required.
Added test_proxy_guard.py unit tests covering _ensure_residential permutations.
0.1.0 — 2026-06-05
First cloud push (v0.1). Build SUCCEEDED. Cloud QA PASS: 5/5 rows, ISK currency, enrichment (engine_power_hp, engine_size_cc, color, first_registration) all populated. Run ID: nskSNdhjnt6WbFaF6.