Skip to main content

catastrogps

Official Python client for the Catastro GPS API: cadastral parcels in 29 European countries plus the Basque Country and Navarre (31 country and region codes) with one API key.

  • Look up a parcel by its official cadastral reference or by coordinates, with the country detected for you.
  • Turn a Spanish postal address in free text into a cadastral reference.
  • Get the parcel outline (GeoJSON or a [lat, lng] ring), and KML / GPX / DXF exports.
  • Solar (PVGIS) and agricultural context for parcels in Spain, Portugal, France, Italy and Germany.
  • One dependency (httpx), typed, Python 3.9+.

Free tier: 250 calls a month, forever. Failed lookups are not charged. Get a key at catastrogps.es/developers.

Install

pip install catastrogps

Quick start

from catastrogps import CatastroGPS

client = CatastroGPS("pk_live_your_key_here")

parcel = client.parcels.get("9872023VH5797S0001WX")
print(parcel["municipio"], parcel.get("superficieParcela"), parcel["latitud"], parcel["longitud"])

CatastroGPS() with no arguments reads CATASTROGPS_API_KEY from the environment. Use it as a context manager to close the connection pool:

with CatastroGPS() as client:
    ...

Examples

match = client.parcels.find_by_address("Calle Mallorca 213, Barcelona")
match["referenciaCatastral"]

in_warsaw = client.parcels.at_point(52.2297, 21.0122)
in_warsaw["referenciaCatastral"], in_warsaw.get("pais")

foral = client.parcels.get("<Navarre reference>", country="NA")

outline = client.parcels.geometry("9872023VH5797S", country="ES")
outline.get("geojson")

solar = client.parcels.solar("9872023VH5797S0001WX")
solar["kwh_year"]

kml_bytes = client.export.file("9872023VH5797S0001WX", "kml")

guess = client.resolve("05102200100005")
guess["candidates"]

client.last_quota

Responses are the API's data object as a dict, with the field names the API uses (refCatastral, municipio, superficieParcela…). See the API reference.

Errors

Every error is a CatastroGPSError with status, code and details:

from catastrogps import AmbiguousReferenceError, CoverageError, NotFoundError, QuotaExceededError

try:
    client.parcels.get("05102200100005")
except AmbiguousReferenceError as error:
    first = error.candidates[0]["country"]
    client.parcels.get("05102200100005", country=first)
except (NotFoundError, CoverageError) as error:
    print(error.message)
except QuotaExceededError:
    print("Monthly quota used up")

Also available: AuthenticationError, ValidationError, RateLimitError, ServiceUnavailableError, ServerError, TimeoutError, NetworkError.

Timeouts, network errors, 429 rate limits and 502/503/504 are retried up to max_retries times (default 2) with exponential backoff. An exhausted monthly quota is never retried. Each attempt that reaches the API counts as a call.

Options

Argument Default
api_key CATASTROGPS_API_KEY Required
base_url https://api.catastrogps.es
timeout 30.0 seconds Official cadastres can be slow
max_retries 2
http_client new httpx.Client Bring your own (proxies, tests with httpx.MockTransport)

Coverage

Code Country / region Reference Coordinates Notes
ES Spain ✅ ✅ Free-text address search
PV · NA Basque Country · Navarre ✅ ✅ Foral cadastres
PT Portugal Partial ✅ Digital cadastre is partial
FR · IT France · Italy ✅ ✅
DE Germany Partial Partial All Länder except Bavaria
AT CH LI BE NL LU Austria, Switzerland, Liechtenstein, Belgium, Netherlands, Luxembourg ✅ ✅
PL CZ SK SI HR BG GR CY Poland, Czechia, Slovakia, Slovenia, Croatia, Bulgaria, Greece, Cyprus ✅ ✅
DK NO FI IS EE LV LT IE Denmark, Norway, Finland, Iceland, Estonia, Latvia, Lithuania, Ireland ✅ ✅
SE Sweden ✅ ✅ Agricultural blocks, not property units
UK United Kingdom — Scotland England, Wales and Northern Ireland not yet

Geometry is available wherever a reference works. Solar and agriculture: ES, PV, NA, PT, FR, IT, DE. Data comes live from each official source, so availability follows theirs.

Pricing

Plan Price Calls / month
Free €0, forever 100
Developer €19 / month 5,000
Startup €49 / month 15,000
Growth €99 / month 50,000

The same key works with the JavaScript SDK (npm install catastrogps) and the MCP server for AI agents (catastro-gps-mcp).

License

MIT

Metadata

Release files for catastrogps 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for catastrogps 1.0.0
File Size Uploaded
catastrogps-1.0.0.tar.gz 9.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for catastrogps 1.0.0
File Interpreter ABI Platform
catastrogps-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 19.7 kB

Release files / catastrogps-1.0.0.tar.gz

Download URL catastrogps-1.0.0.tar.gz
Size 9.9 kB
Tags Source
SHA-256 checksum
How to use checksums
bf63676937ecbf958f729282e5aa2a295e0c806658896aa95597133ea2b158f3
BLAKE2b-256 checksum
How to use checksums
ab4307dd36757082937168a2ba4a54c8e66d54c9591b3b4aa6be3ade598e02ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / catastrogps-1.0.0-py3-none-any.whl

Download URL catastrogps-1.0.0-py3-none-any.whl
Size 9.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
261c436b1cd6ba2ae1232f478d00ea72073510a5b5eea55e182a79885482668c
BLAKE2b-256 checksum
How to use checksums
6155ed62a547fe403c913486d71ddf65128e8bfc792e91226bf0a1ecb66ea216
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release history Release notifications | RSS feed

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.1

2 release files

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page