The contamination of soil by heavy metals is a potential health risk, especially among susceptible populations. The aim of this study was to measure the levels of heavy metals, identify the contamination levels and possible sources of heavy metals, and evaluate the health risk caused by heavy metals to the children living in Kuils River. Composite samples of soil were collected at 34 preschools. A portable X-ray fluorescence spectrometer was used to measure the levels of metals. Contamination levels were evaluated using a geoaccumulation index (Igeo), enrichment factor (EF), contamination factor (CF) and pollution load index (PLI). The spatial distribution of the Igeo contamination levels was assessed using ArcGIS. Sources of heavy metals and the correlation among metals were assessed using factor analysis and Pearson correlation, respectively. The measured concentrations of metals were used to estimate the health risk for children. The average levels of the metals were 16, 4469, 137, 30, 176, 1547 and 232 mg/kg for arsenic (As), iron (Fe), manganese (Mn), lead (Pb), strontium (Sr), titanium (Ti) and zinc (Zn), respectively. According to Igeo, EF, CF and PLI contamination exist in the study area. The health index (HI) for non-carcinogenic effects showed the ingestion route as the main contributor to the total risk, with the accumulative carcinogenic risk exceeding the maximum acceptable level. To protect the affected communities, and children in particular, this study provides evidence of the need for action, including the institution of mandatory buffer zones between pollutant-generating activities and human settlements.