Jump to section
- When Target Sites Go Dark
- Failure is usually a systems problem
- Configuring Retry Strategies and Backoff
- Build the delay deliberately
- Separate response classes
- Implementing Circuit Breakers for Failure Isolation
- Closed, open, and half-open states
- Use different evidence for different errors
- Choosing Between Sticky and Rotating Proxies
- Setting Timeouts and Logging for Observability
- Log the full request lifecycle
- Building Alerting and SLA-Backed Delivery
- Turn failures into actionable alerts
- Define the SLA around usable output
The average Zillow listing changes price or status within 48 hours of an update, so hourly or sub-daily refreshes are essential for real estate data collection services. A production pipeline must do more than extract HTML. It must keep collecting, validate records, and deliver them in the required format when a portal slows down or stops responding.
That’s the situation many property-data teams face now. A scheduled job runs during peak market activity, one portal begins returning errors, another changes its page structure, and a regional MLS closes connections halfway through the run. The raw scraper may still work in a test browser, but the business delivery is already at risk.
The difference between a script and a service is the operational layer. Retry budgets, circuit breakers, proxy selection, structured logs, validation, and SLA-aware delivery determine whether a feed remains useful after the target site changes. The market’s data requirements have also become more demanding. Zillow provides downloadable values, rents, inventory, and forecasts through structured CSV access, while Realtor.com and Redfin publish recurring market snapshots that demonstrate how quickly listing conditions move across geographies (Zillow’s research data, Realtor.com Research).
When Target Sites Go Dark
Tuesday morning starts normally. A scheduled collector begins pulling listing pages from Zillow, a Redfin endpoint begins timing out, and a regional MLS starts returning connection resets during a high-volume run. The first response is usually a retry loop. The worker waits, sends the same request again, and repeats until the queue fills with delayed jobs.
That response creates a second incident. Every worker retries at roughly the same time, so the portal receives another burst just as it’s recovering. Proxy sessions accumulate, browser processes remain open, and downstream systems receive an incomplete file with no clear indication of which records were skipped. Waiting longer doesn’t repair the missing data. It only hides the failure until the delivery window closes.

Failure is usually a systems problem
A production collector treats a target outage as a controlled state, not an exceptional surprise. It records the source, route, request type, response code, latency, parser version, proxy context, and retry count. That information lets an operator distinguish a temporary origin failure from a block affecting one network path or a parser failure caused by changed markup.
The operational response should separate work into three paths:
- Retryable work: Temporary server responses, connection resets, and timeouts enter a bounded retry queue.
- Quarantined work: Suspicious responses, challenge pages, malformed payloads, and unexpected schemas go to review instead of entering the clean feed.
- Expired work: Records that exceed the delivery budget receive an explicit status, so consumers know they’re missing rather than assuming they’re unchanged.
The same discipline applies when a site changes its interface. A collector shouldn’t emit empty fields without notice because a CSS selector stopped matching. A practical reference for designing collection around proxies, request behavior, and operational safeguards is the Stella Proxies data collection guide. Teams should also pair extraction metrics with a website change monitoring workflow, because detecting structural drift early is safer than discovering it in a client’s file.
Operational rule: A failed request is recoverable. An undetected partial dataset is a data-quality incident.
Configuring Retry Strategies and Backoff
Retries protect availability only when the policy understands the failure. A collector should classify responses before it decides whether to send the request again. A temporary 502 or 503 can justify another attempt, while a 404 usually signals that the listing or endpoint no longer exists and shouldn’t consume the same retry budget.
Build the delay deliberately
Use exponential backoff to reduce pressure on a recovering target. A simple policy can begin with a two-second delay, double the base interval after each retry, and stop at a defined maximum cap. Add jitter, such as a randomly selected fraction of the current delay, so independent workers don’t wake up together and recreate the original traffic burst.
The exact cap should reflect the freshness requirement. A high-frequency listing feed may prefer several short attempts followed by a handoff to a later queue. A compliance report with a wider delivery window can allow a slower retry schedule. The important point is to define the budget before the incident, not while operators are watching an error dashboard.
Separate response classes
A useful retry decision includes more than the status code:
- Retry transient server failures: 502, 503, connection resets, and read timeouts normally belong in the retry path, provided the response pattern doesn’t indicate a deliberate block.
- Stop on permanent resource failures: A 404 or a confirmed removed listing should be recorded as a business-state change, not treated as an infrastructure outage.
- Escalate access challenges: CAPTCHA pages, authentication failures, and repeated forbidden responses need proxy, session, or access review rather than endless repetition.
- Protect the queue: Set a maximum attempt count and an overall age limit. Once either limit is reached, move the record to a recovery queue with its failure reason preserved.
Jitter matters most when a job is distributed across workers. Without it, all workers follow the same doubling schedule and generate synchronized waves. With it, requests spread across the recovery interval, reducing the chance that a target sees another coordinated burst.

The retry policy should also expose its decisions to monitoring. Count attempts by source and response class, track records that reach the limit, and measure how many eventually succeed. The distributed web scraping fault-tolerance basics provide useful context for combining retries with queue isolation and worker recovery.
Implementing Circuit Breakers for Failure Isolation
Retries ask whether an individual request might succeed later. A circuit breaker asks whether the entire target route should pause. That distinction prevents one failing portal from consuming every worker, proxy session, and queue slot in a real estate data collection service.
Closed, open, and half-open states
In the closed state, requests flow normally and the collector records failures against a rolling window. The breaker should consider response codes, timeout rates, and latency, not just a single error counter. A sudden increase in slow responses can be an early sign of saturation even before the portal starts returning 5xx responses.
When failures cross a configured threshold, the breaker enters the open state. New requests for that source stop temporarily, while unrelated sources continue. Queued records remain visible, and the system can either defer them or use an approved fallback source. This protects the rest of the workload and prevents the collector from worsening the target’s condition.
After a recovery interval, the breaker moves to half-open. It permits a small test flow rather than restoring full traffic immediately. Successful responses close the breaker gradually. Continued failures reopen it and extend the pause according to the policy.
Use different evidence for different errors
A 5xx pattern usually points to a server-side or capacity problem, so the breaker can respond to a sustained error rate or timeout cluster. A 4xx pattern needs more caution. A 404 may represent normal listing turnover, while repeated 403 responses across many paths can indicate an access policy or detection event. Those conditions shouldn’t share one threshold.
For property listings, record breaker decisions at the source and route level. A failure affecting search pages may not affect detail pages, and a problem on one regional MLS shouldn’t suspend the entire geographic portfolio. Include:
- Error class: Distinguish 4xx, 5xx, network failures, timeouts, and parser exceptions.
- Scope: Identify the portal, endpoint family, geography, and collection mode.
- Recovery evidence: Store the probe result and the reason for closing or reopening the breaker.
- Business effect: Count delayed records and identify the next delivery cutoff.

The circuit breaker shouldn’t replace careful request handling. It creates isolation, while retries handle recoverable requests and validation protects the output. Teams evaluating implementation options can compare managed approaches with Python web scraping services, especially when breakers must coordinate with browser workers, proxy pools, and scheduled exports.
Choosing Between Sticky and Rotating Proxies
Proxy strategy should follow the target’s session behavior, not a generic volume assumption. Sticky proxies preserve an IP association for a longer session, which helps when a portal expects cookies, authentication state, or consistent navigation. Rotating proxies change the route between requests or sessions, which can distribute collection across a broad listing surface but may disrupt sessions that depend on continuity.
For static MLS data, a sticky session is often easier to operate when the source requires a stable login context or maintains state across search and detail requests. The collector can authenticate once, preserve cookies, and keep related requests on the same route. The trade-off is concentration. If that route becomes blocked or degraded, the session may fail as a unit.
Dynamic Zillow-style pages often benefit from a more flexible pool when the workload spans many geographies and page types. Rotation can reduce dependence on one route, but it doesn’t make requests invisible. Reusing the same browser fingerprint, sending implausible navigation patterns, or ignoring rate controls can still trigger defensive systems. Rotation also complicates debugging because the same URL may succeed through one route and fail through another.
| Proxy Type | Best Use Case | Cost Profile | Detection Risk |
|---|---|---|---|
| Sticky | Authenticated MLS sessions, stateful navigation, related page requests | Concentrated session usage, with fewer route changes | Lower session disruption, but a blocked route can affect the whole session |
| Rotating | Broad portal coverage, independent listing requests, geographically distributed collection | More pool management and route coordination | More variable behavior, with continuity and fingerprint consistency still required |
Watch for signs that a proxy pool is exhausted. Rising failures across unrelated URLs, repeated challenge pages, increasing latency, and poor recovery after route changes suggest a pool or routing problem rather than a parser defect. Don’t solve that condition by increasing concurrency. First isolate the affected pool, compare response behavior by route, and preserve successful sessions where continuity matters.
A practical decision guide for these trade-offs is the comparison of static and rotating proxies. The right design may use both strategies, with sticky sessions for authenticated sources and controlled rotation for independent public requests.
Setting Timeouts and Logging for Observability
A timeout is a resource policy, not just a network setting. If the connection timeout is too short, a slow but healthy real estate portal produces false failures. If the read timeout is too long, a stalled worker can consume the delivery window while the queue appears active.
Set connection and read timeouts separately. Connection timeouts should allow for ordinary route establishment without letting unavailable paths occupy workers indefinitely. Read timeouts should reflect the target’s response profile and payload size, particularly when browser-rendered pages or large property media responses are involved. Apply the same policy consistently, then tune it from observed latency rather than intuition.
Log the full request lifecycle
A useful event should answer what happened without opening a browser session manually. Capture the timestamp, source, endpoint category, geography, response code, latency, parser version, proxy class, retry count, breaker state, payload validation result, and final disposition.
That schema supports several operational questions:
- Freshness: When did the last valid record arrive for each source and geography?
- Reliability: Are failures concentrated in one route, endpoint, parser, or time period?
- Cost control: Which retries consume capacity without producing valid records?
- Quality: Did the response contain the expected fields, listing identifier, address, and status?

Logs become useful when they drive action. Alert on freshness breaches, validation failures, rising timeout rates, and retry budgets that are being consumed faster than normal. A broader framework for connecting freshness, completeness, and operational signals is available in these data observability best practices.
Practical rule: Every timeout should lead to a classification, not merely another attempt.
Keep raw response evidence separate from the clean dataset. That separation lets engineers inspect a changed page, reproduce a parser issue, and demonstrate why a record was withheld without contaminating the client feed. It also makes schema changes safer because validation can run before publication.
Building Alerting and SLA-Backed Delivery
More records don’t automatically create better real estate intelligence. A large export with stale prices, duplicate listings, inconsistent addresses, and unexplained gaps is harder to use than a smaller feed with known freshness and validation status. Eurostat’s residential real estate web-data work illustrates this operational point. Its methodology combined portal acquisition with standardization, duplicate removal, filtering of non-target listings, and hedonic adjustment before index construction (Eurostat’s residential real estate web-data study).
Turn failures into actionable alerts
Alerting should reflect business impact. A single failed detail page is usually lower priority than a source-wide freshness breach, while a parser returning empty price fields deserves urgent attention even if requests are succeeding.
Use severity levels that map to decisions:
- Critical: A required source is unavailable, a circuit breaker remains open near delivery time, or a scheduled export can’t meet its freshness commitment.
- High: Validation rejects a material portion of records, duplicate rates rise, or a schema version changes unexpectedly.
- Warning: Latency increases, retry consumption grows, or one proxy pool begins failing while other routes remain healthy.
- Informational: A target changes a response header, introduces a new field, or completes a recovery probe.
Each alert needs an owner, a runbook, and a next action. “Zillow errors increased” isn’t enough. The notification should identify the affected collection, first observed time, current breaker state, records at risk, last valid delivery, and whether a fallback is available. The same pattern works for smaller monitoring systems, including a price tracker workflow, where a missed update can matter more than a request count.
Define the SLA around usable output
An SLA should describe the delivered artifact, not just uptime for a scraper. Specify the expected cadence, freshness boundary, schema version, completeness checks, duplicate policy, and treatment of unavailable sources. If a portal fails, the recipient should receive either a valid delayed file with its coverage status or a clear incident notification, never a silent empty export.
Real estate data services also need reconciliation across fragmented sources. Official transaction records can provide a strong foundation, but Saudi Arabia’s real estate price index methodology shows why reliable pipelines add standardized forms, error detection and correction, property classification, and supplementary geographic data before analysis (Saudi Arabia’s real estate price index methodology). Eurostat’s process similarly demonstrates that collection and normalization are inseparable when records arrive from multiple portals.
Design the delivery contract around the consumer’s workflow. CSV may suit analysts, JSON may feed an application, webhooks may notify downstream systems, and S3 drops may support scheduled ingestion. Version schemas, retain delivery manifests, and include record-level status fields so a client can distinguish a changed listing from a missing observation.
Fragmentation is the difficult part. MLS, assessor, recorder, permit, USPS, and geospatial sources use different identifiers, addresses, and refresh schedules. Reconciliation requires canonical keys, address normalization, source precedence, duplicate rules, and validation checks that remain visible after export. The pipeline earns trust when it explains how a parcel key, tax identifier, ownership record, or listing address was matched.
WebscrapingHQ provides managed web data operations for real estate collection, including custom collectors, monitoring, retries, proxy management, schema controls, and scheduled delivery through CSV, JSON, webhooks, S3 drops, or reports. If your team needs verified property and listing data that remains usable when portals change, visit WebscrapingHQ to discuss the sources, cadence, schema, and SLA your pipeline requires.
Want this done for you?
Send us the URLs. We'll quote it in 24 hours.
Paste the URL(s) you want scraped. We'll reply within 24 hours with a feasibility check and a ballpark quote.


