Method & data
The register is a set of JSON files in data/ plus markdown in
site/articles/. All pages are generated from those records,
and a link to a record that does not exist fails the build.
What the confidence ratings mean
Confidence is the compiler's assessment, applied consistently across every finding and every entity. It is a separate colour system from everything else on the site, so a claim's strength reads at a glance and cannot be confused with a category or a status.
Stated by a primary source — the party's own filing, site, or an official designation.
Multiple independent technical or documentary indicators agree, with no contrary evidence.
Consistent with the hypothesis but explainable other ways. Do not rely on it.
Investigated and disproven. Kept on the record so the dead end is not walked twice.
The rule that matters most
Shared infrastructure proves a shared operator. It does not prove a shared owner. Almost everything in this file rests on DNS, WHOIS and reverse-IP, and all of that evidence is operator-level.
Where a claim rises above that — where a party's own filing, website or an official designation says something directly — it is rated confirmed and the quote is reproduced with its citation. Where it does not, it is rated suggestive however suggestive the pattern feels.
Disproven leads are kept at struck rather than deleted, so nobody walks the same dead end twice. There are currently none on the record.
Why a dead site still counts
Most of the domains in this register are no longer live — parked, suspended, or not resolving at all. That is expected, not a data-quality problem. DNS, WHOIS, mail and registrar records survive long after a website goes dark, and this register exists to reconstruct a network of ownership and infrastructure, not to monitor who currently has a homepage online.
Each domain's status — live, dormant, suspended, not resolving, or mail only —
is recorded on the domain register for exactly this reason: so a
dead site reads as a dead site, and the historical trail it left is not mistaken for
something happening today.
Adding a company or a person
Append a record to data/entities.json. Fields come from data/schema.json.
{
"id": "some-company", // lowercase, becomes /entity/some-company/
"name": "Some Company L.L.C.",
"aka": ["شركة ما"],
"type": "company", // enums.entity_type
"jurisdiction": "AE", // enums.jurisdiction
"sanctions": "not_designated", // enums.sanctions
"confidence": "strong", // enums.confidence
"sector": "General trading",
"summary": "What it is and why it is in the file.",
"parent": "amh-group", // must exist in entities.json
"controlled_by": ["some-person"], // must exist
"sources": ["expertblue-2014"] // must exist in sources.json
}
Record each relationship once, on the child. The reverse edges —
subsidiaries, controls, the domains and findings that point back at an entity — are
computed at build time in lib/dossier.mjs, so the two directions cannot
disagree.
Adding a finding
Append to data/findings.json. Every finding must cite at least one source — that one is an error, not a warning.
{
"id": "some-finding",
"order": 11, // position on the front page
"title": "What was found",
"confidence": "strong",
"summary": "One or two sentences.",
"quote": { "text": "…", "cite": "where it came from" },
"detail": ["A paragraph.", "Another paragraph."],
"entities": ["some-company"],
"sources": ["obs-dns-20260812"]
}
Adding an article
Drop a markdown file in site/articles/. Attach it to any number of findings and
entities by id and it appears on each of those pages automatically — no edit to the entity
or finding record needed.
---
title: Expert Blue, 23rd floor
summary: One sentence for the index card.
date: 2026-08-12
byline: Entity note
findings: [expert-blue-dubai]
entities: [expert-blue, amh-group]
sources: [expertblue-2014]
---
Markdown body.
npm run validate checks article frontmatter the same way it checks the JSON: a
reference to a finding, entity or source id that does not exist stops the build.
Take the data
Everything here is licensed under CC BY 4.0. Copy it, adapt it, republish it, build on it — for any purpose, commercial or not — as long as you credit the register and link back to it.
The register is a handful of JSON files, one per record type — entities, findings, domains, servers, events and sources — plus a schema that defines every field. Each relationship is recorded once, on the child, and the reverse edges — an entity's subsidiaries, the findings that cite it — are computed at build time, so the two directions can't disagree.
- dossier.json — the whole register, schema-versioned
- domains.csv — the domain table, columns generated from the schema
- Sources — the bibliography every claim cites