---
name: copernicus-marine-service-ingestion
description: "How to get Copernicus Marine Service (CMEMS) data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load a Copernicus Marine Service subset into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/copernicus-marine-service
Provider: https://marine.copernicus.eu/
Checked against the provider's documentation: 2026-11-05

## Access
- Register a free account at data.marine.copernicus.eu/register.
- The Copernicus Marine Toolbox (copernicusmarine) and REST subsetting APIs need that account's credentials; the snippet reads COPERNICUSMARINE_SERVICE_USERNAME / COPERNICUSMARINE_SERVICE_PASSWORD from the environment.

## Request
```bash
copernicusmarine subset --dataset-id cmems_mod_glo_phy_anfc_0.083deg_P1D-m --variable thetao --start-datetime 2026-11-01 --end-datetime 2026-11-01 --minimum-longitude -10 --maximum-longitude 0 --minimum-latitude 40 --maximum-latitude 50
```

## Format
NetCDF subset returned by the Copernicus Marine Toolbox; open it with xarray and convert the variables you need to a pandas DataFrame.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""Copernicus Marine Service catalogue sample -> pandas -> Parquet. Needs a free account for full subsets.

This snippet first probes the public products catalogue over HTTPS (no key), then shows the
authenticated open_dataset path. Register at data.marine.copernicus.eu and set
COPERNICUSMARINE_SERVICE_USERNAME / COPERNICUSMARINE_SERVICE_PASSWORD before the open_dataset call.
"""
import os
import requests
import pandas as pd

# Public catalogue probe (no credentials).
meta = requests.get("https://data.marine.copernicus.eu/products", timeout=60)
meta.raise_for_status()

# Authenticated subset via the official client (credentials from env).
import copernicusmarine

ds = copernicusmarine.open_dataset(
    dataset_id="cmems_mod_glo_phy_anfc_0.083deg_P1D-m",
    variables=["thetao"],
    minimum_longitude=-5.0,
    maximum_longitude=5.0,
    minimum_latitude=48.0,
    maximum_latitude=55.0,
    start_datetime="2026-10-01",
    end_datetime="2026-10-03",
)
df = ds["thetao"].isel(time=0, depth=0).to_dataframe().reset_index()
df.to_parquet("cmems_thetao_sample.parquet", index=False)
print(len(df), "grid cells after catalogue probe HTTP", meta.status_code)

```
Run by us on 2026-11-05 (python 3.13 | not executed — credentials required). Result: Not executed without credentials (requires free Copernicus Marine account and copernicusmarine client).

## Limits
- Rate/performance limits: Not stated as a single figure; they vary by product and subset size.
- Free registration is required before any download or subset call succeeds.

## Quirks
- This is a distinct catalog entry from copernicus-data-space-apis (Copernicus's land/atmosphere Data Space); do not conflate the two Copernicus services.
- Update frequency varies by product; the overview page does not state one cadence for the whole service.

## Terms and attribution
- The Copernicus Marine Service Licence is free of charge for the user until the Copernicus programme period's planned end, 30 June 2028, and requires crediting the service and citing each product's DOI when redistributing.
- Terms page: https://marine.copernicus.eu/user-corner/service-commitments-and-licence

## Sources
- https://marine.copernicus.eu/user-corner/service-commitments-and-licence: "the Copernicus Marine Services and products are free of charge for the User until this date"
- https://marine.copernicus.eu/user-corner/service-commitments-and-licence: "Generated using E.U. Copernicus Marine Service Information; insert DOIs links here"

## Help improve this skill
Missing a source, or see something to improve? Call the MCP tool suggest_source or feedback (or POST /api/suggest or /api/feedback). Reviewed ideas: https://signal-lab-jet.vercel.app/agent-suggestions

Information for educational purposes only. Free tiers, limits and licenses belong to the providers and may change; check the provider's own terms before using the data.
