None of them really work well.
I use Hiya, which no longer blocks calls but at least identifies some of them as coming from spammers, alongside Wideprotect to stop neighbor calls-- but Wideprotect doesn't work with Google Voice for some reason. So then on the Google Voice side I turned on "screen all calls by default", and then set my contacts to not require screening. So GV asks unknown callers to enter their name, and maybe 3/4 of them just hang up. This solution sucks but even though I've given it a fair amount of attention, I'm unable to improve on it.
Silence unknown callers doesn't work for me because it would block calls I need, deliveries, business calls, etc.
What I really want is SHAKEN/STIR and "Silence unverified calls", so anyone not validated as real in SHAKEN/STIR gets automatically blocked. Hopefully that will come in 2020.