Next free-source hunt
We check for new free data every weekday.
Datasets / OSINT
m2m.cr.usgs.gov/

USGS Landsat M2M API

Freeauth: free account + approved M2M access + application tokenCustom#osint#geospatial#historical-data#time-series#alt-data✓ verified Nov 1, 2026

USGS Landsat M2M API

USGS EarthExplorer and its RESTful JSON M2M API expose Landsat scene search, metadata and download URLs for raster products including GeoTIFF bands and bundles. An EROS account, approved M2M access and an application token are needed for the API; Landsat downloads are free.

Required Attribution:

Requested: "When using information from USGS information products, publications, or websites, we ask that proper credit be given." Suggested: "Credit: U.S. Geological Survey".

Coverage

EarthExplorer offers worldwide Landsat 1-9 Level-1 scenes, worldwide Landsat 4-9 Level-2 products and U.S.-only analysis-ready and Level-3 products, with the archive extending to 1972. The M2M API covers more than 300 USGS EROS datasets, while scene size, revisit timing and cloud cover vary by sensor and product.

Verdict

A long-run geospatial signal for observing land cover, construction, agriculture, water, fire scars and other physical changes around assets and regions. Optical scenes are not event confirmations and can be obscured by clouds, haze, shadows or acquisition gaps; use quality bands and acquisition timestamps. M2M access requires account approval, and image downloads are much larger than metadata responses. USGS-authored data is public domain, but marked third-party material is excluded and USGS asks for credit.

Get the free weekly email

Free weekly email of newly verified free data. Unsubscribe by emailing us.

Use in your agent

Search USGS Landsat scenes into pandas and Parquet. Checked against the provider's documentation on Nov 1, 2026.

Raw skill file (/skills/usgs-landsat-m2m.md)Also in our MCP server: call get_ingestion_skill with {"slug": "usgs-landsat-m2m"}.

Access

  • Create a free EROS account, request M2M access in the account's Access Controls, and create an application token.
  • Set USGS_EROS_USERNAME and USGS_M2M_APP_TOKEN; never embed the application token or returned API key.

Request

bash
curl -X POST 'https://m2m.cr.usgs.gov/api/api/json/stable/login-token' -H 'Content-Type: application/json' -d '{"username":"'$USGS_EROS_USERNAME'","token":"'$USGS_M2M_APP_TOKEN'"}'

Format

REST JSON responses; scene-search records include entity and display IDs, acquisition and publish dates, spatial bounds, cloud-cover values, browse links and dataset-specific metadata.

Load into pandas and Parquet

Needs Python 3 with requests, pandas and pyarrow.

python
"""Search Landsat 8-9 Level-2 scenes over a small bounding box -> pandas -> Parquet."""
import os
import requests
import pandas as pd

BASE = "https://m2m.cr.usgs.gov/api/api/json/stable"
username = os.environ["USGS_EROS_USERNAME"]
app_token = os.environ["USGS_M2M_APP_TOKEN"]
login = requests.post(f"{BASE}/login-token", json={"username": username, "token": app_token}, timeout=60)
login.raise_for_status()
api_key = login.json()["data"]
headers = {"X-Auth-Token": api_key}
payload = {"datasetName": "landsat_ot_c2_l2", "maxResults": 100, "sceneFilter": {"spatialFilter": {"filterType": "mbr", "lowerLeft": {"latitude": 43.60, "longitude": -79.65}, "upperRight": {"latitude": 43.90, "longitude": -79.10}}, "acquisitionFilter": {"start": "2026-10-01", "end": "2026-10-31"}}}
r = requests.post(f"{BASE}/scene-search", json=payload, headers=headers, timeout=60)
r.raise_for_status()
df = pd.json_normalize(r.json()["data"]["results"], sep="_")
df.to_parquet("usgs_landsat_scenes.parquet", index=False)
print(len(df), "scenes")
requests.post(f"{BASE}/logout", headers=headers, timeout=60).raise_for_status()

Not run: it needs a free API key.

Limits

  • Rate limit: Not stated.
  • M2M API access requires an approved account request in addition to an EROS account.
  • Raster downloads can be large; search metadata first and request only required bands or bundles.

Quirks

  • The application token authenticates at login-token and returns a temporary API key used in the X-Auth-Token header.
  • Dataset names and available metadata filters vary across Landsat collections.
  • Cloud cover is scene metadata; inspect pixel-level quality bands before deriving a local signal.

Terms and attribution

  • USGS-authored data and information are public-domain material; marked third-party content is excluded.
  • USGS asks users to give proper credit.

Sources

Information and education only. Not financial, investment, legal or tax advice. Listings can be inaccurate, incomplete or out of date and are provided "as is". Free tiers, limits and licenses belong to each provider and can change, so check the provider's own terms before you rely on them. Terms & Disclaimer