Ejecutar consultas SQL sobre el catastro español

Posted on Wednesday, February 11, 2026 in Programación

Ejecutar consultas SQL sobre el catastro español

Resulta que por los motivos que sean, necesitaba buscar casas en el catastro que cumplieran unos determinados parámetros. Por ejemplo, casas con un tamaño máximo y mínimo, que no tuvieran piscina, con un mínimo de finca, dentro de un determinado código postal y con una antigüedad determinada.

Inmediatamente, mi cerebro de informático pensó: eso suena totalmente a una consulta SQL. Obviamente, sería demasiado bonito que el Catastro permitiera a cualquiera ejecutar consultas SQL directamente en su base de datos, pero me puse a pensar cómo se podría automatizar la búsqueda de una manera similar, porque con la cantidad de inmuebles que hay en el catastro, una búsqueda manual es inviable.

¿Tal vez hay alguna API? Idealmente, alguna API REST, tal vez. Pues no, parece que no. Lo más similar es un servicio en el que puedes enviar un fichero XML con los parámetros de la consulta que quieres realizar, ellos lo ponen a la cola, y ya cuando ejecuten la consulta (normalmente, en menos de una hora, según dicen), te proporcionan los resultados. Esto suena a algo de otra época y totalmente inviable para el propósito para el que lo necesito, sobre todo teniendo en cuenta que ni siquiera hay un entorno de pruebas para probar el fichero XML de consulta generado. Lo envías, esperas una hora y, con suerte, te dará los resultados que querías. Si no, a volver a probar dentro de una hora.

Sin embargo, hay otro servicio que sí que resultó útil para mi propósito, que es la descarga de todos los datos del catastro por provincia. Como la consulta que yo necesitaba realizar se limitaba a una provincia, podía descargar los ficheros para la provincia de mi interés y realizar mis consultas sobre ese fichero.

Por supuesto, todavía no iba a ser tan fácil, ya que los ficheros de descarga obviamente no estaban en formato SQL. Ni tampoco en CSV. Ni siquiera en Excel. Está en un formato propio que llaman información alfanumérica en formato CAT, que es básicamente un fichero de datos de texto con campos de ancho fijo.

Así que, lo que terminé haciendo es un simple script de Python que lee las líneas de los ficheros CAT, parte cada línea según el ancho de cada columna, e importa el contenido a una base de datos.

El fichero de datos que se descarga de la web del Catastro es un archivo ZIP con múltiples ficheros distintos, cada uno de ellos conteniendo distinta información: fincas, inmuebles, construcciones, cultivos… Así que lo primero que hace el script es leer la cabecera del fichero para saber qué tipo de fichero está leyendo y, en función de eso, saber cómo tiene que interpretar el resto de los datos y partir cada fila en columnas.

El script tiene algunas limitaciones. En primer lugar, es un script que creé para una necesidad propia y un único uso, así que me centré en la información que era importante para mí. Creo que implementé la importación de casi todo, incluida información que no me interesaba (por ejemplo, cultivos agrarios), pero dejé fuera alguna información que no me interesaba y complicaba bastante su implementación (por ejemplo, la información sobre reparto de elementos comunes).

Hay otras limitaciones que están fuera de mi control y se refieren a la inconsistencia de la documentación oficial sobre el formato CAT y de los propios datos, por ejemplo:

  • No hay información sobre los valores que pueden ser nulos.
  • A veces no se respeta el tipo de dato que la documentación dice que un tiene un campo. Por ejemplo, la documentación puede decir que un campo es de tipo numérico, pero se puede encontrar algún caso en el que ese campo tenga alguna letra.
  • Hay valores para campos enumerados que no están documentados. Por ejemplo, la documentación menciona códigos para el destino de una construcción como RCT para catedral, TCM para cine, EBL para biblioteca, etc. Pero, por ejemplo, también se pueden encontrar construcciones con el código YPS que no está documentado. He intentado añadir todos los códigos no documentados que encontré, pero el script fallará si se encuentra con algún código más que no está documentado.
  • Las referencias catastrales, que se suponen únicas, no siempre lo son. No es muy habitual, pero se pueden encontrar referencias catastrales duplicadas. Por ese motivo, he usado la referencia catastral junto con el código de municipio para identificar las parcelas. Aún así, podrían producirse conflictos de claves primarias si se encuentran referencias catastrales duplicadas en el mismo municipio, caso que no he encontrado hasta ahora.

El resto de la información para ejecutar el script está en el repositorio de código:

Catastro SQL