MarineCast Request access

Earth Observation · Fisheries Intelligence

Stop searching.
Start at the right coordinate.

MarineCast turns open satellite and reanalysis oceanography into a daily forecast of where target species are — and how much you can expect to catch there. Less search time means less fuel burned and fewer hours at sea.

20,358
Survey hauls
1991—2026
Record span
2
Basins live
Baltic Sea · Sprat ● FORECAST SURFACE
BOTHNIARIGAGOTLANDDANISH STRAITS
LOW HIGH

01 — The problem

Fuel is burned looking, not fishing.

Most of the cost of a trip is incurred while searching. The conventional method — returning to the same grounds in the same months, on accumulated experience — degrades as conditions shift between years. Stocks move. The grounds do not.

8.4×

More sprat per hour in the model's top-ranked cells than its bottom half

0.988

Best presence ROC-AUC across six modelled species

€0

Data licensing cost — every source is public and open


02 — Why this works

Trained on where fish were not, as well as where they were.

Commercial catch logs

A vessel does not fish where it expects nothing, and would not log it if it did. A model fitted to that data learns where fishers like to go.

PRESENCE ONLY — ABSENCE UNOBSERVED

Scientific survey data

Research trawls sample a fixed station grid whether or not fish are present. A haul with no record is a true zero — the one thing commercial logs never contain.

PRESENCE + ABSENCE — BOTH LABELLED

This distinction is not a detail. Without absence records, presence/absence classification is mathematically impossible, and abundance models inherit the fleet's own site-selection bias.


03 — Verified performance

Measured on years the model never saw.

TRAIN 2001—2018 · 9,422 hauls
TEST  2019—2026 · 4,414 hauls

Held-out performance by species
SpeciesPresence ROC-AUCCPUE R² Top quintileBottom halfLift
Sprat Sprattus sprattus0.756+0.1862,071 kg/h245.98.4×
Atlantic herring Clupea harengus0.736+0.3602,005 kg/h139.014.4×
Atlantic cod Gadus morhua0.811+0.345410 kg/h37.710.9×
European flounder Platichthys flesus0.870+0.410285 kg/h23.012.4×
European plaice Pleuronectes platessa0.937+0.469146 kg/h12.012.2×
Common dab Limanda limanda0.988+0.798181 kg/h0.0n/a

What these numbers are

Top quintile and bottom half are the observed mean catch rates in held-out hauls, ranked by model prediction. Every CPUE R² exceeds the mean-predictor baseline (−0.006 to −0.161 on the same test set).

What they are not

No oceanographic data is used in these figures — seven features only: position, depth, season, day/night. Dab's 0.988 measures a biogeographic boundary, not skill. These are a floor.


04 — How it runs

Four stages, one command each.

Ingest

Labelled haul and catch records stream from ICES DATRAS; ERA5 meteorology is joined on the reanalysis native 0.25° grid for each haul's day.

Assemble

One row per haul and species. Unmatched hauls become true zeros. Shipboard readings are quarantined — they do not exist at forecast time.

Fit

Two gradient-boosted models per species — presence and log catch rate — scored strictly forward in time, never on a random split.

Serve

Gridded inference across the basin, delivered as a heatmap with a per-cell readout and an offline package for the trip. Planned


05 — Data foundation

Every source is public. The method is the moat.

No licensed feeds, no proprietary telemetry, no vendor lock. Reproducible from scratch with the download scripts in the repository.

ICES DATRAS

LIVE

Standardised scientific bottom-trawl surveys — haul position, time, swept distance, depth, gear, and catch by species and length class.

20,358 hauls · 116,005 haul-species rows
180 species · 1991—2026 · no authentication

ECMWF ERA5

LIVE

Global atmospheric reanalysis — air temperature, wind speed and dominant direction, surface pressure, cloud cover, radiation.

0.25° · daily · sampled per haul cell-day
resumable ingest · no authentication

Copernicus Marine

INTEGRATING

Baltic reanalysis — sea temperature, salinity, currents, mixed-layer depth, chlorophyll-a, Secchi depth, nutrients, oxygen.

~1.85 km · daily · 56 depth levels
1993—present · 11 variables selected

EMODnet Bathymetry

PLANNED

Seabed depth at ~115 m resolution, required to produce predictions in cells where no haul was ever taken.

WCS 2.0.1 · European footprint
GEBCO fallback outside coverage


06 — Coverage

Retargeting a basin is a config change.

The pipeline, feature builder and models are parameterised by one study-area object. The same codebase runs the Baltic and the North Sea — basins that differ sharply in salinity and optical regime. That is a test of portability, not a claim about it.

Baltic Sea BITS · 4.25—18.29 PSU
North Sea NS-IBTS · fully marine
Additional basins REQUIRES A LABELLED SOURCE

Adding a basin

# one entry, one adapter
NORTH_SEA = StudyArea(
    key="north_sea",
    name="North Sea",
    survey="NS-IBTS",
    lat_min=51.0, lat_max=62.0,
    lon_min=-4.0, lon_max=12.0,
    quarters=(1, 3),
)

$ python scripts/download_survey_data.py \
    --area north_sea


07 — Ecological design

Hiding a species is not protecting it.

Protected and moratorium species are removed from the prediction surface entirely. But species-level filtering alone is inadequate: protected species share habitat with legal targets, so a coordinate shown as productive for one is often productive for the other.

Species exclusion

Red-list and moratorium species never enter the model registry or the map.

Spatial masking

No forecast is produced inside legally closed areas, for any species. Planned

Seasonal closures

Spawning windows blank the surface on a calendar, not a toggle. Planned

Put the next trip on evidence.

Early access is open to commercial operators, research institutes and fisheries authorities in the Baltic and North Sea.

Operators

Per-vessel forecast access, offline trip packages, catch logging.

Research

Model cards, reproducible pipelines, co-authored validation studies.

Authorities

Basin-wide distribution surfaces for stock and effort monitoring.