# Accessing ERDDAP data with Python tools
March 23rd, 2026
---
## whoami

Filipe Fernandes
I'm old school and prefer to use my own brain and skills to generate bad results instead of slop machines.
---
Outline:
- Quick intro to accessing data via web-interface
- Building ERDDAP URLs with erddapy
- Loading datasets with more specialized tools: `gliderpy`, `argopy`, and `xarray`.
---
## Live demo
Let's find the gliders deployed in the west coast in the past week!
- West Coast bounding box and time constraint:
- `min_lon`, `max_lon` = -143, -117
- `min_lat`, `max_lat` = 32, 50
- `min_time` = "2026-03-09"
[https://gliders.ioos.us/erddap/index.html](https://gliders.ioos.us/erddap/tabledap/allDatasets.html)
---
## The same(ish) with code: erddapy
```python
from erddapy import ERDDAP
e = ERDDAP(
server="https://gliders.ioos.us/erddap",
protocol="tabledap",
)
```
---
## Searching
```python
min_lon, max_lon = -143, -117
min_lat, max_lat = 32, 50
min_time = "2026-03-09"
kw = {
"min_lon": min_lon,
"max_lon": max_lon,
"min_lat": min_lat,
"max_lat": max_lat,
"min_time": min_time,
}
url = e.get_search_url(response="csv", **kw)
```
---
## Downloading the data
```python
e.variables = ["latitude", "longitude", "time"]
def fetch_data(e, dataset_id):
e.dataset_id = dataset_id
return e.to_pandas(
index_col="time (UTC)",
parse_dates=True)
gliders = {}
for dataset_id in df["Dataset ID"]:
gliders.update({dataset_id: fetch_data(e, dataset_id)})
```
[Demo](http://127.0.0.1:8888/notebooks/erddapy_talk.ipynb#erddapy)
---
## Specialized clients: gliderpy
```python
from gliderpy import GliderDataFetcher
glider_grab = GliderDataFetcher()
df = glider_grab.query(
min_lat=min_lat, max_lat=max_lat,
min_lon=min_lon, max_lon=max_lon,
min_time=min_time, max_time=max_time,
)
datasets = glider_grab.to_pandas()
```
[Demo](http://127.0.0.1:8888/notebooks/erddapy_talk.ipynb#gliderpy)
---
## Argopy, same but for argo data
```python
from argopy import DataFetcher as ArgoDataFetcher
ds = ArgoDataFetcher().region(
[
min_lon, max_lon, min_lat, max_lat,
0, 200, min_time, max_time
]
).to_xarray()
```
[Demo](http://127.0.0.1:8888/notebooks/erddapy_talk.ipynb#argopy)
---
## Extras
- [searvey](https://github.com/oceanmodeling/searvey)
- [intake-erddap](https://github.com/axiom-data-science/intake-erddap)
- [More on GitHub](https://github.com/ioos/erddapy/network/dependents?dependent_type=PACKAGE)
---
## What is an ERDDAP URL?
```python
server = "https://gliders.ioos.us/erddap"
protocol = "tabledap"
dataset_id = "amelia-20180501T0000"
response = ".ncCFMA" # .nc, .ncCF
filters = "&trajectory&time>=2018-05-07T00:00:00Z"
```
```
url = server / protocol / dataset_id → OPeNDAP
url + response → File HTTP request
url + response + filter → Same but with some constraints
```
---
## I have the URL, just give me the data
```python
import xarray as xr
xr.backends.list_engines()
```
```python
dict_keys(
[
'netcdf4',
'h5netcdf',
'scipy',
'argo',
'erddapy', # <- Read all ERDDAP netcdf-like URLs
]
)
```
---
[Demo](http://127.0.0.1:8888/notebooks/erddapy_talk.ipynb#Using-ERDDAP-URLs-with-xarray)
---
## Questions?

{"title":"Accessing ERDDAP data with Python tools","description":"Filipe FernandesMarço 9, 2026","contributors":"[{\"id\":\"88a8ebf5-fd29-4e3e-8264-ed4364e8c9cb\",\"add\":5267,\"del\":1861,\"latestUpdatedAt\":1774278325873}]"}