A readout to a client's leadership team
Case study

Avison Young cut geospatial queries from 45 minutes to 5 seconds

Avison Young's advisors couldn't tie foot traffic and spending data to pricing, and the queries that tried took up to 45 minutes.

Avison Young

Avison Young · Sales and pricing

70%less analyst time on data prep and queries

The workflow before#

Avison Young's advisors price properties and recommend sites for clients, and most of the questions they get are about place: what's near this building, who walks past it, how much those people spend. The analysts behind them worked from transaction history and comparable sales 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. Card spend, mobility, census and economic data each needed its own integration code, so adding a source took 4 to 6 weeks. Client reports took 1 to 2 days to produce, on data refreshed once a week.

What we built#

We built a location graph that connects every property to the places around it and the behavior observed there. Instead of joining tables at query time, the relationships are stored up front: this building sits in this block, near these stores, with this foot traffic trend. Analysts ask a question about a place and get an answer in seconds, then take it straight into a dashboard or a client report.

A map of how places relate

Properties sit inside a location hierarchy of city, submarket, neighborhood and block, and links record proximity, similarity and how foot traffic or spending tracks with a property's performance. Spatial indexes answer questions like "office buildings within half a mile of high foot traffic" in 2 to 5 seconds. We chose a graph over more relational tuning because the questions advisors ask are about connections, and a graph stores connections directly.

One intake for 15+ outside sources

Aggregated card transactions, mobility data, census and economic series and property data now come through one set of scheduled ingestion jobs, each with quality checks and incremental loads. A new source follows the same pattern instead of needing custom code, which is how onboarding dropped from 4 to 6 weeks to 2 to 3 days. Every source carries lineage, so an analyst can see where a number came from before it goes in front of a client.

Dashboards analysts use directly

Modeled data flows into Power BI and custom dashboards built for comparison work. A property comparison that took 2 to 4 hours now takes about 30 seconds, and a client report that took 1 to 2 days takes about 15 minutes. We kept the reporting layer in tools the analysts already knew, so the time saved went to analysis instead of training.

How we delivered it

We worked alongside Avison Young's data team, starting with the location model and a small set of high-value sources, then adding the rest once the query patterns held up. All infrastructure is defined as code and promoted through one pipeline from development to staging to production, so the three environments match. That also means a new market can be added by configuration rather than a rebuild.

Before and after#

MeasureBeforeAfter
Complex geospatial query15 to 45 minutes2 to 5 seconds
Property comparison analysis2 to 4 hoursAbout 30 seconds
Adding a new third-party data source4 to 6 weeks2 to 3 days
Client report production1 to 2 daysAbout 15 minutes

What's next#

The linked property, location and behavior data sets up the next phase: an analytics assistant that lets advisors ask pricing and site selection questions of the graph in plain English, and valuation models trained on the same history. Both draw on relationships the graph already holds, so most of the groundwork is done.

ShareLinkedInEmail

The core store is AWS Neptune, with property, location and behavior nodes connected by LOCATED_IN, CONTAINS, NEARBY, OBSERVED_AT, CORRELATES_WITH and SIMILAR_TO edges. Spatial indexes on coordinates and boundary polygons back proximity and region queries. PostgreSQL with geospatial extensions holds operational data.

Ingestion runs as AWS Glue ETL jobs with change data capture for incremental updates, orchestrated as Airflow DAGs on Astronomer with dependency management, retries and pipeline health monitoring. Snowflake is the analytical warehouse, and dbt models are version controlled and tested before they reach Power BI and the custom dashboards.

Governance covers lineage for every third-party source, automated quality monitoring with alerting, and access controls aligned with Avison Young's security policies. Infrastructure is defined in Terraform and promoted through Azure DevOps CI/CD across dev, staging and production.

Next step

Let's build the case study we tell next.