En esta guía, aprenderás a obtener el histórico de precios de inmuebles de idealista usando Python y la API de Oportunista.
Una vez que vimos cómo obtener una API key de Oportunista, ya podemos obtener los precios de un inmueble usando Python muy fácilmente. Esto te permitirá tener los datos listos para copiar o, con unas pocas líneas más, exportalo a CSV o Excel.
Antes de comenzar, asegúrate de tener lo siguiente:
pip install requests
Primero, define las credenciales y la URL base de la API:
#!/usr/bin/env python3
import requests
API_KEY = 'TU-API-KEY'
BASE_URL = 'idealista-historico.p.rapidapi.com'
Con este código, hacemos una llamada a la API:
def get_data(property_code):
url = f"https://{BASE_URL}/inmueble/{property_code}"
headers = {
"x-rapidapi-key": API_KEY,
"x-rapidapi-host": BASE_URL
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json()
except Exception as e:
print(f"Error: {e}")
return None
Para obtener el histórico de precios de una propiedad específica, realiza una petición con el ID del inmueble.
data = get_data('107660891')
if data:
prices = data.get('data',{}).get('prices') or []
for price_obj in prices:
print(price_obj['fetchedAt'], price_obj['price'])
Guardamos y ejecutamos el script para ver los resultados:
python3 oportunista_api.py
Y este será el resultado:
2025-03-23 549000
2025-03-30 330000
Hasta aquí ya habríamos obtenido los precios. Pero, el objecto data devuelve muchos más datos:
{
"data": {
"address": "paseo de la esperanza, 37",
"bathrooms": 1,
"country": "es",
"district": "Arganzuela",
"exterior": true,
"fetchedAt": "2025-03-30",
"floor": "2",
"hasAirConditioning": true,
"hasBoxRoom": true,
"hasGarden": true,
"hasLift": true,
"hasParkingSpace": true,
"hasSwimmingPool": true,
"hasTerrace": true,
"highestPrice": 549000,
"latitude": 40.3997493,
"locationId": "0-EU-ES-28-07-001-079-02-002",
"locationName": "Acacias, Madrid",
"longitude": -3.7033601,
"lowestPrice": 330000,
"municipality": "Madrid",
"neighborhood": "Acacias",
"numPrices": 2,
"operation": "sale",
"price": 330000,
"priceByArea": 5789,
"prices": [
{
"fetchedAt": "2025-03-23",
"price": 549000
},
{
"fetchedAt": "2025-03-30",
"price": 330000
}
],
"propertyCode": "107660891",
"propertyType": "flat",
"province": "Madrid",
"publishedAt": "2025-03-23",
"rooms": 2,
"size": 57,
"status": "good",
"subTypology": "",
"thumbnail": "https://img4.idealista.com/blur/WEB_LISTING-M/0/id.pro.es.image.master/f4/7c/f0/1321091342.webp",
"typology": "flat",
"url": "https://www.idealista.com/inmueble/107660891/"
}
}
#!/usr/bin/env python3
import requests
API_KEY = 'TU-API-KEY'
BASE_URL = 'idealista-historico.p.rapidapi.com'
PROPERTY_CODE = '107660891'
def get_data(property_code):
url = f"https://{BASE_URL}/inmueble/{property_code}"
headers = {
"x-rapidapi-key": API_KEY,
"x-rapidapi-host": BASE_URL
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json()
except Exception as e:
print(f"Error: {e}")
return None
def main():
data = get_data(PROPERTY_CODE)
if data:
prices = data.get('data',{}).get('prices') or []
for price_obj in prices:
print(price_obj['fetchedAt'], price_obj['price'])
if __name__ == '__main__':
main()
Usando la API de Oportunista junto con Python, es posible extraer y analizar el histórico de precios de inmuebles en Idealista muy fácilmente.
Para ampliar o preguntar dudas puedes entrar a nuestro Discord.