Automation · state reconciliation
Centris Property Monitoring
A scheduled n8n workflow that discovers the full listing result set, reconciles it against persisted state, validates detail records, and sends controlled Telegram alerts without collapsing discovery, persistence, and notification into one fragile script.
Operational proof
From a real source listing to a stateful downstream alert.
The same monitored property appears at the source boundary and in the Telegram notification path. The workflow also distinguishes a first-seen listing from a later price transition instead of treating every poll as a fresh event.


Hard part
The difficult problem was not sending Telegram messages. It was preserving truth when the source was restrictive and changed underneath the workflow.
The monitor had to survive changing request contracts, session-bound discovery, pagination, remote-source volatility, and automation-runtime differences without turning incomplete data into false NEW or PRICE alerts.
Source contract drift
Remote request shape and runtime assumptions changed during implementation. The workflow isolates discovery and validates the returned set before classification.
Incomplete-set risk
A successful HTTP response is not enough. Pagination cardinality and state overlap are checked before the observed set is trusted.
Automation-runtime drift
Code-node behavior is written for the actual n8n execution environment rather than assuming every browser or Node global is available.
False-alert prevention
Persisted listing state, explicit change classification, bounded processing, and delivery status prevent repeated side effects from becoming the product.
Run model
A stateful monitor with separate failure boundaries.
Design decisions
The workflow is organized around failure semantics, not diagram aesthetics.
Treat source drift as an operational risk
The monitored source changed request behavior and runtime assumptions during development. Discovery therefore has explicit contract checks, bounded retries, and data-quality gates instead of assuming the remote surface is stable.
Persist before notification
State is committed before the external message path so a Telegram failure cannot make the next run rediscover the same listing as if it were new.
Discover the set before enriching records
Full pagination and set reconciliation happen before expensive detail calls, preventing a partial page from becoming the system's market truth.
Pace side effects deliberately
Per-listing enrichment and notification are bounded, sequential where needed, and delayed between external side effects rather than emitted as an uncontrolled burst.
Benchmark surface
What the monitor is designed to measure.
A monitoring run is successful only when the observed market set is complete enough to reconcile state without false new/change alerts.
Full-set pagination checks, state-overlap gates, source-contract regression fixtures, notification replay, and end-to-end listing-to-alert verification.Evidence