← ALL CASE STUDIES17 June 2026

Ten thousand properties turned into a contactable database

Written by Raghav Chegu, founder at Odyssey, who built the system described here. Client anonymised pending their approval to be named.

Summary. A Melbourne commercial real estate agency held a property dataset of over ten thousand assets and could not act on it, because a property record is not a person. Odyssey built an enrichment pipeline that resolves the entity behind each property, finds the decision maker, and writes a contact back into the CRM. It processed 10,131 assets and matched 7,096 contacts, a 70 percent hit rate. It was built without buying a data platform, after the agency priced one and declined.

The problem

The agency had spent money assembling a large property dataset. Every row had an address. Almost none had a human being attached.

Commercial property is owned through entities. A company, a trust, a numbered shell, sometimes several layers of them. A leasing agent who wants to talk to a landlord has to work out which entity holds the asset, then which person controls that entity, then how to reach them. Done by hand that is fifteen minutes per property. Across ten thousand properties it is not work anyone will ever do.

So the dataset sat there. The agency evaluated a commercial data platform that would have solved part of it and declined on price. The constraint was not ambition, it was that the only available answer cost more than the problem.

What we built

A pipeline that runs the fifteen minute manual job in bulk.

  1. Entity classification. A classifier reads the ownership string and decides what it is looking at: a company, a trust, an individual, or several names sharing one field.
  2. Principal resolution. Company entities go to a business register lookup and the controlling principal comes back. Individual names take a separate parsing path. Two routes, because forcing one path over both shapes loses roughly half the dataset.
  3. Contact discovery. The resolved person is matched to contact details, with the property's own suburb and state used as the disambiguating signal. Two people with the same name in different states no longer collapse into one record.
  4. Write back. The contact is created in the CRM and associated with the property asset, so the enrichment lands where the agents already work rather than in a spreadsheet nobody opens.
  5. Parallel dispatch. The pipeline runs as a multi worker system rather than a single queue. 4,231 assets were dispatched through it in one campaign.

The numbers

  • 10,131 property assets processed through the entity enrichment pipeline
  • 7,096 contacts matched and written back, a 70 percent hit rate
  • 4,231 assets dispatched through the parallel worker system in a single campaign
  • 9,734 targets processed through a separate charity register pipeline, with an email found for roughly 63 percent
  • 615 venues and 540 phone numbers captured in a single canvassing run of a suburb ring

The parts that were harder than the pipeline

Most of the engineering was not the matching logic. It was staying up.

The listing portals that carry this data are protected by commercial bot defences. Getting a reliable read meant a warmed real browser session driven over a debugging protocol, careful pacing, and eventually a residential proxy for one specific source that had flagged the datacentre address outright. Waiting out that block was tested across nineteen probes over eighteen hours and proven dead. The proxy route was proven working.

A worker process was also silently dying partway through long queues, leaving jobs stuck at a partial count. Root cause was an inactivity exit setting doing exactly what it was configured to do at the wrong moment. Finding it needed a watchdog that could actually see the failure, which the first watchdog could not.

We write this down because it is the honest shape of the work. The clever part is a day. The part that makes it run every night for a year is the rest.

What it replaced

A dataset the agency had already paid for and could not use. A quoted data platform subscription that was declined on price. And a per property manual lookup that nobody was ever going to perform ten thousand times.

Why this is repeatable

Every industry has a version of this. A list of businesses, properties, employers or assets with no human attached to any of them. The enrichment pattern is the same each time: classify the entity, resolve the person, disambiguate with a signal you already hold, write it back into the system of record. The data source changes. The machine does not.

Have a version of this problem?

Odyssey builds AI-powered automation for Australian businesses. We map the workflow, build the system, and keep it running.

GET A FREE AUDIT →