Skip to main content
Vector search alone fails on multi-hop reasoning — corporate ownership chains, compliance lineage, cascading civic approvals, vessel-to-company-to-sanction chains. The entity graph export gives you a compact, queryable edge list you can import into your own graph layer.
The entity graph export is available on the Enterprise tier only. It ships as codex_entity_graph.parquet alongside per-dataset slices and a stats sidecar with every Enterprise catalog purchase.

What you get

A single Parquet edge-list file (Snappy-compressed) with per-dataset slices. This is not a graph database — you import it into your own graph engine (Neo4j, Kuzu, TigerGraph, DuckDB, NetworkX, or similar). Expected size at launch: approximately 8–12 million edges across all dataset families.

Edge schema

Each edge in the graph has the following fields:
FieldTypeDescription
from_idstringAPRS URN or raw ID (e.g. H3 index, MMSI)
from_typestringNode type of the source (see node types)
edge_typestringRelationship type (see edge types)
to_idstringAPRS URN or raw ID
to_typestringNode type of the target
confidencefloatPipeline confidence in the edge, 0 to 1
source_datasetstringWhich Codex dataset emitted it
source_record_idstringRecord that generated the edge (for provenance)
valid_fromdateWhen the relationship became true
valid_todateWhen it stopped being true (null = currently valid)
extracted_attimestampWhen the pipeline extracted the edge
extractorstringName and version of the extractor
evidence_anchorJSON{doc_id, page, span} where applicable
attrsJSONEdge-type-specific metadata (e.g. vote tally, ownership percentage)

Node types

Every node is addressable by a stable ID. Most use APRS URNs.
Node typeID formatSource
entity:personurn:aprs:entity:person:{id}Civic records, OSHA, entity resolution
entity:organizationurn:aprs:entity:company:{id}Government records, permits
entity:agencyurn:aprs:entity:agency:{id}Issuing authorities
entity:vesselurn:aprs:record:maritime:vessel:{imo}AIS and Equasis
entity:trusturn:aprs:entity:trust:{id}Beneficial ownership resolution
record:civicurn:aprs:record:civic:us:{source}:{id}Civic Intelligence
record:permiturn:aprs:record:permit:...Permit Signals
record:eventurn:axiom:event:{uuid}Events Timeline
record:osha_caseurn:aprs:record:osha:case:{id}OSHA Safety
record:poiurn:aprs:record:poi:{source}:{id}POI Intelligence
record:parcel{jurisdiction_slug}:{parcel-number}Permits, assessor feeds
h3_cellRaw H3 res-8 stringDerived across datasets
porturn:axiom:port:{unlocode}AIS Maritime
jurisdictionjurisdiction_slugCivic, Permits

Edge types

Civic

Edge typeDirectionAttributes
SUPPORTSentity:person → record:civicmention_count, excerpt_span
OPPOSESentity:person → record:civicmention_count, excerpt_span
ABSTAINS_ONentity:person → record:civicmention_count, excerpt_span
MENTIONSrecord:civic → entitysentiment, role, mention_count
REPRESENTSentity:person → entity:organizationcapacity (attorney, lobbyist, staff)
HAS_CONFLICT_ONentity:person → record:civicsource
AMENDSrecord:civic → record:civicrelationship_type

Events

Edge typeDirectionAttributes
FOLLOWSrecord:event → record:eventlag_days
TRIGGEREDrecord:event → record:eventReverse of FOLLOWS for cascade detection
AFFECTSrecord:event → entityWhen event has an entity_id
OCCURS_ATrecord:event → h3_cellSpatial index

Maritime

Edge typeDirectionAttributes
CALLED_ATentity:vessel → porteta, ata, etd, atd, berth_id
OWNSentity:organization → entity:vesselownership_pct, effective_from, source
MANAGESentity:organization → entity:vesselsource
FLAGSentity:vessel → jurisdictionflag_state_iso3
SANCTIONED_BYentity:organization → jurisdictionsanctions_list, listed_on

Permits

Edge typeDirectionAttributes
LOCATED_INrecord:permit → h3_cellDirect H3 mapping
LOCATED_ONrecord:permit → record:parcelWhen parcel is known
APPLIED_BYrecord:permit → entityApplicant
ISSUED_BYrecord:permit → entity:agencyAuthority
CONTINGENT_ONrecord:permit → record:permit or record:civicScope dependency

Urban Signal Grid

Edge typeDirectionAttributes
HAS_SCOREh3_cell → score nodecomposite_score, scored_at
CONTAINSh3_cell → record:poi or record:permitSpatial join
NEIGHBORSh3_cell → h3_cellk: 1 (direct neighbor only)

OSHA

Edge typeDirectionAttributes
ENFORCED_AGAINSTrecord:osha_case → entity:organizationpenalty_usd, citation_count
PARENT_OFentity:organization → entity:organizationCorporate parent links
AT_FACILITYrecord:osha_case → record:poiWhen FRS match exists

Example queries

You can query the graph directly with DuckDB and Parquet — no external graph database required.

Vessel → owner → sanctions → sister vessels

WITH owners AS (
  SELECT from_id AS owner_id
  FROM codex.entity_graph
  WHERE edge_type = 'OWNS' AND to_id = :vessel_urn
),
sanctioned AS (
  SELECT from_id AS owner_id
  FROM codex.entity_graph
  WHERE edge_type = 'SANCTIONED_BY'
    AND from_id IN (SELECT owner_id FROM owners)
),
other_vessels AS (
  SELECT to_id AS sister_vessel
  FROM codex.entity_graph
  WHERE edge_type = 'OWNS'
    AND from_id IN (SELECT owner_id FROM sanctioned)
    AND to_id != :vessel_urn
)
SELECT * FROM other_vessels;

Recursive cascade — downstream records from a dark event (up to 3 hops)

WITH RECURSIVE reachable(id, hop) AS (
  SELECT :seed_event_uuid, 0
  UNION ALL
  SELECT e.to_id, r.hop + 1
  FROM codex.entity_graph e
  JOIN reachable r ON e.from_id = r.id
  WHERE e.edge_type IN ('FOLLOWS', 'TRIGGERED', 'AFFECTS')
    AND r.hop < 3
)
SELECT r.id, r.hop, e.to_type
FROM reachable r
JOIN codex.entity_graph e ON e.from_id = r.id;

Provenance

Every emitted edge carries evidence_anchor, extractor, and confidence, following the same contract as the claim/fact layer. You can join edges on source_record_id back to the record’s claims[] array for full provenance.

Tier availability

TierGraph export included
ResearchNo
CommercialNo
EnterpriseYes — full graph, per-dataset slices, and stats sidecar