Next free-source hunt
We check for new free data every weekday.
Datasets / Transport & Shipping
msi.nga.mil/

NGA World Port Index

Freeauth: noneProvider terms#transport-shipping#geospatial#infrastructure#historical-data✓ verified Nov 1, 2026

NGA World Port Index

NGA's World Port Index describes worldwide ports, shipping facilities and oil terminals with locations, physical characteristics, facilities and services. Its public query service needs no key, and NGA documents downloads in CSV, GeoPackage, JSON, shapefile and file-geodatabase formats.

Required Attribution:

Requested: "Use of appropriate byline/photo/image credits is requested."

Coverage

The checked index contained 3,541 port names, 220 country names and 353 region names worldwide. NGA states that the complete content is updated monthly.

Verdict

This is a port-infrastructure reference signal for matching shipping activity to named facilities and their capabilities. It can support route, capacity and disruption analysis when joined to movements or events. The name-index endpoint is keyless, but detailed-query availability was intermittent during verification. Treat facility attributes as reference data with a monthly refresh, not a live operating-status feed.

Get the free weekly email

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

Use in your agent

Load NGA port indexes into pandas and Parquet. Checked against the provider's documentation on Nov 1, 2026.

Raw skill file (/skills/nga-world-port-index.md)Also in our MCP server: call get_ingestion_skill with {"slug": "nga-world-port-index"}.

Access

  • No account or key is required for the checked public name-index endpoint.

Request

bash
curl 'https://msi.nga.mil/api/publications/world-port-index/wpi-prc-names'

Format

JSON arrays of port, country and region names.

Load into pandas and Parquet

Needs Python 3 with requests, pandas and pyarrow.

python
"""NGA WPI public port, country, and region indexes -> pandas -> Parquet."""
import requests
import pandas as pd

URL = "https://msi.nga.mil/api/publications/world-port-index/wpi-prc-names"
r = requests.get(URL, timeout=60)
r.raise_for_status()
data = r.json()
frames = [pd.DataFrame({"kind": kind, "name": values})
          for kind, values in data.items()]
df = pd.concat(frames, ignore_index=True)
df.to_parquet("nga_wpi_indexes.parquet", index=False)
counts = df.groupby("kind").size().to_dict()
print(len(df), "index entries", counts)

Run by us on 2026-11-01 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 4114 index entries {'countries': 220, 'ports': 3541, 'regions': 353}

Limits

  • Rate limit: Not stated.
  • The checked endpoint returns name indexes rather than full port records.

Quirks

  • The JSON object separates countries, ports and regions into arrays; add a kind column before concatenating them.
  • Detailed-query requests returned service errors during verification, while the name-index endpoint succeeded.
  • Port names are not stable identifiers; retain provider record identifiers when using full-record downloads.

Terms and attribution

  • NGA says website information is public information that may be distributed or copied unless otherwise specified.
  • NGA requests appropriate credits.

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