I'm cleaning small batches of my boards using IPA (99,9% pure ... they say!) and I have nice results BUT: I'm using more than one bath and I use a ultrasonic cleaner! On top of that I usually place the boards I want to be cleaned upside down (with SMD parts towards the bottom of the ultrasonic cleaner if are placed one sided). To avoid scratches I'm using 4 plastic PCB standoffs. Be careful about plastic standoffs! Some may react with IPA! I'm not using metal because metal does scratch the ENIG finish of the PCB's mounting holes!
Almost forgot: on each bath I'm wet cleaning them by using a brush (dipped in IPA) an on the last bath I leave the IPA to get a bit warm this way, when I'm getting the PCB from the cleaner the IPA will dry out fast with NO traces of any flux.
Only PD-223 or UV-223 flux are involved. I had issues with other types I tried... It leaved traces regardless how many times I tried to clean up the PCBs...
I try to stay away of any water variants (DM or other ...)! I cleaned using DM water many years back and had problems with via corrosion. Petrol products are good to a degree but stinks

I hope it helps!