Almost every passenger figure you will read about South African airports online traces back to the same handful of press releases, and most of them are quoted without the one detail that makes them mean anything: the period they cover. This page explains exactly where our numbers come from, how we check them, and where we refuse to publish a number at all.
The primary source for passenger numbers
Airports Company South Africa (ACSA) is a state-owned company that operates nine of the country’s airports, including the three international gateways. For each of those nine it publishes a passenger-movement statement as a PDF, updated monthly, on its own website.
Each statement is a single table covering every financial year from 2012/13 onwards. Within each year it breaks the traffic down four ways — international, regional, domestic and unscheduled — and splits each of those into arrivals, departures and a total, month by month. It is far more detailed than anything that reaches the news, and it is the document the news figures are ultimately derived from.
These are the statements we read. The index of them is published at airports.co.za/business/statistics, with one page, and one PDF, per airport.
The financial year is not the calendar year
South Africa’s financial year runs from 1 April to 31 March. ACSA reports on that basis, so a figure labelled FY2025/26 covers 1 April 2025 to 31 March 2026. A calendar-year figure for the same airport covers a different twelve months and will be a different number.
This is not a small discrepancy, and it is routinely muddled. Cape Town International handled 11,333,736 passengers in FY2025/26. A widely reported calendar-2025 figure for the same airport is 11,113,490. Both are correct. They describe different periods, and quoting one as though it were the other is wrong by more than 200,000 people.
Every passenger figure on this site carries the period it covers. If you ever find one that does not, it is a mistake and we would like to know about it.
How we check our own arithmetic
Reading a figure out of a table is where errors happen, so we do not trust our own reading. Each statement prints its own total row alongside the four traffic categories. We add up the four categories ourselves and compare the result against that printed total. If the two do not match to the passenger, we do not publish the number.
For FY2025/26 the reconciliation is exact at all nine airports:
| Airport | Intl + regional + domestic | Unscheduled | Published total |
|---|---|---|---|
| O. R. Tambo (JNB) | 20,012,114 | 71,285 | 20,083,399 |
| Cape Town (CPT) | 11,318,031 | 15,705 | 11,333,736 |
| King Shaka (DUR) | 5,608,575 | 7,624 | 5,616,199 |
| Chief Dawid Stuurman (PLZ) | 1,583,877 | 2,193 | 1,586,070 |
| George (GRJ) | 938,299 | 1,033 | 939,332 |
| King Phalo (ELS) | 910,658 | 1,080 | 911,738 |
| Bram Fischer (BFN) | 427,269 | 4,090 | 431,359 |
| Kimberley (KIM) | 169,565 | 1,173 | 170,738 |
| Upington (UTN) | 59,952 | 2,701 | 62,653 |
Those nine airports carried 41,135,224 passengers between them in FY2025/26, against 37,861,764 the year before — a rise of 8.6 per cent.
Where we publish no figure at all
Two significant airports are not operated by ACSA and therefore appear in none of these statements: Lanseria International, which serves Johannesburg from the north-west, and Kruger Mpumalanga International, the main gateway to the Kruger National Park. Both are privately run and neither publishes comparable monthly data.
Estimated figures for both circulate widely. We do not repeat them. Where we have no primary source, the passenger column on this site is blank, and it says so. A blank is more useful than a number nobody can check.
The other sources we use
- Airport codes, coordinates and elevation — the OurAirports open dataset, cross-checked against the operator’s own site.
- Entry requirements and visas — the Department of Home Affairs.
- Customs allowances and declarations — the South African Revenue Service.
- Health and vaccination requirements — the National Department of Health and the World Health Organization.
- Routes, schedules and baggage rules — the airlines’ own published timetables and conditions of carriage, checked on the date given on the page.
- Parks, reserves and conservation areas — SANParks and the relevant provincial authority.
What we do not do
We do not quote a figure we have not traced to its source. We do not present an estimate as a measurement. We do not round a number up to make a headline work, and we do not state a count — “the busiest of the five”, “one of only three” — that will quietly become false the next time an airport is added to the list.
Fares, opening hours and route maps change constantly. Where we give one, we give the date we checked it, and we would always rather send you to the airline or the airport to confirm than have you rely on a page that has aged.
Corrections
If a number here is wrong, tell us and we will fix it and say what changed. Our editorial policy sets out how corrections are handled, and the contact page explains how to reach us.