When to use this skill
When the user asks what NASA satellite datasets exist for a topic — "What NASA data covers sea surface temperature?", "Find MODIS collections about aerosols", "What datasets are available for land surface temperature?" — search CMR collections by keyword. CMR (Common Metadata Repository) indexes every collection across all of NASA's DAACs, including ESA Sentinel missions alongside NASA's own Terra and Aqua products. For real-time satellite imagery or weather forecasts, look elsewhere; CMR is for discovering what datasets exist. For downloading individual data files within a known collection, use the granule search instead.
Your best first call
curl "https://cmr.earthdata.nasa.gov/search/collections.json?keyword=aerosol&page_size=5"
No auth for searching. No key. (Downloading data files requires a free Earthdata login.)
Results come in feed.entry[], not a plain array. Key fields:
dataset_id — full human-readable name (e.g. "MODIS/Aqua Land Surface Temperature/Emissivity Daily L3 Global 1km SIN Grid V061")
short_name — compact product identifier ("MYD11A1"); "MYD" prefix means Aqua satellite, "MOD" means Terra
entry_id — short_name plus version ("MYD11A1_061" = version 6.1)
id — concept ID with entity-type prefix: C = collection, G = granule, V = variable; suffix after the dash is the DAAC code (e.g. LPCLOUD, LAADS)
cloud_hosted — true means data lives on AWS S3 for direct cloud access
processing_level_id — "1B" = calibrated radiances from the sensor; "3" = gridded, time-averaged geophysical product
time_start, version_id — earliest data date and collection version
Fallbacks (when the best call isn't enough)
- Need full metadata for one collection →
/concepts/{concept_id}.json returns the complete record — organizations, platforms, orbit parameters, service capabilities. Use when the keyword search entry doesn't have enough detail.
- Need downloadable data files →
/granules.json?short_name={short_name}&page_size=5 finds individual granules with download links and cloud_cover percentage.
- No external fallbacks — CMR is the single catalog for NASA EOSDIS. If it's down, this capability is unavailable.
Pitfalls
- The
.json suffix is inconsistent across CMR endpoints: /collections.json and /granules.json require .json for JSON output, but /providers and /tags return JSON by default and 404 if you append .json. Set Accept: application/json as a universal alternative.
- Three endpoint types, three response shapes: search results wrap in
feed.entry[], concept lookups return the object directly, provider/tag listings use items[] with a separate hits count.
/granules.json without a collection filter (short_name or collection_concept_id) returns a 400 error — "The CMR does not allow querying across granules in all collections." Always narrow granule searches by collection first.
processing_level_id determines what the data actually measures: Level 1B (e.g. S3B_SL_1_RBT) is calibrated instrument radiances, not a derived geophysical variable. Level 3 (e.g. MYD11A1) is gridded and averaged. Confusing the two means you answer "sea surface temperature" with raw radiances.
One-line summary for the user
I can search NASA's Earth observation data catalog for collections matching a keyword — satellite imagery, climate reanalysis, land surface temperature, aerosols — and tell you whether the data is cloud-hosted on AWS, but downloading the actual files requires a free Earthdata login.
SKILL.md source (frontmatter + body)
---
name: search-C1625667016-LAADS.json
description: When the user asks about NASA satellite datasets, Earth observation data, MODIS products, Sentinel data, or wants to find what NASA data collections exist for a topic — search NASA Earthdata CMR by keyword across all DAACs.
---
## When to use this skill
When the user asks what NASA satellite datasets exist for a topic — "What NASA data covers sea surface temperature?", "Find MODIS collections about aerosols", "What datasets are available for land surface temperature?" — search CMR collections by keyword. CMR (Common Metadata Repository) indexes every collection across all of NASA's DAACs, including ESA Sentinel missions alongside NASA's own Terra and Aqua products. For real-time satellite imagery or weather forecasts, look elsewhere; CMR is for discovering what datasets exist. For downloading individual data files within a known collection, use the granule search instead.
## Your best first call
```bash
curl "https://cmr.earthdata.nasa.gov/search/collections.json?keyword=aerosol&page_size=5"
```
No auth for searching. No key. (Downloading data files requires a free Earthdata login.)
Results come in `feed.entry[]`, not a plain array. Key fields:
- `dataset_id` — full human-readable name (e.g. "MODIS/Aqua Land Surface Temperature/Emissivity Daily L3 Global 1km SIN Grid V061")
- `short_name` — compact product identifier ("MYD11A1"); "MYD" prefix means Aqua satellite, "MOD" means Terra
- `entry_id` — `short_name` plus version ("MYD11A1_061" = version 6.1)
- `id` — concept ID with entity-type prefix: `C` = collection, `G` = granule, `V` = variable; suffix after the dash is the DAAC code (e.g. `LPCLOUD`, `LAADS`)
- `cloud_hosted` — `true` means data lives on AWS S3 for direct cloud access
- `processing_level_id` — "1B" = calibrated radiances from the sensor; "3" = gridded, time-averaged geophysical product
- `time_start`, `version_id` — earliest data date and collection version
## Fallbacks (when the best call isn't enough)
- **Need full metadata for one collection** → `/concepts/{concept_id}.json` returns the complete record — organizations, platforms, orbit parameters, service capabilities. Use when the keyword search entry doesn't have enough detail.
- **Need downloadable data files** → `/granules.json?short_name={short_name}&page_size=5` finds individual granules with download links and `cloud_cover` percentage.
- **No external fallbacks** — CMR is the single catalog for NASA EOSDIS. If it's down, this capability is unavailable.
## Pitfalls
- The `.json` suffix is inconsistent across CMR endpoints: `/collections.json` and `/granules.json` require `.json` for JSON output, but `/providers` and `/tags` return JSON by default and 404 if you append `.json`. Set `Accept: application/json` as a universal alternative.
- Three endpoint types, three response shapes: search results wrap in `feed.entry[]`, concept lookups return the object directly, provider/tag listings use `items[]` with a separate `hits` count.
- `/granules.json` without a collection filter (`short_name` or `collection_concept_id`) returns a 400 error — "The CMR does not allow querying across granules in all collections." Always narrow granule searches by collection first.
- `processing_level_id` determines what the data actually measures: Level 1B (e.g. S3B_SL_1_RBT) is calibrated instrument radiances, not a derived geophysical variable. Level 3 (e.g. MYD11A1) is gridded and averaged. Confusing the two means you answer "sea surface temperature" with raw radiances.
## One-line summary for the user
I can search NASA's Earth observation data catalog for collections matching a keyword — satellite imagery, climate reanalysis, land surface temperature, aerosols — and tell you whether the data is cloud-hosted on AWS, but downloading the actual files requires a free Earthdata login.