Getting started
ArcoDataHub serves analysis-ready, cloud-optimized datasets (Zarr, COG, GeoParquet) that update live, some every five minutes. You stream the slice you need over HTTPS, you never download an archive unless you want one.
Register, then confirm the link we email you.
Pick one in the catalogue and press Subscribe. Access is granted immediately.
Your username and access key are on My Requests. Keep the key out of code and notebooks.
Everything below assumes xarray with the Zarr engine. Credentials come from environment variables so the same code runs on your laptop, in a notebook and in a job.
pip install xarray "zarr>=3" dask aiohttp
export ARCODATAHUB_USERNAME=your_username
export ARCODATAHUB_ACCESS_KEY=your_access_key
import os, aiohttp, xarray as xr
auth = (os.environ["ARCODATAHUB_USERNAME"], os.environ["ARCODATAHUB_ACCESS_KEY"])
ds = xr.open_zarr(
"https://api.arcodatahub.com/S3/italian-radar-dpc-vmi.zarr",
storage_options={"client_kwargs": {"auth": aiohttp.BasicAuth(*auth)}},
)
# the newest time step that contains data
frame = ds["vmi"].sel(time=ds.attrs["last_valid"])
frame.plot()
Look timestamps up, never compute them. Live datasets pre-allocate
their time axis years ahead, so most of it is empty, and the spacing changed over
the life of some archives (the Italian radar products moved from a 10-minute to a
5-minute cadence in July 2018). Select with .sel(time=…) or
ds.indexes["time"].get_loc(…); the last_valid attribute
is the end of the real data. Every dataset page has a ready-made notebook that does
this for you.
Same URL, same credentials. Choose the tool you already use.
GDAL 3.11 or newer reads the stores directly, sharded ones included. One time step becomes a GeoTIFF in about a second, and QGIS opens the same URL through its Zarr driver. GDAL addresses the time axis by position, so first ask the time-index API which position a timestamp has; it takes the same credentials.
export GDAL_HTTP_USERPWD="$ARCODATAHUB_USERNAME:$ARCODATAHUB_ACCESS_KEY"
STORE='ZARR:"/vsicurl/https://api.arcodatahub.com/S3/italian-radar-dpc-vmi.zarr"' # keep both kinds of quotes
# position of 2026-09-10 15:00 UTC on the time axis
IDX=$(curl -s -u "$GDAL_HTTP_USERPWD" \
"https://arcodatahub.com/datasets/api/time-index/italian-radar-dpc-vmi.zarr/?t=2026-09-10T15:00" | jq .index)
gdalmdiminfo "$STORE" # structure, attributes, last_valid
gdalmdimtranslate "$STORE" vmi_20260910T1500.tif -array "name=vmi,view=[$IDX,:,:]"
The API answers with the exact position, or 404 with the nearest positions on
either side when the timestamp is not on the axis; add method=nearest
to snap. Several t= parameters can be passed at once.
The gateway serves objects, not listings, so S3 sync tools cannot walk a store
on their own. Every store publishes a keys.txt manifest instead,
refreshed nightly, that lists every object it contains. Fetch it, then hand it
to the tool you prefer.
B=https://api.arcodatahub.com/S3/italian-radar-dpc-vmi.zarr
curl -u "$ARCODATAHUB_USERNAME:$ARCODATAHUB_ACCESS_KEY" -O "$B/keys.txt"
# whole archive with rclone (parallel, resumable)
rclone copy --files-from keys.txt --no-traverse --transfers 4 \
--header "Authorization: Basic $(printf '%s:%s' "$ARCODATAHUB_USERNAME" "$ARCODATAHUB_ACCESS_KEY" | base64)" \
":http,url=\"$B/\":" ./italian-radar-dpc-vmi.zarr
# or with wget
sed "s|^|$B/|" keys.txt | wget -x -nH --cut-dirs=2 --user "$ARCODATAHUB_USERNAME" --password "$ARCODATAHUB_ACCESS_KEY" -i -
For a period, filter the manifest first. On the sharded stores one shard is one day, numbered from the start of the series, so a range of shard numbers is a range of days. Keep the metadata lines so the copy still opens.
grep -vE '^vmi/c/' keys.txt > period.txt # metadata and coordinates
grep -E '^vmi/c/(30[0-9][0-9])/' keys.txt >> period.txt # shards 3000 to 3099
In Python, ds.sel(time=slice("2026-08-01", "2026-08-31")).to_zarr("vmi-aug.zarr", zarr_format=2)
does the same by date; a Zarr v2 target keeps the original compression.
Every dataset is a STAC collection with its extent, grid and variables. Browse
at catalog.arcodatahub.com or
query the API; note that /collections is paginated, follow the
next link.
from pystac_client import Client
cat = Client.open("https://stac.arcodatahub.com")
for c in cat.get_collections():
print(c.id, c.extent.temporal.intervals[0][1])
keys.txt, see “Download an archive”.comment attribute before masking; fill values differ between products.Questions, a dataset you'd like to see, or a large project to plan: write to us at the registration address.