Commercial product. This repository hosts the public surface — README, API docs, configuration scaffolding. Parser internals and operational pieces are proprietary.
RentScout is a FastAPI service that aggregates Russian rental and short-term-stay listings from Avito, Cian, Yandex Travel, Sutochno, Ostrovok, Otello, and Tvil into a single normalized API. It is built for back-office tooling, market research, and client-facing rental dashboards that need one schema across many sources.
Each rental platform exposes a different schema, different filter vocabulary, and different anti-bot posture. Stitching them together inside a downstream app means writing seven adapters, seven cache strategies, and seven bug surfaces. RentScout collapses that into one HTTP API: same query, same response shape, same SLA assumptions.
- API — FastAPI receives a search query (geo, dates, price band, room count, source filter).
- Search service plans which parsers to run in parallel and merges their results.
- Parsers — per-source modules (
app/parsers/<source>) for Avito, Cian, Yandex Travel, Sutochno, Ostrovok, Otello, Tvil. - Cache — Redis-backed layer keyed by query fingerprint to absorb repeat traffic.
- Filter service applies post-fetch normalization and dedupes near-identical listings.
- Storage — SQLAlchemy + Alembic schema for persistent listings, run history, and audit.
- Telegram bot (optional) exposes the same data to operators for alerts and ad-hoc queries.
See docs/architecture.svg and docs/API.md.
| Layer | Tools |
|---|---|
| API | FastAPI, Uvicorn |
| Async parsing | httpx, asyncio |
| HTML | lxml / BeautifulSoup |
| DB | PostgreSQL + SQLAlchemy + Alembic |
| Cache | Redis |
| Tasks | APScheduler / background tasks |
| Bot | aiogram (operator interface) |
| Deploy | Docker, docker-compose |
| Method | Path | Description |
|---|---|---|
GET |
/health |
liveness |
GET |
/v1/search |
unified search across configured sources |
GET |
/v1/sources |
enabled parsers and their capabilities |
GET |
/v1/listing/{id} |
single normalized listing |
Full reference: docs/API.md.
- Public repo is not a runnable product. Some directories (
app/,docker/,scripts/) hold scaffolding; production parsers and ops live elsewhere. - Source platforms change HTML and anti-bot defenses frequently — production maintenance is a paid service, not a community one.
- Geo coverage is Russia-centric; international rentals are not in scope.
- Rate, freshness, and uptime targets are negotiated per deployment; no public SLA.
- Some parsers depend on residential-quality proxies; without them, request success drops sharply.
Commercial inquiries, integrations, custom parsers: creatmanick@gmail.com · creatman.site.
EOF