47,000 Parcels and a Weekend

I’d been looking for land in Albemarle County for a while. The process was exactly what you’d expect: scroll through listings on Zillow or LandWatch, click on anything in the right price range, then spend an hour cross-referencing the county GIS site to figure out basic things the listing didn’t mention. Is it steep? Which direction does it face? How much of it is actually usable? Is there road frontage? How far from a paved road?

The GIS site had answers to most of those questions — buried in layers you had to toggle on individually, for one parcel at a time. The listing sites had none of them. And neither could answer the question I actually cared about: of all the land in this county, which parcels best fit what I’m looking for?

That’s a database question. Not a browsing question.


The Data Existed. The Tool Didn’t.

Albemarle County publishes its entire parcel dataset. Every property boundary, every tax assessment, every ownership record, every zoning classification. It’s public data, updated regularly, and it covers roughly 47,000 parcels.

What doesn’t exist — on any platform I could find — is the ability to query that data the way you’d query a database. Show me every parcel between 10 and 30 acres, zoned rural, with no existing structures, owned for more than 15 years. That’s a SQL query. It’s also a perfectly reasonable thing a land buyer would want to know. But no consumer tool lets you ask it.

So I built one. The first version was ugly. An ETL pipeline that pulled county data into PostgreSQL, a FastAPI backend that could run filtered queries, and a bare HTML page with a map that plotted the results. It worked. I could type a query and see every matching parcel highlighted on a map of the county.

The first time I ran a search — vacant parcels, 10-20 acres, rural zoning — and saw 78 results light up, something clicked. I wasn’t browsing listings anymore. I was looking at the answer to a question.


What You Can’t See on a Listing

The county data gave me boundaries, acreage, ownership, and assessed values. That was a start, but it wasn’t enough. A 20-acre parcel that’s entirely north-facing mountainside is a different property than a 20-acre parcel with a south-facing bench and a creek. Both show up the same on a listing.

I started computing terrain attributes for every parcel — slope distribution, aspect (which direction each part of the land faces), how many acres are gentle enough to build on, how much flat ground exists. These aren’t exotic calculations. They’re basic terrain analysis that any GIS professional could do. But nobody was doing them at parcel scale and making the results searchable.

Within a week I had slope, aspect, and buildability metrics for all 47,000 parcels. Now the query could be: show me vacant parcels, 10-20 acres, with at least 2 acres of gentle south-facing slope. That’s the homestead search. That’s the question a buyer actually has in their head when they’re driving back roads looking at land.


From Query to Conversation

Filters work, but they’re tedious to configure. I kept wanting to just say what I was looking for and have the system figure out which filters to apply. So I wired up an LLM that understands the parcel schema and can translate natural language into structured queries.

“Find me parcels with good sun exposure and room to build” becomes a filter on south/southeast aspect acres and gentle slope acreage. “Of those, which ones are undervalued compared to their neighbors?” becomes a statistical comparison of assessment-per-acre against the local average. These are queries that would take 15 minutes to set up with manual filters. In conversation, they take seconds.

The AI doesn’t know anything about real estate that isn’t in the data. It’s not making recommendations. It’s translating intent into queries — turning the way people actually think about land into the way a database can answer.


The Question That Started It

I started this because I wanted to find a piece of land. I’m still looking. But somewhere along the way the tool became more interesting than the search.

Every feature I’ve added since — timber valuation, 3D terrain visualization, LiDAR point cloud rendering, historical trail detection — started the same way. I had a question about a specific property, realized the data to answer it was publicly available, and built the pipeline to surface it.

Forty-seven thousand parcels. Every one of them has a story buried in public data that no listing will ever tell you. TALON is how you read it.