Search earth observation collections
When the user asks about NASA satellite datasets, Earth observation data, or wants to find datasets by keyword, region, platform, or instrument — reach for the CMR (Common Metadata Repository) search API. No auth required for search.
search-earth-observation-collections
· v1
· updated 2026-04-16
When to use this skill
When the user asks about NASA satellite or Earth observation datasets — what data exists for a topic like land surface temperature, sea ice thickness, or methane concentrations — or wants to filter NASA's data holdings by geographic region, satellite platform, or instrument. CMR returns dataset metadata (pointers), not the data files themselves. For locating individual data files within a known dataset, use search-nasa-earthdata-granules instead.
Your best first call
curl "https://cmr.earthdata.nasa.gov/search/collections.json?keyword=land+surface+temperature&bounding_box=-110,39.5,-105,40.5&page_size=10"
No auth. No key. Returns a JSON feed with matching collection entries. Add platform and instrument parameters to narrow further (e.g. platform=Terra&instrument=MODIS). CMR's strength is simultaneous keyword + spatial + platform filtering in one request.
The key fields an agent uses:
entry_id — short name plus version (e.g. MOD11A1_061), but pass only the short name portion (MOD11A1) as short_name in granule searches
dataset_id — full human-readable title like "MODIS/Terra Land Surface Temperature/Emissivity Daily L3 Global 1km SIN Grid V061"
cloud_hosted — true means the dataset lives on AWS S3, relevant for cloud-native workflows
data_center — the processing center (e.g. LPCLOUD, ASF), useful for filtering by provider
time_start — earliest data date for the collection
boxes — geographic coverage as ["SW_lon SW_lat NE_lon NE_lat"]; global datasets show "-90 -180 90 180", which means your bounding box filtered which collections match, not the extent of each collection's data
Fallbacks (when the best call isn't enough)
- Not sure what keyword or platform name CMR uses →
cmr.earthdata.nasa.gov/search/autocomplete?q=<term> maps a partial term to CMR's controlled vocabulary and tells you which filter parameter to use (instrument, project, data_center, or keyword).
- Need individual data files within a collection →
cmr.earthdata.nasa.gov/search/granules.json?short_name=<short_name>&bounding_box=... finds download links for specific HDF5/zip files — but you need a collection's short_name first, which is exactly what this skill provides.
Pitfalls
entry_id includes the version (MOD11A1_061) but short_name for granule queries strips it (MOD11A1). Passing the full entry_id as a short_name parameter returns empty results — strip the _NNN suffix.
bounding_box parameter order is SW_lon,SW_lat,NE_lon,NE_lat — longitude first, latitude second. Swapping lat/lon puts your search box in the wrong hemisphere.
- The same path without
.json (/collections) returns HTML or Atom XML depending on your Accept header. Always append .json for JSON output.
cloud_hosted: true means the dataset is on AWS S3; downloading still requires a free Earthdata login. Search needs no auth, but the data links do.
One-line summary for the user
I can search NASA's Earth observation dataset catalog by keyword, region, platform, or instrument using the CMR API — no auth needed for search, but downloading data requires a free Earthdata login.
SKILL.md source (frontmatter + body)
---
name: search-earth-observation-collections
description: When the user asks about NASA satellite datasets, Earth observation data, or wants to find datasets by keyword, region, platform, or instrument — reach for the CMR (Common Metadata Repository) search API. No auth required for search.
---
## When to use this skill
When the user asks about NASA satellite or Earth observation datasets — what data exists for a topic like land surface temperature, sea ice thickness, or methane concentrations — or wants to filter NASA's data holdings by geographic region, satellite platform, or instrument. CMR returns dataset metadata (pointers), not the data files themselves. For locating individual data files within a known dataset, use `search-nasa-earthdata-granules` instead.
## Your best first call
```bash
curl "https://cmr.earthdata.nasa.gov/search/collections.json?keyword=land+surface+temperature&bounding_box=-110,39.5,-105,40.5&page_size=10"
```
No auth. No key. Returns a JSON feed with matching collection entries. Add `platform` and `instrument` parameters to narrow further (e.g. `platform=Terra&instrument=MODIS`). CMR's strength is simultaneous keyword + spatial + platform filtering in one request.
The key fields an agent uses:
- `entry_id` — short name plus version (e.g. `MOD11A1_061`), but pass only the short name portion (`MOD11A1`) as `short_name` in granule searches
- `dataset_id` — full human-readable title like "MODIS/Terra Land Surface Temperature/Emissivity Daily L3 Global 1km SIN Grid V061"
- `cloud_hosted` — `true` means the dataset lives on AWS S3, relevant for cloud-native workflows
- `data_center` — the processing center (e.g. `LPCLOUD`, `ASF`), useful for filtering by provider
- `time_start` — earliest data date for the collection
- `boxes` — geographic coverage as `["SW_lon SW_lat NE_lon NE_lat"]`; global datasets show `"-90 -180 90 180"`, which means your bounding box filtered *which collections match*, not the extent of each collection's data
## Fallbacks (when the best call isn't enough)
- **Not sure what keyword or platform name CMR uses** → `cmr.earthdata.nasa.gov/search/autocomplete?q=<term>` maps a partial term to CMR's controlled vocabulary and tells you which filter parameter to use (`instrument`, `project`, `data_center`, or `keyword`).
- **Need individual data files within a collection** → `cmr.earthdata.nasa.gov/search/granules.json?short_name=<short_name>&bounding_box=...` finds download links for specific HDF5/zip files — but you need a collection's `short_name` first, which is exactly what this skill provides.
## Pitfalls
- `entry_id` includes the version (`MOD11A1_061`) but `short_name` for granule queries strips it (`MOD11A1`). Passing the full `entry_id` as a `short_name` parameter returns empty results — strip the `_NNN` suffix.
- `bounding_box` parameter order is `SW_lon,SW_lat,NE_lon,NE_lat` — longitude first, latitude second. Swapping lat/lon puts your search box in the wrong hemisphere.
- The same path without `.json` (`/collections`) returns HTML or Atom XML depending on your `Accept` header. Always append `.json` for JSON output.
- `cloud_hosted: true` means the dataset is on AWS S3; downloading still requires a free Earthdata login. Search needs no auth, but the data links do.
## One-line summary for the user
I can search NASA's Earth observation dataset catalog by keyword, region, platform, or instrument using the CMR API — no auth needed for search, but downloading data requires a free Earthdata login.