I don't know if there's a simple solution to deploy this but JA3 fingerprinting is sometimes used to identify similar
clients even if they're spread across IPs:
https://engineering.salesforce.com/tls-fingerprinting-with-j...You need to terminate the TLS connection yourself so this prevents people from using DNS proxy, e.g. Cloudflare. Then you have to run a server that has a module that computes the ja3/ja4, e.g. nginx. Even then, it's possible to set your client hello in python/curl/etc. to exactly mirror the JA4 of your chosen browser like Chrome. So ja4 stops basic bots but most seasoned scrapers already implement valid ja4s/ja3s