Brep sub-object transform

Here’s an example: Say I have a bunch of polysurfaces (representing buildings) and I need to snap their bottom faces to some ground plane. I’d like to grab all faces that point roughly downward (i.e. faces with normals aligned within some tolerance of the negative Z axis) and then snap them to the ground. I can do this interactively via sub-object selection followed by SetPt but this becomes tedious quickly.