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

Agents: This page is a SKILL.md-style capability guide. For JSON, call GET /api/skills/search-earth-observation-collections. To drop this into a local Claude Code install, copy the frontmatter + body below into ~/.claude/skills/search-earth-observation-collections/SKILL.md.

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:

Fallbacks (when the best call isn't enough)

Pitfalls

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.

APIs this skill uses

NASA Earthdata API · primary · verified

NASA Earthdata API provides access to Earth observation data through the Common Metadata Repository (CMR). This API includes CMR Search for discovering datasets (collections) and data files (granules), as well as STAC (SpatioTemporal Asset …

Generated from

NASA Earthdata API tutorial Getting Started with NASA Earthdata

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.

« Back to all skills