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.

685,542
Daily price rows
49,365
With a true high & low
7,583
Index closes since 1996
28,239
Filings indexed

What is running, and when

Daily prices

● through 2026-10-30

685,542 rows across 154 symbols, every one carrying its source (685,542 provenance-stamped). Captured after the official 21:00 WAT finalization, reconciled again the next morning.

49,365 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-10-30

7,583 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-10-30

28,239 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-10-31

1,903 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-10-31

148 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
43,821 range rows · 88.8%

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
5,544 range rows · 11.2% · 2026-08-26 to 2026-10-30

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