1.Not being blocked is not the same as not being identified
Not being blocked is a scoring problem. The target runs a model over your connection and decides whether to serve, challenge, or refuse. You succeed by presenting characteristics the model treats as ordinary — which mostly means looking like a common browser on a common network.
Not being identified is an attribution problem. It asks whether anyone correlating logs, payment records, and timing could tie the activity to you. Different threat model, different countermeasures, and — importantly — often in tension with the first goal, because the configurations that hide attribution well tend to look unusual, and unusual scores badly.
Most people asking about anonymous scraping want the first. If your goal is collecting public data without tripping defences, you want to blend in, not disappear. Those are opposite strategies.
2.What changing your IP actually hides
A proxy hides the origin address from the target and moves your apparent location and network. That genuinely defeats per-IP rate limiting and geographic restriction, and it is why proxies are the first thing anyone buys.
It does not hide that you are automated. The TLS handshake happens through the proxy unchanged, so your client's JA3 or JA4 fingerprint arrives intact. A Python client behind the world's cleanest residential IP still announces itself as a Python client in the first packet of the connection.
It also does not hide behavioural patterns. Request timing, ordering, and the absence of the incidental traffic a real browsing session generates are all visible regardless of egress. A perfectly even request every 1.8 seconds across ten thousand URLs is not a pattern human browsing produces.
- Hidden by a proxy — origin IP, apparent location, per-IP rate history
- Not hidden — TLS fingerprint, HTTP/2 characteristics, header composition
- Not hidden — request timing, ordering, session shape
- Not hidden — browser-level characteristics if JavaScript executes
3.The surface that survives an IP change
At the network layer, the TLS ClientHello carries cipher suite ordering, extension ordering, supported groups, and — in Chrome's case — deliberately injected GREASE values. Summarised as a hash, this identifies your client stack with high confidence, and no proxy alters it because the proxy carries the handshake through rather than reconstructing it.
Above that, HTTP/2 SETTINGS frames, window sizes, and header ordering form a second layer. Real browsers have consistent, well-known values here; HTTP libraries have their own, equally consistent and equally recognisable.
If JavaScript executes, a third layer opens: canvas and WebGL rendering characteristics, available fonts, screen and viewport metrics, timezone, language, hardware concurrency. These are individually weak and collectively strong — the combination is often close to unique, which is the entire basis of browser fingerprinting.
4.Why Tor is a poor fit for this
Tor is designed for a threat model where an observer should not link you to your destination, and it is good at that. It is a bad fit for scraping for reasons that have nothing to do with how well it works.
Exit node addresses are public and enumerable, so any site that wants to block Tor does so with a downloadable list. Many do, and the sites most likely to be scraped are disproportionately among them. Latency is also high by design, since traffic crosses several relays, and throughput on a crawl of any size suffers accordingly.
There is also a fairness argument worth stating: the network is volunteer-run with finite capacity, and it exists to serve people whose safety depends on it. Pushing bulk commercial extraction through it consumes capacity meant for that purpose. If your requirement is clean egress rather than protection from an adversary, residential proxies serve you better and leave Tor for the people who need it.
5.Blending in is the achievable goal
The realistic target is presenting a consistent, ordinary identity rather than an untraceable one. Consistency is the part people miss: a Chrome User-Agent with a Python TLS fingerprint is more suspicious than an honest Python client, because the mismatch is itself a signal that someone is trying to look like something they are not.
That means matching the layers to each other. Browser-grade TLS with browser-grade headers and a plausible network type. curl_cffi handles the fingerprint layer for non-JavaScript targets; a real browser handles all layers at higher cost. Mixing a browser User-Agent into a plain HTTP client achieves the worst of both.
Behaviour matters as much as fingerprint. Vary request intervals, keep concurrency per target modest, and let session structure resemble a reading session rather than a queue drain. A crawl indistinguishable from ordinary traffic is achievable; one that is untraceable is not, and pursuing the second usually costs you the first.
12345678910111213curl -X POST https://api.omniscrape.io/v1/scrape \
-H "Content-Type: application/json" \
-H "X-API-Key: ${OMNISCRAPE_KEY}" \
-d '{
"url": "https://target.example.com/listing?page=4",
"mode": "auto",
"enable_solver": true,
"proxy": "residential:gb:sticky",
"session_id": "listing-session-04",
"output_format": "html"
}'
# One consistent identity across the unit of work: browser-grade fingerprint,
# residential egress, and a pinned session — matched to each other.
6.The ceiling, and where the line is
Full anonymity is not achievable against a determined operator with logs. Payment records, account registration, timing correlation, and the sheer distinctiveness of a crawl pattern are all available to someone motivated to look. Any vendor implying otherwise is selling confidence rather than a capability.
What is achievable is that routine automated scoring does not flag you, which is what nearly everyone actually needs for collecting public data at reasonable volume.
Where the line falls is worth being explicit about. Technical capability does not determine what is permitted — terms of service, applicable law including the Computer Fraud and Abuse Act and GDPR, and the nature of the data all do. Collecting public product listings and circumventing an access control to reach non-public data are different acts, and the second is not made acceptable by being technically possible. That determination is yours to make for your specific target and jurisdiction.
Frequently asked questions
Does a proxy make my scraping anonymous?
It hides your origin IP and location, which defeats per-IP rate limiting and geo-restriction. It does not hide your TLS fingerprint, HTTP/2 characteristics, or request timing — all of which pass through unchanged and identify an automated client.
Should I use Tor for scraping?
Generally no. Exit node addresses are public and widely blocked, latency is high by design, and the volunteer-run network has finite capacity meant for people whose safety depends on it. Residential proxies serve the clean-egress requirement better.
Is a Chrome User-Agent on a Python client good enough?
It is worse than sending an honest one. The mismatch between a browser User-Agent and a Python TLS fingerprint is itself a signal, and it is trivially detectable. Match your layers to each other rather than spoofing one of them.
What is realistically achievable?
Not being flagged by routine automated scoring, which is what most public-data collection actually needs. Not being identified by a determined operator with logs and payment records is a different goal, and it is not something a proxy vendor can deliver.
Is anonymous scraping legal?
Being hard to identify is not itself the question. Terms of service, applicable law such as the CFAA and GDPR, and the nature of the data determine what is permitted. Collecting public listings and circumventing an access control are different acts, and technical capability does not settle either one.
Related guides
- Web Scraping Proxy Guide: Types, Sessions, Geo, and OmniScrape Integration
- Private Proxies for Scraping: What the Term Still Means
- Web Scraping Without Getting Blocked
- Rotating Proxies for Web Scraping: Policies, Session Binding, and Geo Pools
- Solve CAPTCHAs While Web Scraping
- Web Scraping vs Web Crawling: Architecture, Patterns, and When to Use Each