The technique of receiver function analysis is applied to the study of crustal and upper mantle structures beneath the Kaapvaal craton in southern Africa and its surroundings. Seismic data were recorded by the seismic array of 82 sites deployed from April 1997 to April 1999 across southern Africa, as well as a dense array of 32 sites near Kimberley, in operation from December 1998 to June 1999. Arrival times for phases converted at the Moho are used to determine crustal thickness. The Moho depth in the south-western section of the craton was found to vary between 37 and 40 km, except for one station that recorded a depth of 43 km (SA23). Farther north along the western block of the craton (into Botswana) the depth increases up to 43 km. The depth increases even further in the north-eastern section of the craton, where results vary from 40 to 52 km. Just north of the Kaapvaal craton, in the neighbouring Zimbabwe craton, the crustal thickness drops significantly. The results obtained there varied from 36 to 40 km. For the Kimberley area, using the dense array, the Moho depth was found to be 37.3 km. Arrivals of the Ps and Ppps phases were used to determine the Poisson's ratio in the region. This was found to be 0.26 ± 0.01. Arrivals of phases from the 410 and 660 km mantle discontinuities are used to interpret the relative positions of these discontinuities, as well as for comparison of mantle temperatures and seismic velocities in the region with global averages. In the Kimberley area the 410 and 660 km discontinuities were found at their expected depth, implying that mantle temperatures in the region are close to the global average. The seismic velocities above the '410' were found up to 5% faster than the averages from the global iasp91 model, which is fast even by Precambrian standards. In other sections of the Kaapvaal craton, the velocities are also faster than global averages, but not as fast as beneath Kimberley. In these sections, the '410' is also slightly elevated, while the '660' is depressed, which implies a slightly lower mantle temperature relative to the global average. Beneath the Kaapvaal craton we find evidence suggesting the presence of a zone with a reduced wavespeed gradient at an upper bound of approximately 300 km, which may mark the lower chemical boundary of the craton.