Skip to main content
The Port Authority Governance dataset contains structured records from five major US port authorities — Oakland, Long Beach, Los Angeles, JAXPORT, and the Port Authority of New York and New Jersey. Records cover board meetings, agenda items, minutes, tariff documents, resolutions, leases, and capital projects. Each port uses a purpose-built adapter (Legistar, Granicus, GravityView, AEM, or HTML) that normalizes records into a consistent schema for cross-port queries. Every record inherits the full APRS envelope (record_id, chunk_id, bitemporal fields, confidence_score, provenance) and carries the join keys documented below. APRS profile: aprs.port-authority/1.0.0

Covered ports

PortSlugUNLOCODEGovernance modelAdapter
Port of OaklandoaklandUSOAKIndependent authorityLegistar
Port of Long Beachlong-beachUSLGBMunicipal departmentGranicus
Port of Los Angeleslos-angelesUSLAXMunicipal departmentAEM
JAXPORTjacksonvilleUSJAXIndependent authorityGravityView
Port Authority of NY & NJny-njUSNYCBi-state compactHTML
All five ports have at least 12 months of meeting data. Adapters run daily; tariff snapshots update quarterly.

Tables

The dataset is organized into multiple related tables rather than a single flat file. This structure reflects the natural hierarchy of governance records — meetings contain agenda items, which produce claims and facts.
TablePurpose
port_authoritiesDimension table. One row per port with metadata, UNLOCODE, and jurisdiction slug.
port_authority_terminalsPer-port terminal gazetteer with H3 resolution-9 cells and alias arrays.
port_authority_meetingsScheduled board meetings — one per session.
port_authority_agenda_itemsUnion surface (claim + fact) across all agenda items.
port_authority_claimsStaff recommendations (pre-vote intent).
port_authority_factsBoard-vote outcomes (post-vote action).
port_authority_minutesPointer records to published minutes PDFs.
port_authority_resolutionsAdopted resolutions and ordinances.
port_authority_tariffsWhole-document tariff version records.
port_authority_tariff_itemsLine-item records with bitemporal supersession tracking.
port_authority_leasesTerminal leases (available once PDF extraction ships).
port_authority_capital_projectsCapital infrastructure projects approved via board action.

Port authorities (dimension)

FieldTypeNullableDescription
port_slugstringnoCanonical port identifier (primary key).
namestringnoFull legal name.
unlocodestringnoUN/LOCODE 5-character identifier.
governance_modelenumnoindependent_authority, bi_state_compact, or municipal_department.
jurisdiction_slugstringnoCivic jurisdiction key for cross-product joins to Civic Intelligence.
h3_port_r7stringyesH3 resolution-7 cell at the port’s center of gravity.
port_page_urlURLyesCanonical port homepage.

Meetings

Board and committee meetings with scheduling, location, and document availability.
FieldTypeNullableDescription
port_slugstringnoPort identifier. Foreign key to port_authorities.
event_idstringnoSource-native meeting identifier (Legistar event ID, Granicus clip ID).
event_guidstringyesGlobally unique source identifier when available.
body_namestringyesCommittee or board name (e.g., “Board of Port Commissioners”).
meeting_type_slugstringyesNormalized meeting type (see meeting type slugs).
event_datedateyesScheduled meeting date.
event_timestringyesScheduled start time.
locationstringyesMeeting venue or “Virtual”.
video_statusstringyesVideo availability (available, pending, none).
agenda_statusstringyesAgenda publication status (published, draft, none).
minutes_statusstringyesMinutes publication status (published, draft, none).
agenda_file_urlURLyesDirect link to agenda PDF or HTML.
minutes_file_urlURLyesDirect link to minutes PDF or HTML.
media_urlsJSONyesArray of video or audio recording URLs.
jurisdiction_slugstringyesCivic jurisdiction identifier for cross-dataset joins.

Agenda items

Individual items from a board meeting agenda, classified by kind.
FieldTypeNullableDescription
port_slugstringnoPort identifier.
event_idstringnoParent meeting identifier.
item_idstringnoSource-native item identifier.
agenda_sequenceintegeryesPosition in the agenda.
agenda_numberstringyesDisplay number from the published agenda.
titlestringyesAgenda item title.
kindenumnoclaim or fact. See claim and fact separation.
matter_idstringyesSource-native matter or legislation identifier.
matter_typestringyesMatter classification from the source system.
matter_statusstringyesCurrent status (pending, approved, deferred, withdrawn).
consentbooleanyestrue if the item was on the consent calendar.
roll_callJSONyesStructured roll call vote data when available.

Claims

Source assertions — what was proposed or recommended by staff. Claims represent the “before” side of governance actions.
FieldTypeNullableDescription
port_slugstringnoPort identifier.
event_idstringnoParent meeting identifier.
item_idstringnoSource-native item identifier.
titlestringyesStaff recommendation or proposal title.
matter_filestringyesSource document reference number.
matter_namestringyesSource-native matter name.
matter_typestringyesAction category (tariff change, lease action, capital project, contract award).
matter_statusstringyesCurrent status.
consentbooleanyesWhether this appeared on the consent calendar.
attachmentsJSONyesArray of attachment URLs and metadata.
counterparty_urnstringyesEntity resolution link to the counterparty (tenant, contractor, vendor).

Facts

Resolved outcomes — what the board actually decided. Facts represent the “after” side of governance actions and are currently available only for Oakland (Legistar adapter).
FieldTypeNullableDescription
port_slugstringnoPort identifier.
event_idstringnoParent meeting identifier.
item_idstringnoSource-native item identifier.
action_textstringyesDescription of the action taken by the board.
passed_flagbooleanyestrue if the item passed, false if it failed.
moverstringyesName of the commissioner who moved the item.
seconderstringyesName of the commissioner who seconded.
vote_tallystringyesVote count (e.g., “7-0”, “5-2”).
Fact records require vote-tally data from the source system. Currently only the Oakland Legistar adapter surfaces passed_flag and vote_tally. Fact emission for other ports will follow as minutes-PDF extraction (roll-call parsing) is added.

Minutes

Published meeting minutes with document links and status tracking.
FieldTypeNullableDescription
port_slugstringnoPort identifier.
event_idstringnoParent meeting identifier.
body_namestringyesCommittee or board name.
meeting_type_slugstringyesNormalized meeting type.
minutes_pdf_urlURLyesDirect link to minutes PDF.
minutes_statusstringyesPublication status.

Tariffs

Port tariff documents tracked across revisions. When a new tariff version is published, Codex extracts individual line items and links them to the parent document.
FieldTypeNullableDescription
port_slugstringnoPort identifier.
tariff_yearintegeryesTariff calendar year.
versionstringyesVersion identifier.
version_labelstringyesHuman-readable version label.
filenamestringyesSource filename.
pdf_urlURLyesDirect link to tariff PDF.

Tariff items

Individual line items from tariff documents with bitemporal supersession tracking. When a rate changes between tariff versions, the old item’s superseded_by field links to the replacement.
FieldTypeNullableDescription
port_slugstringnoPort identifier.
schedule_nostringyesTariff schedule number.
item_nostringyesLine item number within the schedule.
descriptionstringyesRate description.
ratestringyesRate value (text to accommodate units and ranges).
unitstringyesRate unit (per TEU, per metric ton, per day).
notesstringyesClassification tag: REG (rules/regulations), DEF (definitions), CHG (fees/charges), REG_NEW or CHG_NEW (new items in this revision).
effective_datedateyesDate the rate takes effect.
superseded_bystringyesrecord_id of the item that replaced this one.
page_numberintegeryesSource PDF page reference.

Tariff version tracking

Tariff items use bitemporal supersession to track rate changes across versions. When a newer tariff version lands and the diff engine matches an old item to a new one:
  • The old item gets effective_to set to the new version’s effective date
  • superseded_by links to the replacement item’s record_id
  • modified_at is refreshed
Items removed in a newer version get effective_to set but superseded_by remains null. Query rates in effect at a specific point in time:
SELECT schedule_no, item_no, description, rate, unit
FROM port_authority_tariff_items
WHERE port_slug = 'jacksonville'
  AND effective_from <= '2025-11-01'
  AND (effective_to IS NULL OR effective_to > '2025-11-01');

Claim and fact separation

Governance records use the claim/fact layer to separate what was proposed from what was decided. Every agenda item is classified as either a claim (staff recommendation, pending proposal) or a fact (board decision with recorded vote). This makes it straightforward to query for approved actions versus pending proposals. For example, a staff recommendation to approve a terminal lease appears as a claim. If the board votes to approve it, a corresponding fact record captures the vote tally and outcome. You can join claims to facts through the shared event_id and item_id keys.

Enum values

Governance model

ValueMeaning
independent_authorityAuthority operates as its own legal entity (Oakland, JAXPORT)
bi_state_compactCreated by interstate compact (PANYNJ)
municipal_departmentDepartment of a single municipal government (Long Beach, Los Angeles)

Meeting type slugs

Stable URL-safe slugs derived from body_name:
SlugSource body name
board-of-harbor-commissionersLos Angeles Board of Harbor Commissioners
board-of-port-commissionersBoard of Port Commissioners (Oakland)
port-authority-boardPort Authority of NY/NJ board
harbor-commissionHarbor Commission (Long Beach)
audit-committeeAudit Committee
board-workshopBoard Workshop
board-meetingBoard Meeting (JAXPORT general)
Unmatched body names fall back to a slugified version of the source text.

Passed flag values

Source-supplied status string, lowercased. Values that indicate an affirmative outcome: pass, passed, adopted, approved. Values that indicate a negative outcome: fail, failed, rejected, denied. Other values are stored verbatim.

Cross-dataset joins

The Port Authority Governance dataset joins to other Codex datasets through two paths.

To AIS Maritime Positions

  • Port-level: join port_authorities.unlocode to vessel port-call attribution in AIS Maritime. For example, UNLOCODE USJAX maps to all vessel calls at Jacksonville.
  • Terminal-level: join port_authority_terminals.h3_r9 to ais_positions.h3_index at H3 resolution 9. A vessel’s position within a terminal’s H3 cell during a port call attributes the call to that terminal, which joins to lease records for “which lessee was operating that terminal at port-call time.”

To Civic Intelligence

port_authority_meetings.jurisdiction_slug aligns with civic_records.jurisdiction_slug from the Civic Intelligence dataset. This enables queries like “all civic actions in Oakland adjacent to port-board actions from the same jurisdiction.”

To Events Timeline

Every fact-kind agenda-item record and every adopted resolution surfaces as an Events Timeline row. The fact’s effective_from becomes the event’s occurred_at.

Join keys

KeyPresenceNotes
record_idalwaysAPRS URN
chunk_idalwaysDeterministic from record_id
port_slugalwaysLinks to port_authorities dimension table
unlocodealways (dimension)Cross-product join to AIS Maritime via port-call resolution
event_idalwaysMeeting-level key; joins meetings to agenda items, claims, facts, and minutes
item_idoftenItem-level key; joins agenda items to claims and facts
jurisdiction_slugsometimesCivic jurisdiction identifier for cross-dataset joins
counterparty_urnsometimesEntity resolution link to tenant, contractor, or vendor
h3_r9terminalsH3 resolution-9 cell for terminal-level AIS joins
source_version_urntariff itemsForeign key to parent tariff document
superseded_bytariff itemsSelf-referencing key across tariff versions

Example queries

Find all approved lease actions at the Port of Oakland in the last year:
SELECT
  f.record_id,
  f.occurred_at,
  c.title,
  c.matter_type,
  c.counterparty_urn,
  f.passed_flag,
  f.vote_tally
FROM port_authority_facts f
JOIN port_authority_claims c
  ON c.port_slug = f.port_slug
  AND c.event_id = f.event_id
  AND c.item_id = f.item_id
WHERE f.port_slug = 'oakland'
  AND c.matter_type ILIKE '%lease%'
  AND f.passed_flag = true
ORDER BY f.occurred_at DESC;
List all board meetings across ports with published minutes:
SELECT
  port_slug,
  body_name,
  event_date,
  agenda_file_url,
  minutes_file_url
FROM port_authority_meetings
WHERE minutes_status = 'published'
ORDER BY event_date DESC
LIMIT 25;
Compare tariff rate changes between versions at a specific port:
SELECT
  old_item.schedule_no,
  old_item.item_no,
  old_item.description,
  old_item.rate AS old_rate,
  new_item.rate AS new_rate,
  old_item.effective_date AS old_effective,
  new_item.effective_date AS new_effective
FROM port_authority_tariff_items old_item
JOIN port_authority_tariff_items new_item
  ON new_item.record_id = old_item.superseded_by
WHERE old_item.port_slug = 'jacksonville'
ORDER BY old_item.schedule_no, old_item.item_no;
Query rates in effect on a given date:
SELECT schedule_no, item_no, description, rate, unit
FROM port_authority_tariff_items
WHERE port_slug = 'jacksonville'
  AND effective_from <= '2025-11-01'
  AND (effective_to IS NULL OR effective_to > '2025-11-01');

Known limitations

  • Fact coverage is port-dependent. Only the Oakland Legistar adapter currently emits fact records with vote tallies and pass/fail outcomes. Other ports will gain fact emission as minutes-PDF extraction is added.
  • Tariff items cover JAXPORT only. The tariff parser is currently JAXPORT-shaped. PANYNJ uses a different table layout that requires a separate parser. Other ports (POLA, POLB, Oakland) negotiate pricing via leases rather than publishing item-level tariff schedules.
  • Lease and capital project tables are scaffolds. These tables exist in the schema but are not yet populated. Records will appear once the resolution-PDF extractor ships.
  • Counterparty resolution is deferred. counterparty_urn on claims and leases stays null until the corporate-registry entity resolution pipeline is available. Lessee names are stored as raw strings in the meantime.
  • Meeting dates may be missing. The NY & NJ adapter does not currently parse event dates from document metadata, so event_date is null for PANYNJ meetings.
  • Adapter coverage varies. Not all adapters surface the same fields. Granicus and HTML adapters do not provide roll_call or vote_tally data.
  • Tariff items are text-based. The rate field is stored as text to accommodate varied formats (ranges, multi-part rates, conditional pricing). Parse with care when doing numeric comparisons.
  • Historical depth varies by port. The initial backfill covers approximately one year of meetings. Older records may be added in future collection runs.
  • Undated tariff versions. Some earlier JAXPORT tariff versions lack effective_from. The superseded_by chain is still correct, but absolute point-in-time queries against undated periods are imprecise. Use the parent tariff’s tariff_year as a fallback.