Un proyecto personal nacido de ver a muchos jóvenes cercanos luchar por acceder a una vivienda digna en Madrid
Idealista bloquea tráfico desde IPs de datacenter (GitHub Actions, Azure, etc.). El scraper está diseñado para ejecución local o con proxy residencial
AVISO IMPORTANTE - LEE ESTO ANTES DE USAR
© 2026 Miguel Paniagua - Todos los derechos reservados.
Este proyecto fue creado originalmente por Miguel Paniagua y está completamente protegido por derechos de autor.
Este proyecto está licenciado bajo una MIT License modificada con restricciones adicionales para uso comercial:
✅ PERMITIDO (Uso No-Comercial):
- Usar el código para aprender y educación
- Modificar el código para uso personal
- Compartir el código (siempre dando crédito)
- Contribuir mejoras al proyecto original
❌ PROHIBIDO (Sin Autorización Previa):
- Cualquier uso comercial (vender servicios basados en esto)
- Generar ingresos directa o indirectamente
- Usar para un negocio o startup sin permiso
- Vender acceso a la herramienta
- Reclamar la autoría o presentarlo como propio
- Crear un producto comercial basado en este código
Si tu intención es hacer dinero con este código (de cualquier forma):
- 🚫 NO PUEDES hacerlo sin autorización
- 📧 DEBES contactar a Miguel Paniagua para una licencia comercial
- 💼 Se requiere acuerdo explícito y por escrito
- 💰 Puede requerir compensación económica
ViviendaRadar es un sistema completo de aprendizaje automático diseñado para democratizar el acceso a información del mercado de alquileres en Madrid. Combina web scraping, ingeniería de datos e inteligencia artificial para identificar pisos con precios injustos y alertar sobre oportunidades excepcionales.
Creé este proyecto porque veía que mucha gente joven cercana no podía acceder a un alquiler digno. Los precios de alquiler se han desvinculado cada vez más de la realidad y, sin una inteligencia de mercado adecuada, los inquilinos quedan atrapados entre opciones imposibles: pagar demasiado por una vivienda básica o aceptar condiciones muy precarias.
ViviendaRadar existe para nivelar el campo de juego: poner herramientas potentes de análisis de mercado en manos de quienes más las necesitan, ayudándoles a encontrar una vivienda digna a precios más justos.
- Recopila ~2.100 anuncios de alquiler desde Idealista (Madrid)
- Limpia y transforma los datos con más de 20 variables diseñadas para IA
- Entrena un modelo Random Forest que estima el precio justo de alquiler
- Rastrea nuevos anuncios en tiempo (casi) real con Selenium
- Evalúa cada anuncio y detecta gangas y oportunidades
- Envía alertas por Telegram cuando detecta chollos
- Expone una API REST para usar el tasador desde otras apps o scripts
PROYECTO_INMOBILIARIO_BOT/
├── .env <-- ¡AQUÍ IRÁN TUS CLAVES!
├── .gitignore <-- EL ESCUDO (protege .env)
├── requirements.txt <-- LIBRERÍAS
├── LICENSE <-- PROTECCIÓN LEGAL
├── README.md <-- ESTE ARCHIVO
├── api_tasadorav2.py
├── cosechadorav2.py
├── entrenar_tasadorav2.py
├── etl_limpiezav2.py
├── explorador_datosv2.py
├── rastreadorv2.py
└── dataset_madrid_*.csv (no se suben a GitHub)
- Extrae ~2.100 anuncios desde Idealista
- Incluye 70 páginas de alquileres en Madrid
- Características Extraídas:
- Precio, metros cuadrados, habitaciones, baños
- Número de planta, amenidades (ascensor, parking, terraza, aire acondicionado)
- Estado de amueblamiento y reforma
- Detección de barrio desde el título del anuncio
- Enlaces directos a las propiedades
- Deduplicación: Elimina anuncios duplicados
- Recuperación de Barrios: Extrae inteligentemente el barrio del título del anuncio
- Validación de Datos:
- Metros cuadrados: 15-500 m²
- Precio: €400-€15.000/mes
- Elimina valores atípicos irreales
- Ingeniería de Características (20+ características):
precio_m2: Precio por metro cuadradolog_precio: Transformación logarítmica del precio (estabiliza el modelo)metros_por_habitacion: Métrica de eficiencia espaciales_piso_alto: Binaria (planta ≥ 3)score_calidad: Suma de amenidades (0-6)penalizacion_sin_ascensor: Penalización por pisos altos sin ascensor
- Algoritmo: Random Forest Regressor (300 árboles, profundidad=15)
- Objetivo: Precio de alquiler transformado logarítmicamente
- Estrategia de Validación: División train/test estratificada 80/20 por barrio
- Métricas de Rendimiento:
- MAE (Error Medio Absoluto): ~€100-150
- RMSE: ~€150-200
- MAPE (Error Porcentual Medio Absoluto): ~15-18%
- Salida: Modelo serializado (
modelo_tasadorv2.joblib)
- Framework: FastAPI
- Endpoint:
POST /tasar - Entrada: Detalles de la propiedad (ubicación, tamaño, amenidades, etc.)
- Salida:
{ "tasacion_ia": 1850, "precio_anuncio": 2100, "diferencia_porcentaje": "-13.5%", "veredicto": "✅ OPORTUNIDAD", "barrio_oficial": "Salamanca" } - Lógica de Veredicto:
- 🔥 GANGA (Gran oportunidad): > -25% por debajo del precio justo
- ✅ OPORTUNIDAD (Buena oferta): -15% a -25% por debajo
⚠️ ALGO CARO (Algo caro): +10% a +20% por encima- ❌ MUY CARO (Muy caro): > +20% por encima
- Tecnología: Selenium sin detección (anti-bot)
- Función: Monitorea continuamente Idealista buscando nuevos anuncios
- Proceso:
- Obtiene páginas de listado
- Accede a cada ficha de propiedad
- Extrae toda la información de la propiedad
- Llama a la API de predicción
- Envía alerta por Telegram si encuentra una ganga
- Guarda resultados en CSV
- Características Clave:
- Delays aleatorios (2-4s) entre solicitudes
- Pausa de 60 segundos cada 10 páginas para evitar bloqueos
- Detecta palabras clave de oportunidad: "negociable", "urgente", "gastos incluidos"
- Notificaciones Telegram con detalles y enlaces
- Genera mapas de calor de correlación
- Muestra distribución de barrios
- Identifica características más importantes para debugging del modelo
pip install -r requirements.txtPaso 1: Recopilar Datos
python cosechadorav2.py
# Salida: dataset_madrid_definitivo.csv (~2.100 propiedades)Paso 2: Limpiar y Preparar
python etl_limpiezav2.py
# Salida: dataset_madrid_limpio_IA.csv (datos limpios, características ingeniadas)Paso 3: Entrenar Modelo
python entrenar_tasadorav2.py
# Salida: modelo_tasadorv2.joblib (Random Forest entrenado)Paso 4: Iniciar Servicio API
python api_tasadorav2.py
# Inicia FastAPI en http://0.0.0.0:8000
# Documentación de API: http://localhost:8000/docsPaso 5: Ejecutar Rastreador en Tiempo Real (en otra terminal)
# Configurar primero el archivo .env:
# API_URL=http://localhost:8000/tasar
# TELEGRAM_TOKEN=tu_token_bot
# TELEGRAM_CHAT_ID=tu_chat_id
python rastreadorv2.py
# Monitorea Idealista y envía alertas a Telegramcurl -X POST "http://localhost:8000/tasar" \
-H "Content-Type: application/json" \
-d '{
"ubicacion": "Salamanca, Madrid",
"metros": 85,
"habitaciones": 2,
"banos": 1,
"planta": 4,
"ascensor": true,
"garaje": false,
"amueblado": false,
"reformado": true,
"terraza": false,
"aire": true,
"precio_actual": 1800
}'{
"tasacion_ia": 1750,
"precio_anuncio": 1800,
"diferencia_porcentaje": "2.9%",
"veredicto": "PRECIO DE MERCADO",
"barrio_oficial": "Salamanca"
}- Crear bot con @BotFather.
- Obtener
TELEGRAM_TOKEN. - Obtener
CHAT_ID. - Crear
.env:
TELEGRAM_TOKEN=tu_token_bot_aqui
TELEGRAM_CHAT_ID=tu_chat_id_aqui
API_URL=http://localhost:8000/tasarCuando se encuentre una ganga, recibirás:
🚨 🔥 GANGA
📍 Salamanca
💰 Pide: 1500€ | IA: 1900€
📉 -21% descuento
🏠 75m² | 2 hab | 🚽 1 baño
🔗 https://www.idealista.com/...
| Componente | Tecnología |
|---|---|
| Web Scraping | Selenium + BeautifulSoup4 + ChromeDriver sin detección |
| Procesado de Datos | Pandas + NumPy |
| Machine Learning | Scikit-learn (Random Forest) |
| API | FastAPI + Uvicorn + Pydantic |
| Notificaciones | API de Bot de Telegram |
| Serialización de Modelo | Joblib |
| EDA/Visualización | Seaborn + Matplotlib |
Protege los archivos sensibles de subirse a GitHub:
.env← TUS CLAVES PRIVADAS (nunca se suben)*.csv← Datos (no se suben)*.joblib← Modelos (no se suben)__pycache__/← Basura Python
NUNCA compartas este archivo. Contiene:
TELEGRAM_TOKEN=abc123xyz456
TELEGRAM_CHAT_ID=987654321
API_URL=http://localhost:8000/tasarArchivo que establece:
- Quién es el propietario (Miguel Paniagua)
- Qué pueden hacer otros (MIT License)
- QUÉ NO PUEDEN HACER (Uso comercial sin permiso)
El web scraping existe en una zona gris legal. Este proyecto fue desarrollado únicamente para fines educativos:
- ✅ Permitido generalmente: Recopilar datos públicos para investigación y educación.
- ❌ Prohibido usualmente: Violar términos de servicio, comercializar datos, sobrecargar servidores, recopilar datos personales sin consentimiento.
Recomendaciones:
- Revisa siempre
robots.txtyTerms of Servicedel sitio. - En España: respeta el RGPD (Reglamento General de Protección de Datos).
- Implementa delays suficientes para no sobrecargar los servidores.
- Usa User-Agent realista.
- No redistribuyas los datos sin permiso.
- El scraper introduce esperas aleatorias y pausas largas para minimizar el riesgo de bloqueo y ser respetuoso.
- Este código se proporciona tal cual, sin garantías.
- El autor no se responsabiliza por usos no autorizados.
- Este proyecto está pensado exclusivamente para aprendizaje y educación.
- El modelo está entrenado solo con datos de Madrid:
- No extrapolar directamente a otras ciudades.
- No ve factores cualitativos no recogidos:
- Vecindario concreto, ruido, vecinos, estado real de la finca, etc.
- Las "gangas" detectadas deben revisarse manualmente antes de tomar decisiones.
- Soporte para otras ciudades (Barcelona, Valencia, etc.)
- Análisis de series temporales (tendencias de precio por barrio)
- Modelo de deep learning (redes neuronales)
- Dashboard web interactivo
- Integración con WhatsApp además de Telegram
- Resumen semanal por correo electrónico
- Rastreo histórico de precios por propiedad
- Puntuación de reputación de propietarios
- Pronóstico predictivo de precios
Copyright © 2026 Miguel Paniagua
Este proyecto está licenciado bajo MIT License con restricciones comerciales adicionales.
Ver archivo LICENSE para los términos completos.
Regla de Oro: Si vas a generar dinero con esto → Contacta con Miguel Paniagua primero.
Para solicitar licencia comercial:
- 📧 Email: [migpanra@gmail.com]
- 💼 Incluye: detalles del uso, mercado objetivo, proyecciones financieras
Creado por: Miguel Paniagua
Propósito: Ayudar a que la vivienda digna sea más accesible para gente joven en Madrid
Motivación: "Veía que mucha gente joven cercana no podía acceder a un alquiler digno"
Fecha: 2026
Si quieres colaborar de forma no-comercial:
- Haz un fork del repositorio
- Crea una rama (
feature/mi-mejora) - Envía un pull request
- Proporciona atribución al proyecto original
- A todas las personas jóvenes que buscan vivienda en Madrid: este proyecto nace pensando en vosotras.
- A Idealista, como fuente de datos (usados respetuosamente).
- A la comunidad open source de Python, FastAPI y scikit-learn.
A personal project born from seeing many young people around me struggling to access dignified housing in Madrid
IMPORTANT NOTICE - READ THIS BEFORE USING
© 2026 Miguel Paniagua - All rights reserved.
This project was originally created by Miguel Paniagua and is fully protected by copyright.
This project is licensed under a modified MIT License with additional restrictions for commercial use:
✅ ALLOWED (Non-Commercial Use):
- Use code for learning and education
- Modify code for personal use
- Share the code (always giving credit)
- Contribute improvements to the original project
❌ PROHIBITED (Without Prior Authorization):
- Any commercial use (selling services based on this)
- Generating revenue directly or indirectly
- Using for a business or startup without permission
- Selling access to the tool
- Claiming authorship or presenting it as your own
- Creating a commercial product based on this code
If your intention is to make money with this code (in any way):
- 🚫 YOU CANNOT do it without authorization
- 📧 YOU MUST contact Miguel Paniagua for a commercial license
- 💼 Explicit written agreement required
- 💰 May require monetary compensation
ViviendaRadar is an end-to-end machine learning system designed to democratize access to rental market intelligence in Madrid. It combines web scraping, data engineering and AI to detect unfairly priced rentals and highlight exceptional opportunities.
This project was created after seeing many young people close to me unable to access decent rentals in Madrid. Rental prices have become increasingly detached from reality, and without proper market data, tenants are forced into impossible choices: overpay for basic housing or accept very poor conditions.
ViviendaRadar aims to level the playing field by putting powerful market analysis tools in the hands of those who need them most, helping them find dignified housing at fairer prices.
- Collects ~2,100 rental listings from Idealista (Madrid)
- Cleans & transforms the data with 20+ AI-ready features
- Trains a Random Forest model to estimate fair market rent
- Monitors new listings in (near) real time using Selenium
- Evaluates each listing to flag bargains and overpriced units
- Sends alerts via Telegram when a great deal is detected
- Exposes a REST API so the pricing engine can be consumed by other tools
-
Install dependencies:
pip install -r requirements.txt
-
Scrape data:
python cosechadorav2.py
-
Clean & prepare:
python etl_limpiezav2.py
-
Train model:
python entrenar_tasadorav2.py
-
Start API:
python api_tasadorav2.py
-
Run tracker (with
.envconfigured):python rastreadorav2.py
For full implementation details, refer to the Spanish section above.
Web scraping exists in a legal gray area. This project was developed solely for educational purposes:
- ✅ Generally Allowed: Collecting public data for research and education.
- ❌ Usually Prohibited: Violating Terms of Service, commercializing data, overloading servers, collecting personal data without consent.
Copyright © 2026 Miguel Paniagua
This project is licensed under MIT License with additional commercial restrictions.
See LICENSE file for complete terms.
Golden Rule: If you're going to make money with this → Contact Miguel Paniagua first.
For commercial licensing inquiries:
- 📧 Email: [migpanra@gmail.com]
- 💼 Include: details of use, target market, financial projections
- To all young people searching for housing in Madrid: this project exists with you in mind.
- To Idealista, as a data source (used responsibly).
- To the open source community of Python, FastAPI and scikit-learn.
Remember: Dignified housing is a right, not a privilege. ViviendaRadar exists to help democratize access to market information. Use it wisely. ✊