A long-form, technical overview. Reads like documentation, not marketing. If you want the brand-level pitch instead, the homepage covers it in 90 seconds.

Every table in every insigz tenant is one of: a source registry, an observation log, an entity table, an event log, a case binding, or a report manifest. There are no exceptions.
Source. An external system we read from. ais.marinetraffic, entso-e.transparency, ofac.sdn. Each source has an ingestor, a polling cadence, and a signature.
Observation. An atomic, timestamped, geolocated fact produced by an ingestor. Immutable. Signed by its source.
Entity. A noun in the world — vessel, cable, port, substation, sanctioned party, news outlet. Entities accumulate observations and have stable canonical IDs.
Event. A change in entity state, derived from one or more observations. cable-throughput-drop, ais-gap, designation-added. Carries confidence and back-references to its constituting observations.
Case. A bound collection of events that mean something together. Cases are the unit of analysis. Cases produce reports.
Report. The artifact that leaves the platform. Signed PDF or web export, every claim cited to source observations.
Five nouns are enough to describe everything insigz models. We add no new nouns; new sources, new entities, new events all fit the existing chain.

Every source family ingests through the same shape: fetch → normalize → geolocate → sign → write. The detail of any specific source (an OpenAPI spec, a CSV download, a WebSocket stream, an HTML scrape) is hidden inside the ingestor.
The source families currently live in insigz:
Preview — The Ontology Agent collapses the old 2–5-day, two-specialist onboarding into a guided chat: drop a feed and it profiles the payload, drafts the connector and the field→Observation mapping, fits it to your existing entity/event types (reuse over new), proposes resolution keys, and dry-runs the result against a live sample. A human still commits every schema change (doctrine Q9) — so the canonical model stays stable, never forked. How the Ontology Agent works →

The fusion engine reads new observations and decides three things: which entity the observation belongs to, whether the observation changes state (and therefore creates an event), and how confident we are in the resolution.
The entity-resolution algorithm is four-tier:
Each resolution carries a confidence score. Confidence below threshold → flag for analyst review. We never silently dispose of an observation; if we can't bind it, we surface the orphan.
Event detection is similar: derived from a state diff on the bound entity. vessel.flag changed RU → CY produces a flag-change event. The event carries provenance back to the two observations that established the diff.

Claude is the analyst's interface to the data model. The analyst asks a question in natural language; Claude parses it into structured tool calls; the tools run against the canonical data; Claude composes an answer that cites every claim back to source observations.
An analyst asks:
pre>span class="c">"show me vessels off Klaipėda that turned off AIS in the last 48h and are owned by sanctioned entities"/span>/pre>
Claude doesn't try to remember which vessels those are. It calls tools — vessels.near(port="Klaipėda"), vessels.ais_gaps(since=48h), entities.sanctions_exposure(ids=…) — and assembles the answer from the actual data. The response includes clickable citations to the underlying observations.
The discipline: Claude never asserts a fact the data model can't support. If the data is missing or stale, Claude says so. Hallucinated citations are a launch-blocker; we monitor for them and flag in CI.
We route across a family of frontier models — a high-capability model for analyst-facing chat, a mid-tier model for routine inference, and a fast, cost-tuned model for high-volume tasks (intake classification, embedding generation).
classification, embedding generation)./p>

The analyst's working surface is a map plus a chat plus a case. Maps render via MapLibre GL; analyst chat sits in a side panel that can dock or float; cases bind related entities and events into a workspace that becomes the basis of the next report.
Two surface modes, plus the Arena:
Density is configurable per surface. The approval queue and audit log are compact; everything else is "standard."

Every customer engagement runs in its own Postgres database, its own Cloud Run service, its own KMS keys. There are no shared schemas, no shared rows, no shared inference paths. Two customers cannot query each other's data, regardless of code-path correctness.
We chose single-tenant for three reasons:
Provisioning is one Cloud Run deploy + one migration. We never multi-tenant for cost reasons; we'd rather charge more.

Extensions are vertical workflows that sit on top of the generic platform, behind a feature flag, with their own database tables and UI routes. The platform stays generic; extensions handle vertical-specific work.
Current extensions:
Planned extensions (driven by customer demand, not roadmap-itis):

The Autonomy Layer turns insigz from a platform you query into one that monitors continuously — while keeping the line that matters for compliance, journalism, insurance and policy buyers: it automates detection and drafting, never acting.
Bounded autonomy (doctrine Q10). An agent may auto-apply only internal, reversible outcomes above a high confidence threshold — attach an observation, flag an entity, raise an alert. Anything customer-facing or irreversible always stages for human review. Every auto-apply is reversible and audited.

Link analysis is where intelligence work actually happens — and where a list of rows fails you. The Entity Network renders the canonical model as a navigable graph: nodes are entities, edges are the ties derived from shared observations and events. You can grab it, spin it, and zoom it; it is a live 3D point cloud, not a static diagram.
Colour by community, by entity type, or by risk; brush to an ego-network around any node; jump straight from a node to its cases and reports. How the network is built →

An entity's rhythm is itself a signal. Pattern of Life plots an entity's activity over time against a robust baseline band — the range that activity normally sits in — and flags the moments it leaves the band. The question stops being "what happened" and becomes "what happened that shouldn't have."
Pattern of Life turns the canonical timeline into an early-warning surface — grounded, scored, and one click from the observations behind every spike. How baselines are scored →