Baltic & Nordic Vessel Tracker — Live AIS for AI Agents
Pricing
from $0.70 / 1,000 results
Baltic & Nordic Vessel Tracker — Live AIS for AI Agents
Track live ships in the Baltic & Nordic seas via AIS. Get real-time vessel positions, speed, course, type, size, IMO/MMSI, flag and destination — filter by area, MMSI or ship type. Real-time maritime grounding for AI agents, logistics & compliance.
Baltic & Nordic Vessel Tracker — Live AIS Ship Positions, Type, Flag & Destination
Track live ships across the Baltic and Nordic seas in real time. This vessel tracker turns raw maritime AIS data into a clean, structured feed: give it a sea area, a ship type, a destination, or a list of MMSI numbers and it returns every matching vessel's live position, speed, course, heading, ship type, size, flag, destination and ETA — no login, no coding, no API key. Use it to track ships and scrape AIS vessel data the way you need it.
Export to JSON, CSV, Excel, or API.
Built for AI agents that need real-time maritime grounding, logistics and port-operations teams, compliance and sanctions analysts watching tanker traffic, and researchers studying one of the world's busiest shipping corridors.
🔎 Why scrape Baltic & Nordic AIS vessel data?
AIS (Automatic Identification System) is the transponder signal every commercial ship broadcasts — its identity, position, speed, course and voyage plan. Those positions change by the minute, so a static snapshot is useless almost immediately. A large language model can't know where a ship is right now; a logistics dashboard needs the current picture of inbound traffic; a compliance desk needs to see which tankers are moving through a sensitive corridor today.
Collecting this manually is painful. Public ship-tracking websites throttle you, hide data behind maps and paywalls, and don't give you a clean machine-readable export. Raw AIS feeds, meanwhile, are split across two datasets — live positions in one, vessel identity and dimensions in another — and encode ship types, navigation status and ETA as cryptic integers you have to decode yourself. This AIS vessel tracker does all of that for you and hands back one flat, ready-to-use record per ship.
The Baltic Sea and Gulf of Finland are among the most heavily trafficked and most geopolitically watched waters on the planet — the gateway to St. Petersburg, Ust-Luga, Primorsk and the Gulf of Bothnia ports, and a focus area for "shadow fleet" and sanctions monitoring. This vessel tracker gives you a programmable window straight into them.
Common reasons people scrape Baltic & Nordic AIS data:
- Ground an AI agent in live maritime reality — "which tankers are heading to St. Petersburg right now?"
- Monitor inbound port traffic by filtering on destination and arrival time (ETA).
- Track a fleet of specific vessels by MMSI and watch their positions and status.
- Watch tanker and "shadow fleet" movements by area, flag state and destination for compliance and risk.
- Feed a live map or dashboard with vessel positions, headings and types.
- Study traffic patterns — port calls, flag distribution, ship-type mix — for research and journalism.
- Plan berthing and pilotage using live draught and vessel dimensions.
✨ What this Baltic & Nordic vessel tracker does
This AIS scraper joins two live data sources — real-time positions and vessel metadata — into a single clean record per ship, then filters exactly the way you ask.
- ✅ Live positions for the whole region — pulls the current AIS position report for every ship in the Baltic & Nordic coverage area on each run.
- ✅ Pick a sea area —
all, Gulf of Finland, Gulf of Bothnia, Baltic Proper, Danish Straits, Kattegat & Skagerrak, or a custom bounding box for pinpoint areas. - ✅ Filter by ship type — Cargo, Tanker, Passenger, Fishing, Tug/Towing, Sailing, Pleasure craft, High-speed craft, Other (decoded from the raw AIS ship-type code).
- ✅ Track specific vessels — pass one or many MMSI numbers to follow just those ships.
- ✅ Filter by destination or name — case-insensitive substring match (e.g.
HELSINKI,PETERSBURG,ROTTERDAM). - ✅ Moving-only mode — drop anchored, moored and stopped vessels and keep only ships under way.
- ✅ Rich captured fields — identity (
mmsi,imo,name,callSign,flag), classification (shipType,shipTypeText,navStatus,navStatusText), live movement (latitude,longitude,speedKnots,courseOverGround,heading), voyage (destination,eta), and dimensions (draughtMeters,lengthMeters,widthMeters), pluspositionTimeandscrapedAt. - ✅ Flag state derived from MMSI — country of registry resolved from the MMSI maritime identification digits, including major flags of convenience.
- ✅ Human-readable ETA — the AIS 20-bit ETA field is decoded into an ISO-8601 UTC timestamp when a ship broadcasts one.
- ✅ Export anywhere — JSON, CSV, Excel, or straight from the Apify API; keyless and agent-friendly.
- ✅ Fast & reliable — the whole area is fetched and filtered in one pass, with built-in retries; runs finish in seconds.
Everything above reflects what the Actor actually does — no fabricated fields or modes.
🎯 Use cases
- AI agents & assistants — expose this vessel tracker as a live tool an agent calls to answer maritime questions with structured, current data.
- Logistics & supply chain — see what cargo and tanker traffic is moving, where, toward which port, and when it's expected (ETA).
- Port operations & agents — monitor inbound vessels to a specific port, plan berthing with draught and dimensions.
- Compliance, sanctions & "shadow fleet" monitoring — filter tankers by area, flag and destination to surface traffic worth a closer look in sensitive Baltic corridors.
- Maritime dashboards & mapping — feed a live vessel layer (lat/lon + heading) into your own map, refreshed on demand.
- Risk & insurance — watch flag states and movement patterns of vessels of interest.
- Research & journalism — study traffic, port calls and flag distribution in a closely watched maritime region.
- Trade & commodities intelligence — track tanker flows into and out of Baltic export terminals.
📥 Input
Configure the run from the Apify Console form or via JSON. Every field is optional — run it empty to get a fast, diverse sample of the live fleet, or add filters to target exactly what you need.
| Field | Type | Default | Description |
|---|---|---|---|
region | string (enum) | all | Sea area: all, gulf-of-finland, gulf-of-bothnia, baltic-proper, danish-straits, kattegat-skagerrak, or custom. |
bbox | string | — | Custom bounding box minLon,minLat,maxLon,maxLat (used only when region = custom), e.g. 22,59,28,61. |
shipType | string (enum) | all | all, cargo, tanker, passenger, fishing, tug, sailing, pleasure, high-speed, other. |
mmsi | array of strings | [] | Track only these vessels by MMSI number, e.g. ["230123456"]. |
nameQuery | string | — | Keep only vessels whose name contains this text (case-insensitive). |
destination | string | — | Keep only vessels whose reported destination contains this text, e.g. HELSINKI. |
movingOnly | boolean | false | Keep only vessels currently under way (drops anchored/moored/stopped). |
maxItems | integer | 0 | Maximum vessels to return. 0 = no limit (everything that matches your filters). |
proxyConfiguration | object | off | Apify Proxy settings. The source is public, so a proxy is off by default and not needed. |
Example — track tankers heading to a port
{"region": "gulf-of-finland","shipType": "tanker","destination": "PETERSBURG","maxItems": 500}
Example — watch specific vessels
{"mmsi": ["230123456", "265847000"],"movingOnly": false}
Example — a custom area, moving cargo only
{"region": "custom","bbox": "18,59,21,60","shipType": "cargo","movingOnly": true}
📤 Output
Each result is one flat JSON object per vessel, joining live position with identity, dimensions and voyage details — no separate lookups required.
{"mmsi": "219598000","imo": "9692129","name": "NORD SUPERIOR","callSign": "OWPA2","shipType": "80","shipTypeText": "Tanker","flag": "Denmark","latitude": "55.770832","longitude": "20.85169","speedKnots": "12.4","courseOverGround": "246.5","heading": "247","navStatus": "0","navStatusText": "Under way using engine","destination": "NL AMS","eta": "2026-10-27T18:00:00Z","draughtMeters": "11.8","lengthMeters": "183","widthMeters": "32","positionTime": "2026-10-25T13:02:00Z","scrapedAt": "2026-10-25T13:02:43.965Z"}
| Field | Description |
|---|---|
mmsi | Maritime Mobile Service Identity (unique transponder ID). |
imo | IMO number — permanent hull identifier (present when the ship broadcasts it). |
name | Vessel name. |
callSign | Radio call sign. |
shipType | Raw AIS ship-type code. |
shipTypeText | Human-readable category: Cargo / Tanker / Passenger / Fishing / Tug / Sailing / Pleasure / High-speed / Other. |
flag | Flag state, derived from the MMSI country code. |
latitude, longitude | Live position (WGS-84 decimal degrees). |
speedKnots | Speed over ground, in knots. |
courseOverGround | Course over ground, in degrees. |
heading | True heading, in degrees (present when reported). |
navStatus | Raw AIS navigational-status code. |
navStatusText | Readable status: Under way using engine / At anchor / Moored / Engaged in fishing / … |
destination | Reported destination port (free text as entered by the crew). |
eta | Reported estimated time of arrival, decoded to an ISO-8601 UTC timestamp (present when the ship broadcasts a valid ETA). |
draughtMeters | Current draught, in meters (present when reported). |
lengthMeters, widthMeters | Vessel dimensions, in meters (present when reported). |
positionTime | When the AIS feed was last updated (dataUpdatedTime). |
scrapedAt | Extraction timestamp (UTC). |
Some fields are self-reported by the vessel and populate only when broadcast — imo, heading, destination, eta, draughtMeters and the dimension fields are present when available. Identity, position and status fields are present for virtually every vessel.
🔁 Pagination & scale
The underlying AIS source is a bulk, single-call feed: one request returns the current position report for every ship in the region, which the Actor joins with the full vessel-metadata set in a single pass. There is no page/offset/cursor to walk — the complete live fleet is fetched at once, de-duplicated by MMSI, filtered against your inputs, and written to the dataset. Control the volume with maxItems (set 0 for the full matching set, or a number to cap it). An empty, unfiltered run returns a fast, diverse sample of the live fleet; any explicit filter returns the full matching result. Because the whole area arrives in one response, runs complete in seconds rather than crawling thousands of pages.
⚙️ How to use
- Open the Actor on the Apify Console and click Try for free.
- Pick a
region(or setregiontocustomand enter abbox). - Optionally narrow by
shipType,destination,nameQuery,movingOnly, or a list ofmmsinumbers. - Click Start and watch the run finish in seconds.
- Download the results as JSON, CSV, or Excel, or pull them from the Apify API.
- Automate it: run on a schedule for a refreshing feed, or wire the dataset into Make, Zapier, n8n, Google Sheets or a webhook to pipe live vessel data straight into your systems.
Calling from the API
curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{ "region": "gulf-of-finland", "shipType": "tanker" }'
Then fetch the dataset:
$curl "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs/last/dataset/items?token=YOUR_APIFY_TOKEN&clean=true"
💡 Tips
- Target a port precisely: combine
regionwith adestinationsubstring (e.g. Gulf of Finland +PETERSBURG) to see just the inbound ships. - Zoom in with a custom box:
region: "custom"+ a tightbbox(minLon,minLat,maxLon,maxLat) isolates a strait, approach or anchorage. - Follow a fleet: put several numbers in
mmsito watch exactly those vessels regardless of area. - Cut the noise: set
movingOnly: trueto drop anchored and moored ships when you only care about traffic in motion. - Watch flags of convenience: the
flagfield (from the MMSI) makes it easy to filter or group tanker traffic by registry. - Plan around arrivals: sort or filter on
etato see which vessels are due at a port and when.
❓ FAQ
Is scraping AIS vessel data legal? This Actor surfaces publicly broadcast AIS data for the Baltic and Nordic region for informational, logistics and research use. AIS is transmitted openly by vessels. Use the data in line with applicable laws in your jurisdiction and don't rely on it for safety-of-navigation.
What area does the vessel tracker cover? The Baltic Sea and Nordic waters: Gulf of Finland, Gulf of Bothnia, Baltic Proper, the Danish Straits, and Kattegat/Skagerrak — plus any custom bounding box inside that region. This is coastal (terrestrial) AIS, which covers these busy, enclosed seas very well.
How many ships do I get and how fast?
Typically several hundred to over a thousand vessels are broadcasting across the region at any moment. The whole area is fetched in one pass, so a run usually completes in a few seconds; use maxItems to cap the output.
Do I need proxies or a login? No. The source is public and keyless, so no proxy or login is required for normal use. A proxy option is available but off by default.
Which export formats are supported? JSON, CSV, Excel, and the Apify API/dataset endpoints — plus integrations via Make, Zapier, n8n and webhooks.
Is there an API? Yes — run the Actor and read its dataset through the standard Apify API, or trigger it on a schedule. Because it's keyless and returns structured JSON, it also plugs cleanly into an AI agent or MCP tool.
How fresh is the data?
Positions are pulled live on each run; the positionTime field tells you exactly when the AIS feed was last updated, and scrapedAt records when the Actor ran.
Can I track one specific ship?
Yes — pass its MMSI (or several) in the mmsi field to follow only those vessels.
Can I filter by ship type or destination?
Yes — shipType (tanker, cargo, passenger, …) filters by decoded AIS category, and destination does a case-insensitive substring match on the reported destination.
What does the eta field mean, and why is it sometimes empty?
It's the vessel's self-reported estimated time of arrival, decoded from the AIS 20-bit ETA field into an ISO-8601 UTC timestamp. It's populated when the crew has broadcast a valid ETA (around four in five vessels); when no valid ETA is transmitted the field is an empty string.
Why do some fields come back empty?
Fields like imo, heading, destination, eta and draughtMeters are self-reported by each vessel and only appear when the ship actually broadcasts them. Position, MMSI and status are present for virtually all vessels.
🔗 Related scrapers
- Flight Tracker — Live Aircraft Data for AI Agents
- AML & Sanctions Screening for AI Agents (OFAC, EU, UN, UK)
- GLEIF LEI Lookup & Corporate Ownership for AI Agents
- SEC EDGAR Scraper — US Public Company Filings & Profiles
- Wikidata Entity Resolver for AI Agents
Notes & responsible use
This Actor surfaces publicly broadcast AIS data for the Baltic and Nordic region for informational, logistics and research purposes. AIS positions are self-reported by vessels and can be delayed, inaccurate, or absent; treat the data as indicative, not authoritative, and don't rely on it for safety-of-navigation or as sole evidence for any decision.
Source: official Baltic maritime AIS data (Fintraffic / digitraffic.fi), licensed CC BY 4.0.
Ready to track live ships? Click Try for free, pick a sea area, and get a clean, structured AIS vessel feed in seconds. Fair winds.