Method and sources
Count Room follows the provisional count for the 2026 local government elections. Everything here is arithmetic on what the Electoral Commission of South Africa (IEC) has published. Nothing on this site predicts, recommends or takes a side.
Where the numbers come from
The IEC publishes its results dashboard data as public JSON files. We read them on our server (your browser never contacts the IEC), at most once a minute per file, and keep the last good copy if the IEC is slow or unavailable. Every figure shows the time the IEC reported it.
- The national file: national totals, every province and every council (top party only), seats and completion counts.
- Nine province files: each province’s top 13 parties plus “other”, used for the projection.
- A council’s own file, fetched only when you open that council: every party, every ward, every voting district.
- The same council’s 2021 file and its 2026 ward boundaries, for the comparison and the ward map (these don’t change, so we keep them for a day).
Results are provisional until the IEC declares them. Electoral event IDs used: 2026 is 1887, 2021 is 1091.
The count
Vote shares are the IEC’s own: valid votes on the ward and PR ballots added together, as a share of all valid votes counted. “Voting districts in” is the share of voting districts whose results the IEC has captured. A council is hung when, once declared, no party holds more than half of its seats. Councils still counting are not classified.
The IEC’s national counters are sometimes a council or two ahead of the per-council records in the same file; the headline numbers use the counters, the council list uses the records.
The projection
Provinces count at different speeds. Early in the count, the raw national share is weighted towards whichever provinces have reported most. The projection corrects for that, province by province:
- For each province we take the share of voting districts still to report, and scale its valid votes up to a full count: projected votes = votes so far × districts expected ÷ districts reported.
- We assume the province’s party shares stay as they are, then add the provinces back together.
- A province that has reported nothing yet is filled in at the national mix, sized by its registered voters.
The range. Uncounted districts rarely vote exactly like counted ones. We simulate the count 3,000 times. In each run, every party’s share in each province moves by a random amount, larger where more of the province is still out (standard deviation (1.2 + 0.14 × share) × √(share uncounted), in percentage points); shares are kept at zero or above and rescaled to 100%. Each province’s turnout also moves (standard deviation 6% × √(share uncounted)). The range shown runs from the 5th to the 95th percentile. The random numbers are seeded from the data, so the same data always gives the same range.
Known limitations:
- It corrects for which provinces are behind, not for which areas within a province are behind. If a province’s cities count later than its rural areas, the projection will still lean the same way as the count in that province.
- For parties under about 1%, the range is skewed upwards: shares can’t go below zero, so the random moves push small parties up more than down. A party with no votes at all in a province stays at zero there.
- Each province file lists only that province’s top 13 parties. Where a nationally listed party was folded into “other” in a province, we estimate its votes there from its national total, taken from that province’s “other” row. The national file and the province files are published a few minutes apart.
Council seats
Once the IEC declares a council, we show its real seat numbers. While a council is still counting, we model them.
South African councils use a mixed system. Wards elect councillors directly; PR seats are then shared out so that, overall, each party’s seats match its share of the ward and PR votes together. A party that wins more wards than its share keeps them. That is the formula in Schedule 1 of the Municipal Structures Act.
By default we use a simpler approximation: the PR-ballot votes counted so far, shared out over all the council’s seats with a Droop quota and largest remainders. On the three declared councils we test against, it is never more than one seat out for any party. We have also implemented the Schedule 1 formula itself, which reproduces those councils exactly; it can be switched on with a setting, and we will make it the default once it has been checked against more declared councils.
Modelled seat ranges come from 2,000 simulations of the uncounted vote in that council, using the same random moves as the projection.
Coalition arithmetic
The calculator adds up seats. It says which combinations of parties hold enough seats between them (half the seats, rounded down, plus one). It says nothing about whether those parties would work together, and it is not a prediction of who will govern.
The list shows minimal winning combinations: up to four of the ten largest parties, reaching the majority line, where dropping any one member would fall short. Independent councillors are left out of the list because each votes individually. While a council is counting, the percentage is the share of seat simulations in which the combination still reaches the line.
Change since 2021
Ward boundaries were redrawn for 2026, so a 2026 ward and the 2021 ward with the same number can cover different areas. Instead of comparing wards, we compare voting districts, which mostly keep their numbers. For each ward we take the voting districts that have reported in 2026 and also existed in 2021, and compare each party’s share across exactly that set in both years. That redraws 2021 on the 2026 boundaries, and stays like-for-like while counting is still going on.
- Shares are of all valid votes, ward and PR ballots together: the only party breakdown the IEC publishes per voting district.
- Each comparison says how much of the counted vote it covers. Wards where less than 60% can be matched are left out of the “biggest swings” list.
- “Votes needed” uses the ward ballot: the runner-up needed the margin plus one more votes, or half the margin plus one voters switching from the leader.
- Turnout is not shown per ward: the IEC results files do not include registered voters per ward.
Maps
Boundaries come from the IEC’s results map (Municipal Demarcation Board boundaries, 2026 wards), simplified so the whole country loads quickly on a phone. Councils are coloured by their largest party once declared, or the party leading on votes while counting (pale), with hung councils hatched. Colour is never the only cue: every shape has a text label, and the same information is in the council list.
Town and suburb names on the ward maps come from GeoNames (geonames.org, CC BY 4.0). Where names would overlap, the better-known place is shown; you can hide them, or show ward numbers instead.
The AI analyst
Where it is switched on, the Ask page sends your question, with the figures this site is showing, to an AI model (Claude, by Anthropic). It is instructed to use only those figures, to say when they don’t answer the question, and not to predict results or take sides. It can still make mistakes, so check any number against the relevant page. Questions are not stored with anything that identifies you.
Privacy
Count Room has no accounts and sets no cookies. Where analytics are switched on, we count page views with Cloudflare Web Analytics, which uses no cookies and does not track individuals across sites.
Neutrality
Count Room is non-commercial and has no party affiliation. Party colours follow each party’s usual colour where there is one, adjusted so they can be told apart and read in light and dark mode; every coloured mark is labelled with the party’s name. Parties are ordered by votes or seats, never by any other judgement.
Attribution
Source: Electoral Commission of South Africa (IEC), public results dashboard data. Provisional until declared. Boundaries: IEC / Municipal Demarcation Board. Place names: GeoNames, CC BY 4.0. Count Room is not affiliated with the IEC. Questions about official results should go to the IEC.