Next free-source hunt
We check for new free data every weekday.
Datasets / OSINT
tieto.traficom.fi/

Traficom maritime MMSI identities

Freeauth: noneCC-BY-4.0#osint#maritime#mmsi#finland#api✓ verified Nov 6, 2026

Traficom maritime MMSI identities

Traficom publishes maritime mobile service identities (MMSI, ship name, ship call sign) as a keyless OData v4 feed (Meriradionumerot) updated daily, with the same open-data licence as its other Traficom open datasets.

Coverage

Finnish maritime mobile service identities. An OData call with $count=true on 2026-11-06 returned @odata.count 14049. History depth beyond the current register is Not stated.

Verdict

This is Finland's official daily MMSI / call-sign register for agents joining radio identities to vessel names. Traficom's open-data page describes the feed as "Data on identities used in the maritime mobile service (MMSI, ship name, ship call sign). The data is updated daily," under the same CC BY 4.0 / source-attribution open-data terms. Attribute Traficom.

Get the free weekly email

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

Use in your agent

Query Traficom MMSI OData feed into pandas and Parquet. Checked against the provider's documentation on Nov 6, 2026.

Raw skill file (/skills/traficom-maritime-mmsi.md)Also in our MCP server: call get_ingestion_skill with {"slug": "traficom-maritime-mmsi"}.

Access

  • No key. OData v4 GET on opendata.traficom.fi.

Request

bash
curl -sS 'https://opendata.traficom.fi/api/v1/Meriradionumerot?$top=5&$count=true'

Format

OData JSON with value[] rows of MMSINumber, ShipName, ShipCallSign and @odata.count.

Load into pandas and Parquet

Needs Python 3 with requests, pandas and pyarrow.

python
"""Traficom MMSI OData -> pandas -> Parquet. No key. CC BY 4.0 — attribute Traficom."""
import requests
import pandas as pd

URL = "https://opendata.traficom.fi/api/v1/Meriradionumerot"
rows = []
url = URL
params = {"$top": 500, "$count": "true"}
while url:
    r = requests.get(url, params=params if url == URL else None, timeout=30)
    r.raise_for_status()
    body = r.json()
    rows += body["value"]
    url = body.get("@odata.nextLink")
    params = None
    if len(rows) >= 2000:  # keep the sample bounded for the skill demo
        break
df = pd.DataFrame(rows)
df.to_parquet("traficom_mmsi_sample.parquet", index=False)
print(len(df), "rows", "count_header", body.get("@odata.count"))

Run by us on 2026-11-06 (python 3 | pandas | requests). Result: OData returned HTTP 200 on 2026-11-06 with @odata.count 14049.

Limits

  • Not stated numeric rate limit on the checked Traficom open-data / OData pages.

Quirks

  • Entity set name is Meriradionumerot (Finnish).
  • Updated daily per the Traficom open-data page.
  • CC BY 4.0 — attribute Traficom.

Terms and attribution

  • Traficom open data may be "freely used by anyone for any purpose, as long as the original source of the data is mentioned."
  • Maritime mobile service identities: "The data is updated daily."

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