Back to All Projects

Bucuresti Invest - Real Estate Analysis Platform

Apps2025-12-30
View Code
Bucuresti Invest - Real Estate Analysis Platform
PythonScrapyFastAPINext.jsPostgreSQLDockerDocker Compose

Bucuresti Invest — Real Estate Investment Analysis Platform

Overview

Bucuresti Invest is an end-to-end real estate analysis platform for Bucharest. It scrapes apartment listings from Publi24.ro, enriches them with historical price data and neighborhood statistics, and surfaces the best-in-class investment opportunities based on calculated financial metrics — not vibes.

Built for the specific problem of buying an investment property in a market where listings are scattered across portals, prices change daily, and there is no single source of truth for neighborhood-level yield data.

🎯 What It Does

Scraper

  • Scrapy-based crawler on Publi24.ro (the largest Romanian classifieds portal for real estate)
  • Incremental mode for daily updates, full-refresh mode for backfills
  • Deduplication across listings that get reposted
  • Price-history tracking — every listing's price change is kept so you can detect motivated sellers

API

  • FastAPI backend exposing listings, analytics, and investment calculations
  • Endpoints:
    • GET /api/listings/hot-deals — best investment opportunities, ranked
    • GET /api/listings/{id}/price-history — price deltas over time
    • GET /api/analytics/neighborhoods — yield, price/m², velocity per neighborhood
    • GET /api/analytics/price-trends — historical evolution per sector
    • POST /api/investment/calculate — ROI, cap rate, cash-on-cash return from user inputs

Dashboard

  • Next.js frontend with analytics and visualizations
  • Neighborhood heatmap of yields and price/m²
  • Price-trend charts per sector
  • Hot-deals feed with filter presets (rental yield, price drops, undervalued)
  • Investment calculator for modeling specific properties (mortgage rate, down payment, occupancy, tax)

🛠️ Tech Stack

Layer Technology
Scraper Python + Scrapy
API Python + FastAPI
Database PostgreSQL with purpose-built indexes and functions
Frontend Next.js + TypeScript
Orchestration Docker Compose (Postgres + API + Dashboard + Scraper)
Seed data Neighborhood polygons, bootstrap price/m² benchmarks

🏗️ Data Model

The Postgres schema is split into:

  • listings — current state of every listing (price, m², rooms, floor, neighborhood, URL)
  • listing_history — every price change, detected by the scraper's daily diff
  • neighborhoods — Bucharest sector + neighborhood hierarchy with geographic boundaries
  • analytics — pre-computed per-neighborhood aggregates (median price/m², 90-day velocity, rental yield estimates)

Migrations are split cleanly: 001_initial_schema, 002_indexes, 003_functions, 004_seed_neighborhoods — so the whole stack spins up from zero with a single docker-compose up.

🧮 Investment Math

Beyond surface listings, the platform computes real investment metrics:

  • Cap rate = annual net operating income / purchase price
  • Cash-on-cash return = annual pre-tax cash flow / cash invested (accounts for down payment, mortgage payments, taxes, expenses)
  • Price/m² vs neighborhood median — instantly see if a listing is 20% below comps
  • Price trajectory — listings that have dropped 2–3 times signal motivated sellers

💡 Why I Built This

Bucharest real estate is a massive market with surprisingly bad tooling. Imobiliare.ro and Publi24 are optimized for end-buyers browsing emotionally; there's no platform that treats properties as investments with the numbers front and center. Bucuresti Invest is the tool I wanted when I was looking at apartments — a screen that ranks opportunities by math, not by how pretty the listing photos are.