Analyze apparent fishing effort in Argentinian EEZ¶
This guide provides detailed instructions to on how to use the gfw-api-python-client to Analyze apparent fishing effort in Argentinian EEZ region and monitor industrial trawlers using 4Wings API, Vessels API, and Events API.
Note: See the Datasets, Data Caveats, and Terms of Use pages in the GFW API documentation for details on GFW data, API licenses, and rate limits.
Prerequisites¶
Before using the gfw-api-python-client, ensure it is installed (see the Getting Started guide) and that you have obtained an API access token from the Global Fishing Watch API portal.
Installation¶
The gfw-api-python-client can be easily installed using pip:
# %pip install gfw-api-python-client
Usage¶
Import and use gfw-api-python-client in your Python codes
import os
import pandas as pd
import gfwapiclient as gfw
try:
from google.colab import userdata
access_token = userdata.get("GFW_API_ACCESS_TOKEN")
except Exception:
access_token = os.environ.get("GFW_API_ACCESS_TOKEN")
access_token = access_token or "<PASTE_YOUR_GFW_API_ACCESS_TOKEN_HERE>"
gfw_client = gfw.Client(
access_token=access_token,
)
Introduction¶
Use Case: A Fisheries Enforcement Officer Monitoring Industrial Trawlers
Maria, a fisheries enforcement officer in Argentina, monitors industrial trawlers operating within Argentinian Exclusive Economic Zone (EEZ). His goal is to:
Analyzing apparent fishing effort for trawlers operating in Argentinian EEZ.
Identifying vessels involved in apparent trawling activity and determining their reported flag states.
Checking vessel history, including potential transshipment and port visits.
Generating reports to support fisheries enforcement decisions.
APIs Used: ️
4Wings API – Retrieve apparent fishing effort data for trawlers.
4Wings API – Group vessels by ID that are involved in trawling activity.
Vessels API – Retrieve vessel identity & ownership details.
Events API – Fetch port visits & potential transshipment history.
Important: In order to avoid any misinterpretation of GFW data, please refer to our official data caveats documentations:
Important Caveats:
The 4Wings API only supports one active report per user at a time.
Sending multiple requests simultaneously results in a 429 Too Many Requests error.
If a report takes over 100 seconds to generate, it may return a 524 Gateway Timeout error.
Step 0: Identify the Region of Interest (ROI) - Argentinian EEZ¶
Before making API requests, Maria must specify the geographic area for analysis using a Region ID:
Options to Define the Region:
Using Region ID - Each EEZ has a unique ID in the public-eez-areas dataset.
Custom Geometries - Users can define a custom area using GeoJSON.
For Argentinian EEZ, the region ID is 8466 (public-eez-areas dataset).
Step 1: Retrieve Apparent Fishing Effort in Argentinian EEZ¶
Maria first queries the 4Wings API to get apparent fishing effort for all vessels, grouping them by gear type in Argentinian EEZ. Please learn more about apparent fishing effort here and check its data caveats here.
Filters Used:
Region ID - 8466 Argentinian EEZ
Date Range - Last 6 Months
Grouped By - Gear Type
Why This Step?
Identifies which gear types (e.g.,
trawlers,squid jiggersetc.) are most active in the Argentinian EEZ.Establishes baseline fishing activity trends before narrowing the search to specific vessels.
step_1_report_result = await gfw_client.fourwings.create_fishing_effort_report(
spatial_resolution="HIGH",
group_by="GEARTYPE",
temporal_resolution="MONTHLY",
start_date="2024-08-01",
end_date="2025-01-31",
spatial_aggregation=True,
region={
"dataset": "public-eez-areas",
"id": "8466",
},
)
step_1_report_df = step_1_report_result.df()
step_1_report_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 40 entries, 0 to 39
Data columns (total 20 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 date 40 non-null object
1 detections 0 non-null object
2 flag 0 non-null object
3 gear_type 40 non-null object
4 hours 40 non-null float64
5 vessel_ids 40 non-null int64
6 vessel_id 0 non-null object
7 vessel_type 0 non-null object
8 entry_timestamp 0 non-null object
9 exit_timestamp 0 non-null object
10 first_transmission_date 0 non-null object
11 last_transmission_date 0 non-null object
12 imo 0 non-null object
13 mmsi 0 non-null object
14 call_sign 0 non-null object
15 dataset 0 non-null object
16 report_dataset 40 non-null object
17 ship_name 0 non-null object
18 lat 0 non-null object
19 lon 0 non-null object
dtypes: float64(1), int64(1), object(18)
memory usage: 6.4+ KB
step_1_report_df[["gear_type", "hours", "vessel_ids"]].head()
| gear_type | hours | vessel_ids | |
|---|---|---|---|
| 0 | inconclusive | 215.623889 | 2 |
| 1 | inconclusive | 98.155833 | 2 |
| 2 | other_purse_seines | 57.377500 | 1 |
| 3 | set_longlines | 153.960278 | 3 |
| 4 | pots_and_traps | 92.029722 | 3 |
step_1_agg_report_df = (
step_1_report_df.groupby(["gear_type"], as_index=False)
.agg(hours=("hours", "sum"), vessel_ids=("vessel_ids", "sum"))
.sort_values(by="hours", ascending=False)
)
step_1_agg_report_df.head()
| gear_type | hours | vessel_ids | |
|---|---|---|---|
| 8 | trawlers | 240642.414444 | 1315 |
| 1 | fishing | 16023.201389 | 94 |
| 7 | squid_jigger | 6124.062222 | 44 |
| 2 | fixed_gear | 1948.325556 | 16 |
| 3 | inconclusive | 1072.351389 | 14 |
What We have Learned from Step 1¶
Multiple gear types were potentially detected in Argentinian EEZ.
Trawlersappear to be operating, but further vessel-level investigation is needed.
Step 2: Retrieve Vessel IDs for Trawlers¶
Maria refines her 4Wings API request to group by vessel ID, and filtering only for trawlers in Argentinian EEZ. Please learn more about apparent fishing effort here and check its data caveats here.
Filters Used:
Date Range - Last 6 Months
Grouped By - Vessel ID
Gear Type - Trawlers
Why Use group-by=VESSEL_ID?
Grouping by VESSEL_ID allows individual vessel identification in the response. This is crucial for tracking vessel activity and, more importantly, linking each detected vessel to the Vessels API in the next step. By structuring the query this way, we can fetch vessel details such as flag, name, and ownership records in Step 3 below.
step_2_report_result = await gfw_client.fourwings.create_fishing_effort_report(
spatial_resolution="HIGH",
group_by="VESSEL_ID",
temporal_resolution="ENTIRE",
filters=["geartype in ('trawlers')"],
start_date="2024-08-01",
end_date="2025-01-31",
spatial_aggregation=True,
region={
"dataset": "public-eez-areas",
"id": "8466",
},
)
step_2_report_df = step_2_report_result.df()
step_2_report_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 385 entries, 0 to 384
Data columns (total 20 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 date 385 non-null object
1 detections 0 non-null object
2 flag 385 non-null object
3 gear_type 385 non-null object
4 hours 385 non-null float64
5 vessel_ids 0 non-null object
6 vessel_id 385 non-null object
7 vessel_type 385 non-null object
8 entry_timestamp 385 non-null datetime64[ns, UTC]
9 exit_timestamp 385 non-null datetime64[ns, UTC]
10 first_transmission_date 385 non-null datetime64[ns, UTC]
11 last_transmission_date 385 non-null datetime64[ns, UTC]
12 imo 385 non-null object
13 mmsi 385 non-null object
14 call_sign 385 non-null object
15 dataset 385 non-null object
16 report_dataset 385 non-null object
17 ship_name 385 non-null object
18 lat 0 non-null object
19 lon 0 non-null object
dtypes: datetime64[ns, UTC](4), float64(1), object(15)
memory usage: 60.3+ KB
step_2_report_df[["flag", "gear_type", "hours", "mmsi", "ship_name"]].head()
| flag | gear_type | hours | mmsi | ship_name | |
|---|---|---|---|---|---|
| 0 | ARG | TRAWLERS | 295.007500 | 701000820 | CORAJE |
| 1 | ARG | TRAWLERS | 9.595000 | 701000758 | DESEADO |
| 2 | URY | TRAWLERS | 10.023056 | 770576463 | KALATXORI |
| 3 | ARG | TRAWLERS | 326.160833 | 701079000 | ENTRENA UNO |
| 4 | ARG | TRAWLERS | 583.789444 | 701000714 | EL MARISCO I |
Explore Vessels Potentially Engaged in Trawling Activity in the Argentinian EEZ¶
step_2_agg_report_df = (
step_2_report_df.groupby(["flag", "gear_type", "mmsi", "ship_name"], as_index=False)
.agg(hours=("hours", "sum"))
.sort_values(by="hours", ascending=False)
)
step_2_agg_report_df.head()
| flag | gear_type | mmsi | ship_name | hours | |
|---|---|---|---|---|---|
| 297 | ARG | TRAWLERS | 701024000 | ATLANTIC SURF III | 3151.855278 |
| 247 | ARG | TRAWLERS | 701006605 | CAPESANTE | 2270.097500 |
| 22 | ARG | TRAWLERS | 701000577 | MISS TIDE | 2244.895833 |
| 296 | ARG | TRAWLERS | 701023000 | CAROLINA P | 2065.586944 |
| 301 | ARG | TRAWLERS | 701037000 | DON PEDRO | 1807.146111 |
What We have Learned from Step 2¶
There are vessels appear to have been engaged in potential trawling activity in Argentinian EEZ over the past 6 months i.e.,:
ATLANTIC SURF III (mmsi: 701024000, flag: ARG)CAPESANTE (mmsi: 701006605, flag: ARG)
We will retrieve these vessels’
ownership,flag history, andauthorizationsin Step 3 to validate them.
Step 3: Retrieve Vessel Details Using the Vessels API¶
Maria queries the Vessels API to get detailed vessel identity and ownership records. Please learn more about Vessels API here and check its data caveats here.
Filters Used:
Vessel IDs from 4Wings API, Step 2 above.
Datasets -
public-global-vessel-identity:latest.Includes -
POTENTIAL_RELATED_SELF_REPORTED_INFO.
Note: Vessels may change identifiers over time, such as their Maritime Mobile Service Identity (MMSI), International Maritime Organization (IMO) number), call sign, or even their name. These changes can occur due to re-registration, changes in ownership, or other operational reasons within the AIS transponder. Parameter (includes = POTENTIAL_RELATED_SELF_REPORTED_INFO) helps group all vessel ids that are potentially related as part of the same physical vessel based on publicly available registry information.
step_2_vessel_mmsis = list(step_2_agg_report_df["mmsi"].head(n=2))
step_2_vessel_mmsis
['701024000', '701006605']
step_2_vessel_ids = list(
step_2_report_df[step_2_report_df["mmsi"].isin(step_2_vessel_mmsis)][
"vessel_id"
].unique()
)
step_2_vessel_ids
['de8a03acd-dc6c-8e08-2867-24e55ffc0017',
'8e930bac5-594b-aa3f-081d-d12668819e1f']
step_3_vessels_result = await gfw_client.vessels.get_vessels_by_ids(
ids=step_2_vessel_ids,
)
step_3_vessels_df = step_3_vessels_result.df()
step_3_vessels_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 dataset 2 non-null object
1 registry_info_total_records 2 non-null int64
2 registry_info 2 non-null object
3 registry_owners 2 non-null object
4 registry_public_authorizations 2 non-null object
5 combined_sources_info 2 non-null object
6 self_reported_info 2 non-null object
dtypes: int64(1), object(6)
memory usage: 244.0+ bytes
Understanding Vessel Details Response Data
registryInfoTotalRecords – This represents the number of registry records found for the vessels.
registryInfo – Contains public registry data. This data is sourced from official vessel registries.
registryOwners – Lists the registered owners of the vessel based on public sources.
registryPublicAuthorizations – Represents known fishing authorizations from public sources. Users should verify against national registries and RFMO records for additional context.
combinedSourcesInfo – Provides inferred data from multiple sources, including. This is not explicitly reported by vessels but determined through GFW’s classification methods.
selfReportedInfo – Contains AIS self-reported data, including
MMSI,ship name, andflagas broadcast by the vessel itself. Self-reported data may not always align with registry data and should be cross-checked.
step_3_vessels_df[["registry_info", "registry_owners", "self_reported_info"]]
| registry_info | registry_owners | self_reported_info | |
|---|---|---|---|
| 0 | [{'id': '2d939efefd3f45788ed103ff0723f564', 's... | [{'name': 'CLEARWATER SEAFOODS', 'flag': 'CAN'... | [{'id': 'de8a03acd-dc6c-8e08-2867-24e55ffc0017... |
| 1 | [{'id': '45502524c9a150e77869ee647423dba1', 's... | [{'name': 'GLACIAR PESQUERA', 'flag': 'ARG', '... | [{'id': '8e930bac5-594b-aa3f-081d-d12668819e1f... |
Explore Vessels Registry Info¶
step_3_registry_info_df = pd.json_normalize(
step_3_vessels_df["registry_info"].explode()
)
step_3_registry_info_df[
["ssvid", "flag", "ship_name", "n_ship_name", "gear_types", "source_code"]
]
| ssvid | flag | ship_name | n_ship_name | gear_types | source_code | |
|---|---|---|---|---|---|---|
| 0 | 701006605 | ARG | CAPESANTE | CAPESANTE | [TRAWLERS] | [GFW-REVIEW, IMO, RESEARCH-PAPER, TMT_OTHER_OF... |
| 1 | 316003980 | CAN | ATLANTICLEADER | ATLANTICLEADER | [TRAWLERS] | [IMO, TMT_OTHER_OFFICIAL] |
| 2 | 701024000 | ARG | ATLANTIC SURF III | ATLANTICSURF3 | [TRAWLERS] | [IMO, TMT_OTHER_OFFICIAL] |
Explore Registry Owners¶
step_3_registry_owners_df = pd.json_normalize(
step_3_vessels_df["registry_owners"].explode()
)
step_3_registry_owners_df[["ssvid", "flag", "name", "source_code"]]
| ssvid | flag | name | source_code | |
|---|---|---|---|---|
| 0 | 701006605 | CAN | CLEARWATER SEAFOODS | [RESEARCH-PAPER] |
| 1 | 316003980 | CAN | CS MANPAR | [TMT_OTHER_OFFICIAL] |
| 2 | 701024000 | ARG | GLACIAR PESQUERA | [TMT_OTHER_OFFICIAL] |
Explore Vessels Self Reported Info¶
step_3_self_reported_info_df = pd.json_normalize(
step_3_vessels_df["self_reported_info"].explode()
)
step_3_self_reported_info_df[
["ssvid", "flag", "ship_name", "n_ship_name", "source_code"]
]
| ssvid | flag | ship_name | n_ship_name | source_code | |
|---|---|---|---|---|---|
| 0 | 701006605 | ARG | CAPESANTE | CAPESANTE | [AIS] |
| 1 | 316003980 | CAN | ATLANTIC LEADER | ATLANTICLEADER | [AIS] |
| 2 | 701024000 | ARG | ATLANTIC SURF III | ATLANTICSURF3 | [AIS] |
What We have Learned from Step 3¶
Vessel Identity:
ATLANTIC SURF III (mmsi: 701024000, flag: ARG)- appears to be registered under Argentina (ARG)CAPESANTE (mmsi: 701006605, flag: ARG)- appears to be registered under Argentina (ARG)
Ownership & Historical Changes:
ATLANTIC SURF III (mmsi: 701024000, flag: ARG)- GLACIAR PESQUERA appears to be listed as the registered owner.CAPESANTE (mmsi: 701006605, flag: ARG)- CLEARWATER SEAFOODS appears to be listed as the registered owner.
Step 4: Detect Potential Port Visits, Encounters, or Fishing Events¶
Now Maria checks port visits, encounters, and fishing events using the Events API, which allows monitoring of vessel activities such as potential transshipments, unauthorized port entries, or fishing activity patterns.
Filters Used:
Vessel ID from 4Wings API
Event Types - Port visits, encounters (potential transshipment), and fishing events.
Time Range - Last 6 months.
-
public-global-port-visits-events::latest(Port Visits)public-global-encounters-events:latest(Encounters between vessels)public-global-fishing-events:latest(Fishing activity)
Encounter Types - CARRIER-FISHING
step_4_events_result = await gfw_client.events.get_all_events(
datasets=[
"public-global-encounters-events:latest",
"public-global-fishing-events:latest",
"public-global-port-visits-events:latest",
],
vessels=step_2_vessel_ids,
types=["ENCOUNTER", "FISHING", "PORT_VISIT"],
start_date="2024-08-01",
end_date="2025-01-31",
encounter_types=["CARRIER-FISHING"],
sort="-start",
)
step_4_events_df = step_4_events_result.df()
step_4_events_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 359 entries, 0 to 358
Data columns (total 14 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 start 359 non-null datetime64[ns, UTC]
1 end 359 non-null datetime64[ns, UTC]
2 id 359 non-null object
3 type 359 non-null object
4 position 359 non-null object
5 regions 359 non-null object
6 bounding_box 359 non-null object
7 distances 359 non-null object
8 vessel 359 non-null object
9 encounter 0 non-null object
10 fishing 351 non-null object
11 gap 0 non-null object
12 loitering 0 non-null object
13 port_visit 8 non-null object
dtypes: datetime64[ns, UTC](2), object(12)
memory usage: 39.4+ KB
step_4_events_df["type"].value_counts()
type
fishing 351
port_visit 8
Name: count, dtype: int64
Explore Apparent Fishing Events¶
step_4_fishing_events_df = step_4_events_df[step_4_events_df["fishing"].notna()]
step_4_fishing_df = pd.concat(
[
pd.json_normalize(step_4_fishing_events_df["vessel"], sep="_"),
pd.json_normalize(step_4_fishing_events_df["fishing"], sep="_"),
],
axis=1,
)
step_4_fishing_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 351 entries, 0 to 350
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 id 351 non-null object
1 name 351 non-null object
2 ssvid 351 non-null object
3 flag 351 non-null object
4 type 351 non-null object
5 public_authorizations 351 non-null object
6 nextPort 0 non-null object
7 total_distance_km 351 non-null float64
8 average_speed_knots 351 non-null float64
9 average_duration_hours 0 non-null object
10 potential_risk 351 non-null bool
11 vessel_public_authorization_status 351 non-null object
dtypes: bool(1), float64(2), object(9)
memory usage: 30.6+ KB
step_4_fishing_df[
[
"name",
"ssvid",
"total_distance_km",
"average_speed_knots",
]
]
| name | ssvid | total_distance_km | average_speed_knots | |
|---|---|---|---|---|
| 0 | ATLANTIC SURF III | 701024000 | 4.415666 | 4.191667 |
| 1 | ATLANTIC SURF III | 701024000 | 7.336581 | 4.080952 |
| 2 | ATLANTIC SURF III | 701024000 | 5.437935 | 3.864516 |
| 3 | ATLANTIC SURF III | 701024000 | 3.894385 | 4.300000 |
| 4 | ATLANTIC SURF III | 701024000 | 9.340183 | 4.369444 |
| ... | ... | ... | ... | ... |
| 346 | CAPESANTE | 701006605 | 30.093297 | 4.687097 |
| 347 | CAPESANTE | 701006605 | 25.568796 | 4.074561 |
| 348 | CAPESANTE | 701006605 | 45.830980 | 3.771852 |
| 349 | CAPESANTE | 701006605 | 90.293572 | 4.181170 |
| 350 | ATLANTIC SURF III | 701024000 | 256.908842 | 4.186333 |
351 rows × 4 columns
step_4_fishing_df["ssvid"].value_counts()
ssvid
701024000 245
701006605 106
Name: count, dtype: int64
Explore Port Visit Events¶
step_4_port_visit_events_df = step_4_events_df[step_4_events_df["port_visit"].notna()]
step_4_port_visits_df = pd.concat(
[
pd.json_normalize(step_4_port_visit_events_df["vessel"], sep="_"),
pd.json_normalize(step_4_port_visit_events_df["port_visit"], sep="_"),
],
axis=1,
)
step_4_port_visits_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8 entries, 0 to 7
Data columns (total 37 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 id 8 non-null object
1 name 8 non-null object
2 ssvid 8 non-null object
3 flag 8 non-null object
4 type 8 non-null object
5 public_authorizations 8 non-null object
6 nextPort 0 non-null object
7 visit_id 8 non-null object
8 confidence 8 non-null object
9 duration_hrs 8 non-null float64
10 start_anchorage_anchorage_id 8 non-null object
11 start_anchorage_at_dock 8 non-null bool
12 start_anchorage_distance_from_shore_km 8 non-null float64
13 start_anchorage_flag 8 non-null object
14 start_anchorage_id 8 non-null object
15 start_anchorage_lat 8 non-null float64
16 start_anchorage_lon 8 non-null float64
17 start_anchorage_name 8 non-null object
18 start_anchorage_top_destination 8 non-null object
19 intermediate_anchorage_anchorage_id 8 non-null object
20 intermediate_anchorage_at_dock 8 non-null bool
21 intermediate_anchorage_distance_from_shore_km 8 non-null float64
22 intermediate_anchorage_flag 8 non-null object
23 intermediate_anchorage_id 8 non-null object
24 intermediate_anchorage_lat 8 non-null float64
25 intermediate_anchorage_lon 8 non-null float64
26 intermediate_anchorage_name 8 non-null object
27 intermediate_anchorage_top_destination 8 non-null object
28 end_anchorage_anchorage_id 8 non-null object
29 end_anchorage_at_dock 8 non-null bool
30 end_anchorage_distance_from_shore_km 8 non-null float64
31 end_anchorage_flag 8 non-null object
32 end_anchorage_id 8 non-null object
33 end_anchorage_lat 8 non-null float64
34 end_anchorage_lon 8 non-null float64
35 end_anchorage_name 8 non-null object
36 end_anchorage_top_destination 8 non-null object
dtypes: bool(3), float64(10), object(24)
memory usage: 2.3+ KB
step_4_port_visits_df[
[
"name",
"ssvid",
"confidence",
"start_anchorage_name",
"intermediate_anchorage_name",
"end_anchorage_name",
]
]
| name | ssvid | confidence | start_anchorage_name | intermediate_anchorage_name | end_anchorage_name | |
|---|---|---|---|---|---|---|
| 0 | ATLANTIC SURF III | 701024000 | 4 | MAR DEL PLATA | MAR DEL PLATA | MAR DEL PLATA |
| 1 | CAPESANTE | 701006605 | 4 | USHUAIA | USHUAIA | USHUAIA |
| 2 | ATLANTIC SURF III | 701024000 | 4 | MAR DEL PLATA | MAR DEL PLATA | MAR DEL PLATA |
| 3 | CAPESANTE | 701006605 | 4 | USHUAIA | USHUAIA | USHUAIA |
| 4 | CAPESANTE | 701006605 | 4 | USHUAIA | USHUAIA | USHUAIA |
| 5 | ATLANTIC SURF III | 701024000 | 4 | MAR DEL PLATA | MAR DEL PLATA | MAR DEL PLATA |
| 6 | CAPESANTE | 701006605 | 4 | USHUAIA | USHUAIA | USHUAIA |
| 7 | ATLANTIC SURF III | 701024000 | 4 | MAR DEL PLATA | MAR DEL PLATA | MAR DEL PLATA |
step_4_port_visits_df["ssvid"].value_counts()
ssvid
701024000 4
701006605 4
Name: count, dtype: int64
What We have learned from step 4¶
Apparent Fishing Events:
ATLANTIC SURF III (mmsi: 701024000, flag: ARG)- has been detected in multiple apparent fishing events during the analyzed timeframe (August 2024 – January 2025)CAPESANTE (mmsi: 701006605, flag: ARG)- has been detected in multiple apparent fishing events during the analyzed timeframe (August 2024 – January 2025)
Port Visit Events:
ATLANTIC SURF III (mmsi: 701024000, flag: ARG)- potentially made multiple port visits, including stops atMAR DEL PLATACAPESANTE (mmsi: 701006605, flag: ARG)- potentially made multiple port visits, including stops atUSHUAIA
ENCOUNTER Events: No explicit ENCOUNTER events were returned in the response dataset. Check more details here. You can read more about transshipment behavior from our report or scientific publication.
Potential Considerations:
The vessel’s fishing activities appear near the EEZ boundary, requiring further assessment of compliance with national or RFMO regulations.
The absence of matching public authorizations in the RFMO registry does not necessarily indicate illegality, but it suggests that authorities may need to verify through national databases or official sources.
Summary of API Flow¶
4Wings API - Retrieve apparent fishing effort for trawlers within Argentinian EEZ.
Vessels API - Fetch vessel identity, ownership history, and public authorizations.
Events API - Detect potential port visits, encounters, and apparent fishing events to analyze operational patterns.
Assess potential risks - Compare registry records, AIS data, and inferred vessel activity for enforcement follow-ups.
Generate a report - Provide a structured analysis for relevant authorities.