Methodology
Data sources and what we compute from them
City of Cape Town: General Valuation Roll (GV2022)
Open DataThe GV2022 dataset contains the legally assessed market value of every rateable property in Cape Town, assessed as at 2 July 2022. We compute the following at suburb level:
- Median property value (GV2022)
- Median land extent (m²) and median building area (m²)
- Site coverage ratio: building area ÷ land extent
- Price per m² (land and building separately)
- 4-year CAGR from GV2018 to GV2022
- Cross-suburb percentile ranks for all of the above
// 4-year CAGR: GV2018 to GV2022
cagr = (gv2022 / gv2018)^(1/4) - 1
// Site coverage
site_coverage = median_building_area_m2 / median_land_extent_m2
// Percentile rank across all 744 Cape Town suburbs
percentile_rank = rank(suburb_value, all_suburb_values) / total_suburbs x 100
Important: these are municipal valuations, not transaction prices
The GV2022 roll is assessed for municipal rating purposes, not as a live market index. Actual transaction prices may differ materially from the General Valuation. The CAGR shown for each suburb is the change in the municipality's assessed value between GV2018 and GV2022 - it is not derived from property sales data. Suburbs with a very low base value in GV2018 can show high percentage CAGR figures that overstate absolute rand gains.
Property values are economic context, not a safety signal. The relationship between property values and crime is bidirectional: crime reduces values, and higher-value areas attract different crime types. In Cape Town's apartheid-era geography, property values are deeply confounded with racial spatial planning. StreetSignal's safety indices derive exclusively from SAPS crime data. Property values are never used as an input to or proxy for safety scoring.
City of Cape Town: Prepaid Electricity Data
Open DataMonthly prepaid electricity consumption (kWh) and connection counts by suburb and tariff type, sourced from the City of Cape Town Open Data Portal (December 2025). We normalise against Stats SA Census 2022 population to produce per-capita and per-connection consumption metrics.
// Per-capita consumption
kwh_per_capita = total_units_kwh / census_2022_population
// Consumption tier thresholds
Ultra High: kwh_per_capita > 500
High: kwh_per_capita > 200
Moderate: kwh_per_capita > 100
Low: kwh_per_capita > 50
Minimal: kwh_per_capita <= 50
// Percentile rank computed at build time across all suburbs with valid data
Limitation: this dataset covers prepaid (token) meters only. Post-paid and credit meter connections, more common in higher-income suburbs, are not included. Wealthier suburbs will therefore show lower kWh per capita than their actual consumption.
SAPS: Crime Statistics (via DataFirst)
CC-BY 4.0Quarterly crime statistics published by the South African Police Service and distributed by DataFirst at the University of Cape Town under a Creative Commons Attribution 4.0 licence. StreetSignal currently uses Q3 2025/2026 (October-December 2025) data. Crime data is recorded at SAPS precinct level, not suburb level. We map precinct-level incident counts to suburbs using our proprietary 744-suburb crosswalk. 734 of 744 suburbs (98.7%) are successfully matched to a SAPS precinct. Of these, precincts with a station-served population below 1,000 residents are excluded from the percentile ranking to prevent denominator collapse from distorting scores across all other suburbs. Crime totals are normalised by station-served population (per 100,000 residents) before ranking, ensuring that larger communities are not penalised by absolute crime counts alone.
Coverage caveat
The SAPS precinct-to-suburb spatial join is not complete for all 744 suburbs in our dataset. Suburbs where the join did not return a matched precinct display a neutral safety index pending a full boundary reconciliation. These suburbs are identifiable by a precinct label of "Unassigned" on their suburb page.
Reported crime is not experienced crime
SAPS statistics record crimes reported to police stations. They do not capture crimes that go unreported. StatsSA's Governance, Public Safety and Justice Survey (2023/24) indicates that 44.1% of housebreaking incidents are reported to police. Reporting rates vary by crime type, area, and demographics - sexual offences and domestic violence are among the most under-reported categories. A suburb's safety index reflects relative reported crime pressure - it is not a measure of actual victimisation. StreetSignal presents this data because it is the best systematic source available, while encouraging users to interpret alongside local knowledge and trend direction.
City of Cape Town: Proximity Infrastructure
Open DataHealth facilities (157 sites), libraries (102 sites), and green spaces (5,198 sites, of which 1,460 are >= 0.5 ha) are sourced from City of Cape Town GeoJSON datasets. Distances are computed using the Haversine formula from each suburb's centroid to the nearest qualifying facility.
// Haversine straight-line distance (km)
d = 2r x arcsin(sqrt(sin^2(dlat/2) + cos(lat1)cos(lat2)sin^2(dlng/2)))
// where r = 6371 km (Earth radius)
// Note: straight-line distance only, not walking or road distance
Stats SA: Census 2022
PermissivePopulation counts at sub-place level, spatially matched to City of Cape Town suburb boundaries. Used as the denominator in electricity per-capita normalisation and as a standalone population indicator. Sub-place to suburb matching uses a spatial overlap methodology where sub-places are assigned to the suburb with the greatest boundary intersection.
Department of Basic Education: Schools and NSC Results
CC-BY 4.0School locations, fee quintiles, and phase classifications are geolocated and assigned to suburbs by point-in-polygon intersection using each school's registered GPS coordinates against suburb boundary polygons.
National Senior Certificate (NSC) matric results for the 2025 examination year are sourced from the DBE Master List and matched to suburbs via EMIS school codes. Where multiple schools serve a suburb, results are aggregated using a Buhlmann credibility weighting (k = 50) that shrinks small-cohort results toward the suburb's survey group mean, reducing instability from single-school suburbs with small matric classes.
// Buhlmann credibility weight for matric aggregation
k = 50 (fixed, calibrated against Western Cape variance structure)
credibility = n / (n + k)
// n = number of matric candidates in suburb
// credibility approaching 1 = retain raw pass rate
// credibility approaching 0 = shrink toward survey group mean
The EMIS masterlist (Western Cape Q2 2025) provides learner counts, educator counts, and school metadata for 1,095 Cape Town schools across 344 suburbs. The learner-educator ratio (LER) is calculated per school as total learners divided by total educators. LER thresholds: under 30:1 is favourable by WCED standards, 30-40:1 is adequate, over 40:1 indicates strained capacity (source: WCED sector analysis).
Coverage: 157 of 744 suburbs (21%) for matric; 344 of 744 (46%) for school profiles
NSC matric data is available for 157 suburbs. School profiles with learner-educator ratios cover 344 suburbs via EMIS Q2 2025. The remaining suburbs either have no schools or could not be matched via EMIS codes or GPS. Matric pass rates measure examination throughput, not educational quality, and are influenced by candidate selection practices at school level. The DBE itself cautions against using pass rates as a standalone quality benchmark. StreetSignal displays pass rates alongside context, not in isolation.
City of Cape Town: Service requests (civic responsiveness)
Open DataApproximately 2.5 million service requests logged by the City of Cape Town, aggregated to suburb level. We compute median resolution time, same-day resolution percentage, volume per suburb, and a percentile rank against the city median. Top complaint categories are extracted per suburb.
City of Cape Town: Household Survey 2024
Open DataHousehold-level survey data from the City of Cape Town (February-October 2024), covering 163 survey areas matched to 407 suburbs via survey group assignment. Covers dimensions including income, assets, food security, housing, energy, water and sanitation, internet access, expenditure, demographics, home business activity, deprivation, and negative events. Sample size and Buhlmann credibility weighting are computed per suburb to flag low-confidence estimates.
// Engel Coefficient: food expenditure as % of total household spend
engel = (monthly_food_expenditure / total_monthly_expenditure) x 100
// Threshold interpretation
< 20%: Affluent, significant discretionary income (city benchmark: 35.3%)
20-39%: Comfortable, moderate discretionary income
40-59%: Under pressure, limited discretionary income
>= 60%: Severe economic stress
// Deprivation Breadth: dimensions where households report inability to afford
deprivation_breadth = count(dimensions where survey_pct_cannot_afford > threshold)
// 8 dimensions: food, shelter, electricity, medical, fuel, airtime, rates, debt repayment
// Score interpretation
0-2 / 8: Low material stress
3-4 / 8: Moderate material stress
5-8 / 8: Elevated material stress
// Buhlmann credibility weight: shrinks small samples toward the survey group mean
k = variance_within / variance_between
credibility = sample_size / (sample_size + k)
// credibility < 0.5: flagged as "Indicative", treat with caution
The 8 deprivation dimensions are: food affordability, shelter costs, electricity access, medical expenses, fuel, airtime, municipal rates, and debt repayment. A suburb scoring 5/8 means that in 5 of these 8 categories, a statistically meaningful share of surveyed households reported being unable to afford that item in the reference period.
Coverage: 407 of 744 suburbs (55%)
Household survey data is available for 407 suburbs that met the minimum sample size threshold for reliable estimates. The remaining 337 suburbs have a suppressed household data record. Survey group matching uses geographic proximity; small suburbs may inherit indicative data from a neighbouring survey group, flagged with a lower credibility weight.
City of Cape Town: Transport data
Open DataCommute mode data from the CCT Household Survey is available for suburbs within the 163 surveyed areas. For suburbs with non-suppressed data, we surface the dominant commute mode, modal split percentages across vehicle, minibus taxi, walking, and bus, and a survey-derived transport insight. Taxi connectivity data covers 637 suburbs and serves as the primary transport signal.
Interpreting transport mode data
Transport mode is a socioeconomic proxy, not a lifestyle indicator. A suburb where 94% of residents commute by private vehicle signals high income and a car-dominant commuter profile. A suburb where 80% rely on minibus taxi signals working-class commuter patterns and limited public transit alternatives. High walking rates typically reflect structural necessity, not a walkability advantage in the Western sense. These distinctions are made explicit in each suburb's transport section.
Transport labels: Each suburb displays one of five transport badges based on modal share: Private vehicle dominant (vehicle >= 60%), Vehicle-led mix (vehicle is the leading mode but below 60%), Taxi-connected (minibus taxi is the leading mode), Walking dominant (walking is the leading mode), or Mixed mode (no single mode dominates).
Commute mode coverage: 163 survey areas covering suburbs with non-suppressed data. Taxi connectivity: 637 of 744 suburbs.
City of Cape Town: Taxi connectivity
Open DataTaxi connectivity measures access to Cape Town's minibus taxi network, the primary public transport mode for the majority of working-class commuters. Each suburb receives a percentile score (0-100) indicating how it ranks against all 744 suburbs.
How the score is calculated
Route matching: Routes are matched to suburbs using a hybrid methodology. Text matching (primary) compares suburb names against route origin/destination fields. Spatial intersection (secondary) detects routes passing within 500m of the suburb centroid. The union of both methods determines the route count.
Scoring: Route count x 1.2 if the suburb has a CBD-connected route, then ranked as a percentile across all suburbs with at least one route.
Pass-through detection: Suburbs with high spatial matches but zero text matches are flagged as pass-through: routes traverse the suburb but may not originate or terminate there.
Limitations
The centroid-based spatial method may undercount connectivity for large suburbs (>10 km²) with distributed taxi ranks. Routes represent official mapped routes only; informal routes are not included. The score does not measure service frequency or wait times.
Source: City of Cape Town Transport and Urban Development Authority, 2024 route dataset (1,466 routes). Coverage: 637 of 744 suburbs.
City of Cape Town: Proximity infrastructure
Open DataFire station and swimming pool locations are sourced from the City of Cape Town Open Data Portal. Each suburb page displays the nearest fire station with straight-line distance in kilometres, and the number of public swimming pools within or adjacent to the suburb boundary.
Fire station proximity is a straight-line (haversine) distance from the suburb centroid to the nearest station. It does not account for road routing, traffic, or response time. Swimming pool counts include City-operated public pools only; private and body-corporate facilities are excluded.
Source: City of Cape Town Open Data Portal, facility location datasets. Coverage: 744 suburbs (fire stations), 744 suburbs (swimming pools).
City of Cape Town: Healthcare facilities
Open Data157 healthcare facilities sourced from the City of Cape Town Health Care Facilities dataset. Facilities are classified as public (Community Day Centres, clinics, provincial hospitals) or private. Distances are computed using the Haversine formula from each suburb's centroid to each facility.
- Nearest public facility (name and straight-line distance in km)
- Nearest private facility (name and straight-line distance in km)
- Count of all facilities within 5 km of the suburb centroid
Source: City of Cape Town Open Data Portal, Health Care Facilities dataset. Coverage: 744 of 744 suburbs.
City of Cape Town: Places of worship
Open Data1,645 places of worship sourced from the City of Cape Town Places of Worship dataset. Facilities are matched to suburbs via the ADR_SBRB field in the source data and grouped by religion type.
- Total count of places of worship per suburb
- Breakdown by religion: Christian, Islamic, Jewish, Hindu, Other
Source: City of Cape Town Open Data Portal, Places of Worship dataset. Coverage: 299 of 744 suburbs (40.2%).
City of Cape Town: Municipal complaints (C3 service requests)
Open DataApproximately 2.5 million service requests (2025-2026) from the City of Cape Town C3 system, matched to suburbs by suburb name. Complaint rates are normalised per 1,000 estimated households to enable cross-suburb comparison.
- Total complaints per suburb
- Complaint rate per 1,000 estimated households
- Top 3 complaint categories
- Median resolution time (days)
- Unresolved complaint rate
// Estimated households (Census 2022 population proxy)
estimated_households = census_population / 3.3
// Complaint rate normalisation
complaint_rate = (total_complaints / estimated_households) x 1000
Source: City of Cape Town Open Data Portal, C3 Service Requests. Coverage: 737 of 744 suburbs.
City of Cape Town: Official suburb boundaries
Open DataSuburb boundary polygons are sourced from the City of Cape Town Open Data Hub and simplified using Douglas-Peucker simplification at 15% resolution via mapshaper. Of 778 official polygons, 742 are matched to StreetSignal's 744-suburb dataset via a slug crosswalk. The 36 unmatched polygons correspond to industrial zones, airports, nature reserves, and other non-residential areas.
Boundaries are used for the interactive map on the browse page and for individual suburb pages. The simplified GeoJSON is approximately 1.3 MB uncompressed and is loaded on demand by the map component on screens wider than 960 px.
Source: City of Cape Town Open Data Hub, Official Suburbs dataset. Coverage: 742 of 744 suburbs.