The workflow before
Avison Young's analysts priced and compared properties from transaction history and comparable sales, held in a relational database that struggled with location joins. A complex geospatial query ran 15 to 45 minutes, and a property comparison took 2 to 4 hours. Credit card spend, mobility, demographic and economic data each needed custom integration code, so adding a new source took 4 to 6 weeks. Client reports took 1 to 2 days to produce, on data refreshed weekly.
What we built
We built a graph data store on AWS Neptune that links properties, locations and observed behavior. Properties sit inside a location hierarchy (city, submarket, neighborhood, block), and edges record proximity, similarity and how foot traffic or spending correlates with a property's performance. Spatial indexes answer questions like "office buildings within half a mile of high foot traffic" in seconds.
AWS Glue jobs, scheduled and monitored in Astronomer (managed Airflow), ingest and normalize more than 15 third-party sources, including aggregated card transactions, mobility data, census and economic series, and property data, with quality checks and incremental loads. Snowflake and dbt carry the modeled data into Power BI and custom dashboards that analysts use directly.
All infrastructure is defined in Terraform and deployed through Azure DevOps pipelines, so dev, staging and production stay identical and new markets can be added without rebuilding.
Before and after
| Measure | Before | After |
|---|---|---|
| Complex geospatial query | 15 to 45 minutes | 2 to 5 seconds |
| Property comparison analysis | 2 to 4 hours | About 30 seconds |
| Adding a new third-party data source | 4 to 6 weeks | 2 to 3 days |
| Client report production | 1 to 2 days | About 15 minutes |
What's next
The linked property, location and behavior data is the foundation for Level 2 work: an analytics copilot that lets advisors ask pricing and site selection questions of the graph in plain English, and valuation models trained on the same history.




