Search and download Copernicus Sentinel data (Sentinel-1, 2, 3, 5P) from the Copernicus Data Space Ecosystem in a few lines of Python.
pip install cdse-clientfrom cdse import CDSEClient
client = CDSEClient() # reads CDSE_CLIENT_ID / CDSE_CLIENT_SECRET
products = client.search(
bbox=[9.10, 45.40, 9.28, 45.52], # Milan
start_date="2025-06-01",
end_date="2025-06-30",
collection="sentinel-2-l2a",
cloud_cover_max=20,
limit=5,
)
print(client.download(products[0]))Same thing from the terminal:
cdse search --bbox 9.10,45.40,9.28,45.52 -s 2025-06-01 -e 2025-06-30 -c 20 -l 5 --downloadRegister at dataspace.copernicus.eu, create OAuth2 credentials in your account settings, then:
export CDSE_CLIENT_ID="your-client-id" # PowerShell: $env:CDSE_CLIENT_ID = "..."
export CDSE_CLIENT_SECRET="your-client-secret" # PowerShell: $env:CDSE_CLIENT_SECRET = "..."You can also pass them explicitly: CDSEClient(client_id=..., client_secret=...).
| Search | STAC — bounding box, point + radius, city name, date range, cloud cover, one tile or every tile (coverage) |
| Download | OData/Zipper — progress bars, parallel, MD5 checksums, quicklooks |
| Export | to_dataframe(), to_geojson(), to_geodataframe() |
| Async | CDSEClientAsync with concurrency control |
| Process | crop, band stacking, SCL cloud mask, NDVI/NDWI/NDMI/NBR, RGB previews (Sentinel-2) |
Collections: sentinel-1-grd, sentinel-2-l1c, sentinel-2-l2a, sentinel-3-olci,
sentinel-3-slstr, sentinel-5p-l2.
Built for long, unattended jobs: OAuth2 tokens refresh themselves mid-download, transient
429/5xx responses are retried with exponential backoff, every request has an explicit
timeout, and the package ships type hints (PEP 561).
search()returns STAC results, whose ids are product names, not OData UUIDs. If you need a UUID, usesearch_by_name(name, exact=True).
pip install cdse-client[geo] # search by city name, GeoDataFrame export
pip install cdse-client[dataframe] # DataFrame export
pip install cdse-client[async] # concurrent downloads
pip install cdse-client[processing] # NDVI, band stacking, previews
pip install cdse-client[all] # all of the aboveGetting started · Search · Download · CLI · API reference · FAQ
Runnable scripts: examples/. Worked examples by persona (crop NDVI, burn
severity, Sentinel-1 pairs, city before/after, NO2): Use cases.
sentinelsat targeted DHuS/SciHub, which is closed; the project is archived and cannot
download from CDSE. The export surface here is deliberately familiar:
| sentinelsat | cdse-client |
|---|---|
SentinelAPI(user, password) |
CDSEClient() (OAuth2 client credentials) |
api.query(...) |
client.search(...) |
api.download(...) |
client.download(product) |
api.to_dataframe(...) |
client.to_dataframe(products) |
Contributions welcome — see CONTRIBUTING.md and the issue tracker.
Unofficial client library, not affiliated with or endorsed by ESA, the European Commission, or the Copernicus Programme.
Sentinel data is provided under a free, full and open data policy for any use, including commercial. Users must register at dataspace.copernicus.eu and comply with the CDSE Terms and Conditions and quotas.
MIT — see LICENSE.