Request a Replication-scoped token or credential from the MLS; standard live-search credentials often lack replication permissions.
Perform an initial full pull by querying the Property resource with no date filter, paging through all results with $top and $skip or @odata.nextLink.
Record the highest ModificationTimestamp seen in the initial pull as your replication cursor.
On each subsequent run, query with $filter=ModificationTimestamp gt <cursor> to fetch only records changed since the last run, then update your cursor.
Handle deleted listings by also querying the DeletedListings or using the $filter=StandardStatus eq 'Deleted' pattern if the MLS exposes deletions that way.
Store records in a local database keyed on ListingKey and upsert on each replication cycle.
Known gotchas
Some MLSs soft-delete listings by changing StandardStatus rather than exposing a deletion feed; you must periodically reconcile your local set against a fresh active pull.
Clock skew between your server and the MLS server can cause you to miss records modified in the same second as your cursor; subtract a small overlap buffer (e.g., 30 seconds) from the cursor.
Full replication rights may require a separate data licensing agreement with the MLS board beyond a standard API agreement.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp