PortWatch Port Activity
Daily port calls and estimated trade volumes at ports worldwide, from IMF PortWatch.
portwatch_port_activity — the dataset name to pass to the Obscura API.
What one row means
One row is a single IMF PortWatch port's AIS-derived shipping-activity estimate for one calendar day: vessel port-call counts and estimated import/export cargo volumes at that port on that day, broken out by vessel type (container, dry bulk, general cargo, roro, tanker) plus cargo/all-type totals. Source: the IMF PortWatch ArcGIS FeatureServer (`Daily_Ports_Data`), keyless, daily since 2019-01-01.
One row per (portid, occurred_on).
Point-in-time availability
Every Obscura dataset carries available_date: the calendar day the publisher made the row
available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the
same thing on every dataset in the catalog.
For portwatch_port_activity: release_calendar: available_date = occurred_on + 14 calendar days (PortWatch AIS aggregation, modeling pipeline, and revision-delay lag), STORED generated column.
Refresh cadence
Obscura refreshes portwatch_port_activity daily — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.
Schema — 27 columns
The full public column list for portwatch_port_activity, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/portwatch_port_activity.
| Column | Type | Description |
|---|---|---|
| portid | text · not null | IMF PortWatch's stable identifier for the port (ArcGIS attribute `portid`, e.g. 'port1325'). Half of the composite primary key; joining 1:1 to the same portid in portwatch_chokepoint_activity is NOT guaranteed (ports and chokepoints are separate ID spaces). |
| occurred_on | date · not null | The calendar day the port-call/import/export activity occurred (ArcGIS `date` attribute, parsed as ISO string or epoch-ms). Other half of the composite primary key with portid; the real event/period date this table's activity metrics describe. |
| portname | text | Human-readable port display name from the ArcGIS `portname` attribute (e.g. 'Tsuruga'). Nullable — dropped when blank/whitespace-only. |
| country | text | Full country name hosting the port, from the ArcGIS `country` attribute (e.g. 'Japan'). Nullable. |
| iso3 | text | ISO 3166-1 alpha-3 country code, from the ArcGIS `ISO3` attribute (e.g. 'JPN'). Nullable. |
| portcalls_container | double precision | Estimated count of container-vessel port calls at this port on this day, from ArcGIS attribute `portcalls_container`. Stored as float (model-estimated volume, not raw count). Nullable. |
| portcalls_dry_bulk | double precision | Estimated dry-bulk-carrier port calls this day, from ArcGIS attribute `portcalls_dry_bulk`. Nullable. |
| portcalls_general_cargo | double precision | Estimated general-cargo-vessel port calls this day, from ArcGIS attribute `portcalls_general_cargo`. Nullable. |
| portcalls_roro | double precision | Estimated roll-on/roll-off (roro) vessel port calls this day, from ArcGIS attribute `portcalls_roro`. Nullable. |
| portcalls_tanker | double precision | Estimated tanker port calls this day, from ArcGIS attribute `portcalls_tanker`. Nullable. |
| portcalls_cargo | double precision | Estimated port calls summed across all cargo-carrying vessel types (container + dry bulk + general cargo + roro + tanker) this day, from ArcGIS attribute `portcalls_cargo`. A subtotal, not necessarily reconciled with `portcalls`. Nullable. |
| portcalls | double precision | Estimated total port calls across ALL vessel types (including non-cargo) at this port this day, from ArcGIS attribute `portcalls`. The dataset's grand-total activity metric. Nullable. |
| import_container | double precision | Estimated import cargo volume carried by container vessels at this port this day, from ArcGIS attribute `import_container`; PortWatch's internal AIS-derived volume estimate (not raw TEU/tonnage). Nullable. |
| import_dry_bulk | double precision | Estimated import volume via dry-bulk carriers this day, from ArcGIS attribute `import_dry_bulk`. Nullable. |
| import_general_cargo | double precision | Estimated import volume via general-cargo vessels this day, from ArcGIS attribute `import_general_cargo`. Nullable. |
| import_roro | double precision | Estimated import volume via roro vessels this day, from ArcGIS attribute `import_roro`. Nullable. |
| import_tanker | double precision | Estimated import volume via tankers this day, from ArcGIS attribute `import_tanker`. Nullable. |
| import_cargo | double precision | Estimated import volume summed across all cargo vessel types this day, from ArcGIS attribute `import_cargo`; a subtotal, not necessarily reconciled with `import`. Nullable. |
| import | double precision | Estimated total import cargo volume across all vessel types at this port this day, from ArcGIS attribute `import`. The dataset's headline import metric. Nullable. |
| export_container | double precision | Estimated export cargo volume via container vessels this day, from ArcGIS attribute `export_container`. Nullable. |
| export_dry_bulk | double precision | Estimated export volume via dry-bulk carriers this day, from ArcGIS attribute `export_dry_bulk`. Nullable. |
| export_general_cargo | double precision | Estimated export volume via general-cargo vessels this day, from ArcGIS attribute `export_general_cargo`. Nullable. |
| export_roro | double precision | Estimated export volume via roro vessels this day, from ArcGIS attribute `export_roro`. Nullable. |
| export_tanker | double precision | Estimated export volume via tankers this day, from ArcGIS attribute `export_tanker`. Nullable. |
| export_cargo | double precision | Estimated export volume summed across all cargo vessel types this day, from ArcGIS attribute `export_cargo`; a subtotal, not necessarily reconciled with `export`. Nullable. |
| export | double precision | Estimated total export cargo volume across all vessel types at this port this day, from ArcGIS attribute `export`. The dataset's headline export metric. Nullable. |
| available_date | date · not null | PUBLIC-availability date = occurred_on + 14 calendar days (release-calendar dissemination lag). STORED generated column, DB-generated and read-only; the point-in-time column to filter/join on — NEVER the activity day itself. |
Access portwatch_port_activity
Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.
import obscura
client = obscura.Client("obs_live_…")
df = client.query(
dataset="portwatch_port_activity",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the portwatch_port_activity dataset?
Daily port calls and estimated trade volumes at ports worldwide, from IMF PortWatch. One row is a single IMF PortWatch port's AIS-derived shipping-activity estimate for one calendar day: vessel port-call counts and estimated import/export cargo volumes at that port on that day, broken out by vessel type (container, dry bulk, general cargo, roro, tanker) plus cargo/all-type totals. Source: the IMF PortWatch ArcGIS FeatureServer (`Daily_Ports_Data`), keyless, daily since 2019-01-01.
How do I avoid look-ahead bias with portwatch_port_activity?
Filter on portwatch_port_activity.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — release_calendar: available_date = occurred_on + 14 calendar days (PortWatch AIS aggregation, modeling pipeline, and revision-delay lag), STORED generated column. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get portwatch_port_activity?
As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="portwatch_port_activity". The column schema is public at https://api.obscura.trade/v1/catalog/portwatch_port_activity.
Can I filter portwatch_port_activity by company or symbol?
Yes. portwatch_port_activity carries portid, the column the API's symbols filter resolves against.
How often is portwatch_port_activity updated?
Obscura refreshes portwatch_port_activity on a daily schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.