Zillow · measured · dated
Scraping Zillow: what got through and what did not
Zillow is the one site in our test where paying for a residential proxy changed the answer completely. It is also the one site where adding a real browser made things worse. Both results are from the same week, the same server and the same five requests per attempt.
Latest run
- Tested
- 10 Sep 2026
- Targets
- 9real sites
- Providers
- 3+ datacenter baseline
- Baseline pass rate
- 15 / 45no proxy
Quick answer
A residential proxy opens Zillow. A headless browser closes it.
Five requests per source per method to a Zillow for-sale listing page. A request counts as a pass only when the response contains real listing markup, not when it returns status 200.
| Source | Plain requests (curl) | Headless Chromium | From | |
|---|---|---|---|---|
| No proxy (datacenter) | 0 / 5HTTP 403 | 0 / 5HTTP 403 | $0 | |
![]() | 5 / 5 | 0 / 5HTTP 403 | $6/GB | See Oxylabs pricing |
![]() | not tested | not tested | $8.4/GB | See Bright Data pricing |
![]() | 4 / 5 | 0 / 5HTTP 403 | $2/GB | See Decodo pricing |
![]() | 5 / 5 | 0 / 5HTTP 403 | $5/GB | See SOAX pricing |
Five requests per source per method against Zillow, measured 10 Sep 2026 (plain) and 10 Sep 2026 (browser). The reason shown is what the site returned.
What the numbers say
Three findings, in the order they matter
Every plain request from our hosting-company address came back as 403. Not a challenge, not a CAPTCHA, just a refusal. This is the clearest case in our whole test for why a residential proxy exists: no amount of retrying, header tuning or slowing down changes a decision made on the address.
The same plain request through a residential proxy returned the real listing page. Two providers passed all five attempts and one passed four of five, and the single miss was a PerimeterX challenge rather than an outright block. The whole run moved a few hundred kilobytes, which at list prices is a fraction of a cent.
The usual advice is to add a real browser when a site is protected. On Zillow that advice is wrong. Every headless Chromium request through the same residential networks was refused, fifteen out of fifteen, while plain requests from those same networks had passed hours earlier.
Zillow uses PerimeterX, now HUMAN, which runs JavaScript in the page and inspects the environment it is running in. A plain HTTP request never executes that script, so there is nothing to inspect beyond headers and the TLS handshake. A stock headless browser executes it and hands over the evidence.
Method
How this was measured
The same script and the same server as every other number on this site.
The target is a Zillow for-sale listing page, requested five times per source. Plain requests carry the headers of a current desktop Chrome and no JavaScript engine. Browser requests use a headless Chromium through the same proxy, each in a fresh context, waiting up to fifteen seconds for listing markup or for a challenge to resolve, with no stealth plugins and no CAPTCHA solving. A pass requires listing markup in the response; a 403, a challenge page, a timeout or a 200 with an empty result container are all failures, and the reason is recorded. The two runs were made on different days, which is stated in the table because results from different days are not strictly comparable.
If you are building this
What we would do to collect Zillow pages
- Start with plain requests through a residential proxy. That is the combination that worked, and it is the cheapest one. A page of listing HTML is small, so the traffic cost per page is low even at residential prices.
- Do not reach for a headless browser first. On this target it converted a working setup into a blocked one, and it multiplies the traffic bill by roughly ten. If you need a browser for the page to render, expect to need a patched one, and measure before you commit.
- Treat the occasional challenge as normal. One provider missed one request out of five, with a PerimeterX challenge. Retry through a new address rather than hammering the same one.
- Rotate per request. Every provider we tested gives a new exit address on each request by default, and we measured what that actually delivers. Rotation is what keeps a single address from accumulating a reputation on this kind of target.
- Respect what you are collecting. Listing pages are public, but the data on them belongs to someone. Check Zillow’s terms and your local law before you build a product on it; this page is a measurement, not legal advice.
Providers
What these providers cost
The same four providers, their list prices and terms. Full results across all nine targets are on the front page.
| Provider | Pool | Locations | Targeting | Sessions | Trial | Entry price | |
|---|---|---|---|---|---|---|---|
![]() | 100M+ | 195 countries | City · ASN | Rotating and sticky | None on self-service | $6/GBStarter 5 GB, $30/mo, cancel any time | See Oxylabs pricing |
![]() | 72M+ | 195 countries | City · ASN · ZIP | Rotating and sticky | Free trial for verified businesses | $8.4/GBPay as you go, no commitment | See Bright Data pricing |
![]() | 115M+ | 195+ locations | City · ZIP · ASN | Rotating and sticky (minutes to days) | 3-day trial, 100 MB | $2/GBPay as you go $4/GB, plans from $2/GB | See Decodo pricing |
![]() | 155M+ | 195+ locations | City · ISP | Rotating and sticky, custom length | 3-day trial, 400 MB, $1.99 | $5/GBPay as you go $5/GB, $3/GB on $200/mo plan | See SOAX pricing |
We earn a commission if you buy through the pricing links. It does not change the numbers: the test script, the target list and the raw results are public, and providers do not see results before you do.




