MAAP Client
A Python client for ESA MAAP satellite data, with a CLI (maap) and a Python library.
It browses the MAAP catalogue, searches products by date, orbit or mission-specific
filters, and downloads them with your MAAP credentials into a predictable dated layout,
with text-file tracking for unattended pipelines.
Supported missions
It supports EarthCARE, Aeolus, Biomass, FLEX and CryoSat.
Mission patches © ESA
| Mission | Default format | Access |
|---|---|---|
| EarthCARE | h5 (then eof, dbl) |
MAAP offline token |
| Aeolus | dbl (then nc, bufr, eef) |
MAAP offline token |
| Biomass | zip (whole product) |
MAAP offline token; BiomassAuxRest is restricted; L2b not supported yet |
| FLEX | zip (whole product) |
Download access must be requested from ESA; downloads not yet validated |
| CryoSat | nc |
MAAP offline token |
The default format applies only when no --format is given. See
what is not supported yet for current limitations.
Quickstart
1. Install
pip install maap-client
2. Credentials
- Go to https://portal.maap.eo.esa.int/ini/services/auth/token/
- Log in with your ESA account and request a 90-day offline token.
- Create
~/.maap/credentials.txt:
CLIENT_ID=offline-token
CLIENT_SECRET=p1eL7uonXs6MDxtGbgKdPVRAmnGxHpVE
OFFLINE_TOKEN=<your_token>
maap token shows when the token expires (--days-left prints only the days, for scripts).
Run maap config to see the paths and the mission in use.
3. How the mission is chosen
Every collection belongs to one mission, so the collection decides: a command
given BiomassLevel1b works on Biomass whatever else is set. Download URLs decide
it the same way. Only when nothing decides it (e.g. maap list or maap catalog update
without a collection), the mission comes from, highest first:
--mission <name>(before or after the sub-command)- the
MAAP_MISSIONenvironment variable maap mission use <name>(saved in~/.maap/active_mission)default_missionin~/.maap/config.tomlEarthCARE
maap mission list # known missions, the active one marked
maap mission show Biomass # collections, dates, default formats, filters
4. Search and download
# Find CPR_NOM_1B products of baseline DA sensed on one day and save their URLs
maap search EarthCAREL1Validated_MAAP CPR_NOM_1B DA --date 2024-12-01 --url-file urls.txt
# Download them into data/EarthCARE/EarthCAREL1Validated_MAAP/CPR_NOM_1B/DA/2024/12/01/
maap download EarthCAREL1Validated_MAAP CPR_NOM_1B DA --url-file urls.txt
The same for Biomass (whole products as .zip, filtered by track):
maap get BiomassLevel1b S1_DGM__1S 01 --date 2025-12-11 --track 38
Main workflows
# Browse: collections, products, baselines (from the local catalogue)
maap list
maap list EarthCAREL1Validated_MAAP
maap list EarthCAREL1Validated_MAAP CPR_NOM_1B
# One-off: search and download in one step
maap get EarthCAREL1Validated_MAAP CPR_NOM_1B DA --orbit 08962 --frame C,D
# Pipeline: register URLs, then download what is still pending
maap search EarthCAREL1Validated_MAAP CPR_NOM_1B DA --start 2024-12-01 --end 2024-12-07 --registry-save
maap download EarthCAREL1Validated_MAAP CPR_NOM_1B DA --registry
# Scheduled: search + register + download the last 3 days (for cron)
maap sync EarthCAREL2Validated_MAAP CPR_CLD_2A DA
# Tracking: what is pending, mark processed files, free disk space
maap state show EarthCAREL1Validated_MAAP CPR_NOM_1B DA
maap state mark data/EarthCARE/.../file.h5
maap state cleanup EarthCAREL1Validated_MAAP CPR_NOM_1B DA --dry-run
Use maap <command> -h for every option. Filters depend on the mission
(EarthCARE --orbit/--frame; Biomass --track, --frame, --repeat-cycle,
--major-cycle; Aeolus and FLEX --orbit; CryoSat --orbit; EarthCARE, Biomass and
CryoSat also --orbit-direction ascending|descending, with search only); a filter the
mission does not have is rejected with the list of available ones.
Automation
Commands given a collection (list <collection>, search, download, get, sync,
state show|pending|cleanup, catalog update|build <collection>), download --url/--url-file
and state mark take the mission from their inputs, so a maap mission use typed on the
same machine never changes what they do.
Commands that do not determine it (catalog update and catalog build without a
collection, list without a collection, config, mission show without a name) follow
the selection order above, including the persisted maap mission use. In scripts and cron
jobs, pass --mission or set MAAP_MISSION for those:
0 5 * * * MAAP_MISSION=Biomass maap catalog update
0 6 * * * maap sync EarthCAREL2Validated_MAAP CPR_CLD_2A DA
Every command exits with a classified status, so wrappers need no log parsing:
0 success, 2 authentication failed (fix the token), 3 transient or partial
failure (re-run the same command later; done work is kept), 4 invalid request
(fix the command or configuration).
More
EXAMPLES.md covers every command and option, configuration
(config.toml, environment variables, per-mission overrides), the on-disk layout
of data and registry, formats and filters per mission, reliability and exit codes,
the Python API, troubleshooting and the limitations of this version.
Links
- PyPI: https://pypi.org/project/maap-client/
- ESA MAAP Portal: https://portal.maap.eo.esa.int
- MAAP Catalog: https://catalog.maap.eo.esa.int
- Token Request: https://portal.maap.eo.esa.int/ini/services/auth/token/90dToken.php
Contact
Report issues or comments to info [at] earthfocus [dot] io
Metadata
Release files for maap-client 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| maap_client-0.3.0.tar.gz | 91.2 kB | With provenance | Details for maap_client-0.3.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| maap_client-0.3.0-py3-none-any.whl | Python 3 | none | any | Details for maap_client-0.3.0-py3-none-any.whl |
Total release size: 196.9 kB
Release files / maap_client-0.3.0.tar.gz
| Download URL | maap_client-0.3.0.tar.gz |
|---|---|
| Size | 91.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6830c1b8d5e5cb4addb07c85742170b71659ff2226b0e52089c018faeaa0f325
|
|
BLAKE2b-256 checksum How to use checksums |
bb7dc2771eb270d84a35ed0430bffe92d3511aeac398ac51846eb1bfb41dc461
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logRelease files / maap_client-0.3.0-py3-none-any.whl
| Download URL | maap_client-0.3.0-py3-none-any.whl |
|---|---|
| Size | 105.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3fe2c2e923f8701e82749b6b9fcd78038435b5cc19d08eee3df14000e875e823
|
|
BLAKE2b-256 checksum How to use checksums |
f6d29b3f15aa9a78fbec428009e466ee82b6673ee46205edae7d9448a19698b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logSecurity for maap-client 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for maap_client-0.3.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.