---
name: copernicus-global-ndvi-300m-v3-ingestion
description: "How to get Copernicus Global NDVI 300 m v3 data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load keyless Copernicus NDVI catalogue metadata into Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/copernicus-global-ndvi-300m-v3
Provider: https://land.copernicus.eu/en/products/vegetation/normalised-difference-vegetation-index-v3-0-300m
Checked against the provider's documentation: 2026-11-01

## Access
- OData catalogue searches are keyless.
- Downloading the raster products requires a free CDSE account and authorization token.

## Request
```bash
curl --get 'https://catalogue.dataspace.copernicus.eu/odata/v1/Products' --data-urlencode "\$filter=Collection/Name eq 'CLMS' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'datasetIdentifier' and att/OData.CSC.StringAttribute/Value eq 'ndvi_global_300m_10daily_v3')" --data-urlencode '$top=10'
```

## Format
OData JSON product records with UUID, name, content start and end, publication and modification times, attributes and storage path; raster payloads are GeoTIFF products.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""Copernicus NDVI v3 product catalogue metadata -> pandas -> Parquet."""
import requests
import pandas as pd

URL = "https://catalogue.dataspace.copernicus.eu/odata/v1/Products"
params = {
    "$filter": "Collection/Name eq 'CLMS' and Attributes/OData.CSC.StringAttribute/any(att:att/Name eq 'datasetIdentifier' and att/OData.CSC.StringAttribute/Value eq 'ndvi_global_300m_10daily_v3')",
    "$select": "Id,Name,ContentDate,S3Path,PublicationDate,ModificationDate",
    "$orderby": "ContentDate/Start asc",
    "$top": 1000,
}
r = requests.get(URL, params=params, timeout=60)
r.raise_for_status()
df = pd.json_normalize(r.json()["value"])
df["ContentDate.Start"] = pd.to_datetime(df["ContentDate.Start"], utc=True)
df["ContentDate.End"] = pd.to_datetime(df["ContentDate.End"], utc=True)
df.to_parquet("copernicus_ndvi_v3_catalogue.parquet", index=False)
print(len(df), "products", df["ContentDate.Start"].min().date(), "to",
      df["ContentDate.End"].max().date())
```
Run by us on 2026-11-01 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 924 products 2014-01-01 to 2026-10-31

## Limits
- General-user S3, OData and STAC limit: 2,000 requests per minute.
- General-user immediately available data limit: four concurrent connections and 12 TB transferred over a rolling 30 days.
- The example ingests catalogue metadata only; raster payload downloads need a free account token.

## Quirks
- Filter on the datasetIdentifier attribute; collection name alone returns unrelated CLMS products.
- ContentDate.Start and ContentDate.End describe the ten-day synthesis interval, not the catalogue publication time.
- The keyless catalogue can be monitored without storing the much larger raster payloads.

## Terms and attribution
- CLMS access is full, open and free under its stated conditions.
- Identify CLMS as the source, label modifications and do not imply European Union endorsement.
- Terms page: https://land.copernicus.eu/en/data-policy

## Sources
- https://land.copernicus.eu/en/products/vegetation/normalised-difference-vegetation-index-v3-0-300m: "Every 10-days estimates are available in near real time at global scale in the spatial resolution of about 300 m from January 2014 to the present."
- https://land.copernicus.eu/en/data-policy: "Free, full and open access to the products and services of the Copernicus Land Monitoring Service is made on the conditions that:"
- https://documentation.dataspace.copernicus.eu/APIs/OData.html: "For downloading products you need an authorization token as only authorized users are allowed to download data products."

## 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.
