syncRefreshing market data…
Investo · Data

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.

680,867
Daily price rows
48,472
With a true high & low
7,558
Index closes since 1996
27,757
Filings indexed

What is running, and when

Daily prices

● through 2026-09-15

680,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.

Nightly, 21:20–21:40 WAT, plus a 06:30 reconciliation pass

NGX All-Share Index

○ through 2026-09-11

7,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.

Nightly

Filings & disclosures

● through 2026-09-15

27,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.

Three sweeps daily, parse nightly

Fundamentals

● through 2026-09-15

1,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.

Nightly, after the filing parse

Verdicts

○ through 2026-09-11

147 published views, each disclosing the fundamentals period it is based on.

Regenerated as data changes, stalest-first; every page shows its basis.

Rolling, daily

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.

Licensed market-data feed
46,361 range rows · 95.6%

Our commercial licence covers the great majority of the series, including every close and volume outside the dates opposite.

NGX’s own published price list
2,111 range rows · 4.4% · 2026-08-26 to 2026-09-15

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.

Never invent an opening price

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.

Never store a range of zero width

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.

Never carry a value forward

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.

Never present the provisional as final

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.