Fresh, auditable,
Nigerian.
Every figure here is parsed from the exchange’s own filings and price records, carries its source on the row, and is captured after the official close — not before it. This page is measured live from our tables each time it loads. If a feed stalls, you will see the stall.
What is running, and when
Daily prices
● through 2026-09-15680,867 rows across 154 symbols, every one carrying its source (680,867 provenance-stamped). Captured after the official 21:00 WAT finalization, reconciled again the next morning.
48,472 rows carry a true daily range (high above low — we refuse zero-width placeholders). Closes and volume are complete; intraday ticks are not offered.
NGX All-Share Index
○ through 2026-09-117,558 daily closes back to March 1996 — validated point-for-point against the exchange's published series before loading.
One value per session. No index OHLC exists officially, so none is invented.
Filings & disclosures
● through 2026-09-1527,757 company documents indexed — results, corporate actions, director dealings — fetched from the exchange's own document library.
Every parsed figure keeps a pointer to the filing it came from.
Fundamentals
● through 2026-09-151,612 reporting periods, parsed from the filings above. Forecasts a company files are stored — and labelled as forecasts, never mixed into actuals.
Nigerian interims are cumulative; our ratio layer knows it. Unit-scale errors (the ₦'000 trap) are screened against each company's own history.
Verdicts
○ through 2026-09-11147 published views, each disclosing the fundamentals period it is based on.
Regenerated as data changes, stalest-first; every page shows its basis.
Where each figure comes from
Every price row records its own sources — one for the close and volume, one for the daily range — so “where did this number come from?” has an exact answer per row rather than a general assurance.
Our commercial licence covers the great majority of the series, including every close and volume outside the dates opposite.
The exchange publishes an official daily price list openly on its own site. Where our licensed feed carries no high and low for a session — which is most sessions, for most companies — we take the range from that public record rather than leave the field empty. 511 rows also take their close from it.
Add ?provenance=1 to any prices call and every bar returns the source of its close and its range. We publish the split because a figure whose origin you cannot check is a figure you should not trust.
What we refuse to do
Most data defects are not wrong numbers. They are plausible numbers standing in for missing ones. These are the four we found in our own series, and the rules that now stop them at the point of write.
Ours once wrote the previous day’s close into the open field and called it an approximation. It is not an approximation of anything. 118,535 rows carried it; they are null now.
A high equal to the low is a placeholder, not a session range — it passes every null check and then reports zero volatility. We refused 342,337 of them on import.
A stale figure repeated looks like fresh data. If we do not have today’s number, the field is null and this page says so.
Prices are captured after the official close, then reconciled again the next morning — because the earlier version froze mid-session values for five years.
Want this data in your product? The same tables serve our Data API. Found a discrepancy? Tell us — the most useful audit we ever received came from a user, and we shipped fixes rather than explanations.