Certvas
Open standard · CC0

Certvas ID

A free, open, publicly-resolvable identifier for African and emerging-market entities. One stable key per entity, openly licensed and resolvable over the web at no cost — modelled on GLEIF’s LEI and OpenFIGI.

The identifier and the core record it resolves to are dedicated to the public domain under CC0 1.0. Enrichment and the identifier crosswalk are separate, licensed layers. This is a technical spec, not a governance charter — no committee, no board, just a documented minting scheme and a stability policy.

Resolve any ID at certvas.com/id/{dataco_id} · JSON by default, HTML in a browser · no key, rate-limited · clean 404 for unknown IDs.

1 · Format

Two shapes, both stable ASCII.

AnchorFormatExample
LEI-backedDC + first 24 hex of md5(LEI), uppercasedDC549300…
Seed (no LEI)DC + 24 hex of md5("SEED:"+name+"|"+jurisdiction)DC4C096C3F1B435F911B501106
ULID (no LEI/seed)Crockford base32 ULID, assigned once at first resolution01J9Z8ABCDEFGHJKMNPQRSTVWX

Every shape is [0-9A-Za-z] only, so a Certvas ID is safe in URLs, filenames, and as a join key. Join your data on dataco_id.

2 · Minting

Deterministic — and reproducible in SQL.

Where GLEIF has issued an LEI, that is the anchor: one global legal-entity truth, no re-derivation, and the LEI itself is CC0. The scheme is a pure function, so the same entity always resolves to the same ID across sources and re-runs.

  • Python : "DC" + md5(LEI).hexdigest()[:24].upper()
  • DuckDB : 'DC' || upper(substr(md5(LEI), 1, 24))
  • No LEI, but a known public issuer → a SEED: key over normalised name + jurisdiction (rules below).
  • No LEI and no seed → a ULID, minted once and then persisted permanently.
  • No natural persons. GLEIF SOLE_PROPRIETOR records are dropped before an ID is minted — enforced in code and CI.

Name normalisation — the complete rules

The seed form hashes a normalised name, so the normalisation is part of the identifier and is published here in full. Anyone implementing these rules computes the same dataco_id we do, without contacting Certvas.

  1. Uppercase the name.
  2. Replace every character outside A–Z, 0–9 and space with a space (regex [^A-Z0-9 ]+). Punctuation and & are therefore dropped.
  3. Collapse runs of whitespace to a single space and trim.
  4. Remove any token that is a legal-form suffix. The list is exactly these 19: AG, CO, COMPANY, CORP, CORPORATION, GMBH, GROUP, HOLDING, HOLDINGS, INC, LIMITED, LLC, LLP, LP, LTD, NV, PLC, SA, THE.
  5. Join the surviving tokens with single spaces. If every token was removed, fall back to the whitespace-collapsed string from step 3 rather than returning empty.

Then key = "SEED:" + normalised_name + "|" + jurisdiction and id = "DC" + md5(key).hexdigest()[:24].upper(), where jurisdiction is the uppercase ISO 3166-1 alpha-2 code.

InputNormalised
Safaricom PLCSAFARICOM
BUA CementBUA CEMENT
BUA Cement PLCBUA CEMENT
ZESCO Limited.ZESCO
I&M Holdings LimitedI M

Note the last two rows: & becomes a space, and HOLDINGS is a suffix, so I&M Holdings Limited normalises to I M. Rows two and three show why the rules matter — the same company with and without its legal suffix must land on one identifier, not two.

3 · Stability

IDs are never reassigned.

Never recycled

Once an ID points at an entity, it points at that entity forever. A retired entity keeps its ID; the ID is never reused for a different entity.

Merges recorded

When two IDs are the same entity, the losing ID is kept and marked superseded_by the winner. Lookups on the old ID keep working and carry the pointer.

Scheme frozen at v1

LEI-backed IDs are stable by construction. Any future change would be a new major version with a migration — v1 IDs would not change.

4 · Resolution

Free to resolve, no key.

Every Certvas ID resolves at https://certvas.com/id/{dataco_id} — JSON by default, a minimal HTML view for browsers. Rate-limited per client (by a hash of the IP; the raw IP is never stored). Unknown IDs return a clean 404. The record carries only entity-only public facts and known public identifiers (LEI — CC0, from GLEIF — and ticker, a public listing fact). No natural-person data, ever.

FieldDescription
dataco_idThe Certvas ID (the join key).
nameLegal name of the entity.
jurisdictionISO country / jurisdiction code.
entity_typecompany · fund · gov_body · other.
statusactive · inactive · unknown.
identifiers.leiGLEIF LEI where one exists (CC0).
identifiers.tickerPublic listing ticker where resolved.
superseded_byThe winning dataco_id if this ID was merged; else null.
licenseAlways CC0-1.0.
5 · Scope & license

Deep where incumbents are thin.

Certvas ID covers African and emerging-market listed and registered entities — the GLEIF spine for the region plus manually-seeded public issuers with no LEI yet. It is not a global registry; it is deliberately deep where LEI / FIGI / national registries are thin. Coverage expands entity-by-entity.

  • The identifier and its core record are CC0 1.0 — public domain, free forever, no attribution required (a link back is appreciated).
  • Enrichment (fundamentals, tenders, macro) and the crosswalk (dataco_id ↔ LEI / ISIN / registry, with history) are separate, licensed layers.

Cite it as: “Entities keyed by Certvas ID — free, open identifier: certvas.com/certvas-id.html”.