Every listing, from every source, as one clean dataset.
qlever reads classifieds the way their own front ends do — the site's JSON, its embedded state, its structured data — turns them into one vocabulary of attributes, works out which listings describe the same real thing, and keeps the prices comparable across currencies.
Collected so far
690
listings archived from 4 sources across 2 countries, over 1h 18m of continuous collection.
New listings per day
Show the numbers
| Day | New listings |
|---|---|
| 2026-08-03 | 0 |
| 2026-08-04 | 0 |
| 2026-08-05 | 0 |
| 2026-08-06 | 0 |
| 2026-08-07 | 0 |
| 2026-08-08 | 0 |
| 2026-08-09 | 0 |
| 2026-08-10 | 0 |
| 2026-08-11 | 0 |
| 2026-08-12 | 0 |
| 2026-08-13 | 0 |
| 2026-08-14 | 0 |
| 2026-08-15 | 0 |
| 2026-08-16 | 0 |
| 2026-08-17 | 0 |
| 2026-08-18 | 0 |
| 2026-08-19 | 0 |
| 2026-08-20 | 0 |
| 2026-08-21 | 0 |
| 2026-08-22 | 0 |
| 2026-08-23 | 0 |
| 2026-08-24 | 0 |
| 2026-08-25 | 0 |
| 2026-08-26 | 0 |
| 2026-08-27 | 0 |
| 2026-08-28 | 0 |
| 2026-08-29 | 0 |
| 2026-08-30 | 0 |
| 2026-08-31 | 0 |
| 2026-09-01 | 690 |
How it works
Recipes, not scrapers
A source is a YAML file that names where each field lives — preferring the site's own JSON API, then its embedded state, then its structured data, and only then CSS selectors. Anything above CSS survives a redesign.
The archive is the artifact
Every listing points back at the bytes it came from. A field that stopped extracting is fixed by editing the recipe and replaying 30 archived documents — not by asking the source for them again.
One object, many adverts
The same apartment is posted by four agencies under three prices. Photo fingerprints, geography and attribute tolerances group those adverts into 875 objects, with every decision recorded and reviewable.
Prices you can compare
The published price is never rewritten — it is what the seller wrote. A second, derived amount is computed at the rate of the day the price was observed, so a listing's history does not move when the currency does.
Silence is measured
The characteristic failure of a scraper is a page that still returns 200 while its selectors match nothing. Fill rate is recorded per field per day, so a broken recipe shows up as a number rather than as a quiet gap in the data.
Polite by construction
robots.txt is honoured by default and the crawler identifies itself with an address you can write to. There is no fingerprint spoofing and no CAPTCHA solving: a refusal is a signal to back off, not an obstacle to defeat.
Sources
| Site | Market | Vertical | Live listings | Last seen |
|---|---|---|---|---|
| olx.ua | UA | realestate | 385 | 56m ago |
| dom.ria.com | UA | realestate | 135 | 56m ago |
| rieltor.ua | UA | realestate | 121 | 56m ago |
| lun.ua | UA | realestate | 49 | 1h 22m ago |
Where the inventory is
Medians over live listings with a comparable price. A “from” price — a whole development quoting its cheapest unit — is excluded, because it describes a building rather than an apartment.
| City | Country | Live listings | Median price | Median area |
|---|---|---|---|---|
| Київ | UA | 638 | $1,598 | 57 m² |
| с. Ходосівка | UA | 2 | $57,950 | 66 m² |
| с. Крюківщина | UA | 1 | $71,000 | 45 m² |
What is on offer
| Deal | Live listings | Share |
|---|---|---|
| unclassified | 506 |
73%
|
| for sale | 117 |
17%
|
| long-term rent | 67 |
10%
|