Sources & method

Nothing is ingested without an entry here carrying its licence and its commercial-reuse status. An absent or unknown licence is treated as not reusable. This page is generated from the same register the ingest engine reads, and shows what each source actually did on the last run.

How a record becomes a signal

1 · Ingest

One file per source hits a free public API and maps the response into a single universal record shape. The raw payload is kept for provenance.

2 · Resolve

Organisation names are canonicalised, then matched against ROR. Country must agree and a distinctive non-geographic token must overlap, or no merge happens.

3 · Link

Records attach to their organisations. An entity in two or more domains becomes a cross-domain candidate — the thing no single feed can tell you.

4 · Diff

Each run is compared with the last: new, gone, status-changed. If a source returns almost nothing, its disappearances are suppressed rather than reported as withdrawals.

What this does not do

No currency conversion. Values span AUD, USD, GBP and EUR. Nothing is converted or summed across currencies, anywhere in the pipeline.

Most feeds are capped at one page. Where a source is sorted by value, that means the largest N — not everything. The per-source table below states the cap.

Name matching is not identity. Private companies sit outside ROR and merge by canonicalised name alone. Treat those entities as indicative, not authoritative.

Awarded ≠ open. Every record carries a stage taken from its own source: open, forecast, awarded, closed or signal. Of the whole dataset, the great majority is already awarded. A date alone never makes a record actionable.

No placeholder data reaches this site. The patents module fabricates a handful of labelled sample rows when it has no API key. Those rows are excluded from every page here — which is why the defence primes do not appear as cross-domain entities. Add a free PatentsView key to make that link real.

The register