The single most common reason a Zonaprop run returns nothing has nothing to do with parsing: the requests came from Argentina.
The finding
Zonaprop sits behind Cloudflare, and requests from Argentine residential IPs are challenged. Requests from other countries' residential IPs are not. Mexico measured best among the options tested, and it is the default.
So the Actor requires a residential proxy and its country selector excludes Argentina. That is not a preference expressed as a setting; it is the measurement that makes the Actor work.
Why the local country is the blocked one
Zonaprop does not publish its rules, so the honest version is: this is what was observed, and the reason is inference. The plausible one is that scraping pressure on a national portal overwhelmingly originates inside that country, which makes local automated traffic the cheapest thing to challenge hardest.
What the Actor does instead
It makes ordinary requests from residential IPs and keeps the sessions that work. That is the whole technique: no headless browser fingerprint to maintain, no CAPTCHA service, no TLS spoofing. A session that stops working is dropped and another is used.
The advantage of that approach is that there is nothing to keep up to date when the protection changes. The disadvantage is that it cannot force its way through anything, which is the correct trade for a tool somebody else depends on.
Concurrency is part of the same measurement
The default is 3. Higher rates get sessions challenged, and a challenged session has to be replaced — which costs more wall-clock time than the parallelism gained. The same shape shows up on other targets: Nextdoor returns HTTP 429 with a roughly four-minute cooldown at concurrency 10, and Workana starts returning 5% HTTP 503 at concurrency 5.
In all three cases the polite setting is the fast setting. That is not a moral argument, it is an arithmetic one.
What it will not do to get through
- No CAPTCHA solving.
- No TLS or browser fingerprint spoofing.
- No requesting a path robots.txt disallows.
If the public data becomes unreachable without one of those, the run reports the failure. A tool whose reliability depends on evading detection has a reliability that lasts until the detection improves, and that is a worse promise than a smaller surface.
Practical settings
{
"location": "palermo",
"operationType": "sale",
"maxItems": 150,
"proxyCountry": "mx",
"maxConcurrency": 3
}If a run comes back with very few rows and no obvious error, check the proxy country before anything else. It is the failure that looks like an empty market.



