This is what I would use to quickly check millions of addresses:
How to useThe most likely use is to check a long list of Bitcoin addresses for a remaining balance.
On Linux, use this to find matching addresses (after extrating the compressed .gz file of course):
comm -12 Bitcoin_addresses_LATEST.txt <(cat mylist.txt | sort | uniq)
- Bitcoin_addresses_LATEST.txt: the extracted latest version downloaded from addresses.loyce.club.
- mylist.txt: your own list of addresses, one address per line.
This takes only seconds to check millions of addresses.
This is not faster than 46 seconds (as you have to download a huge file)... and the data might not be updated.
Three things:
1. The server can spit out that file within 46 seconds

2. OP mentioned "bulk", and I don't consider his 100 address test to be bulk.
3. The data is updated daily. I assume OP is trying to brute-force Bitcoin addresses, in which case that doesn't matter.
Even if it takes a few minutes to download, after that you can check billions of addresses per hour.